Mask RCNN的训练
准备工作
1、服务器的选择:本人电脑显卡有限,选择了在Autodl上进行租用服务器,可以利用pycharm进行远程调试(注意pycharm专业版才行)
autodl网址:https://www.autodl.com/register?code=a55ffcc0-6a2c-4800-a9c2-501f4d40be9d(具体使用参考帮助文档)
2、代码的选择,选择原作者的官方代码,功能齐全,代码具备可操作空间
https://github.com/matterport/Mask_RCNN
3、数据集的准备:本人通过labelme软件进行实例数据标注,然后labelme2coco
(注意:建议尽量转换成COCO2017的格式(https://github.com/wkentaro/labelme/tree/main/examples/instance_segmentation),如果使用labelme自带的labelme_to_json,在训练过程可能会出现问题,无法区分同一类别的不同对象)
coco2017文件夹数据放置格式如下:其中annotations里面放的实例标注json文件,名字要与官方对应,其它文件夹里面放的图像
训练coco.py
1、修改模型基本配置(按照自己需求修改)
2、修改命令行参数配置,可手动输入,可设置默认值,按自己需求修改
3、使用官方的coco权重文件进行初始训练,记得在第一次训练时,要排除一些权重
4、上传好权重文件和图片数据,开始训练
验证评估coco.py
1、将命令行参数配置进行修改
2、开始评估,注意评注就是评估val2017数据,如果想评估其它数据,修改名字并防止val文件夹下即可
结果如下:比较差,兄弟们可以比较一下吗自定义数据集的效果
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.307
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.569
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.303
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.262
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.328
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.344
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.265
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.436
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.436
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.347
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.409
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.502
存在的问题
1、数据集加载问题
ValueError: Error when checking input: expected input_image_meta to have shape (13,) but got array with shape (14,)
出现该类情况,首先检查NUN_CLASS是否设置正确(1+类别),然后未解决就修改loadd_coco,原作者那个比较麻烦,容易出现bug,用下面这个自己修改一下即可
2\数据集的问题
数据集中如果出现line格式的掩码,也会出现错误(我调了两天,这个bug),解决办法,要么修改代码(比较麻烦),要么重新进入labelme修改标注文件(具体报错名字我搞忘了,但是挺经典的,好像是下面这个问题);就是掩码标注的线条,收尾不相连;代码追踪会显示问题在:load_mask
TypeError: Argument ‘bb’ has incorrect type (expected numpy.ndarray, got list)
3\评估时出现准确率为0的情况,但是可视化结果又还行
Get 0 AP and AR when testing, and the inference result is very bad
(1)输出结果没有转换成标准的COCOjson)
(2)加载权重时出现错误,只加载了主干网的权重(天啊,这个问题浪费了我半天)