FPN語義分割辛酸踩坑記(1)


由於項目需要,最近在研究語義分割,上次用了gluoncv中的FCN,但是由於樣本少,而且都是小目標、多目標,組內的技術大牛建議用FPN試試。

FPN一般用於目標識別,但是也有用作語義分割的。gluoncv官網不支持FPN做semantic segmentation,於是在github上搜索,搜到一個FPN做語義分割的,但是數據集類型為cityscapes,本小白對此數據集一無所知,搜了一下,還挺復雜的,如果用自己的數據集制作cityscapes格式的數據,估計夠嗆。

於是又搜到了一個項目vedaseg

https://github.com/Media-Smart/vedaseg/tree/213b584a1cc4734a430f0d1eb3e6f96afd2a6d67

此項目號稱可以用fpn做語義分割,於是便clone到我的aws ec2上跑了一下,失敗無數次:

(1)數據讀取失敗

如上一篇博文所示,labelme官方提供的腳本可以將標注的語義分割數據集轉換成pascal voc格式,但是!

轉出來的內容和文件夾命令好像和官方標准的voc 2012不一致,更像是voc增強版(此處待考證)

中途讀取數據老出錯,定位了一大晚上,最后在tools/../vedaseg/datasets/voc.py中

1  def __getitem__(self, idx):
2         imgname = self.imglist[idx]
3         img_fp = os.path.join(self.root, 'JPEGImages', imgname) + '.jpg'
4         mask_fp = os.path.join(self.root, 'EncodeSegmentationClass',
5                                imgname) + '.png'

mask_fp的路徑與轉出來的不一致,轉出來的文件夾名為SegmentationClassPNG
(2)修改之后數據能讀取了,但又報了另外一個錯
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
查詢了一下,這篇博客中說:
總結:絕大多可能就是cuda,cudnn,vs,python,pytorch版本,其中某個版本出了問題。所以廣大朋友們要針對這幾個逐一排查

想了想,晚上在登錄EC2時系統提示有一些包可以更新,順手就更新了,里面就包含了python2中的一些東西,會不會是更新完python命令默認用python2執行了,於是在運行腳本的命令前加了一個3,變成

python3 tools/train.py configs/voc_fpn.py

結果真是按下葫蘆浮起瓢,原來的錯不報了,報了新的錯:

RuntimeError: CUDA error: device-side assert triggered

再次求助於搜索引掣,出來的一個參考結果是

https://blog.csdn.net/qq_30680871/article/details/103442862

該Error是在pytorch框架下出現的,其原因是樣本的label種類大於了代碼所設置的類別數。

返回到vedaseg項目中的voc.py中大概看了一下,沒找到類別相關的設置。

再返回vedaseg項目首頁,看下面的說明,

for multi-label training use config file configs/coco_multilabel_unet.py and modify some configuration, the difference between single-label and multi-label training are mainly in following parameter in config file: nclassesmulti_labelmetrics and criterion. Currently multi-label training is only supported in coco data format.

上面赫然寫着一行大字:當前多標簽訓練只支持coco數據格式!!!
WTF!
接下來能咋辦?轉COCO!
另外vedaseg項目中,多標簽的語義分割只支持unet,沒有FPN
那么UNET和FPN的區別是啥?
看了知乎上的帖子,好像差異不是很大,都涉及特征金字塔
那就先用UNET吧
網上搜到了一個labelme格式數據轉化為標准的coco數據集格式的腳本
試了一下,json文件確實生成成功了,效果如何呢?太晚了,明天驗證吧,今晚繼續debugging下去,I may stay up to 2 or 3 o'clock
-----------------------------------
唉,還是自己基礎差,學藝不精,如果我對mxnet足夠熟悉,就可以自己仿照pytorch的版本寫一個FPN或者UNET的網絡,然后融合到gluoncv的segmentation腳本中去直接訓練voc類型的數據集了。
另外,as a CVer,I'm not familiar with the open datasets,像最常用的pascal voc和MS COCO,對它們的格式還是不太熟悉,這也需要花時間去掌握和補充。今晚到這吧,明天繼續。

 
         
         
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM