准备

  • 大量数据集
  • 明确分工
  • 确定规则
  • 一些脚本

开始

1、预标注

将部分数据集的文件夹用标注软件打开(AnyLabeling例),推荐按类标注,即先选择具体一类一直标完所有图片,再从第一张图片开始标注第二类,以此类推,可有效避免标错情况,提升效率。觉得数量就足够进入下一步

2、转化

导出的数据集结构如下:

data/
├─ images/
│  ├─ 001.jpg
│  ├─ 002.jpg
├─ labels/
│  ├─ 001.txt  
│  ├─ 002.txt  
└─ classes.txt

由于导出的classes.txt随机(也许可以调,我另辟蹊径),所以labels内容必然与标准不同,这时需要用脚本转化。流程如下:

运行match_label.py,根据data文件夹下的
classes.txt文件自动生成标准'data_标准'
文件夹,直接合并即可
            │
            ▼
运行check_label.py,根据当前目录下的
classes.txt文件,输出labels包含了哪些
标签,以此判断是否正确
            │
            ▼
运行find_label.py,修改需要查询的ID,
可以查找并统计哪些图片包含所查询的标签,
并输出文件名
            │
            ▼
运行count_label.py,可以统计31类标签
的标注次数
            │
            ▼
将标注的部分数据集合并(如果拥有多个文件夹)

3、预训练

请先配置虚拟环境

3.1 文件夹结构

创建如下所示的文件夹结构

KFS/
├─ data.yaml             # 配置文件
├─ train/                # 全部手动标注的数据集
│  ├─ images/            # 标注好的所有图片
│  └─ labels/           # 标注好的YOLO格式txt标签
├─ unlabeled/            # 海量未标注的原始图片
│  └─ images/            # 待自动标注的图片存放处
└─ data.yaml             # 训练配置文件(新建)

3.2 编写训练配置文件

在KFS根目录新建data.yaml,复制以下内容:

path: .
train: train/images
val: train/images       # 辅助标注预训练无需单独分验证集
nc: 31
names:
  0: R1
  1: T_01
  2: T_02
  3: T_03
  4: T_04
  5: T_05
  6: T_06
  7: T_07
  8: T_08
  9: T_09
  10: T_10
  11: T_11
  12: T_12
  13: T_13
  14: T_14
  15: T_15
  16: F_01
  17: F_02
  18: F_03
  19: F_04
  20: F_05
  21: F_06
  22: F_07
  23: F_08
  24: F_09
  25: F_10
  26: F_11
  27: F_12
  28: F_13
  29: F_14
  30: F_15

3.3 启动训练

请先进入虚拟环境

打开终端,进入KFS文件夹,执行以下命令:

yolo detect train model=yolov8n.pt data=data.yaml epochs=50 imgsz=800 workers=2

3.4 提取训练完成的模型

训练结束后,在以下路径获取最优模型:

./runs/detect/train-?/weights/best.pt

4、自动标注

运行auto_label.py,生成labels文件夹,即YOLO格式。如需转化成json格式,运行change.py即可

结尾

打开标注软件,切换相应格式(我用json),进行检查和修正步骤