目錄
2.1 在哪兒下載 engine.py transforms.py utils.py?
3 個人對於tensorflow caffe pytorch的淺顯體會
1 學習pytorch進行圖像處理的四個必用鏈接:
先附上pytorch的中文和英文版教程鏈接,Pytorch API手冊,以及github圖像庫鏈接:
英文: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是會報錯的,參考下面鏈接的方法:
發現沒有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入門。