使用LabVIEW實(shí)現(xiàn)基于pytorch的DeepLabv3圖像語(yǔ)義分割_第1頁(yè)
使用LabVIEW實(shí)現(xiàn)基于pytorch的DeepLabv3圖像語(yǔ)義分割_第2頁(yè)
使用LabVIEW實(shí)現(xiàn)基于pytorch的DeepLabv3圖像語(yǔ)義分割_第3頁(yè)
使用LabVIEW實(shí)現(xiàn)基于pytorch的DeepLabv3圖像語(yǔ)義分割_第4頁(yè)
使用LabVIEW實(shí)現(xiàn)基于pytorch的DeepLabv3圖像語(yǔ)義分割_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

一、什么是語(yǔ)義分割**圖像語(yǔ)義分割(seman(ti)csegmentation),從字面意思上理解就是讓計(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ú)人車(chē)駕駛,(機(jī)器人)等領(lǐng)域。**

如何做到將像素點(diǎn)上色呢?**語(yǔ)義分割的輸出和圖像分類(網(wǎng)絡(luò))類似,圖像分類類別數(shù)是一個(gè)一維的onehot矩陣。例如:三分類的[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的AtrousSpatialPy(ram)idPooling模塊增加了編碼全局上下文的圖像級(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)onnxdefget_pytorch_onnx_model(original_model):#definethedirectoryforfurtherconver(te)dmodelsaveonnx_model_path=dirname#definethenameoffurtherconvertedmodelonnx_model_name="deeplabv3_resnet101.onnx"?#createdirectoryforfurtherconvertedmodelos.makedi(rs)(onnx_model_path,exist_ok=True)?#getfullpathtotheconvertedmodelfull_model_path=os.path.join(onnx_model_path,onnx_model_name)?#generatemodelinputgenerated_input=Variable(torch.randn(1,3,448,448))?#modelexportintoONNXformattorch.onnx.export(original_model,generated_input,full_model_path,verbose=True,input_names=["input"],output_names=["output",'aux'],opset_version=11)?returnfull_model_path完整獲取及模型轉(zhuǎn)換(python)代碼如下:

importosimporttorchimporttorch.onnxfromtorch.autogradimportVariablefromtorchvisionimportmodelsimportre?dirname,filename=os.path.split(os.path.abspath(__file__))print(dirname)?defget_pytorch_onnx_model(original_model):#definethedirectoryforfurtherconvertedmodelsaveonnx_model_path=dirname#definethenameoffurtherconvertedmodelonnx_model_name="deeplabv3_resnet101.onnx"?#createdirectoryforfurtherconvertedmodelos.makedirs(onnx_model_path,exist_ok=True)?#getfullpathtotheconvertedmodelfull_model_path=os.path.join(onnx_model_path,onnx_model_name)?#generatemodelinputgenerated_input=Variable(torch.randn(1,3,448,448))?#modelexportintoONNXformattorch.onnx.export(original_model,generated_input,full_model_path,verbose=True,input_names=["input"],output_names=["output",'aux'],opset_version=11)?returnfull_model_path??defmain():#initializePyTorchResNet-101modeloriginal_model=models.segmentation.deeplabv3_resnet101(pretrained=True)?#getthepathtotheconvertedintoONNXPyTorchmodelfull_model_path=get_pytorch_onnx_model(original_model)print("PyTorchResNet-101modelwassuccessfullyconverted:",full_model_path)??if__name__=="__main__":main()?我們會(huì)發(fā)現(xiàn),基于pytorch的DeepLabv3模型獲取和之前的maskrcnn模型大同小異。

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;

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

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

人:人動(dòng)物:鳥(niǎo)、貓、牛、狗、馬、羊車(chē)輛:飛機(jī)、自行車(chē)、船、巴士、汽車(chē)、摩托車(chē)、火車(chē)室內(nèi):瓶、椅子、餐桌、盆栽植物、沙發(fā)、電視/監(jiān)視器3、LabVIEWopencvdnn調(diào)用deeplabv3實(shí)現(xiàn)圖像語(yǔ)義分割(deeplabv3_opencv.vi)

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

opencvdnn調(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)有專門(mén)的切片函數(shù),所以會(huì)稍慢一些,所以接下來(lái)還會(huì)開(kāi)發(fā)針對(duì)后處理和矩陣有關(guān)的函數(shù),加快處理結(jié)果。

整體的程序框架如下:

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

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

整體的程序框架如下:

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

5、LabVIEWonnxruntime調(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)目源碼及模型。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論