不使用AI标注快速训练自己的语义分割数据集

标注自己的数据集

准备工作

  1. 首先创建一个文件夹datasets_seg;

  2. 在其中创建一个子文件夹 images,将需要标注的图片(≥100张)放入images文件夹中;

  3. 在“images”同路径下新建一个名字为labels的文件夹,用来存放标注过程中生成的标签文件;

  4. 在“images”同路径下新建一个名字为xxx.yaml的空文件(如该数据集为口罩检测,则命名为mask_seg.yaml);

  5. 准备好的数据集文件夹如下图所示:

标注数据

如果用户不使用AI对图像进行标注,需要取消程序右下角Use AI选择框的勾选,再进行下面的标注操作。

  1. 双击并运行label_Object_Mask.exe;

  2. 启动之后,这就是软件的界面:

  3. 打开需要标注的数据集文件夹datasets_seg,选择“当前文件夹”;

  4. 同样的选择并加载yaml文件,加载后如下图所示:

  5. 修改图片和标签相对路径为如下图所示:

  6. 点击“载入”,可以看到图片区域已经加载好了待标注图片;

    请注意:如果该图片没有感兴趣的区域,不需要将该图片放到该数据集中

  7. 右边一栏“所有类型”当前什么也没有,可以自己编辑,但ID必须从0开始,逐个加1,标签名字必须是英文(如口罩分割一共一个标签,mask),添加所有要标记的标签;

  8. 添加完毕一定要如下图所示点击保存,然后点击OK,否则无法保存标签名字;

    注意:后续如果新增了标签类型,即所有类型中新增了ID和名字,也请记得一定要点击保存。

  9. 开始标注,将鼠标滑动到图片区域,单击需要开始的区域开始进行开始标注,可以在感兴趣的区域使用多边形勾勒目标,双击鼠标完整本次区域的勾勒框选;

    图片缩放:移动鼠标至图片区域,滑动鼠标滚轮可以实现图片的缩放;

    图片移动:按ctrl+鼠标左键可以上下左右移动图片;

  10. 完成以后,会弹出标签框,可以开始创建标签,也可在下拉框中选择对应标签,点击OK;

  11. 此时对象列表里面就有这个对象了;

  12. 如果图片中还有其他待标注物体,那么重复9,10两步。这个图标注好以后,点“保存一张图片”,就把标注信息存起来了,只要点击了“保存一张图片”了,关掉软件下次再继续标注也没问题。

  13. 点击左边“图片索引”向上箭头,点击OK标注下一张图片。

  14. 若有框错或者框对应的标签选错,则可在对象列表中选中该行,点击“删除标签”;

  15. 全部图片标注完成后,勾选“background”点击“生成语义分割数据集”;

  16. 选择生成语义分割数据集的路径,一般建议选择我们之前存放图片及的路径,即“datasets_seg”;

  17. 之后即可看到success的弹框至此我们的数据集已经准备完毕,关闭label_object.exe;

此时打开datasets文件夹,可以看到新增了四个文件

  • save: 用来保存模型训练的结果,例如训练过程中保存的检查点(checkpoints),模型参数,日志文件等;

  • VOCdevkit:用于训练的数据集;

  • classes.names:文本文件,列出了数据集中所有类别的名称。每一行代表一个类别。这对于语义分割任务来说是必要的,因为模型需要知道每个像素对应的类别;

  • config.ini:这是一个配置文件,用于存储训练和评估模型所需的参数设置。通常包含以下内容:

    • 训练参数:如学习率(learning rate),批次大小(batch size),训练周期数(epochs)等;

    • 数据集路径:如训练数据集和验证数据集的路径;

    • 模型参数:如模型架构,预训练模型路径等;

    • 其他设置:如日志保存路径,检查点保存频率等;

训练数据集

设置参数

  1. 双击运行Segment_Train.exe界面如下图所示:

  2. Python训练文件路径:此项无需更改,软件会自动加载训练所需环境;

  3. ini配置文件: 配置文件,用于存储训练和评估模型所需的参数设置。选择用于训练的 INI 配置文件,演示中选择的是标注生成的config.ini;;

训练配置参数

  1. 加载ini文件之后,会直接显示默认配置参数如下图,可以修改训练配置参数,修改之后,点击save按钮保存修改结果。

  2. 配置参数的具体含义如下:

  • frozen_batch-size:部分冻结时的批量大小。默认值:4,建议设置:根据 GPU 内存情况,通常在 4-32 之间。

  • unfrozen_batch-size:完全解冻时的批量大小。 默认值:2,建议设置:根据 GPU 内存情况,比冻结时的批量大小小一些,通常在 2-16 之间,因为训练所有层可能会占用更多内存。

  • batch_size的设置技巧:在显卡能够接受的范围内,越大越好。另外显存不足与数据集大小无关,提示显存不足(OOM或者CUDA out of memory)请调小batch_size。受到BatchNorm层影响,batch_size的值最小为2,不能为1。正常情况下frozen_batch-size建议为unfrozen_batch-size的1-2倍。不建议设置的差距过大,因为关系到学习率的自动调整。比如frozen_batch-size设置为4,则unfrozen_batch-size建议设置为2;

  • frozen_epoch:部分冻结时训练的轮数。默认值:2,建议设置:根据模型和数据集情况,通常在 50-150 之间

  • unfrozen_epoch:完全解冻时训练的轮数。默认值:4;建议设置:根据模型和数据集情况,通常在 100-300 之间,设置的值一定要比frozen_epoch大。

  • epoch设置技巧:训练分为两个阶段,分别是冻结阶段和解冻阶段。设置冻结阶段是为了满足机器性能不足的同学的训练需求。冻结训练需要的显存较小,显卡非常差的情况下,可设置frozen_epoch等于unfrozen_epoch,此时仅仅进行冻结训练。

  • num_classes: 数据集中类别的数量 根据你的数据集实际类别数进行设置,训练自己的数据集必须要修改的,自己需要的分类个数+1,如2+1,一般标注完成后会生成ini文件,该文件会自动配置好num_classes。

  • image_size :输入图像的尺寸。默认值:512;建议设置:通常设置为 256x256 或 512x512

  • datasets_path: 数据集的路径使用默认值即可;

  • save_path: 模型保存路径,用于保存训练好的模型,使用默认值即可;

开始训练

  1. 所有参数配置好了之后,点击Train;

  2. 弹出的框中点击“是的”开始进行训练;

  3. 训练过程会弹出cmd黑框,请不要关闭,训练完毕会自动关闭,首次训练会自动下载一些必要的文件以及预训练模型,这将会耗费一点时间

  4. 如下图所示训练了4个epoch,黄色进度条满格,则表示整个数据集已经训练完毕,训练生成的模型输出在本次训练生成的模型在配置文件:config.ini同路径下的save文件夹中;

    【注:多次训练时,输出路径的保持不变,会覆盖之前的模型。】

导出为onnx模型

  1. 若在训练之前,勾选了“训练后生成onnx”,则在训练完成后会生成onnx模型,如下弹出的提示界面,点击ok即可;

  2. 至此,本次训练结束,训练生成的模型在配置文件:config.ini同路径下的save文件夹中。可根据实际检测效果来判断是否要继续进行训练;;

  3. 导出的onnx可以直接用于仪酷AI系列工具包的推理和部署;

  4. 如果训练过程中没有勾选“训练后生成onnx”则可以点击按钮“生成onnx”来生成对应的onnx模型

常见问题

如在标注或训练过程遇到问题,可查看故障排除

如果您遇到了无法解决的问题,请联系我们的支持团队寻求帮助。联系邮箱: support@virobotics.net