mmdetectionV2.x版本 训练自己的VOC数据集

mmdetectionV2.x版本 训练自己的VOC数据集


1 首先根据规范的VOC数据集导入到项目目录下,如下图所示:

mmdetection
----mmdet
----tools
----configs
----data
--------VOCdevkit
------------VOC2007
--------------- Annotations
---------------- JPEGImages
---------------- ImageSets
------------------------ Main
---------------------------- test.txt
---------------------------- trainval.txt
---------------------------- val.txt
---------------------------- test.txt

先在mmdetection目录下依次创建data、VOCdevkit、VOC2007文件夹,嵌套关系如上,再在VOC2007文件夹下按VOC格式存放自己的数据集(Annotation存放检测框信息、JPEGImages存放要检测的图片,这两个文件夹的名字一定不能修改),ImageSets是放txt文件,可以修改名字,但是初次使用建议规范格式

2 修改配置文件

2.1 配置检测类别

mmdet/datasets/voc.py
在这里插入图片描述

2.2 配置图片格式

mmdet/datasets/xml_style.py
在这里插入图片描述

如果图片是jpg则改成jpg,是png格式就改成png

2.3 (非必要的步骤)针对标注文件 .xml的没有 <difficult> 标签的情况

(这一步并非必要,可以先跳过,完成所有步骤训练若报错:AttributeError: ‘NoneType‘ object has no attribute ‘text‘,再回来加上这一步)

报错原因:标注文件 .xml的<object>没有<difficult>的标签。difficlut表明这个待检测目标很难识别,有可能是虽然视觉上很清楚,但是没有上下文的话还是很难确认它属于哪个分类;标为difficult的目标在测试成绩的评估中一般会被忽略,下面举一个例子:
示例

2种解决方法:

1、可以查找.xml标注文件,把没有difficlut标签的补上。
2、由于我的标签数据非常多,所有都添加上difficult的话非常耗时。如果数据没有特别难分的类别,可以忽略这个标签,在代码里把difficlut置为1,具体操作如下:打开mmdet/datasets/xml_style.py,将difficult=int(obj.find(‘difficult’).text)改为如下代码:

    if obj.find('difficult'):
​         difficult = int(obj.find('difficult').text)
​      else:
​        difficult = 0

在这里插入图片描述

参考链接:https://blog.csdn.net/u014479551/article/details/107377992/

3 用自己的VOC数据集训练mmdetection中的faster_rcnn

这里以faster_rcnn 网络为例介绍如何使用mmdetection训练自己的VOC数据集

3.1 faster_rcnn 配置文件介绍

faster_rcnn 基本配置文件位置:mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py ,打开如下图所示:
在这里插入图片描述
会发现这里只是引入了_base_文件夹中的几个文件,这里简单介绍下:

  •  faster_rcnn_r50_fpn.py 包含了具体的模型配置
  •  coco_detection.py 表示的是COCO格式数据集的相关配置
  •  schedule_1x.py和default_runtime.py 包含训练相关数据

其实我们在mmdetection的configs文件夹中会看到许多类似的模型配置文件。之所以这样写,是为了简化代码的耦合性,简单来说就是,很多相同的配置我直接写入一个py文件每次import就可以了呀。初次学习不需要去完全弄懂,先跑通一个代码。等你多跑了几个模型,大概就明白为什么这样写了。

3.1.1 为了跑voc数据集我们需要将coco配置文件替换成voc配置文件,如下图所示:

在这里插入图片描述

接着我们需要分别修改将 num_classes 改为自己的类别数(有的博客用的mmdetection由于版本问题是类别数+1,这里用的版本是2.x,num_classes是类别数)

3.1.2 接着依次修改上图中的几个文件

1、首先,修改模型配置文件,根据上图中fast_rcnn_r50_fpn_1x.py中的路径(如下图)找到该文件位置,将所有的 num_classes 变量改为自己分类的类别数(有的博客用的mmdetection由于版本问题是类别数+1(表示背景),这里用的版本是2.x,num_classes就是类别数,比如我是四分类,那么这里就将所有的num_classes变量改为4)
…/base/models/faster_rcnn_r50_fpn.py
在这里插入图片描述

2、修改数据集配置文件,主要是填入你的数据集的路径,该文件在

  • …/base/datasets/voc0712.py
    在这里插入图片描述

可以关注一下这句代码,不用修改,可以理解步骤一中为什么数据要放在 data/VOCdevkit/下,之所以命名为VOC2007也是为了后续修改方便

修改你的data_root
在这里插入图片描述

修改data下的train、val、test中的ann_file的路径(txt文件的路径)和img_prefix的路径(图片的路径)
在这里插入图片描述

在这里插入图片描述

如图可见,路径中并未提及Annotations和JPEGImages这两个文件夹,img_prefix只指明了数据集的根目录’VOC2007’,说明在其他代码中会自动在img_prefix提供的路径后面自动添加Annotations和JPEGImages来搜索相应的检测框信息和图片,这也就是为什么步骤一中不能修改Annotations、JPEGImages名字的原因。ImageSets无所谓,这只是存放txt文件的文件夹,如果改成别的名字或路径,只要修改上面两图中的橙色框内的ann_file所指路径即可。

这里因为我是train和test数据集分开存放,所以路径和标准路径稍微有点不同,但是无论是train还是test都有各自的Annotations和JPEGImages这两个文件夹,这一点一定不能变。

4 修改mmdetection/mmdet/core/evaluation目录下class_names.py

这个类名的修改是用于模型测试的时候,如果不加修改,相当于训练的时候用的是正确的类,但是测试的时候显示的还是默认的类名。
在这里插入图片描述

重要:修改完 class_names.py 和 voc.py 之后一定要重新编译代码(运行python setup.py install),再进行之后的训练,否则验证输出仍然为VOC的类别,且训练过程中指标异常。建议以后修改完mmdetec这个文件夹中的任何文件,都运行一下上面这个命令,养成习惯。

参考链接:https://www.it610.com/article/1294190526756626432.htm

5 训练

5.1 训练很简单,利用官方文档给出的命令:

python tools/train.py ${CONFIG_FILE}

{CONFIG_FILE}就是你要跑的网络的配置文件,下面举两个例子

  • 用faster_rcnn网络训练:
    python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py
    
  • 用ssd训练:
    python tools/train.py configs/pascal_voc/ssd512_voc.py
    

5.2 更改训练好的模型的存放目录

mmdetection会将训练过程中生成的log文件和模型文件默认放在mmdetection/work-dir目录下,若要指定目录,可以使用work-dir参数,只需在训练命令后面加入 --work-dir ${YOUR_WORK_DIR}

例如:

python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py --work-dir my_workspace/

其他的参数、指令可以多看看github上面mmdetection的官方文档。


本文为原创文章,如需转载,请注明出处
如果有帮助到你的话,点个赞再走呀~

  • 38
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
要使用PyTorch中的Faster R-CNN训练自己的数据集,你需要以下步骤: 1. 准备数据集:首先准备自己的数据集,包括图像和相应的标注信息。标注信息可以使用类似于PASCAL VOC或COCO的标注格式,其中包含每个图像中物体的边界框和类别。 2. 数据预处理:对于数据预处理,你可能需要对图像进行缩放、裁剪、归一化等操作,以确保它们与模型的输入要求相匹配。同时,还需要将标注信息转换成模型所需的格式。 3. 构建数据集类:创建一个自定义数据集类,继承PyTorch的Dataset类,并实现__getitem__和__len__方法。__getitem__方法应当返回图像和标注信息的元组,同时根据需要进行必要的转换。 4. 定义模型:使用PyTorch中的torchvision.models中的Faster R-CNN模型作为基础,将其实例化为一个对象。你可以选择是否使用预训练的模型权重,以加快训练过程。 5. 设置训练参数:通过定义优化器、学习率调度器以及损失函数等来设置训练的参数。常用的优化器是SGD和Adam,并且可以使用不同的学习率调度器来动态调整学习率。 6. 训练模型:使用准备好的数据集、模型和训练参数来进行训练。在每个epoch中,循环遍历数据集并使用模型进行前向传播和反向传播,最后更新模型的权重。 7. 评估和测试模型:训练完成后,可以使用测试集或验证集对模型进行评估。评估指标可以包括准确率、召回率、平均精确度等。你可以根据需要进行必要的调整和优化。 8. 模型保存和使用:将训练好的模型保存为.pth文件,以便以后使用。你可以加载模型并在新的图像上进行预测,以获得目标检测的结果。 以上是使用PyTorch中的Faster R-CNN训练自己的数据集的大致步骤。根据具体的需求,你可能还需要进行其他的调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值