【实例分割yolact++】从头训练自己的yolact++模型

news/2024/7/3 12:27:25 标签: pytorch, 深度学习, yolact++, labelme, 实例分割

目录

  • 0.前言
  • 1.整个流程
  • 2.具体过程
    • 2.1 下载Github上的项目
    • 2.2 使用labelme打标签
      • 2.2.1 安装labelme
      • 2.2.2 如何标注
    • 2.3 制作COCO格式的数据集
    • 2.4 改data/config.py文件
    • 2.5 开始训练
    • 2.6 检测模型
  • 3.总结

0.前言

最近需要做一个实例分割的任务,接触到了yolact++。也是刚开始学习,只会用不知道内部啥原理,等需要的时候再去看吧。

先说点儿不相关但比较重要的:计算机视觉中有几大任务(有说四大的有说五大的,但其实大类就那么几种),图片分类目标检测实例分割等(还有图片定位、语义分割等,但我感觉差不太多(只是从应用的角度来看)),之前做过图片分类(用的VGG16做的迁移学习)和目标检测(yolov5),这是我第一次接触到实例分割(yolact++),还挺有意思的。给我的感觉就像在PR里面抠图。

关于计算机视觉几大任务的介绍

1.整个流程

我们先对整个流程做一说明,然后再具体说每一步怎么做。整个流程为:

(1)下载Github上的项目
(2)使用labelme打标签
(3)制作COCO格式的数据集
(4)改data/config.py文件
(5)开始训练
(6)测试

其实整个流程真的挺简单的。

2.具体过程

2.1 下载Github上的项目

GitHub上的项目地址在这里:GitHub yolact++
直接下载下来就好,不过我还是建议你下载我这里放的项目,因为这个项目已经下载好了官方之前训练好的模型文件,也对config.py文件进行了相应的修改,只需要进行简单的操作就能训练模型了。当然你直接下载GitHub上的一步步改也没问题。
链接:https://pan.baidu.com/s/1caQjPLKFiw9H6QUocTactg
提取码:syh1

资源来源于B站UP主:小鸡炖技术
资源来源-B站UP主-小鸡炖技术

下载并解压后发现里面有两个文件:cocoapi和yolact-master
在这里插入图片描述
这里还是建议用conda创建虚拟环境,没conda的去安装个Anaconda吧。

(1)创建虚拟环境yolact

conda create -n yolact python=3.7
conda activate yolact

(2)安装需要的依赖库

conda install pytorch torchvision cudatoolkit=10.0 
pip install cython opencv-python pillow  matplotlib 

pip安装失败的可以换清华镜像试试:

pip install cython opencv-python pillow  matplotlib  -i https://pypi.tuna.tsinghua.edu.cn/simple/

(3)进入cocoapi/PythonAPI文件夹并安装

cd cocoapi/PythonAPI
python setup.py build_ext install

(4)进入external/DCNv2文件夹并安装

cd external/DCNv2
python setup.py build develop

cd后面的路径根据你的来改。
按上面的步骤准备好后应该就没什么问题了,测试下环境是否弄好了:

python eval.py --trained_model=weights/yolact_plus_resnet50_54_800000.pth --score_threshold=0.15 --top_k=15 --image=test.jpg

出现下面的结果说明弄好了:
在这里插入图片描述

否则说明某一步有错,自己好好检查下,可以跟着B站的视频仔细检查,或者自行百度。B站视频-小鸡炖技术

labelme_76">2.2 使用labelme打标签

之前训练yolov5的时候用过labelimg来打标签,当时觉得一个矩形一个矩形画太痛苦了,直到我用了labelme,居然要用多边形把目标一个一个抠出来!啊不过你也确实没有更好的办法了。倒是没什么难度,就是体力活。labelme的界面跟labelimg长得差不多:

这是labelimg的界面:
在这里插入图片描述
这是labelme的界面,也就是咱们一会儿要用的标注工具:
在这里插入图片描述

labelme_84">2.2.1 安装labelme

安装我是参考的B站这个UP主来的,说得特别详细。他是用conda新建了虚拟环境,不过不用虚拟环境倒是也没啥问题。

B站-如何安装并使用labelme

2.2.2 如何标注

在标注前我们先看下yolact-master\data\coco文件夹下面有什么:
在这里插入图片描述
每个文件夹下放什么下面说:

视频里对于labelme的使用也介绍得很详细,其实就是用一个个的点把你的目标给描出来。具体操作如下:
(1)准备好你的数据集,把你的数据集分成两份,一份放在yolact-master\data\coco\train2014文件下,作为训练集,一份放在yolact-master\data\coco\val2014文件夹下,作为测试集。

(2)打开lebelme工具,对两个文件夹下的图片分别进行标注,生成的.json文件直接放在相应文件夹里就行,最后的yolact-master\data\coco\train2014文件夹下长这样:
在这里插入图片描述

2.3 制作COCO格式的数据集

我们需要把2.2中标注好的数据集转换成COCO格式的,这样才能训练。其实转换方法很简单:

(1)先激活之前创建好的yolact虚拟环境(如果已经激活就不用管了):

conda activate yolact

在这里插入图片描述
(2)cd到train2014文件夹下:
比如我的命令是:

E:
cd E:\0_postgraduate\yolact_tutorials\yolact-master\data\coco\train2014

(3)然后直接运行labelme2coco.py就行

python labelme2coco.py

这里应该会提醒你缺少相应的库,用pip安装就行,要是速度慢就像前面说的那样换成清华镜像。成功运行后会得到instances_train2014.json文件。

同样的步骤,cd到val2014文件夹下,然后运行labelme2coco.py得到instances_val2014.json文件。

(4)将得到的instances_train2014.json和instances_val2014.json文件移动到annotations文件夹下,像下面这样:
在这里插入图片描述

最后可以放一些要检测的图片在test2014文件夹下。

至此,COOC格式的数据集就准备好了。

2.4 改data/config.py文件

在训练前我们需要对yolact-master/data/config.py进行修改,具体只用改两处:
第一处(159行):
在这里插入图片描述
把class_names里面的类别改成与你的数据集对应的。这里注意,如果只有一类的话需要像我一样加个","。

第二处(820行):
在这里插入图片描述
这里修改max_iter,即你的最大迭代次数。

2.5 开始训练

cd到yolact-master文件夹下,运行下面的命令

python train.py  --config=yolact_coco_custom_config --resume=weights/yolact_plus_resnet50_54_800000.pth --only_last_layer --batch_size 2

这里使用的迁移学习(因为数据集较少),–resume后面跟的是基模型,这里已经下载好了不用管,–only_last_layer 意思是只训练模型的最后一层,所以速度很快,也不会占用太多内存。(我的1050,8G内存还能训练呢)。–batch_size是设定每次训练的batch,默认是8,如果报错可以改小点,我改成2就可以了。

训练可能会提前结束,等训练好之后就会在yolact-master\output文件夹下面得到你的训练模型,比如我的是这样:
在这里插入图片描述
至此,训练模型结束。

2.6 检测模型

最后对模型进行检测,我们找一些图片放在yolact-master\data\coco\test2014文件夹下,然后使用命令:

python eval.py --trained_model=weights/这里是你训练得到的.pth模型 --score_threshold=0.15 --top_k=15 --images=这里是你放的测试数据地址:这里是你希望输出结果的位置

比如对于我来讲,命令为:

python eval.py --trained_model=output/yolact_coco_custom_39_400.pth --score_threshold=0.15 --top_k=15 --images=data\coco\test2014:results

测试结果如下:
在这里插入图片描述
在这里插入图片描述
还不错吧,毕竟我的训练集也就20多张图片。

想检测视频的话GItHub上也有说怎么做:
GitHub官网方法

3.总结

整个过程不算特别复杂,但还是那句话,不要奢望只看一篇博客就能解决自己的所有问题。我能保证大体过程没问题,但具体遇到的细节问题肯定每个人都不一样,所以遇到细节问题还是要多百度解决。祝你成功:)


http://www.niftyadmin.cn/n/1084624.html

相关文章

AKA “Project” Milestone

Homework 6 (60 points)Due Thursday, April 25th at 11:59pm (via blackboard) AKA “Project” Milestone #2 In this assignment, we’re taking the raw data we obtained from HW5, and we’re building a datamodel for this. This can be anything you like (for exampl…

【保研纪念】

保研这条路终于结束了,最后的去向是吉大。挺好的,对我来说已经满足了,毕竟我两年前的目标就是上一所中等985。人若是总不能满足,也就总无法获得真正的快乐和安宁,变成欲望的奴隶。 有很多话想说,觉得有必…

UGUI中粒子特效与UI的遮挡问题

问题背景: 在做主线任务时发现完成任务后的特效显示穿透上面的UI层,不美观,策划不乐意了,抓紧解决下 解决思路: 首先讲下影响渲染顺序的因素: 能够影响渲染顺序的因素有:1、Camera Depth 相…

小游戏体验——测试王者荣耀的英雄人物

小游戏体验——测试王者荣耀的英雄人物 代码如下: 转载于:https://www.cnblogs.com/sherryStudy/p/hreo_play.html

in和exists

exists和in的使用方式: #对B查询涉及id,使用索引,故B表效率高,可用大表 -->外小内大select * from A where exists (select * from B where A.idB.id);#对A查询涉及id,使用索引,故A表效率高,…

跟我一起走进WPF的世界之一学了WPF能做什么?

我们先说WPF出现的目的,一门技术出现不是凭空出现的,一定是有目的的,一定是为了解决一种问题而应运而生的。 WPF咱们先从它的全称去字面上理解它的含义,Windows Presentation(图像) Foundation(…

ELK:kibana使用的lucene查询语法

https://segmentfault.com/a/1190000002972420 kibana在ELK阵营中用来查询展示数据elasticsearch构建在Lucene之上,过滤器语法和Lucene相同 kibana官方演示页面 全文搜索 在搜索栏输入login,会返回所有字段值中包含login的文档 使用双引号包起来作为一个…