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入门。

 

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