之前一直使用的都是tensorflow版maskrcnn,虽然知道pytorch版已经出来很久了,但一直也没想着试试,前几天组里大牛让我试着用pytorch版的maskrcnn来训练一下现在的数据集,毕竟pytorch版在速度上要比tensorflow版的快很多。
先去官网将代码下载下来 https://github.com/facebookresearch/maskrcnn-benchmark
我的系统是ubuntu18.04,已提前安装好pytorch,没有安装的小伙伴可以去网上找教程看一下。
下载完代码后进行安装
cd maskrcnn-benchmark-master
sudo python3 setup.py build develop
然后
根据官网的教程进行测试,缺什么库就安装什么库
cd demo
# by default, it runs on the GPU
# for best results, use min-image-size 800
python webcam.py --min-image-size 800
# can also run it on the CPU
python webcam.py --min-image-size 300 MODEL.DEVICE cpu
# or change the model that you want to use
python webcam.py --config-file ../configs/caffe2/e2e_mask_rcnn_R_101_FPN_1x_caffe2.yaml --min-image-size 300 MODEL.DEVICE cpu
# in order to see the probability heatmaps, pass --show-mask-heatmaps
python webcam.py --min-image-size 300 --show-mask-heatmaps MODEL.DEVICE cpu
# for the keypoint demo
python webcam.py --config-file ../configs/caffe2/e2e_keypoint_rcnn_R_50_FPN_1x_caffe2.yaml --min-image-size 300 MODEL.DEVICE cpu
如果缺少apex库,到githhub上进行下载解压。下载地址: https://github.com/NVIDIA/apex.git
然后进行安装
sudo pip3 install --upgrade setuptools
cd apex-master
sudo python3 setup.py install
接下来就要处理数据集了,不知道大家都是用什么进行标注的哦,我用的是VIA标注的,需要对格式进行转换,转成COCO格式,当然了大神们也可以自己修改源码进行训练。
转换代码:
在./maskrcnn-benchmark-master/maskrcnn_benchmark下新建dataset和myconfig两个文件夹,将数据集放入到dataset/coco文件夹下
其中train2018,val2018是需要进行训练的图片,annotations中是COCO格式的json文件
。在myconfig文件下将./maskrcnn-benchmark-master/configs里你想训练的配置文件(.yaml结尾)复制过去,把./maskrcnn-benchmark-master/maskrcnn_benchmark/config打开,复制__pycache__和paths_catalogs.py到myconfig
文件准备就绪,接下来就是根据自己的数据集对各配置进行修改了。
修改maskrcnn_benchmark/utils下的checkpoint,需要注释(65, 68)两行(self.optimizer.load_state.. self.scheduler.load_...)
将myconfig下的paths_catalogs文件中的数据集路径改为自己的,
然后进行配置文件的修改(.yaml),主要修改NUM_CLASSES,DATASETS中的train和test ,模型保存文件OUTPUT_DIR以及PATHS_CATALOG
然后就可以开始训练了,在./maskrcnn-benchmark-master下打开终端,运行
python3 tools/train_net.py --config-file="修改后的配置文件(.yaml)"
在训练过程中如果出现loss为nan的情况,或者出现错误 - RuntimeError: copy_if failed to synchronize: cudaErrorAssert: device-side assert triggered,请修改配置文件(.yaml)中的学习率(我训练fpn50和fpn101时将其改为了0.002)我的数据集只有一类物体,供大家参考。
我在训练完成时还碰到一个错误
TypeError: object of type <class 'numpy.float64'> cannot be safely interpreted as an integer
是numpy版本的问题,之前安装的是1.18.1,后来修改为1.16.1后即可正常运行。
sudo pip3 install -U numpy==1.16.1
训练完成后在你的OUTPUT_DIR会生成一个model_final.pth,将这个路径放入到之前的配置文件中(.yaml)放入到WEIGHT
将./maskrcnn-benchmark-master/demo文件夹下的predictor.py中的类别改为自己的,然后将webcam.py中的--config-file中的default改为修改完的配置文件路径(.yaml)
接下来就可以进行测试了,运行webcam.py即可,需要测试图片可根据自己的需要更改。