准备
- 大量数据集
- 明确分工
- 确定规则
- 一些脚本
开始
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_153.3 启动训练
请先进入虚拟环境
打开终端,进入KFS文件夹,执行以下命令:
yolo detect train model=yolov8n.pt data=data.yaml epochs=50 imgsz=800 workers=23.4 提取训练完成的模型
训练结束后,在以下路径获取最优模型:
./runs/detect/train-?/weights/best.pt4、自动标注
运行auto_label.py,生成labels文件夹,即YOLO格式。如需转化成json格式,运行change.py即可
结尾
打开标注软件,切换相应格式(我用json),进行检查和修正步骤