【windows10】自定义数据集训练yolact实例分割

序言

在实例分割中,比较出名的是mask RCNN,尽管精度很高,但是因为基于二阶段,速度比较慢,达不到实时性要求,所以提出了Yolact实例分割算法,使得实例分割能够达到实时性,并且有着不错的精度,如果在项目中,对于一些比较简单的数据集而言,yolact是完全可以胜任的,而且速度很快,相对于mask rcnn而言,yolact除了速度快以外,在一定程度上,实例分割结果&掩码质量要优于mask rcnn,这得益于较大的mask尺寸和没有特征repooling带来的信息损失。如果你项目需要的用到实例分割,不妨试一试yolact。
在这里插入图片描述

一、开发环境

  • windows10
  • pytorch1.2
  • pychram
  • python3.7
  • GTX 2070

我使用的代码是这个yolact_mini,首先将代码下载到本地并解压,安装所需要的依赖,缺什么装什么就好了。

注意:之前的代码仓库被更新了,代码结构发生了变化,新的训练步骤也发生了变化,但是配置的流程应该是差不多的,可结合hub中的训练说明进行配置,本文过程权当参考。

原始仓库更新了,好多同学私信我要以前格式的代码,刚好百度云上还有,把链接分享出来自己下载吧。

链接: https://pan.baidu.com/s/1NrUm3sE3C7fSoqs6SK089A 密码: 16dm

将作者提供的预训练权重下载下来,这里作者提供了百度云,当然本人也整理好了,可以直接点击这里保存下载:

链接: yolact权重百度云
提取码:ld21
在这里插入图片描述
下载下来后在程序中创建一个weights文件夹,将预训练权重存到里面:
在这里插入图片描述
整个文件夹目录如下,这里的images文件夹是存放用于测试的图片,results文件夹存放的是测试后保存的图片,tersorboard_log是记录训练过程日志文件,test.py是我写的无关脚本,这几个都可以先不用管。

二、制作数据集

数据集的制作使用的是labelme,这里怎么安装和使用就不再描述了,这里介绍一下标注需要注意的几个点:

  1. 同一张图片中如果有多个同类物体的实例目标,应该在实例标签后添加“-1,-2,-3…”等,例如:
    在这里插入图片描述
    上图中有两个person实例,所以应该用-1,-2区分,如果只有一个,比如dog,可以不添加区分。

  2. 标注完后,会在文件夹中生成对应的json文件,然后我们需要将每个图片json转换为coco格式,首先创建一个label.txt,内容如下,其中后面四个为自己的实例分割目标,前面两个是必须的,不可以删掉,只需修改添加自己的实例目标即可:
    在这里插入图片描述

  3. 在pycharm自带的终端中运行labelme2coco.py文件,命令如下:

python utils/labelme2coco.py your-image-and-labelme-json-path your-expected-output-folder --labels the-path-of-labels.txt

其中:

  • your-image-and-labelme-json-path :是你刚才标注好的json文件和图片的文件夹;
  • your-expected-output-folder :是你要输出的数据集保存的文件夹;
  • the-path-of-labels.txt : 是你刚才写的label.txt文件。

作为参考,我的命令行格式为:

python utils/labelme2coco.py G:\fapiao\json_train G:\fapiao\coco_trian_image --labels G:\fapiao\label.txt
python utils/labelme2coco.py G:\fapiao\json_val G:\fapiao\coco_val_image --labels G:\fapiao\label.txt

这里要注意的是,因为要划分训练集和验证集,所以我是分开运行的,验证集也需要另外生成。
最后得到两个文件夹:G:\fapiao\coco_trian_image、G:\fapiao\coco_val_image,然后同级目录下新建另一个文件夹:json_to_coco,把这两个文件夹内的内容复制到这个文件夹中,最后得到:
在这里插入图片描述
因为会有冲突,两个annotations名字做了修改,得到train和val,JPEGImages里面存放的是所有训练要用到的图片。

数据集制作完成,记住这个地址,一会要用到:

G:\fapiao\json_to_coco

三、修改配置

要用自己数据集训练,还需要做以下几个修改:

  1. 修改data\config.py文件,把作者的注释掉,修改成自己数据集,如果你的目标只有一类的话,需要在后面添加一个“,”区分开,例如(“dog”,),否则程序会将d,o,g三个字母作为你的实例目标,得到的分类是错误的,如果是多类则可以不用管;
    在这里插入图片描述
    在这里插入图片描述
  2. 然后同文件下修改数据集配置,把刚才制作好的数据集地址填进去,将作者的注释掉或者删掉:
    在这里插入图片描述
  3. 最后再修改res50_custom_config/res101_custom_config,可以自定义迭代轮次和优化区间,这里你用哪个就修改哪个,因为我两个(res50、res101)都跑过了,所以都做了修改:
    在这里插入图片描述
    这里需要说明的是,程序中没有提供轮次的修改,可根据最大迭代次数进行计算。比如我的数据集只有2000张左右,批次给的是4,我设置了25000,大概迭代轮次为50轮,可以根据自己数据集数量依次类推设置,lr_steps是学习率衰减区间,也可以根据自己设置的最大迭代次数进行设置。至此,配置也修改完成了。

四、开始训练

在pychram终端中输入:python train.py --config=res50_custom_config --batch_size 4
在这里插入图片描述
成功开始训练会出现以下信息:
在这里插入图片描述
默认迭代10000次会保存一次模型,可以在传参时进行修改。如果训练中断可以使用–resume进行恢复训练:

python train.py --config=res50_custom_config --batch_size 4 --resume (最后一次保存的权重地址)

训练结束后会输出评估的结果,权重保存在weights文件夹中:
在这里插入图片描述

五、demo测试

需要新建一个文件夹images,将需要测试的图片放在文件夹中,就如我前面介绍的目录结构那样。

在测试部分,我修改了以下程序,使得处理后的图片可以按照我如下展示的格式输出,如果不修改的话好像是无法将处理后的图片保存的:

  1. 对utils/output_utils.py的draw_img()函数做了以下修改,输出mask图(.png):
    在这里插入图片描述
  2. 在detect.py中,修改保存:
    在这里插入图片描述

修改完后,然后运行:

python detect.py --trained_model=best_32.2_res50_custom_20000.pth --image images

得到的结果会输出到results/images文件夹中,总体来说,效果还是不错的:
在这里插入图片描述
在这里插入图片描述

六、可能出现的问题:

在训练过程中遇到最多的问题还是显存爆掉和多进程加载数据集时意外退出的问题,显存爆的问题解决方法是将批次调小;多进程读取意外退出有可能是因为你电脑开了多个应用程序,导致进程被占用,需要把其他程序关掉。还有就是检查自己的数据集图片像素是不是太大,如果数据集像素普遍太大的话CPU在加载数据的时候也会报错,就比如我最开始用的是手机拍照的图片(4000*3000的像素)进行训练,没训练几个轮次就报错意外退出了,后来是将图片缩小了一倍再送入程序中训练才得以解决。

如果在训练过程中提示加载数据集时进程错误,可以把加载数据集代码(train.py文件大概133行)那里的8个进程改了1个,此方法对上述意外退出的问题也有效。
在这里插入图片描述
上面都是一些比较普遍的问题,还有一些代码上运行的小问题博主也记得不是太清楚了,如果不是意外退出的可以试着自己排查。

整体训练过程大致就这些,如果博主表述的不是很明确的话可以结合作者提供的README.md文件一起看,相信对你的理解会更有帮助。

  • 11
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
在PyCharm中使用自定义数据集训练YOLOv8模型,可以按照以下步骤进行操作: 1. 首先,确保你已经安装了PyCharm,并设置好了你的Python环境。 2. 准备自定义数据集。按照YOLOv8的要求,将数据集按照一定的格式存放,并将XML文件转换成YOLO系列标准读取的TXT文件。 3. 修改数据加载配置文件。根据你的数据集和模型需求,修改YOLOv8的数据加载配置文件,设置类别数量、数据集路径等参数。 4. 创建一个新的PyCharm项目,并将YOLOv8的源代码导入到项目中。 5. 在PyCharm中使用命令行方式训练YOLOv8模型。通过运行命令行代码,指定任务为detect,模式为train,模型为yolov8n.pt,附带其他参数来进行训练。 6. 等待训练完成。训练时间可能会比较长,取决于你的数据集规模和硬件设备性能。 以上是使用PyCharm自定义数据集训练YOLOv8模型的基本步骤。你可以根据需要进行调参和优化。具体的详细操作可以参考YOLOv8的官方文档和相关教程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [YOLOv8教程系列:一、使用自定义数据集训练YOLOv8模型(详细版教程,你只看一篇->调参攻略),包含环境...](https://blog.csdn.net/weixin_45921929/article/details/128673338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值