礦區(qū)無(wú)人機(jī)影像地物提取(語(yǔ)義分割)

向AI轉(zhuǎn)型的程序員都關(guān)注了這個(gè)號(hào)??????
人工智能大數(shù)據(jù)與深度學(xué)習(xí) 公眾號(hào):datayx
1. 實(shí)驗(yàn)數(shù)據(jù)介紹
無(wú)人機(jī)拍攝的高分辨率礦區(qū)影像圖
實(shí)驗(yàn)室進(jìn)行標(biāo)注的對(duì)應(yīng)label
v0219版本:進(jìn)行裁剪后的640 x 640的圖像與label數(shù)據(jù)
v0225&v0301版本及之后:進(jìn)行裁剪后的320 x 320的圖像與label數(shù)據(jù),并更換測(cè)試集
2. 實(shí)驗(yàn)環(huán)境介紹
GPU等服務(wù)器資源不加介紹
Python3.6、Pytorch、OpenCV、torchvision、numpy等必備環(huán)境
圖像切割工具包GDAL:僅在win系統(tǒng)下可運(yùn)行
3. 實(shí)驗(yàn)流程介紹
原圖數(shù)據(jù)和標(biāo)注好的label數(shù)據(jù),label是灰度的圖像,且每個(gè)像素屬于該類(0-3)共四類
切割原圖和相應(yīng)的label數(shù)據(jù)為640 x 640的圖像,后期改為320大小進(jìn)行實(shí)驗(yàn)
將切割好的原圖和label對(duì)應(yīng)好,使用代碼進(jìn)行可視化(因?yàn)闃?biāo)注的label是灰度,直觀上看是黑色一片)
對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)增強(qiáng),切割完成才有對(duì)應(yīng)的幾百?gòu)垟?shù)據(jù),增強(qiáng)至幾千張
增強(qiáng)后的數(shù)據(jù)也要一對(duì)一對(duì)應(yīng)好,建議一開(kāi)始就取兩者相同的圖像名,使用可視化進(jìn)行測(cè)試
數(shù)據(jù)劃分,分為訓(xùn)練集、驗(yàn)證集、測(cè)試集;按照6:2:2的比例
搭建網(wǎng)絡(luò)代碼,使用Pytorch搭建網(wǎng)絡(luò),后期加入多種trick進(jìn)行測(cè)試
編寫(xiě)train.py訓(xùn)練代碼,寫(xiě)好訓(xùn)練流程、保存模型、保存loss等信息
訓(xùn)練完成之后,使用保存的模型進(jìn)行預(yù)測(cè),對(duì)預(yù)測(cè)出的圖片進(jìn)行涂色,使之可視化
根據(jù)預(yù)測(cè)結(jié)果進(jìn)行kappa系數(shù)、mIoU指標(biāo)的計(jì)算
4. 實(shí)驗(yàn)部分代碼簡(jiǎn)介
數(shù)據(jù)簡(jiǎn)介:以一張大圖和對(duì)應(yīng)的label為例,可視化label以便查看原始數(shù)據(jù)
數(shù)據(jù)切割:介紹有關(guān)tif文件的切割,以及轉(zhuǎn)換tif格式為png格式
灰度label可視化:由于label是1通道的圖像,直觀上是黑色圖像,寫(xiě)代碼使得同類別像素一個(gè)顏色進(jìn)行可視化
數(shù)據(jù)增強(qiáng)_Data_Augmentation.py:離線數(shù)據(jù)增強(qiáng),對(duì)圖像進(jìn)行隨機(jī)旋轉(zhuǎn)、顏色抖動(dòng)、高斯噪聲處理;
數(shù)據(jù)載入及數(shù)據(jù)劃分:v0304版本之前的數(shù)據(jù)載入方式,使用簡(jiǎn)單留出法劃分訓(xùn)練集、驗(yàn)證集
基于k折交叉驗(yàn)證方式的數(shù)據(jù)載入及數(shù)據(jù)劃分:基于k折交叉驗(yàn)證,避免了因偶然因素引起的驗(yàn)證集的不同(驗(yàn)證集隨機(jī)劃分,每次實(shí)驗(yàn)結(jié)果都會(huì)有影響)
deeplabv3.py:基于pytorch的deeplab_v3網(wǎng)絡(luò)搭建代碼
deeplabv3論文筆記:論文Rethinking Atrous Convolution for Semantic Image Segmentation的閱讀筆記
train.py:v0304版本之前訓(xùn)練程序的代碼,基于簡(jiǎn)單留出驗(yàn)證
train_kfold.py:基于交叉驗(yàn)證方式的訓(xùn)練程序的代碼
predictv0217.py:使用生成的訓(xùn)練模型來(lái)預(yù)測(cè),并給預(yù)測(cè)圖片進(jìn)行涂色顯示
MIoU指標(biāo)計(jì)算:使用PyTorch基于混淆矩陣計(jì)算MIoU、Acc、類別Acc等指標(biāo)
Kappa系數(shù)計(jì)算:使用PyTorch基于混淆矩陣計(jì)算Kappa系數(shù)評(píng)價(jià)指標(biāo)
5. 實(shí)驗(yàn)版本數(shù)據(jù)記錄
本實(shí)驗(yàn)有多個(gè)版本,具體實(shí)驗(yàn)詳情如下:
使用圖像增強(qiáng)進(jìn)行訓(xùn)練集的生成,640大小的圖像:訓(xùn)練集1944張、驗(yàn)證集648張、測(cè)試集162張
v0225版本&v0301版本,320大小的圖像:訓(xùn)練集9072張、驗(yàn)證集2268張、測(cè)試集378張
v0607版本之后:第三次調(diào)整數(shù)據(jù);使用dataset3
v0923版本之后:加入dsm高程數(shù)據(jù);使用dataset4
v1012版本之后:加入了新數(shù)據(jù);使用dataset5
圖像的預(yù)處理:無(wú)標(biāo)準(zhǔn)化、只進(jìn)行了歸一化
損失函數(shù):CrossEntropyLoss
優(yōu)化器:SGD、lr=1e-3、動(dòng)量=0.9;v0219版本測(cè)試Adam優(yōu)化器、lr=1e-3
v0225版本&v0301版本:Adam優(yōu)化器、lr=1e-3
v0225版本:deeplabv3-resnet152
v0301版本:deeplabv3-resnet50
v0304版本:deeplabv3-resnet152,將簡(jiǎn)單留出驗(yàn)證改為5折交叉驗(yàn)證
V3p-101:deeplabv3+-resnet101 + 5折交叉驗(yàn)證
V3p-152:deeplabv3+-resnet152 + 5折交叉驗(yàn)證
DANet_res:danet-resnet152 + 5折交叉驗(yàn)證
Deeplabv3_dan:deeplabv3-dan-resnet152 + 5折交叉驗(yàn)證
CCNet0403:ccnet-resnet152 + 5折交叉驗(yàn)證
CCNet0509:deeplabv3-ccnet-resnet152 + 5折交叉驗(yàn)證
ResNeSt0518:deeplabv3-resnest152 + 5折交叉驗(yàn)證(此代碼修改自resnest分類網(wǎng)絡(luò)代碼)
ResNeSt0525:deeplabv3-resnest101 + 5折交叉驗(yàn)證(此代碼修改自resnest用于分割的代碼)
CCNet0607: deeplabv3-ccnet-resnet152 + 5折交叉驗(yàn)證 + 第三次調(diào)整數(shù)據(jù) + 使用weight減輕樣本不均衡
ACNet0923: ACNet-resnet50 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 40
ACNet0925: ACNet-resnet101 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 40
ACNet0927: ACNet-resnet50 + CCNet替換decode的agant層 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 45
ACNet0928: ACNet-resnet50 + CCNet替換原通道注意力模塊 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 45
ACNet0930: ACNet-resnet50 + CBAM替換原通道注意力模塊 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 45
ACNet1002: ACNet-resnet50 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 40 + ACNet0923對(duì)照實(shí)驗(yàn)測(cè)試Focalloss效果
ACNet1004: ACNet_del_M_model-resnet50 + 5折交叉驗(yàn)證 + 加入dsm高程信息 + 使用weight減輕樣本不均衡 + 40
ACNet1005: ACNet1004對(duì)照實(shí)驗(yàn) + torch.cat代替
+融合方式;比較兩者融合的效果好壞ACNet1006: ACNet1004對(duì)照實(shí)驗(yàn) + CC_Moudle代替上采樣過(guò)程中的4個(gè)agant層
ACNet1008: ACNet1004對(duì)照實(shí)驗(yàn) + CC_Moudle代替上采樣過(guò)程中的第1個(gè)agant層
ACNet1009: ACNet1004對(duì)照實(shí)驗(yàn) + m0-m4融合的特征加入到RGB分支
ACNet1010: ACNet1004對(duì)照實(shí)驗(yàn) + sk-resnet50網(wǎng)絡(luò)替換se-resnet50
ACNet1012: ACNet0923網(wǎng)絡(luò)結(jié)構(gòu) + 新的dataset5數(shù)據(jù)集
ACNet1014: ACNet1004網(wǎng)絡(luò)結(jié)構(gòu) + 新的dataset5數(shù)據(jù)集
ACNet1016: ACNet1014對(duì)照實(shí)驗(yàn) + 編碼器的最后融合前添加ASPP模塊
ACNet1021: ACNet1014對(duì)照實(shí)驗(yàn) + 將高程數(shù)據(jù)的分支的通道注意力改為空間注意力
ACNet1023: ACNet1014對(duì)照實(shí)驗(yàn) + 將RGB數(shù)據(jù)的分支的通道注意力改為通道與空間注意力串行
ACNet1025: ACNet1014對(duì)照實(shí)驗(yàn) + 替換注意力機(jī)制中的一個(gè)卷積為兩個(gè)卷積層
ACNet1029: ACNet1014對(duì)照實(shí)驗(yàn) + 將RGB數(shù)據(jù)的分支的通道注意力改為通道與空間注意力并行
ACNet1101: ACNet1014對(duì)照實(shí)驗(yàn) + 刪除了第一個(gè)卷積層之后的注意力機(jī)制與融合 + 刪除對(duì)下采樣的指導(dǎo)
ACNet1103: ACNet1014對(duì)照實(shí)驗(yàn) + 將之前的agant層替換為金字塔池化模塊ppm + sizes==(1,2,5,10)
ACNet1106: ACNet1014對(duì)照實(shí)驗(yàn) + 將之前的agant層替換為金字塔池化模塊ppm + sizes==(1,2,5)
ACNet1110: ACNet1014對(duì)照實(shí)驗(yàn) + 將RGB分支和高程分支的通道注意力改為通道與空間注意力并行
ACNet1113: ACNet1014對(duì)照實(shí)驗(yàn) + 將RGB分支的通道注意力改為通道與空間注意力并行,高程分支為串行
5.1 實(shí)驗(yàn)版本記錄 & 一些想法
數(shù)據(jù)增強(qiáng)加入隨機(jī)裁剪操作,并雙線性插值pad至320大小(不能pad,標(biāo)簽pad就不是真實(shí)值),投入訓(xùn)練
隨機(jī)裁剪數(shù)據(jù)至192大小,沒(méi)有pad,和320大小的數(shù)據(jù)一起當(dāng)做訓(xùn)練集,出現(xiàn)錯(cuò)誤提示:一個(gè)batch的數(shù)據(jù),[B,C,H,W]必須一致,由于320和192大小的數(shù)據(jù)摻雜,所以報(bào)錯(cuò)。因?yàn)閷?shí)驗(yàn)使用離線的數(shù)據(jù)增強(qiáng)
因數(shù)據(jù)集中樣本數(shù)量不平衡,測(cè)試weighted Cross Entropy-Loss以及Focal-Loss
使用CCNet單獨(dú)訓(xùn)練
v0403版本:只使用了ccnet注意力模塊的輸出上采樣,結(jié)果為不收斂,但是使用epoch-8.pth測(cè)試有點(diǎn)效果
后期測(cè)試:將x與x_dsn特征融合,進(jìn)行測(cè)試,測(cè)試結(jié)果如下,可以看出較danet單獨(dú)訓(xùn)練結(jié)果稍好,車輛acc例外
CCNet與deeplabv3共同使用,將注意力模塊加入deeplabv3
測(cè)試到epoch12,由于服務(wù)器原因程序中斷,查看log,在訓(xùn)練集、驗(yàn)證集上的loss都較之前增大
修改權(quán)重,根據(jù)訓(xùn)練數(shù)據(jù)集,算出真正的像素比例值,調(diào)整權(quán)重,重新訓(xùn)練
此次效果很好,其中明顯在預(yù)測(cè)圖中【道路】的識(shí)別率增大,且指標(biāo)上漲明顯
v0509版本:將ccnet模塊與aspp模塊并行,cat兩個(gè)結(jié)果,最后進(jìn)行分割。整體Acc、MIoU、Kappa都達(dá)到了最高
v0509版本:只有道路和車輛的準(zhǔn)確率低于以往的實(shí)驗(yàn)
v0607版本:測(cè)試Cross Entropy-Loss加入權(quán)重[0.1, 0.8, 1.0, 1.0]
DAN網(wǎng)絡(luò)單獨(dú)訓(xùn)練
danet_drn_v0408版本:output包括feat_sum、pam_out、cam_out,采用輔助loss訓(xùn)練,結(jié)果一塌糊涂
danet_v0408版本:更換backbone網(wǎng)絡(luò)為resnet-152,替換deeplabv3的aspp模塊,不使用輔助loss,使用feat_sum進(jìn)行結(jié)果的分割,結(jié)果詳見(jiàn)下表Danet0408
DAN模塊并行加入deeplabv3網(wǎng)絡(luò)中,實(shí)驗(yàn)數(shù)據(jù)如下所示
將deeplabv3的backbone網(wǎng)絡(luò)Resnet換為ResNeSt,目前測(cè)試版本:resnest-v0518
此版本:根據(jù)代碼修改,去除aspp后的層,模仿deeplabv3-resnet進(jìn)行修改,效果一般,僅僅提升了道路的識(shí)別
根據(jù)@張航作者的代碼進(jìn)行更改得出,deeplabv3-resnest101,已測(cè)試
目前的實(shí)驗(yàn)?zāi)繕?biāo):提高車轍的識(shí)別率(道路的標(biāo)注中,有一部分是車輪軋過(guò)的車轍),最懷疑是數(shù)據(jù)量不夠
思路1:加大數(shù)據(jù)量,如下進(jìn)行的新的數(shù)據(jù)增強(qiáng);
思路2:調(diào)整損失函數(shù),加入weight權(quán)重,減輕樣本數(shù)目不平衡問(wèn)題;
實(shí)驗(yàn)結(jié)果有較大的提升,見(jiàn)下結(jié)果
關(guān)于數(shù)據(jù)的調(diào)整:重新審視了代碼,測(cè)試了增強(qiáng)的結(jié)果;其中,顏色抖動(dòng)、隨機(jī)旋轉(zhuǎn)有效;高斯噪聲處理像素值改變??;
更新:刪除了反轉(zhuǎn)的圖像中全黑的label,即全是背景的label;(減輕一下樣本不均衡)
在原訓(xùn)練數(shù)據(jù)上新添加如下:左右翻轉(zhuǎn)圖像;上下翻轉(zhuǎn)圖像;其中各1890張,共3780張;
有關(guān)第三次數(shù)據(jù)調(diào)整,詳見(jiàn)issue-數(shù)據(jù)調(diào)整匯總
5.2 基于RGB與高程數(shù)據(jù)的語(yǔ)義分割實(shí)驗(yàn)
數(shù)據(jù)處理部分
Depth原始數(shù)據(jù)(高程數(shù)據(jù))是32位的tiff格式圖像,需轉(zhuǎn)換為8位的tiff格式圖,使用python的代碼直接轉(zhuǎn)換會(huì)線性壓縮圖像的對(duì)比性,所以要先找到圖像像素的極值,將其像素之間的差做出來(lái),再使用代碼轉(zhuǎn)換為uint8文件。轉(zhuǎn)換代碼地址:32to8.py
png切割代碼:png_crop.py
在dataset3中有篩選出的特征較均衡的圖像,使用代碼篩選切割好的dsm高程數(shù)據(jù);代碼:file_find.py
基于dataset3加入dsm高程數(shù)據(jù):dataset4的調(diào)整記錄
代碼 獲取方式:
分享本文到朋友圈
關(guān)注微信公眾號(hào) datayx 然后回復(fù) 分割 即可獲取。
AI項(xiàng)目體驗(yàn)地址 https://loveai.tech
5.3 test測(cè)試數(shù)據(jù)集-各版本結(jié)果對(duì)比

6. 實(shí)驗(yàn)分割結(jié)果展示


