最近需要标注一批单目标检测的数据集,但是手动标注实在太麻烦了,最终发现一款超级好用的标注标注软件:X-AnyLabeling。不仅支持多种格式,多种标注方式,还提供了许多模型。
在这里插入图片描述

在使用自动标注的前提是拥有一个自己已经训练好的模型权重文件或者直接使用该软件再github上已经存在的各种模型的预训练权重文件,最后都要将他们转换为onnx文件以供软件的自动检测标注。

GitHub源码地址:https://github.com/CVHub520/X-AnyLabeling

安装方式:

1.直接通过Releasean安装:https://github.com/CVHub520/X-AnyLabeling/releases/tag/v1.1.0


根据自己的系统选择CPU还是GPU推理以及Linux或者win系统。

2.clone源码后采用终端运行

在这里插入图片描述
在项目中打开终端安装所需的环境依赖:

pip install -r requirements.txt

安装完成后运行app.py

python anylabeling/app.py

注意: 一开始我也是采用直接下载的exe文件打开标注,但是我在配置好自定义模型后开启自动标注会环境报错,原因是还有一些必需的依赖没有安装(官方也建议采用下载源码终端运行,方便查看报错)

自动标注:

1.打开文件夹,修改输出文件夹

这里我的标注任务为普通的单目标检测,只需要输出一个类别
点击打开文件夹选择自己数据集文件夹,修改输出目录,选择自己想输出的目录文件夹(如果不修改输出文件夹自动保存在数据集文件夹中)
在这里插入图片描述

2.增添标签类别

和普通的标注类似,只需要将标签类型加上就行了

3.(重点)构建自己的模型
  • 点击这个AI图标,编辑下面会出现选择模型
    在这里插入图片描述
  • 打开可以看见有很多供选择的模型
    在这里插入图片描述
    X-AnyLableing里面是自带很多模型的供我们选择的,但是这里我需要标注的目标并不在常见物体中,所以我需要构建自己的标注模型

这里我采用的是yolov5s 6.0版本,因为之前需要已经训练好了一个小数据集的模型
X-AnyLabeling里面采用的是读取yaml文件和加载onnx文件的方式加载自定义模型

普通的pt文件不行,一定要转onnx文件,yolov5 6.0以上可以通过里面的export.py文件直接将pt文件转onnx文件

根据自己的需求最后配置的自己的yaml文件为:
在这里插入图片描述

  • 将onnx文件和yaml文件放一起
    在这里插入图片描述
  • 随后选择自己的模型就可以了
    在这里插入图片描述
  • 之前已经搞好了标签就可以按自己想法开始自动标注,点击这个播放按钮
    在这里插入图片描述
这个自动标注的好坏和自己的模型准确度还是很大的关系,建议自己检查再手动调整一下,反正缩短了一大半的时间

格式转换:

作者言:
在这里插入图片描述

#=============================================================================== Usage ================================================================================#
#
#---------------------------------------------------------------------------- custom2voc  -----------------------------------------------------------------------------#
# python tools/label_converter.py --task rectangle --src_path custom_folder --dst_path voc_folder --mode custom2voc
#
#---------------------------------------------------------------------------- voc2custom  -----------------------------------------------------------------------------#
# python tools/label_converter.py --task rectangle --src_path voc_folder --img_path img_folder --mode voc2custom
#
#---------------------------------------------------------------------------- custom2yolo  ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rectangle --src_path custom_folder --dst_path yolo_folder --classes xxx.txt --mode custom2yolo
# python tools/label_converter.py --task polygon --src_path custom_folder --dst_path yolo_folder --classes xxx.txt --mode custom2yolo                 
#
#---------------------------------------------------------------------------- yolo2custom  ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rectangle --src_path yolo_folder --img_path img_folder --classes xxx.txt --mode yolo2custom
# python tools/label_converter.py --task polygon --src_path yolo_folder --img_path img_folder --classes xxx.txt --mode yolo2custom
#
#---------------------------------------------------------------------------- custom2coco  ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rectangle --src_path custom_folder --dst_path coco_folder --classes xxx.txt --mode custom2coco                      
#
#---------------------------------------------------------------------------- coco2custom  ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rectangle --src_path coco.json --img_path img_folder --mode coco2custom
# python tools/label_converter.py --task polygon --src_path coco.json --img_path img_folder --mode coco2custom
#
#---------------------------------------------------------------------------- custom2dota  ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rotation --src_path dota_image_folder --dst_path save_folder --mode custom2dota
#
#---------------------------------------------------------------------------- dota2custom  ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rotation --src_path dota_label_folder --img_path dota_image_folder --mode dota2custom
#
#---------------------------------------------------------------------------- dota2dcoco   ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rotation --src_path dota_label_folder --dst_path xxx.json --img_path dota_image_folder --classes xxx.txt --mode dota2dcoco
#
#---------------------------------------------------------------------------- dcoco2dota   ----------------------------------------------------------------------------#
# python tools/label_converter.py --task rotation --src_path xxx.json --dst_path dota_folder --mode dcoco2dota
#
#=============================================================================== Usage ================================================================================#

注意:

目前 --task 支持的任务有 [‘rectangle’, ‘polygon’] 即矩形框和多边形框两种,其中多边形框任务只提供 yolo 和 custom 之间的互相转换,方便大家训练检测和分割任务。至于其它的任务,如关键点等,可以参考下脚本自行修改适配下。

此处 --classes 参数指定的 *.txt 文件是用户预定义的类别文件,每一行代表一个类别,类别编号按从上到下的顺序编排,可参考 assets 目录下的 classes.txt。

  • 这里我们是将custom格式转化yolo格式,创建一个我的标签txt文件
    在这里插入图片描述
  • 放到输出yolo标签的文件夹中
  • 终端输入命令

在这里插入图片描述

src_path:输出的json格式(转化前)标签路径
dst_path:转化后yolo格式标签路径
classes:分类

最后成功!
在这里插入图片描述

遇到的一个问题

因为我采用的半精度训练模型导出onnx文件,我使用自定模型时虽然导入成功但是一直不画框,随后去终端看发现一直报错半精度的问题
在这里插入图片描述
查看了一圈文档也没发现解决方案,无奈之下联系了软件官方人员最后给出了解决方案:
在这里插入图片描述

我懒得重新导出所以采用的第二种方案
在这里插入图片描述
至此问题解决

不得不说作者回应是真的很快,几乎是秒回我,不过官方给的结论是 最好不要修改基类,不然会影响其他的程序

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐