本文转载改编自:https://mp.weixin.qq.com/s/XaLFMHCz8cAdvZb-73wt0g
1、下载 YOLOv12 代码
首先,进入YOLOv12的GitHub仓库,按照图示流程下载打包好的YOLOv12代码与预训练权重文件到本地。
https://github.com/sunsmarterjie/yolov12
git clone https://github.com/sunsmarterjie/yolov12
2、准备数据集
Ultralytics 版本的YOLO 所需格式的数据集,标签为 txt 格式的文本文件。
文本文件中保存的标签信息分别为:
类别序号、中心点x坐标、中心点y坐标、归一化后的长度、归一化后的宽度
每一行对应一个对象,图像中有几个标注的对象就有几行信息。
自制数据集标注教程可看此篇文章:https://blog.csdn.net/StopAndGoyyy/article/details/139906637
如果没有自己的数据集,本文提供一个小型数据集(摘自SIMD公共数据集)以供测试代码,包含24张训练集以及20张测试集。
下载链接:https://pan.quark.cn/s/f318a977f81c 提取码:LQ68
下载完成后将提供的 datasets文件夹 解压并复制到工程跟路径下。解压后,文件夹名字为 datasets
。
创建 data.yaml
文件
创建 data.yaml
文件保存数据集的相关信息,如果使用本文提供的数据集可使用以下代码:
# 数据集路径
train: ./images/train
val: ./images/test
test: ./images/test
# 类别数
nc: 15
# 类名
names: ['car', 'Truck', 'Van', 'Long Vehicle','Bus', 'Airliner', 'Propeller Aircraft', 'Trainer Aircraft', 'Chartered Aircraft', 'Fighter Aircraft', 'Others', 'Stair Truck', 'Pushback Truck', 'Helicopter', 'Boat']
3、模型训练
创建 train.py
文件,依次填入以下信息。
from ultralytics.models import YOLO
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
if __name__ == '__main__':
model_path = 'ultralytics/cfg/models/11/yolo11.yaml'
model = YOLO(model=model_path)
# model.load('yolov8n.pt')
model.train(data='./data.yaml', epochs=2, batch=1, device='0',
imgsz=640, workers=2, cache=False,
amp=True, mosaic=False, project='runs/train', name='exp')
参数说明:
epochs=2
表示只训练两轮,通常设置为100-300之间,此处仅测试两轮。batch=1
表示每批次仅训练一张图片,可按显存大小调整batchsize,一般24g卡可设置为16-64。
参数说明
点击运行代码
待软件控制台打印如下信息即为运行成功。如果Flash_attn包报错,可使用本文的A2代码对原文代码进行更改。
查看结果
训练完成后在 runs/train
文件夹下保存有训练好的权重及相关训练信息。
4、模型预测
创建 detect.py
文件,填入训练好的权重路径及要检测的图片信息。
import os
from ultralytics.models import YOLO
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
if __name__ == '__main__':
model_path = '/Users/.../yolov12/runs/train/exp/weights/best.pt'
model = YOLO(model_path)
source_dir = '.../data/01'
results = model.predict(source=source_dir, imgsz=640, project='runs/detect/', name='exp' )
print('-- results : \n', results )
2025-06-24(二)