Mask_RCNN入门(二)—— 训练自己的数据集

写在前面

Mask_RCNN入门(一)—— 跑通代码一样,本文将列出自己参考的教程,重点介绍注意点和踩的坑。
本文主要参考教程:Mask R-CNN tensorflow 训练自己的数据

废话不多说,按照教程开始实践

step1:使用labelme标注好图片

关于labelme的安装和使用,这里不再赘述,请参考:图片标注工具Labelme的安装及使用方法,当然有几个小建议:

  • 建议单独创建一个conda环境,或者conda的base环境,用于labelme包的安装
    因为这样可以所有的conda环境都可以使用此环境下的labelme,不用每个环境都装一遍,我是单独创建了一个名为label的conda环境用于labelme包的安装。
  • 建议将labelme的启动写成一个bat脚本
    这样免得每次启动labelme都要conda activate相应环境,激活,比较麻烦,我的bat脚本内容如下:
@echo.
@echo ***进入conda命令行,并直接切换到labelme环境***
@echo.
@echo.
@echo.
CALL C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3\envs\labelme
@echo.
@echo.
@echo.
@echo ***启动labelme***
@echo.
@echo.
@echo.
::不知道为啥,直接labelme就会陷入死循环,换成labelme.exe
labelme.exe

这样每次双击bat即可启动labelme:
在这里插入图片描述
接下来就是使用labelme标注好要训练的图片,原始图片和json单独放置,这里不再赘述:
在这里插入图片描述

step2:批量转化json文件

单个json文件的转化,参考:labelme安装与使用,但这里坑:

  • 坑1:Anaconda/3envs/labelme/Scripts文件夹下没有label_json_to_dataset.exe
    只有labelme_json_to_dataset.exe,所以转化单个json文件的命令应该为:
C:/ProgramData/Anaconda3/3envs/labelme/Scripts/labelme_json_to_dataset xxx.json

(labelme_json_to_dataset和json文件路径根据自己机器位置修改)

  • 坑2:无法生成yaml
    应该是版本原因,我是用的labelme_json_to_dataset.exe转化后的数据中没有info.yaml,经过查资料labelme:缺少生成"info.yaml"文件知修改labelme/cli下的json_to_dataset.py文件(这是labelme_json_to_dataset.exe的源文件)在我的电脑位置为:
C:\ProgramData\Anaconda3\envs\labelme\Lib\site-packages\labelme\cli

按照资料中修改,之后就可以正常生成info.yaml

  • 坑3:批量转化的代码跑不通
    这里是我的批量转化的代码:
import os
path = r'C:\Users\apple\Desktop\labelme\json'  # path是你存放json的路径
json_file = os.listdir(path)
for file in json_file:
    os.system("C:\ProgramData\Anaconda3\envs\labelme\Scripts\labelme_json_to_dataset.exe %s" % (path + '/' + file))

其中的labelme_json_to_dataset.exe和json位置根据自己机器修改。下面是结果:
在这里插入图片描述
转化后的json和原json文件在一个文件夹下,单独一个xx_json文件:
在这里插入图片描述

step3:新建train_data

按照[教程[(https://blog.csdn.net/doudou_here/article/details/87855273)直接跟着做。
项目目录下,新建directory目录结构如下:
在这里插入图片描述
其中pic放入标注的原图,json放入labelme标注得到的所有json文件,labelme_json放入转化后的json文件,cv2_mask放入每个labelme_json文件下的label文件。
其中,前三个直接copy过来就可以,但cv2_mask要重新命名,翻看每个转化之后的json文件夹可以发现,里面的掩膜图片名字都为label.png:
在这里插入图片描述
需要将label.png命名为对应的“文件名.png”格式,建议使用代码实现,下面这是我的代码(其中的文件路径根据自己需要修改):


import os
import shutil
filename = "C:/Users/apple/Desktop/labelme/json/"  # 存放json转化得到的文件夹名称,需要保证没有隐藏的文件夹
fileList = os.listdir(filename)

"""
抽取json转化得到的5个文件中的label.png,并重新命名
"""
for i in range(len(fileList)):
    path = filename + fileList[i];
    # 如果不是文件夹,跳过
    if os.path.isfile(path):
        continue
    no = fileList[i][:-5]   # 从文件夹上取出文件名
    mask_source = path + "/label.png"
    mask_target = "train_data/cv2_mask/{}.png".format(no)  # 命名为“文件名.png”
    shutil.copy(mask_source, mask_target)  # 利用shutil直接copy过去

注意,很多教程都会提示label.png是16位的,而训练(要用cv2处理)需要使用8位的,所以需要对label.png进行转化才能使用,但是我参考的Mask R-CNN tensorflow 训练自己的数据说得很明白,labelme升级以后转化得到的label.png就是8位的,不用转换,教程也说明:打开的图片是彩色的就说明已经是8位的了,这一点我想还是做到有理有据比较好:

  • 查看图片位深度
    图片 —— 属性 —— 详细信息,以我的第一张图片为例,查看label.png:
    在这里插入图片描述
    很明显,就是8位的。
  • 8位和16位png看起来有什么区别
    为了看清楚,专门网上找了代码对上图中8位的label.png进行了转化,下面分别是8位和16位图片:
    8位
    在这里插入图片描述


    16位:
    在这里插入图片描述

step4:新建train.py

按照教程在项目目录下新建train.py,内容不再赘述,直接copy即可,经实测,修改的地方按教程来即可。
在之前创建的conda环境下,进入项目目录,直接:

python train.py

即可开始训练,不一会儿可以看到项目目录下多了logs目录:
在这里插入图片描述
这个h5文件就是我们下面进行预测用到的模型。

step5:新建test.py

同样在项目目录下新建test.py(教程中名字为fortest.py),内容直接copy即可,但经实测,如果只按教程中修改h5模型路径和测试图片路径,运行test.py 会报错:
在这里插入图片描述
这是因为就和train.py一样,在:
在这里插入图片描述
需要按自己训练集修改。修改后再运行,报错:
在这里插入图片描述
这是因为还有一处需要修改:
在这里插入图片描述
除了保留“BG”外,后面放上自己训练的label。运行,OK:
在这里插入图片描述

一些建议

  • 成功跑通一个训练过程以后,以后可以直接copy项目进行其他的训练
    这样后面的修改的地方很少,基本就是:
  1. train_data文件夹
  2. train.py中的NUM_CLASSES,self.add_class()和label[i].find
  3. test.py中的h5路径,测试图片路径,NUM_CLASSES和class_names
    这样也可以使用统一的运行conda环境,labelme工具等
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
mask_rcnn是一种广泛应用于计算机视觉领域的模型,它是在Faster RCNN基础上进行改进得到的。COCO2017是代表微软公司在2017年推出的一个大规模目标检测、分割和关键点检测数据集mask_rcnn模型结合了目标检测、实例分割和语义分割的功能,能够检测图像中的多个目标并准确地对每个目标进行分割。在训练过程中,mask_rcnn通过对每个RoI(Region of Interest)应用ROI Align操作,将特征图映射到固定大小的特征图上,然后通过RPN(Region Proposal Network)生成ROIs,并对生成的ROIs进行分类、边界框回归和掩码预测。 COCO2017数据集是一个非常庞大的数据集,包含超过150,000张标记的图像,共80个不同的类别。这些图像涵盖了各种场景,如人、动物、交通工具等。COCO2017数据集在目标检测、分割和关键点检测任务上提供了丰富的标注信息,使得模型能够学习不同类别的目标的特征。 使用mask_rcnn模型在COCO2017数据集上进行训练可以有效地改善图像识别、目标检测和分割任务的性能。通过在训练过程中引入语义分割和掩码预测,mask_rcnn能够更好地理解图像中不同目标的空间关系,从而提供更准确的目标检测和分割结果。此外,COCO2017数据集的丰富标注信息能够帮助模型更好地学习各个类别目标的特征,提高模型在实际场景中的适用性。 总体而言,mask_rcnn模型结合COCO2017数据集可提供更好的目标检测、分割和关键点检测能力,为计算机视觉领域的各种应用提供了强有力的支撑。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值