0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用LabVIEW實(shí)現(xiàn)基于pytorch的DeepLabv3圖像語(yǔ)義分割

LabVIEW深度學(xué)習(xí)實(shí)戰(zhàn) ? 來(lái)源: LabVIEW深度學(xué)習(xí)實(shí)戰(zhàn) ? 作者: LabVIEW深度學(xué)習(xí)實(shí) ? 2023-03-22 15:06 ? 次閱讀

前言

今天我們一起來(lái)看一下如何使用LabVIEW實(shí)現(xiàn)語(yǔ)義分割。

一、什么是語(yǔ)義分割

**圖像語(yǔ)義分割(semantic segmentation),從字面意思上理解就是讓計(jì)算機(jī)根據(jù)圖像的語(yǔ)義來(lái)進(jìn)行分割,例如讓計(jì)算機(jī)在輸入下面左圖的情況下,能夠輸出右圖。語(yǔ)義在語(yǔ)音識(shí)別中指的是語(yǔ)音的意思,在圖像領(lǐng)域,語(yǔ)義指的是圖像的內(nèi)容,對(duì)圖片意思的理解,比如下圖的語(yǔ)義就是一個(gè)人牽著四只羊;分割的意思是從像素的角度分割出圖片中的不同對(duì)象,對(duì)原圖中的每個(gè)像素都進(jìn)行標(biāo)注,比如下圖中淺黃色代表人,藍(lán)綠色代表羊。語(yǔ)義分割任務(wù)就是將圖片中的不同類別,用不同的顏色標(biāo)記出來(lái),每一個(gè)類別使用一種顏色。常用于醫(yī)學(xué)圖像,衛(wèi)星圖像,無(wú)人車駕駛,機(jī)器人等領(lǐng)域。 **

在這里插入圖片描述

  • 如何做到將像素點(diǎn)上色呢?

**語(yǔ)義分割的輸出和圖像分類網(wǎng)絡(luò)類似,圖像分類類別數(shù)是一個(gè)一維的one hot 矩陣。例如:三分類的[0,1,0]。語(yǔ)義分割任務(wù)最后的輸出特征圖是一個(gè)三維結(jié)構(gòu),大小與原圖類似,其中通道數(shù)是類別數(shù),每個(gè)通道所標(biāo)記的像素點(diǎn),是該類別在圖像中的位置,最后通過(guò)argmax 取每個(gè)通道有用像素 合成一張圖像,用不同顏色表示其類別位置。 語(yǔ)義分割任務(wù)其實(shí)也是分類任務(wù)中的一種,他不過(guò)是對(duì)每一個(gè)像素點(diǎn)進(jìn)行細(xì)分,找到每一個(gè)像素點(diǎn)所述的類別。 這就是語(yǔ)義分割任務(wù)啦~ **

在這里插入圖片描述

二、什么是deeplabv3

**DeepLabv3是一種語(yǔ)義分割架構(gòu),它在DeepLabv2的基礎(chǔ)上進(jìn)行了一些修改。為了處理在多個(gè)尺度上分割對(duì)象的問(wèn)題,設(shè)計(jì)了在級(jí)聯(lián)或并行中采用多孔卷積的模塊,通過(guò)采用多個(gè)多孔速率來(lái)捕獲多尺度上下文。此外,來(lái)自 DeepLabv2 的 Atrous Spatial Pyramid Pooling模塊增加了編碼全局上下文的圖像級(jí)特征,并進(jìn)一步提高了性能。 **

在這里插入圖片描述

三、LabVIEW調(diào)用DeepLabv3實(shí)現(xiàn)圖像語(yǔ)義分割

1、模型獲取及轉(zhuǎn)換

  • 安裝pytorch和torchvision
  • 獲取torchvision中的模型:deeplabv3_resnet101(我們獲取預(yù)訓(xùn)練好的模型):
original_model = models.segmentation.deeplabv3_resnet101(pretrained=True)
  • 轉(zhuǎn)onnx
def get_pytorch_onnx_model(original_model):
    # define the directory for further converted model save
    onnx_model_path = dirname
    # define the name of further converted model
    onnx_model_name = "deeplabv3_resnet101.onnx"
?
    # create directory for further converted model
    os.makedirs(onnx_model_path, exist_ok=True)
?
    # get full path to the converted model
    full_model_path = os.path.join(onnx_model_path, onnx_model_name)
?
    # generate model input
    generated_input = Variable(
        torch.randn(1, 3, 448, 448)
    )
?
    # model export into ONNX format
    torch.onnx.export(
        original_model,
        generated_input,
        full_model_path,
        verbose=True,
        input_names=["input"],
        output_names=["output",'aux'],
        opset_version=11
    )
?
    return full_model_path

完整獲取及模型轉(zhuǎn)換python代碼如下:

import os
import torch
import torch.onnx
from torch.autograd import Variable
from torchvision import models
import re
?
dirname, filename = os.path.split(os.path.abspath(__file__))
print(dirname)
?
def get_pytorch_onnx_model(original_model):
    # define the directory for further converted model save
    onnx_model_path = dirname
    # define the name of further converted model
    onnx_model_name = "deeplabv3_resnet101.onnx"
?
    # create directory for further converted model
    os.makedirs(onnx_model_path, exist_ok=True)
?
    # get full path to the converted model
    full_model_path = os.path.join(onnx_model_path, onnx_model_name)
?
    # generate model input
    generated_input = Variable(
        torch.randn(1, 3, 448, 448)
    )
?
    # model export into ONNX format
    torch.onnx.export(
        original_model,
        generated_input,
        full_model_path,
        verbose=True,
        input_names=["input"],
        output_names=["output",'aux'],
        opset_version=11
    )
?
    return full_model_path
?
?
def main():
    # initialize PyTorch ResNet-101 model
    original_model = models.segmentation.deeplabv3_resnet101(pretrained=True)
?
    # get the path to the converted into ONNX PyTorch model
    full_model_path = get_pytorch_onnx_model(original_model)
    print("PyTorch ResNet-101 model was successfully converted: ", full_model_path)
?
?
if __name__ == "__main__":
    main()
?

我們會(huì)發(fā)現(xiàn),基于pytorch的DeepLabv3模型獲取和之前的mask rcnn模型大同小異。

2、關(guān)于deeplabv3_resnet101

我們使用的模型是:deeplabv3_resnet101,該模型返回兩個(gè)張量,與輸入張量相同,但有21個(gè)classes。輸出[“out”]包含語(yǔ)義掩碼,而輸出[“aux”]包含每像素的輔助損失值。在推理模式中,輸出[‘a(chǎn)ux]沒(méi)有用處。因此,輸出“out”形狀為(N、21、H、W)。我們?cè)谵D(zhuǎn)模型的時(shí)候設(shè)置H,W為448,N一般為1;

我們的模型是基于VOC2012數(shù)據(jù)集

VOC2012數(shù)據(jù)集分為20類,包括背景為21類,分別如下:

  • 人 :人
  • 動(dòng)物:鳥(niǎo)、貓、牛、狗、馬、羊
  • 車輛:飛機(jī)、自行車、船、巴士、汽車、摩托車、火車
  • 室內(nèi):瓶、椅子、餐桌、盆栽植物、沙發(fā)、電視/監(jiān)視器

3、LabVIEW opencv dnn調(diào)用 deeplabv3 實(shí)現(xiàn)圖像語(yǔ)義分割(deeplabv3_opencv.vi)

deeplabv3模型可以使用OpenCV dnn去加載的,也可以使用onnxruntime加載推理,所以我們分兩種方式給大家介紹LabVIEW調(diào)用deeplabv3實(shí)現(xiàn)圖像語(yǔ)義分割。

  • opencv dnn 調(diào)用onnx模型并選擇

    在這里插入圖片描述

  • **圖像預(yù)處理 **

    最終還是采用了比較中規(guī)中矩的處理方式

在這里插入圖片描述

  • **執(zhí)行推理 **

在這里插入圖片描述

  • 后處理并實(shí)現(xiàn)實(shí)例分割

    因?yàn)楹筇幚韮?nèi)容較多,所以直接封裝為了一個(gè)子VI, deeplabv3_postprocess.vi,因?yàn)長(zhǎng)abview沒(méi)有專門的切片函數(shù),所以會(huì)稍慢一些,所以接下來(lái)還會(huì)開(kāi)發(fā)針對(duì)后處理和矩陣有關(guān)的函數(shù),加快處理結(jié)果。

  • 整體的程序框架如下:

    在這里插入圖片描述

  • 語(yǔ)義分割結(jié)果如下:

    在這里插入圖片描述

4、LabVIEW onnxruntime調(diào)用 deeplabv3實(shí)現(xiàn)圖像語(yǔ)義分割 (deeplabv3_onnx.vi)

  • 整體的程序框架如下:

    在這里插入圖片描述

  • 語(yǔ)義分割結(jié)果如下:

    在這里插入圖片描述

5、LabVIEW onnxruntime調(diào)用 deeplabv3 使用TensorRT加速模型實(shí)現(xiàn)圖像語(yǔ)義分割(deeplabv3_onnx_camera.vi)

在這里插入圖片描述

如上圖所示,可以看到可以把人和背景完全分割開(kāi)來(lái),使用TensorRT加速推理,速度也比較快。

大家可關(guān)注微信公眾號(hào): VIRobotics ,回復(fù)關(guān)鍵字:DeepLabv3圖像語(yǔ)義分割源碼 獲取本次分享內(nèi)容的完整項(xiàng)目源碼及模型。

如您想要探討更多關(guān)于LabVIEW與人工智能技術(shù),歡迎加入我們:705637299,進(jìn)群請(qǐng)備注暗號(hào):LabVIEW機(jī)器學(xué)習(xí)

四、deeplabv3訓(xùn)練自己的數(shù)據(jù)集

訓(xùn)練可參考: https://github.com/pytorch/vision

總結(jié)

以上就是今天要給大家分享的內(nèi)容。

如果文章對(duì)你有幫助,歡迎關(guān)注、點(diǎn)贊、收藏

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • LabVIEW
    +關(guān)注

    關(guān)注

    1961

    文章

    3651

    瀏覽量

    321993
  • 人工智能
    +關(guān)注

    關(guān)注

    1789

    文章

    46652

    瀏覽量

    237073
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8349

    瀏覽量

    132312
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5463

    瀏覽量

    120890
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    802

    瀏覽量

    13115
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用LabVIEW實(shí)現(xiàn) DeepLabv3+ 語(yǔ)義分割含源碼

    使用LabVIEW實(shí)現(xiàn) DeepLabv3+ 語(yǔ)義分割含源碼
    的頭像 發(fā)表于 05-26 10:23 ?916次閱讀
    使用<b class='flag-5'>LabVIEW</b><b class='flag-5'>實(shí)現(xiàn)</b> <b class='flag-5'>DeepLabv3</b>+ <b class='flag-5'>語(yǔ)義</b><b class='flag-5'>分割</b>含源碼

    van-自然和醫(yī)學(xué)圖像的深度語(yǔ)義分割:網(wǎng)絡(luò)結(jié)構(gòu)

    最后面幾個(gè)全連接層換成卷積層,可實(shí)現(xiàn)任意大小的圖像輸入,并且輸入圖像大小與輸入相對(duì)應(yīng)。反卷積:端到端的像素級(jí)語(yǔ)義分割需要輸出大小和輸入
    發(fā)表于 12-28 11:03

    van-自然和醫(yī)學(xué)圖像的深度語(yǔ)義分割:網(wǎng)絡(luò)結(jié)構(gòu)

    最后面幾個(gè)全連接層換成卷積層,可實(shí)現(xiàn)任意大小的圖像輸入,并且輸入圖像大小與輸入相對(duì)應(yīng)。反卷積:端到端的像素級(jí)語(yǔ)義分割需要輸出大小和輸入
    發(fā)表于 12-28 11:06

    聚焦語(yǔ)義分割任務(wù),如何用卷積神經(jīng)網(wǎng)絡(luò)處理語(yǔ)義圖像分割?

    CNN架構(gòu)圖像語(yǔ)義分割 圖像分割是根據(jù)圖像內(nèi)容對(duì)指定區(qū)域進(jìn)行標(biāo)記的計(jì)算機(jī)視覺(jué)任務(wù),簡(jiǎn)言之就是「這
    發(fā)表于 09-17 15:21 ?549次閱讀

    DeepLab進(jìn)行語(yǔ)義分割的研究分析

    形成更快,更強(qiáng)大的語(yǔ)義分割編碼器-解碼器網(wǎng)絡(luò)。DeepLabv3+是一種非常先進(jìn)的基于深度學(xué)習(xí)的圖像語(yǔ)義
    發(fā)表于 10-24 08:00 ?11次下載
    DeepLab進(jìn)行<b class='flag-5'>語(yǔ)義</b><b class='flag-5'>分割</b>的研究分析

    分析總結(jié)基于深度神經(jīng)網(wǎng)絡(luò)的圖像語(yǔ)義分割方法

    隨著深度學(xué)習(xí)技術(shù)的快速發(fā)展及其在語(yǔ)義分割領(lǐng)域的廣泛應(yīng)用,語(yǔ)義分割效果得到顯著提升。對(duì)基于深度神經(jīng)網(wǎng)絡(luò)的圖像
    發(fā)表于 03-19 14:14 ?21次下載
    分析總結(jié)基于深度神經(jīng)網(wǎng)絡(luò)的<b class='flag-5'>圖像</b><b class='flag-5'>語(yǔ)義</b><b class='flag-5'>分割</b>方法

    基于深度神經(jīng)網(wǎng)絡(luò)的圖像語(yǔ)義分割方法

    對(duì)應(yīng)用于圖像語(yǔ)義分割的幾種深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行簡(jiǎn)單介紹,接著詳細(xì)闡述了現(xiàn)有主流的基于深度神經(jīng)網(wǎng)絡(luò)的圖像語(yǔ)義
    發(fā)表于 04-02 13:59 ?11次下載
    基于深度神經(jīng)網(wǎng)絡(luò)的<b class='flag-5'>圖像</b><b class='flag-5'>語(yǔ)義</b><b class='flag-5'>分割</b>方法

    輕松學(xué)PytorchDeeplabv3推理

    Torchvision框架中在語(yǔ)義分割上支持的是Deeplabv3語(yǔ)義分割模型,而且支持不同的backbone替換,這些backbone替換
    的頭像 發(fā)表于 12-21 15:40 ?939次閱讀

    PyTorch教程14.9之語(yǔ)義分割和數(shù)據(jù)集

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程14.9之語(yǔ)義分割和數(shù)據(jù)集.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 11:10 ?0次下載
    <b class='flag-5'>PyTorch</b>教程14.9之<b class='flag-5'>語(yǔ)義</b><b class='flag-5'>分割</b>和數(shù)據(jù)集

    PyTorch教程-14.9. 語(yǔ)義分割和數(shù)據(jù)集

    SageMaker Studio Lab 中打開(kāi)筆記本 在 第 14.3 節(jié)-第 14.8 節(jié)討論對(duì)象檢測(cè)任務(wù)時(shí),矩形邊界框用于標(biāo)記和預(yù)測(cè)圖像中的對(duì)象。本節(jié)將討論語(yǔ)義分割問(wèn)題,重點(diǎn)關(guān)注如何將
    的頭像 發(fā)表于 06-05 15:44 ?601次閱讀
    <b class='flag-5'>PyTorch</b>教程-14.9. <b class='flag-5'>語(yǔ)義</b><b class='flag-5'>分割</b>和數(shù)據(jù)集

    DeepLabV3開(kāi)發(fā)板應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《DeepLabV3開(kāi)發(fā)板應(yīng)用.zip》資料免費(fèi)下載
    發(fā)表于 06-20 15:05 ?0次下載
    <b class='flag-5'>DeepLabV3</b>開(kāi)發(fā)板應(yīng)用

    使用PyTorch加速圖像分割

    使用PyTorch加速圖像分割
    的頭像 發(fā)表于 08-31 14:27 ?785次閱讀
    使用<b class='flag-5'>PyTorch</b>加速<b class='flag-5'>圖像</b><b class='flag-5'>分割</b>

    圖像分割語(yǔ)義分割中的CNN模型綜述

    圖像分割語(yǔ)義分割是計(jì)算機(jī)視覺(jué)領(lǐng)域的重要任務(wù),旨在將圖像劃分為多個(gè)具有特定語(yǔ)義含義的區(qū)域或?qū)ο蟆?/div>
    的頭像 發(fā)表于 07-09 11:51 ?599次閱讀

    圖像分割語(yǔ)義分割的區(qū)別與聯(lián)系

    圖像分割語(yǔ)義分割是計(jì)算機(jī)視覺(jué)領(lǐng)域中兩個(gè)重要的概念,它們?cè)?b class='flag-5'>圖像處理和分析中發(fā)揮著關(guān)鍵作用。 1. 圖像
    的頭像 發(fā)表于 07-17 09:55 ?622次閱讀

    圖像語(yǔ)義分割的實(shí)用性是什么

    圖像語(yǔ)義分割是一種重要的計(jì)算機(jī)視覺(jué)任務(wù),它旨在將圖像中的每個(gè)像素分配到相應(yīng)的語(yǔ)義類別中。這項(xiàng)技術(shù)在許多領(lǐng)域都有廣泛的應(yīng)用,如自動(dòng)駕駛、醫(yī)學(xué)
    的頭像 發(fā)表于 07-17 09:56 ?336次閱讀