pytorch學習:運行Mask R-CNN例程

目錄

1 學習pytorch進行圖像處理的四個必用鏈接:

2 運行Mask R-CNN例程時的問題點

2.1 在哪兒下載 engine.py  transforms.py  utils.py?

Github下載xxx.py文件的方法

 2.2 安裝pycocotools

2.3 手動輸入代碼時出現的一些問題

2.4 CPU模式下運行代碼的小BUG

3 個人對於tensorflow caffe pytorch的淺顯體會



1 學習pytorch進行圖像處理的四個必用鏈接:

先附上pytorch的中文和英文版教程鏈接,Pytorch API手冊,以及github圖像庫鏈接:

中文:http://pytorch123.com/

英文:https://pytorch.org/tutorials/index.html

API:https://pytorch.org/docs/stable/index.html

vision:https://github.com/pytorch/vision

2 運行Mask R-CNN例程時的問題點

學習Pytorch中,在windows下運行教程中的例子,發現還有一些地方存在不明白的,現總結如下。

2.1 在哪兒下載 engine.py  transforms.py  utils.py?

教程裏沒有給出鏈接,是在github上pytorch的torchvision repository裏面:

https://github.com/pytorch/vision/tree/master/references/detection

當然,運行的時候還是會提示各種錯誤,那是因爲一些依賴的.py沒有,依然可以從上面的鏈接中找到,特別的:

coco_utils.py  coco_eval.py

將上述.py都下載下來,拷貝到例程所在的文件夾下。

話說如何下載?之前我沒有github賬號的時候,右邊都有clone download的按鈕,現在登錄了,卻沒有了下載的按鈕,或者它就沒有打包。。。百度後發現了下載的方法:

Github下載xxx.py文件的方法

   點開需要下載的那個.py文件,然後代碼的右上角有個“Raw”的標籤,右鍵->鏈接保存爲   ,,即可下載了。

再運行,就會出現終極錯誤。找不到pycocotools,請繼續步驟2

 2.2 安裝pycocotools

直接pip install pycocotools是會報錯的,參考下面鏈接的方法:

https://blog.csdn.net/u012128777/article/details/100973199?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

發現沒有git,然後又參考 https://blog.csdn.net/qq_32786873/article/details/80570783 進行安裝,但是github很不穩定,網速很慢,就在csdn上搜了一個需要積分的下載下來,40多M。安裝好後,添加環境變量,然後在之前的cmd裏面執行git --version,提示依然沒有git。

好像是沒有更新吧,關閉命令行窗口,重新打開後,git就出現了!然後按照剛纔的鏈接,開始下載pycocotools。我是等了好一會兒,才安裝好。

2.3 手動輸入代碼時出現的一些問題

由於代碼是我手動輸入的,出現了很多小錯誤。

在編寫PennFudanDataset時,方法__getitem__函數忘記添加  return:

在PennFudanDataset裏,masks誤寫爲mask

寫完最後一個main方法後,沒有添加執行 main:

以及出現這種錯誤:

RuntimeError: Given transposed=1, weight of size 1024 256 2 2, expected input[78, 256, 14, 14] to have 1024 channels, but got 256 channels instead

有一種說法是沒有將圖像轉化爲“RGB’,查看代碼後發現已經轉化了,那問題在哪兒呢?

很明顯是該層的輸入通道與實際得到的通道數不匹配,再次檢測代碼,是這裏錯了,

model.roi_heads.mask_predictor = MaskRCNNPredictor(in_features,
                                                   hidden_layer,
                                                   num_classes)

是輸入特徵數錯了,改成in_features_mask,一切就OK啦

in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels

2.4 CPU模式下運行代碼的小BUG

發現了一個小bug,這個代碼本意是想能在GPU和CPU上都兼容運行的,但是個人認爲作者僅在GPU上跑通,CPU上運行很慢,而且在evaluate()的時候會報錯。

engine.py的86行:

torch.cuda.synchronize()

這句話就默認了當前是GPU模式,沒有GPU的話這裏就報錯了,因此,個人給添加了一句話:

if torch.cuda.is_available():
    torch.cuda.synchronize()

這樣在沒有GPU的時候,bypass了CUDA同步的操作。問題解決!下面是evaluate的運行結果:

Test:  [ 0/50]  eta: 0:13:53  model_time: 16.3845 (16.3845)  evaluator_time: 0.2324 (0.2324)  time: 16.6657  data: 0.0489
Test:  [49/50]  eta: 0:00:13  model_time: 13.2440 (13.5054)  evaluator_time: 0.1157 (0.1208)  time: 14.0909  data: 0.0177
Test: Total time: 0:11:22 (13.6521 s / it)
Averaged stats: model_time: 13.2440 (13.5054)  evaluator_time: 0.1157 (0.1208)
Accumulating evaluation results...
DONE (t=0.06s).
Accumulating evaluation results...
DONE (t=0.04s).
IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.001
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.008
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.005
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.001
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.010
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.136
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.060
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.144
IoU metric: segm
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.017
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.020
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.017

 

3 個人對於tensorflow caffe pytorch的淺顯體會

總結一下學習Pytorch的體會:

1. 與python原生風格貼合緊密,用起來很順手,就像numpy一樣。

2.與tensorflow相比,可以及時調試,發現問題,不像tensorflow那樣,雖然有eger模式,但還是不習慣那種with session,更不習慣花大力氣去維護變量,要知道起名還是很難爲人的,雖然tensorflow有slim版本,但是在也不願意去委屈自己,天天升級習慣。

3.跟caffe比起來,pytorch簡直是明瞭許多,不用再去看好幾千行的caffemodel文件了,改一個模型,名字就得換半天,太焦心了,而且還得使用各種shell命令去訓練和評估模型。特別的,使用這個腳本from engine import train_one_epoch, evaluate,可以使用簡單的幾行代碼進行訓練,特別方便。

4.pytorch將神經網絡的主體規範化,做到十分明瞭。而最讓人頭疼的數據集加載方面,還是比較出色的,用python的風格來加載數據,入手很快,也容易理解,debug模式很容易找到問題所在。

總之,在簡單使用了三個流行的深度學習平臺後,很推薦新手使用pytorch入門。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章