detectron2训练自己的数据集_Mask Rcnn使用篇-训练自己的数据集

首先膜拜一下何凯明大神,其实首次知道FCN做语义分割的时候,也产生过是否可以与Faster Rcnn结合的想法,不过也就那么一个念头闪过而已,没具体想估计也想不明白。看了Mask Rcnn后有种豁然开朗的感觉,除了膜拜没别的想法了。这篇只写怎么使用,原理已经有很多大神写过了,我就不搬运啦。 必要的开发环境我就不啰嗦了,在代码链接里有,如果只是训练自己的训练集,coco tools就不用下了,windows下安装还挺烦。

一、 数据集标注 使用labelme来标注图像,安装前需要先安装pyqt5,然后就ok了。安装的时候,可能会出现诸如:“XXX不是合法的utf-8编码”之类的错误,这是中文版windows的问题,定位到报错的那个地方,然后把编码方式"utf-8'修改成"gb2312"。忘截图了,如果还报错,就百度吧。 安装好后,直接启动labelme.exe即可。选择数据集所在的文件夹,然后一张张的手动标注吧。

detectron2训练自己的数据集_Mask Rcnn使用篇-训练自己的数据集_第1张图片

二、 数据处理 labelme保存的都是xxx.json文件,需要用labelme_json_to_dataset.exe转换一下,在cmd下定位到labelme_json_to_dataset.exe文件所在的文件夹下,其中‘E:codeTongue_detectdataset’就是json文件所在的文件夹

for /r E:codeTongue_detectdataset 

这样会生成一个同名文件夹,里面包含了我们需要的mask文件,label.png,不过这个文件是16bit点,而cv2中使用的都是8bit点,所以需要转换一下。说明:这样转换后,打开转换后的图片一片漆黑,如果想看效果可以把"img = Image.fromarray(np.uint8(np.array(img)))"改成“img = Image.fromarray(np.uint8(np.array(img)) * 20 )”,不过这样不符合mask rcnn的要求,看看效果即可,后面运行还是需要不乘倍数的!

def 

最后,把得到的文件统一一下,便于后续程序执行,最后文件夹如下:

detectron2训练自己的数据集_Mask Rcnn使用篇-训练自己的数据集_第2张图片

三、 修改mask rcnn 在mask rcnn的根目录下,新建两个文件夹“models”和“logs” ,models用于保存已经预训练好的coco模型,可以在这里下载,logs用于保存训练产生的模型。在samples文件夹下新建一个“tongue”文件夹,创建tongue.py,代码中的 init_with = "last" 第一次训练时请改成 init_with = "coco",代码主要参考https://blog.csdn.net/disiwei1012/article/details/79928679 略微修改

import 

修改 mrcnn/model.py文件中的第26行,修改成:

from 

再训练了20个epoch后,总的loss降到0.0524,得到测试图像如下:

detectron2训练自己的数据集_Mask Rcnn使用篇-训练自己的数据集_第3张图片

如果使用矩形框中的图像做下一步的输入已经满足要求了。

你可能感兴趣的:(yolov3训练自己的数据,yolov5训练自己的数据集)