《機器視覺理論與實戰(zhàn)》 課件 第六章 語義分割原理與實戰(zhàn)_第1頁
《機器視覺理論與實戰(zhàn)》 課件 第六章 語義分割原理與實戰(zhàn)_第2頁
《機器視覺理論與實戰(zhàn)》 課件 第六章 語義分割原理與實戰(zhàn)_第3頁
《機器視覺理論與實戰(zhàn)》 課件 第六章 語義分割原理與實戰(zhàn)_第4頁
《機器視覺理論與實戰(zhàn)》 課件 第六章 語義分割原理與實戰(zhàn)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章語義分割原理與實戰(zhàn)

本章知識點語義分割系統(tǒng)構成UNet算法網絡結構UNet算法參數配置6.1語義分割概述

語義分割是將標簽或類別與圖片的每個像素關聯(lián)的一種深度學習算法。它用來識別構成可區(qū)分類別的像素集合。例如,自動駕駛汽車需要識別車輛、行人、交通信號、人行道和其他道路特征。語義分割可用于多種應用場合,比如自動駕駛、醫(yī)學成像和工業(yè)檢測。

語義分割的一個簡單例子是將圖像劃分成兩類。例如,下圖中,一幅圖像顯示一個人在海邊,與之相配的版本顯示分割為兩個不同類別的圖像像素:人和背景。

語義分割并不局限于兩個類別。您可以更改對圖像內容進行分類的類別數。例如,這幅圖像也可能分割為四個類別:人、天空、水和背景。語義分割與目標檢測有什么區(qū)別語義分割可以作為目標檢測的一種有用替代方法,因為它允許感興趣對象在像素級別上跨越圖像中的多個區(qū)域。這種技術可以清楚地檢測到形態(tài)不規(guī)則的對象,相比之下,目標檢測要求對象必須位于有邊界的方框內。語義分割的步驟

語義分割的一般步驟如下:數據準備:選擇合適的數據集,將圖像和對應的標注信息加載進來。模型構建:選擇合適的模型結構,如FCN、UNet、DeepLab等,進行模型的構建和訓練。模型訓練:使用訓練數據集對模型進行訓練,通過優(yōu)化損失函數來調整模型參數,使其能夠更好地適應數據集。模型評估:使用評估數據集對訓練好的模型進行測試和評估,計算模型的準確率、召回率、F1值等指標。預測和應用:使用訓練好的模型對新的圖像進行語義分割,獲取圖像中每個像素所屬的類別,從而實現(xiàn)圖像分割的自動化和精細化。6.2基于UNet模型實現(xiàn)脊柱CT定位

在醫(yī)學領域,經常需要分析人體患某種疾病后身體脂肪含量的變化,一般通過選擇某個脊柱體的截面來估計全身的脂肪含量。

基于UNet模型的脊柱CT定位系統(tǒng)可以幫助醫(yī)生更準確地診斷和治療脊柱疾病。該系統(tǒng)主要基于深度學習技術,通過訓練模型學習CT圖像中的特征,達到準確識別和定位脊柱的目的。

實現(xiàn)方面,首先需要收集大量的CT圖像數據,并進行圖像增強、去噪等預處理操作,以提高模型的訓練效果。然后利用UNet模型進行訓練,通過調整模型參數和算法優(yōu)化,提高模型的準確性和泛化能力。訓練完成后,可以將訓練好的模型部署到在線定位系統(tǒng)中,通過輸入新的CT圖像,自動輸出脊柱的位置和姿態(tài)信息??梢酝ㄟ^不同角度對脊柱進行定位。脊柱正視圖及側面視圖通過最大強度投影(MIP)將三維CT圖像轉換為二維圖像,從而降低問題的維數。將MIP圖像用作2D全卷積網絡的輸入,以2D置信圖的形式預測位置。6.2.1系統(tǒng)結構設計

模型以UNet為基礎,自適應卷積塊、空間注意力模塊為輔助網絡結構,同時把參數數量對實驗結果的影響也考慮進來,改進網絡結構。為捕捉病變區(qū)域中的不規(guī)則圖案,在UNet編碼器和解碼器中集成自適應卷積塊。在編碼解碼連接時使用門控完全特征融合模塊用以衡量各個特征圖的重要內容,以此為依據進行特征融合。在解碼器之前設計了密集空間注意力模塊,從而生成更具判別性的特征內容,提高特征在空間中的映射能力。6.2.2自適應卷積塊和空間注意力模塊

自適應卷積塊是指將自適應卷積加入到卷積塊的中間層中,每個自適應卷積塊是由一個批歸一化層、一個卷積層、一個可變形卷積和一個激活函數組成,DB算法有以下幾個優(yōu)勢:算法結構簡單,無需繁瑣的后處理在開源數據上擁有良好的精度和性能

引入全局-局部注意力引導結構,從全局和局部兩個角度提取上下文信息,阻止無效信息和噪聲。其中,全局提取上下文信息有利于提升網絡系統(tǒng)對場景信息的理解,強調空間范圍內每個像素之間的距離關系,從而實現(xiàn)精確定位;局部提取上下文信息可以更好的呈現(xiàn)出圖像內容的細節(jié),有效突出感興趣的區(qū)域。局部-全局兩者融合可以更好地將局部特征與其全局相關性相結合,有助于將正確的類別與對應的像素相匹配,減少漏分和誤分的情況。

對于每個圖像集都會看到正面和受限矢狀MIP并排顯示。主要標志物選為椎弓根的中間,與橫突的頂部邊緣對齊Unet模型介紹UNet常常用在生物醫(yī)學圖像上,而該任務中圖片數據往往較少。所以,Ciresan等人訓練了一個卷積神經網絡,用滑動窗口提供像素的周圍區(qū)域(patch)作為輸入來預測每個像素的類標簽。這個網絡有兩個優(yōu)點:(1)輸出結果可以定位出目標類別的位置;(2)由于輸入的訓練數據是patches,這樣就相當于進行了數據增強,從而解決了生物醫(yī)學圖像數量少的問題。UNet主要貢獻是在U型結構上,該結構可以使它使用更少的訓練圖片的同時,且分割的準確度也不會差,UNet的網絡結構如下圖:Unet模型結構(1)UNet采用全卷積神經網絡。(2)左邊網絡為特征提取網絡:使用conv和pooling(3)右邊網絡為特征融合網絡:使用上采樣產生的特征圖與左側特征圖進行concatenate操作。(pooling層會丟失圖像信息和降低圖像分辨率且是永久性的,對于圖像分割任務有一些影響,對圖像分類任務的影響不大,為什么要做上采樣呢?上采樣可以讓包含高級抽象特征低分辨率圖片在保留高級抽象特征的同時變?yōu)楦叻直媛?,然后再與左邊低級表層特征高分辨率圖片進行concatenate操作)(4)最后再經過兩次卷積操作,生成特征圖,再用兩個卷積核大小為1*1的卷積做分類得到最后的兩張heatmap,例如第一張表示第一類的得分,第二張表示第二類的得分heatmap,然后作為softmax函數的輸入,算出概率比較大的softmax,然后再進行l(wèi)oss,反向傳播計算。UNet模型訓練

本案例使用在COCO數據集上預訓練的U-Net模型,運行download_pretrained_unet.sh進行下載,代碼如下:#下載unet模型并解壓到./pretrained_models目錄下!shwork/download_pretrained_unet.sh

注:./pretrained_model/為PaddleSeg默認的預訓練模型存儲目錄,預訓練模型將存放在./pretrained_model/unet_coco_init/目錄下。Unet模型訓練PaddleSeg是基于百度飛漿生態(tài)下的語義分割庫,可結合豐富的預訓練模型更便捷高效地進行語義分割。

將下載的PaddleSeg壓縮包進行解壓即可使用,代碼如下。#解壓從/PaddlePaddle/PaddleSeg下載好的zip包!unzipPaddleSeg-release-v0.1.0.zip#將PaddleSeg代碼上移至當前目錄!mvPaddleSeg-release-v0.1.0/*~#安裝所需依賴項!pipinstall-rrequirements.txtUnet模型訓練

若你想在自己的電腦環(huán)境中安裝PaddleSeg,可運行如下命令:#從PaddleSeg的github倉庫下載代碼gitclone/PaddlePaddle/PaddleSeg.git#運行PaddleSeg的程序需在PaddleSeg目錄下cdPaddleSeg/#安裝所需依賴項pipinstall-rrequirements.txt

實際訓練中可能遇到以下情況:如果需要修改大量參數,建議另外再編寫一個yaml文件,然后傳給—cfg參數,這種做法適合需要長期、大量進行改動的情況,例如更換數據集,代碼如下。python./pdseg/train.py--cfg./configs/xxx.yaml

如果只是臨時對少量參數進行更改,建議在命令行直接對相應參數進行賦值,這種做法適合短期、少量、頻繁進行改動的情況。這里采用這種方式,代碼如下。#Training!python./pdseg/train.py--cfg./configs/unet_pet.yaml\--use_gpu\

SOLVER.NUM_EPOCHS3\

TRAIN.PRETRAINED_MODEL_DIR"pretrained_model/unet_coco_init/"\

TRAIN.MODEL_SAVE_DIR"snapshots/unet_pet/"參數含義--cfg指定yaml配置文件路徑--use_gpu是否啟用gpu--use_mpio是否開啟多進程BATCH_SIZE批處理大小TRAIN_CROP_SIZE訓練時圖像裁剪尺寸(寬,高)TRAIN.PRETRAINED_MODEL_DIR預訓練模型路徑TRAIN.MODEL_SAVE_DIR模型保存路徑TRAIN.SYNC_BATCH_NORM是否使用多卡間同步BatchNorm均值和方差,默認FalseMODEL.DEFAULT_NORM_TYPEBatchNorm類型:bn(batch_norm)、gn(group_norm)SOLVER.LR初始學習率SOLVER.NUM_EPOCHS訓練epoch數,正整數SOLVER.LR_POLICY學習率下降方法,選項為poly、piecewise和cosineSOLVER.OPTIMIZER優(yōu)化算法,選項為sgd和adam常用參數說明PaddleSeg中共有三處可設置模型參數,包括命令窗口傳遞的參數、configs目錄下的yaml文件、pdseg/utils/config.py。對于相同的參數,傳遞的優(yōu)先級為:命令窗口>yaml文件>config.py。即同一個參數,優(yōu)先級較高的將覆蓋優(yōu)先級較低的。若沒有GPU計算資源,則需要在以下的訓練、驗證、測試腳本中刪除參數--use_gpu。在多GPU訓練的情況下,建議開啟TRAIN.SYNC_BATCH_NORM來提高分割精度。

接下來用一個已訓練500個epoch的UNet模型,進行預測和可視化。該模型位于work/unet_pet_500/500目錄下。eval.py為模型的評估腳本,代碼如下。#Evaluation!python./pdseg/eval.py--cfgconfigs/unet_pet.yaml\--use_gpu\TEST.TEST_MODEL"work/unet_pet_500/500/"\EVAL_CROP_SIZE"(512,512)"EVAL_CROP_SIZE的設置要求如下:當AUG.AUG_METHOD為unpadding時,EVAL_CROP_SIZE的寬高應不小于AUG.FIX_RESIZE_SIZE的寬高。當AUG.AUG_METHOD為stepscaling時,EVAL_CROP_SIZE的寬高應不小于原圖中最大的寬高。當AUG.AUG_METHOD為rangscaling時,EVAL_CROP_SIZE的寬高應不小于縮放后圖像中最大的寬高。

對于UNet,需要特別留心EVAL_CROP_SIZE的設置,若設置過大,容易超出顯存。若不確定如何設置,可使用數據校驗工具。指標含義accMeanAccuracy(平均準確率)IoUMeanIntersectionoverUnion(MIoU,平均交并比)CategoryIoU每個類別的IoU指標CategoryAcc每個類別的Accuracy指標KappaKappa系數是一個用于一致性檢驗的指標,可以衡量分類或分割的效果。取值范圍為[-1,1],越趨近于1,說明分類或分割的效果越好。

數據集預處理

本案例選用的數據集,由于原始圖片的對比度相對較低,如果將圖片直接輸入網絡進行訓練,無法得到較好的分割效果。如果對圖像數據進行適當的預處理,分割效果和效率都會更好。先將需要的原始圖片進行部分內容預處理,從而提高網絡的分割性能。為了增加訓練集的數量和防止過擬合,對原始圖像隨機縮放、隨機旋轉以及水平和垂直移位來進行數據增強。對采集到的像素每一個都進行歸一化,并對所有的圖像進行伽馬校正。

定義數據集讀取類

將原始數據集按照80%訓練,20%驗證進行劃分,讀取數據集代碼如下:#定義數據讀取類importpaddlefrompaddle.ioimportDatasetimportnumpyasnpfromscipy.ndimageimportzoomimportpaddle.vision.transformsasT

定義模型

基于Unet網絡進行模型搭建,自適應卷積塊(AdaptiveConvolutionBlock)是一種特殊的卷積結構,它可以根據輸入數據的特性動態(tài)調整卷積核的大小和步長,以實現(xiàn)更靈活和高效的卷積操作。在下面的代碼中,我們首先定義了一個名為AdaptiveConv的自定義模塊,它繼承自nn.Module類。在__init__函數中,我們初始化了卷積層、批量歸一化層和ReLU激活函數。在forward函數中,我們根據輸入數據動態(tài)計算卷積核大小和步長,然后調用卷積層進行卷積操作,再經過批量歸一化和ReLU激活函數得到最終的輸出。classAdaptiveConv(nn.Module):def__init__(self,in_channels,out_channels,kernel_size,stride=1,padding=0):super(AdaptiveConv,self).__init__()self.conv=nn.Conv2d(in_channels,out_channels,kernel_size,stride,padding)self.bn=nn.BatchNorm2d(out_channels)self.relu=nn.ReLU(inplace=True)defforward(self,x):

空間注意力模塊可以在深度學習模型中使用,以增強模型對空間位置的注意力。空間注意力模塊接受一個輸入張量x,它具有形狀(batch_size,channels,height,width)。模塊通過計算平均值和最大值來獲得一個上下文向量,然后將其與原始輸入拼接在一起,并通過卷積層產生一個縮放因子。最后,使用sigmoid函數將縮放因子的值范圍限制在0到1之間,得到空間注意力圖。代碼如下:importtorchimporttorch.nnasnnimporttorch.nn.functionalasF

classSpatialAttention(nn.Module):def__init__(self,kernel_size=7):super(SpatialAttention,self).__init__()assertkernel_size

溫馨提示

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

評論

0/150

提交評論