一、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源码:
gitclone https://github.com/iMoonLab/yolov13.git安装依赖:
python版本需要3.11以上
wgethttps://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl pipinstall-rrequirements.txt-ihttps://pypi.tuna.tsinghua.edu.cn/simple pipinstall-e.pipinstallthop这里使用YOLOv13-N模型进行测试:
fromultralyticsimportYOLO model=YOLO('yolov13n.pt')results=model.predict('./img/1.png')results[0].show()二、微调训练
数据集使用本专栏前面实验YOLO-V10时标注的人脸数据集, 这里你可以收集一些自定义的图片,然后根据下面文章中介绍的方式进行标注:
基于 YOLO V10 Fine-Tuning 训练自定义的目标检测模型
微调训练,其中face.yaml文件内容和上面文章YOLO-V10时的一致:
fromultralyticsimportYOLO# 加载模型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模型进行测试
fromultralyticsimportYOLOfrommatplotlibimportpyplotaspltimportos plt.rcParams['font.sans-serif']=['SimHei']# 测试图片地址base_path="test"# 加载模型model=YOLO('runs/detect/train/weights/best.pt')forimg_nameinos.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()forindex,boxeinenumerate(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()