使用AI标注快速训练自己的语义分割数据集
标注自己的数据集
准备工作
首先创建一个文件夹datasets_seg;
在其中创建一个子文件夹 images,将需要标注的图片(≥100张)放入images文件夹中;
在“images”同路径下新建一个名字为labels的文件夹,用来存放标注过程中生成的标签文件;
在“images”同路径下新建一个名字为xxx.yaml的空文件(如该数据集为口罩检测,则命名为mask_seg.yaml);
准备好的数据集文件夹如下图所示:
标注数据
双击并运行Label_Segment.exe;
启动之后,软件界面如下:
打开需要标注的数据集文件夹datasets_seg,选择“当前文件夹”;
同样的选择并加载yaml文件,加载后如下图所示:
修改图片和标签相对路径为如下图所示:
点击“载入”,可以看到图片区域已经加载好了待标注图片;
请注意:如果该图片没有感兴趣的区域,不需要将该图片放到该数据集中
右边一栏“所有类型”当前什么也没有,可以自己编辑,但ID必须从0开始,逐个加1, 标签名字必须是英文 (如口罩分割一共一个标签,mask),添加所有要标记的标签;;
添加完毕一定要如下图所示点击保存,然后点击OK,否则无法保存标签名字;
注意:后续如果新增了标签类型,即所有类型中新增了ID和名字,也请记得一定要点击保存。
开始标注,将鼠标滑动到图片区域,单击需要标注区域的左上角开始标注,弹出选择点的类型对话框,选择point type为top left corner,点击确定,出现绿点,再单击标注区域的右下角,选择point type为bottom right corner,点击确定,出现蓝点,最后再单击标注区域,选择point type为included,并勾选不再显示此对话框,点击确定,出现红点,双击鼠标完成标注;
标注选项:可以通过程序的右下角,勾选不再显示此对话框,根据需求在程序的右下角选择point type:选择top left corner鼠标点击目标区域的左上角、选择bottom right corner鼠标点击目标区域的右下角、选择included后鼠标单击标注区域、当目标框住不需要标注的区域时,可以选择not included后鼠标单击不需要标注的目标区域;
区域标注:可以在标注区域多点红点,确保目标区域标注完整;
完成以后,双击标注区域,会弹出标签框,可以开始创建标签,也可在下拉框中选择对应标签,点击OK;
此时对象列表里面就有这个对象了;
如果图片中还有其他待标注物体,那么重复9,10两步。这个图标注好以后,点“保存一张图片”,就把标注信息存起来了,只要点击了“保存一张图片”了,关掉软件下次再继续标注也没问题。
点击左边“图片索引”向上箭头,点击OK标注下一张图片。
若有框错或者框对应的标签选错,则可在对象列表中选中该行,点击“删除标签”;
全部图片标注完成后,勾选“background”点击“生成语义分割数据集”;
选择生成语义分割数据集的路径,一般建议选择我们之前存放图片及的路径,即“datasets_seg”;
之后即可看到success的弹框至此我们的数据集已经准备完毕,关闭label_object.exe;
此时打开datasets文件夹,可以看到新增了四个文件
save: 用来保存模型训练的结果,例如训练过程中保存的检查点(checkpoints),模型参数,日志文件等;
VOCdevkit:用于训练的数据集;
classes.names:文本文件,列出了数据集中所有类别的名称。每一行代表一个类别。这对于语义分割任务来说是必要的,因为模型需要知道每个像素对应的类别;
config.ini:这是一个配置文件,用于存储训练和评估模型所需的参数设置。通常包含以下内容:
训练参数:如学习率(learning rate),批次大小(batch size),训练周期数(epochs)等;
数据集路径:如训练数据集和验证数据集的路径;
模型参数:如模型架构,预训练模型路径等;
其他设置:如日志保存路径,检查点保存频率等;
训练数据集
设置参数
双击运行Segment_Train.exe界面如下图所示:
Python训练文件路径:此项无需更改,软件会自动加载训练所需环境;
ini配置文件: 配置文件,用于存储训练和评估模型所需的参数设置。选择用于训练的 INI 配置文件,演示中选择的是标注生成的config.ini;;
训练配置参数
加载ini文件之后,会直接显示默认配置参数如下图,可以修改训练配置参数,修改之后,点击save按钮保存修改结果。
配置参数的具体含义如下:
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: 模型保存路径,用于保存训练好的模型,使用默认值即可;
开始训练
所有参数配置好了之后,点击Train;
弹出的框中点击“是的”开始进行训练;
训练过程会弹出cmd黑框,请不要关闭,训练完毕会自动关闭,首次训练会自动下载一些必要的文件以及预训练模型,这将会耗费一点时间;
如下图所示训练了4个epoch,黄色进度条满格,则表示整个数据集已经训练完毕,训练生成的模型输出在本次训练生成的模型在配置文件:config.ini同路径下的save文件夹中;
【注:多次训练时,输出路径的保持不变,会覆盖之前的模型。】
导出为onnx模型
若在训练之前,勾选了“训练后生成onnx”,则在训练完成后会生成onnx模型,如下弹出的提示界面,点击ok即可;
至此,本次训练结束,训练生成的模型在配置文件:config.ini同路径下的save文件夹中。可根据实际检测效果来判断是否要继续进行训练;;
导出的onnx可以直接用于仪酷AI系列工具包的推理和部署;
如果训练过程中没有勾选“训练后生成onnx”则可以点击按钮“生成onnx”来生成对应的onnx模型
常见问题
如在标注或训练过程遇到问题,可查看故障排除
如果您遇到了无法解决的问题,请联系我们的支持团队寻求帮助。联系邮箱: support@virobotics.net