一、YOLO v13
YOLOv13
是YOLO
系列最新发布的目标检测模型,代表了当前目标检测技术的最新发展成果。它不仅继承了YOLO
系列的速度与精度平衡优势,还在多个方面进行了显著创新。例如:在主流 的MS COCO
数据集上,YOLOv13-N
的 mAP
达到 41.6%
,相较 YOLOv12-N
提升了 1.5%
。其Nano
版本仅需6.4G FLOPs
即可达到41.6%
的mAP
,CPU
推理速度最快可达25FPS
,展现出极强的实时性和高精度。
YOLOv13
的本次创新是引入了超图自适应相关增强机制(HyperACE
),通过可学习的超边构建方式,帮助模型识别多个物体之间的复杂潜在关系。这种机制突破了传统卷积和自注意力只能处理局部关联的限制,实现了从“点对点”到“多对多”的语义建模,使得模型在复杂场景中能够更好地理解物体之间的组合关系。
并且还采用了全流程信息分发范式,将超图增强后的特征分配到模型的各个部分(Backbone
、Neck
、Head
),从而实现更细致的特征融合与信息传递。这种设计不仅提升了特征表示能力,还增强了模型在多尺度目标检测中的表现。
更多介绍可关注官方 Github
:
https://github.com/iMoonLab/yolov13
在模型上 V13
和之前的版本类似,包括不同大小的模型,从小到大包括:
YOLOv13-N
:用于资源极其有限环境的纳米版本。YOLOv13-S
:兼顾速度和精度的小型版本。YOLOv13-L
:大型版本,精度更高,但计算资源增加。YOLOv13-X
:超大型版本可实现最高精度和性能。
权重可在 Github
中下载。
快速使用
拉取 Github
源码:
git clone https://github.com/iMoonLab/yolov13.git
安装依赖:
python
版本需要 3.11
以上
wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -e .
pip install thop
这里使用 YOLOv13-N
模型进行测试:
from ultralytics import YOLO
model = YOLO('yolov13n.pt')
results = model.predict('./img/1.png')
results[0].show()
二、微调训练
数据集使用本专栏前面实验 YOLO-V10
时标注的人脸数据集, 这里你可以收集一些自定义的图片,然后根据下面文章中介绍的方式进行标注:
微调训练,其中 face.yaml
文件内容和上面文章 YOLO-V10
时的一致:
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov13n.pt')
# 训练
model.train(
data='face.yaml', # 训练配置文件
epochs=100, # 训练的周期
imgsz=640, # 图像的大小
device=[0], # 设备,如果是 cpu 则是 device='cpu'
workers=0,
lr0=0.001, # 学习率
batch=8, # 批次大小
amp=False # 是否启用混合精度训练
)
运行后可以看到打印的网络结构:
训练过程:
训练结束后可以在 runs
目录下面看到训练的结果:
weights
下面是训练后保存的模型,results.png
为训练时 loss
的变化图:
五、模型测试
在 runs\detect\train\weights
下可以看到 best.pt
和 last.pt
两个模型,表示最佳和最终模型,下面使用 best.pt
模型进行测试
from ultralytics import YOLO
from matplotlib import pyplot as plt
import os
plt.rcParams['font.sans-serif'] = ['SimHei']
# 测试图片地址
base_path = "test"
# 加载模型
model = YOLO('runs/detect/train/weights/best.pt')
for img_name in os.listdir(base_path):
img_path = os.path.join(base_path, img_name)
image = plt.imread(img_path)
# 预测
results = model.predict(image, device=[0])
boxes = results[0].boxes.xyxy
confs = results[0].boxes.conf
ax = plt.gca()
for index, boxe in enumerate(boxes):
x1, y1, x2, y2 = boxe[0], boxe[1], boxe[2], boxe[3]
score = confs[index].item()
ax.add_patch(plt.Rectangle((x1, y1), (x2 - x1), (y2 - y1), linewidth=2, fill=False, color='red'))
plt.text(x=x1, y=y1-10, s="{:.2f}".format(score), fontsize=15, color='white',
bbox=dict(facecolor='black', alpha=0.5))
plt.imshow(image)
plt.show()