【mmdetection】SSD训练自己的VOC数据集注意事项

该教程详细介绍了如何修改MMDetection框架中的VOC.py和class_names.py以适应自定义数据集,包括重新编译、配置文件修改(如修改SSD配置、数据处理、模型结构、优化器和学习率策略),以及训练和测试命令行的使用。重点在于理解并调整配置文件以匹配个人数据集的类别数量和尺寸需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、修改voc.py和class_names.py

 ./mmdet/datasets/voc.py 

此处代码改为自己数据集的类别,以及./mmdet/core/evaluation/class_names.py

也需要将类别改为自己的数据集的类别。

【注意】修改完voc.py和class_names.py之后,需要重新编译一下,cd进入mmdetection文件夹,输入

python setup.py install

至此,适合自己的voc数据集格式修改好了。

二、修改配置文件config

 config文件夹中主要有_base_和各个目标检测框架的文件夹。

2.1、修改目标检测框架代码

在训练以及测试时使用的是对应目标检测框架下的程序,以SSD为例,如下图所示:

 先复制一份代码,比如ssd300_coco.py,并按照自己的习惯命名即可。

进入代码,可以将除了_base_的部分都删去,这度利配置文件的补充,因为原代码里用的coco格式的,所以最后注释掉,并且 '../_base_/datasets/coco_detection.py'改为'../_base_/datasets/voc0712.py’,schedule_1x.py和default_runtime.py在此处不用修改,修改源文件。

可得结果为:

_base_ = [
    '../_base_/models/ssd300_myself.py', '../_base_/datasets/voc0712.py',
    '../_base_/schedules/schedule_2x.py', '../_base_/default_runtime.py'

关于这四个文件的修改在2.2中讲解。

2.2、修改_base_内的文件

_base_的目录如下所示:

 分别对应了2.1中的四个文件。

2.2.1、datasets

datasets为数据处理的部分,本处使用的是voc数据集,故打开voc0712.py。在train_pipeline = [ ]和test_pipeline=[ ]字典中,修改Resize,改为如下:

dict(type='Resize', img_scale=(300, 300), keep_ratio=False)

img_scale=(300,300),keep_ratio=False否则在计算时会有报错,因为SSD是和输入图片尺寸有关系的框架。

2.2.2 、models

复制一个ssd.py重新命名,将num_class改为自己数据集的个数,如:

bbox_head=dict(
        type='SSDHead',
        in_channels=(512, 1024, 512, 256, 256, 256),
        num_classes=3,     # 此处为类别数

2.2.3、schedules

此文件夹为优化器和学习率的策略,根据自身需要修改即可。

2.2.4、default_runtime.py

这是默认的一些设置,如运行记录log等的格式,可以使用tensorboard,dict(type='TensorboardLoggerHook'),这一行取消注释即可。

值得一提的是,下面的代码为保存的.pth文件的间隔,根据需要进行修改。

checkpoint_config = dict(interval=10)    # 设置保存的间隔

三、训练与测试

训练命令行:

python ./tools/train.py configs/ssd/ssd300_myself.py --work-dir work_dirs/ssd300_myself

--work-dir参数为运行文件保存的位置

测试命令行:

python ./tools/test.py configs/ssd/ssd300_myself.py work_dirs/ssd300_myself/latest.pth --eval mAP

--eval mAP是评价标准为mAP。

<think>好的,用户现在问的是在数据收集之后下一步应该做什么。根据之前的对话,用户是在处理中国象棋棋子的文字识别,已经完成了数据收集,现在需要继续后续步骤。 首先,我需要回顾之前的回答。用户之前问的是目标检测方法的具体步骤,我给出的第一步是构建高质量标注数据集,包括数据采集、标注和数据增强。现在用户已经收集了数据,接下来应该进入数据预处理和标注阶段。 用户现在可能想知道数据收集后的具体步骤,所以需要明确接下来的流程。根据机器学习的标准流程,数据收集之后通常是数据预处理、标注、数据增强,然后是模型选择和训练。但用户已经提到了数据收集,所以可能已经完成了数据采集,但可能还没有进行标注和数据增强。不过根据用户的问题,他们可能已经完成了数据收集,现在需要知道接下来的步骤。 不过,用户的问题可能是在数据收集之后,也就是数据已经采集好了,接下来是数据标注?或者可能已经标注好了?需要根据上下文判断。在之前的回答中,第一步包括数据采集、标注和数据增强,所以用户现在可能已经收集了数据,但还没标注,所以下一步应该是标注数据? 不过用户的问题可能更广泛,需要分步骤说明。通常,数据收集之后的步骤包括数据预处理、数据标注、数据划分(训练集、验证集、测试集),然后进行模型选择和训练。 但根据之前的对话,用户提到使用SSD算法,所以可能需要特定的数据预处理步骤,比如调整图像大小,归一化等。此外,数据增强可能也是重要的一步,尤其是在数据量不足的情况下。 另外,用户的问题是关于中国象棋棋子识别,所以可能需要考虑棋子的颜色(红黑双方)、方向(比如侧视时的文字旋转),以及不同棋子的类别平衡。 因此,正确的步骤应该是: 1. 数据预处理:包括调整图像尺寸、归一化、颜色空间转换等。 2. 数据标注:如果还没有标注的话,需要标注每个棋子的位置和类别。 3. 数据增强:应用各种增强技术来增加数据多样性。 4. 数据划分:将数据分为训练集、验证集和测试集。 5. 模型选择和配置:选择SSD模型,并根据数据集调整参数。 6. 模型训练:使用训练集进行训练,并监控验证集的性能。 7. 模型评估和调优:在测试集上评估模型,并进行必要的调整。 不过用户可能已经知道这些步骤,但需要具体的操作步骤,特别是针对他们的项目。根据用户之前的问题,他们可能已经完成了数据收集,现在需要知道接下来的具体步骤,所以重点应该放在数据预处理、标注、增强和划分上。 另外,需要考虑到之前提到的SSD的多尺度检测特性,因此在数据预处理时可能需要调整图像到特定的尺寸,比如300x300,以适配SSD的输入要求。同时,数据增强的方法需要符合棋盘的实际情况,比如透视变换、旋转、噪声添加等,以提高模型的鲁棒性。 在数据标注方面,需要确保每个棋子的边界框准确,并且正确标记类别和颜色(红黑),以及可能的文字方向。标注的格式也需要符合模型输入的要求,比如COCO或VOC格式。 之后,数据划分是必要的,以确保模型不会过拟合并能泛化到新数据。通常按照70%训练,20%验证,10%测试的比例划分。 然后,模型配置阶段需要选择适合的SSD配置,比如使用预训练的模型权重,调整anchor boxes的大小和比例,以匹配棋子的尺寸和形状。 训练过程中需要选择合适的损失函数(如SSD的MultiBox Loss),优化器(如SGD或Adam),学习率调度等,并进行训练监控,使用验证集来调整超参数,防止过拟合。 最后,模型评估需要计算准确率、召回率、mAP等指标,测试模型在不同场景下的表现,并进行错误分析,针对性地优化模型或数据。 综上所述,用户的问题是在数据收集之后应该进行哪些步骤,因此需要分步骤详细说明,包括数据预处理、标注、增强、划分,模型选择和训练,评估调优等。同时,结合用户之前提到的SSD算法,需要强调与之相关的具体配置和注意事项,比如输入尺寸、多尺度检测的适配等。</think>在完成数据收集后,下一步应进行 **数据预处理与模型训练准备**,具体步骤如下: --- ### **第二步:数据预处理与标注验证** 1. **数据清洗** - 剔除重复、模糊或无效图像(如棋盘未完整入镜、严重过曝/欠曝) - 检查标注文件与图像的匹配性(避免标注框偏移或漏标) - 验证红黑棋子分类标签的准确性(例如“兵”与“卒”不可混淆) 2. **格式标准化** - 统一图像分辨率(SSD推荐输入尺寸为 $300 \times 300$ 或 $512 \times 512$) - 转换颜色空间(RGB→BGR,适配多数框架的默认预处理) - 生成标准化标注文件(COCO格式示例): ```json { "annotations": [{ "id": 1, "image_id": 101, "category_id": 2, // 类别ID(如"車") "bbox": [x, y, width, height], // 归一化坐标 "color": 0 // 0=红方,1=黑方 }] } ``` --- ### **第三步:数据增强与扩增** 1. **几何增强** - 随机旋转(±15°内,避免棋盘格透视畸变) - 仿射变换(模拟俯视/侧视角度变化) - 棋盘格切割重组(生成不同棋子布局的虚拟棋盘) 2. **光学增强** - 调整亮度/对比度(模拟光照变化) - 添加高斯噪声(应对低质量摄像头拍摄) - 模拟反光(通过镜面反射算法生成光斑) 3. **语义增强** - 生成对抗样本(如遮挡部分文字的棋子) - 混合不同棋盘背景(木质/塑料/电子屏) --- ### **第四步:数据集划分** - **按比例分配** - 训练集(70%):用于模型参数学习 - 验证集(20%):用于超参数调优 - 测试集(10%):保留至最终评估,避免数据泄露 - **确保分布均衡** - 每个棋子类别在训练/验证/测试集中比例一致 - 红黑双方样本数量接近(避免颜色偏向) --- ### **关键实施建议** 1. **SSD适配优化** - 根据棋子实际尺寸调整 `default box` 的宽高比(建议设置 $1:1$, $2:1$, $3:1$ 以适应方形/长形文字) - 在 `conv4_3` 层(对应 $38 \times 38$ 网格)设置更密集的锚框,捕捉小目标棋子 2. **文字方向处理** - 对侧视角度图像,在标注中添加旋转角度参数(如 $-\theta$),训练时通过仿射变换层自动校正 3. **工具链选择** - 推荐使用 **TensorFlow Object Detection API** 或 **MMDetection** 框架 - 部署数据增强库:`Albumentations`(支持复杂混合增强) --- **下一步衔接**:完成上述
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值