当前位置:   article > 正文

Mask_RCNN入门(二)—— 训练自己的数据集_使用自己的数据集 maskrcnn

使用自己的数据集 maskrcnn

写在前面

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这样每次双击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
  • 1

(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
  • 1

按照资料中修改,之后就可以正常生成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))
  • 1
  • 2
  • 3
  • 4
  • 5

其中的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过去

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

注意,很多教程都会提示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
  • 1

即可开始训练,不一会儿可以看到项目目录下多了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工具等
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/300390
推荐阅读
相关标签
  

闽ICP备14008679号