mmdetection之HybridTaskCascade训练自己的数据

前言

mmdetection是商汤科技开源的open-mmlab之一,在mmdetection中提供了非常多的网络架构,除了YOLO,而我所使用的是HTC——HybridTaskCascade,其准确率相较于mask rcnn有较大的提高。现在我们来看看如何跑自己的HTC。

开始

1.安装open-mmlab环境,

具体安装过程请移步其他博主的博客或者知乎,我安装的时候参考的知乎,非常详细,强调一点,在安装对应版本的pytorch的时候记得打开官方页面查看对应的命令。参考测试指令,确定可以运行demo。

2.准备数据集。参考本人的博客。

labelme格式转换coco2017格式数据(for HTC)
将数据集按照以下格式放在mmdetection目录下:

在这里插入图片描述
先忽略annotations下面的class_two_json_label_num_4和coco_class.py,这是我自己因为数据集问题改了一些内容。

3.选择框架。

在mmdetection/configs/htc目录下,选取自己想要的框架,可见其中有一个without sem(不使用语义分割)版本,这个版本的框架不需要上一篇博客提到的stuffthingmap。而其他的版本则是含有语义分割版本的,需要stuff文件。这点要注意。如图:
Alt
(其中绿色的是我自己添加的,因为我不需要语义分割,而给出的不需要语义分割的版本其backbone为resnet50,所以我更改了部分模型,整了一个without sem而backbone为resnet101的版本)

4.使用中需要改的参数

1>model setting中的num_class改成自己数据集的class数目(此处含有background)
2>打开mmdet/datasets/init.py,更改如图
在这里插入图片描述
在最后加上MyDataset。
打开mmdet/datasets/my_dataset.py
在classes中的内容改成自己的训练集的label,并且使其顺序与annotations.json中id对应,此处的classes不要加background这一项
3>回到configs对应的文件(我的htc配置)中,找到代码dataset settings,
from

dataset_type = ‘CocoDataset’

to

dataset_type = ‘MyDataset’

官方说明了,可以使用这样的方式,且支持coco类的接口。
如果你的训练完成后发现自己的mask标的很准确,但是label却根本没见过,很有可能是2、3步没有完成,请自行检查
4>configs文件下面的训练集路径自行修改
5>如果使用一块GPU训练记得修改学习率,亲身经历了梯度爆炸,把lr从0.02改成0.01就还不错。
6>第239行取消注释 就会保存tfbroad文件
7>在你第一次运行的时候他会自己去下载一些必要的模型参数,如果connect失败,多试几次就好了。
8>checkpoints中用来存放自己从model zoo中下载的权重模型,可以拿来inference
如果还有其他的问题可以去看看github issue中的内容,里面的管理员太负责了!!你会惊讶的发现,一共383个问题,HTC相关的不少。

补充

由于我使用的是labelme,我的训练集中一张图片有多个同类的物体,也就是标注中存在mouse1、mouse2,而我需要把mouse归为一类。所以我直接在annotations.json文件中修改了每张图片的id,所有class的id是从0开始的。并且把json文件最后的内容也进行了修改。如果你也存在这个问题,别忘了返回头去看看步骤4。
如果遇到了内存溢出,把img_per_gpu改成1吧,还有可能是图片尺寸过大导致了内存溢出。
如果你遇到了c10:error(悔恨没有截图)大概是这样的报错,那很有可能是你的class_num设置错误,和自己的数据集或者数据集格式冲突,我就遇到了这个问题。

开始训练

如果这些你都准备完了,那你可以准备开始训练了,打开终端,输入

python tools/train.py configs文件 --work_dir workfile文件

比如我这里

python tools/train.py configs/htc/htc_without_semantic_x101_64x4d_fpn_20e_16gpu.py --work_dir workfile

具体还有其他的可选参数,关注train.py中arg操作吧
到这一步,如果运气好的话,就开始训练了
在这里插入图片描述

inference


```python
from mmdet.apis import init_detector, inference_detector, show_result
import mmcv

config_file = '/home/ubuntu/mmdetection/configs/htc/htc_without_semantic_x101_64x4d_fpn_20e_16gpu.py'
checkpoint_file = '/home/ubuntu/mmdetection/workfile/epoch_20.pth'

# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cuda:0')

# test a single image and show the results
img = '394.jpg'  # or img = mmcv.imread(img), which will only load it once
result = inference_detector(model, img)
# visualize the results in a new window
show_result(img, result, model.CLASSES)
# or save the visualization results to image files
show_result(img, result, model.CLASSES, out_file='result.jpg')
希望小伙伴们的模型跑起来了~
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mmdetection3是一个基于PyTorch的开源目标检测工具包,它提供了丰富的目标检测算法和模型,可以用于训练和测试自己的数据集。下面是使用mmdetection3训练自己的数据集的一般步骤: 1. 数据准备:首先,你需要准备自己的数据集。这包括标注每个图像中的目标位置和类别信息。通常,你需要将数据集划分为训练集和验证集,并将它们组织成特定的文件夹结构。 2. 配置模型:接下来,你需要选择适合你的任务的模型,并配置相应的参数。mmdetection3提供了多种预训练模型,如Faster R-CNN、Mask R-CNN等。你可以根据自己的需求选择合适的模型,并在配置文件中进行相应的修改。 3. 数据预处理:在训练之前,你需要对数据进行预处理。这包括图像的缩放、裁剪、归一化等操作。mmdetection3提供了一些常用的数据增强方法,如随机翻转、随机旋转等,可以在配置文件中进行设置。 4. 训练模型:一切准备就绪后,你可以开始训练模型了。使用mmdetection3提供的训练命令,指定配置文件和其他参数,即可开始训练训练过程中,模型会根据配置文件中的设置进行迭代优化,直到达到指定的停止条件。 5. 模型评估:训练完成后,你可以使用验证集对模型进行评估。mmdetection3提供了评估命令,可以计算模型在验证集上的精度、召回率等指标。 6. 模型推理:最后,你可以使用训练好的模型对新的图像进行目标检测。mmdetection3提供了推理命令,可以加载训练好的模型,并对输入图像进行目标检测。 希望以上介绍对你有帮助!如果你有任何进一步的问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值