简单版Mask rcnn pytorch环境配置(ubuntu18.04)

最近要用maskrcnn做项目,主要是要改代码,所以像一些维护的很好的高复杂度的项目 (mmlab,facebook/maskrcnn-benchmark)我实在看不过来。而matterport的maskrcnn项目还是tf1.0的框架,不太熟悉,毕竟torch和tf2.0才很好用,所以找了一个有1.7k star的简单版的pytorch maskrcnn 项目。
项目github链接:https://github.com/multimodallearning/pytorch-mask-rcnn

写在前面的话,这个项目已经写了install方法在readme.md。但是torch0.3这种需要cuda7.5的项目,在18.04上配置还是挺麻烦的。ubuntu18.04自带gcc7版本,编译cuda7.5需要gcc4.7的版本,我最开始先使用的这种方法,想安装cuda7.5,降低gcc以后还是一直安装不成功……,所以放弃。

环境:torch0.4.0(如果需要torchvision=0.2.2) python3.6 cuda9.0(和ubuntu16.04兼容)
(我一开始尝试torch0.4.1和python3.7,在编译nms和roialign时失败)
用conda配置上述环境就好了,torchvison在这个项目中并没有使用,但是我后续工作需要有,所以也一并写出来了。
然后按照readme.md来编译。
简单版Mask rcnn pytorch环境配置(ubuntu18.04)_第1张图片
这个图是readme中的内容,里面写了在下面编译时要根据你的显卡算力修改arch参数,我的是GTX1080和1080ti的算力一样都是6.1,所以arch参数为sm_61

 cd nms/src/cuda/
 nvcc -c -o nms_kernel.cu.o nms_kernel.cu -x cu -Xcompiler -fPIC -arch=[arch]
 cd ../../
 python build.py
 cd ../

 cd roialign/roi_align/src/cuda/
 nvcc -c -o crop_and_resize_kernel.cu.o crop_and_resize_kernel.cu -x cu -Xcompiler -fPIC -arch=[arch]
 cd ../../
 python build.py
 cd ../../

根据显卡算力,上述的参数就变成了,这里中括号就不要了!两个地方的arch都需要。

nvcc -c -o nms_kernel.cu.o nms_kernel.cu -x cu -Xcompiler -fPIC -arch=sm_61

然后就是pycocotools安装方法,他的方法,太复杂了,后面还容易出错…………介绍一个简单的方法,参考另一篇博客
https://blog.csdn.net/cube_suger/article/details/122700321?spm=1001.2014.3001.5501
然后需要下载预训练权重,百度网盘链接送上!
链接:https://pan.baidu.com/s/1YwcfifsbxRNOckTBNdlZ0w
提取码:4m1m
网盘中的内容有一个mask_rcnn_coco.pth,下载后把这个文件放在你的项目根目录下就可以了。
然后你就可以试的跑 demo.py这个文件了,看看能不能跑起来。缺啥包再pip 安啥包。如果想看到分割结果,把最后一行plt.show()改成plt.imshow().
百度网盘中另外两个文件是coco数据中的annotation文件。因为这个项目提供了可以自己下载数据集训练的方法,但是我这两个annotation文件下载不下来,所以单独提供给大家,images内容下的还挺快。

# Train a new model starting from pre-trained COCO weights
python coco.py train --dataset=/path/to/coco/ --model=coco --download=true

上面的–dataset要改成自己储存coco数据集的路径,不然数据不知道跑哪里去了。运行这行,程序就会下载coco数据集到你指定的路径,但是容易出现connect error,大概就是访问超时,我在下载image部分时没问题,annnotation有问题,所以网盘中有这两个annotation文件,把他们俩放在你指定的coco下载路径下,再次运行,代码就会自动解压了,不用管了。


在这里插入图片描述

你运行程序时候还会遇到这个问题,好解决,定位到model.py的569行,size后面加个[0]就可以了。这好像是因为torch0.4.1和0.4.0的版本导致的。

if torch.nonzero(gt_class_ids < 0).size()[0]:

然后就可以啦。


中间我遇到了好多其他的问题,尤其是编译那里,具体问题记不清了,可以尝试按照我提供的环境版本来解决问题。

你可能感兴趣的:(pytorch,深度学习,人工智能)