目录
一、YOLOv12的创新
二、YOLOv12与YOLOv11对比
测试配置
FPS对比
训练时间
准确率
FlashAttention
三、YOLOv12部署指南
环境准备
加载与配置YOLOv12n模型
数据准备与处理
训练模型
导出与部署
推理与预测
四、YOLOv12无代码全流程
添加模型
创建数据集
数据标注
模型训练
模型预测
模型转换
总结
YOLOv12发布一周,引发热议!
作为YOLO系列的最新版本,YOLOv12引发了广泛关注。那关于YOLOv12的使用具体怎么样吗?今天小编就详细带你体验一下YOLOv12的使用细节,以及它和YOLO11的性能比较吧(附代码讲解)
一、YOLOv12的创新
YOLOv12最重要的创新是其不再依赖传统的CNN架构,而是采用了基于注意力机制的新方法。这个变化标志着YOLO在深度学习领域的又一次突破,挑战了现有的技术范式。
然而,事情并非总是那么美好。要以如此高的速度运行,就需要FlashAttention,否则(您仍然可以运行它)但性能会更差。一些适用于FlashAttention的GPU是:
-
Turing GPU(如T4、Quadro RTX系列)
-
Ampere GPU(如RTX30系列、A30/40/100)
-
Ada Lovelace GPU(如RTX40系列)
-
Hopper GPU(如H100/H200)
这也凸显了NVIDIA在AI领域的主导地位。
二、YOLOv12与YOLOv11对比
-
测试配置
显卡:NVIDIA RTX 3050
处理器:Intel Core-i5-10400 @2.90GHz
内存:64 GB
型号规格:YOLO11n和YOLOv12n
-
FPS对比
如图,YOLOv11的FPS约为40,而YOLOv12的FPS为30。
这表明YOLOv12在速度上有所下降,但其创新的架构和精度提升为其带来了更强的表现。
-
训练时间
在10个epoch的微调测试中,YOLOv12的训练时间比YOLOv11多了约20%。
在使用130张训练图像和43张验证图像的实验中,YOLOv12训练时间为0.011小时,而YOLOv11为0.009小时。
-
准确率
在相同数据集上的10个epoch微调后,YOLOv12和YOLOv11的准确率相同。
-
FlashAttention
YOLOv12包含FlashAttention,显著提升速度,但PyTorch并未直接支持CPU上运行,即使使用CUDA,也需手动配置。
三、YOLOv12部署指南
在YOLOv12模型部署过程中,由于其依赖FlashAttention和特定GPU架构,配置复杂度更高。接下来小编将演示YOLOv12的部署全流程,从环境搭建、模型导出到实时推理,同时揭秘如何通过Coovally平台实现零代码完成数据标注、模型训练与云端部署,让小白也能轻松玩转YOLOv12!
-
环境准备
创建Anaconda环境,运行以下命令创建新环境(比如命名为yolo_env)并激活;
conda create -n yolo_env python=3.8
conda activate yolo_env
安装必要的库,如PyTorch、YOLOv12n以及相关依赖。
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
conda install numpy opencv
-
加载与配置YOLOv12n模型
克隆YOLOv12模型的GitHub仓库;
git clone https://github.com/your-chosen-yolov12-repo.git
cd yolov12
并设置相关参数,如输入数据集路径和输出路径。
import torch
from yolov12 import YOLO # 从本地克隆的 YOLOv12 库导入# 加载预训练模型(如果你有的话)
model = YOLO('yolov12n.pt') # 这里假设你已经有预训练的模型# 如果没有预训练模型,可以选择从头开始训练
# 使用自定义模型
model = YOLO()# 配置训练参数
model.train(data='path/to/dataset.yaml', # 数据集路径,注意:需要是YOLO格式的数据集epochs=50, # 训练的轮数batch_size=16, # 批次大小img_size=640, # 输入图像大小lr=0.001 # 学习率
)
-
数据准备与处理
YOLOv12要求标签文件为TXT格式,因此需要将XML或JSON格式的标签转换为YOLO格式。
以下是一个Python脚本示例,用于将XML格式的标签转换为YOLO格式:
import os
import xml.etree.ElementTree as ET
import globdef convert_coordinates(size, box):"""将XML中的边界框坐标转换为YOLO格式"""dw = 1.0 / size[0]dh = 1.0 / size[1]x = (box[0] + box[2]) / 2.0y = (box[1] + box[3]) / 2.0w = box[2] - box[0]h = box[3] - box[1]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_xml_to_yolo(xml_path, class_mapping):"""转换单个XML文件到YOLO格式"""tree = ET.parse(xml_path)root = tree.getroot()size = root.find('size')width = int(size.find('width').text)height = int(size.find('height').text)txt_path = xml_path.replace('Annotations', 'Labels').replace('.xml', '.txt')os.makedirs(os.path.dirname(txt_path), exist_ok=True)with open(txt_path, 'w') as txt_file:for obj in root.iter('object'):class_name = obj.find('name').textif class_name not in class_mapping:continueclass_id = class_mapping[class_name]xmlbox = obj.find('bndbox')xmin = float(xmlbox.find('xmin').text)ymin = float(xmlbox.find('ymin').text)xmax = float(xmlbox.find('xmax').text)ymax = float(xmlbox.find('ymax').text)bb = convert_coordinates((width, height), (xmin, ymin, xmax, ymax))txt_file.write(f"{class_id} {bb[0]:.6f} {bb[1]:.6f} {bb[2]:.6f} {bb[3]:.6f}\n")def main():class_mapping = {'missing_hole': 0,'mouse_bite': 1,'open_circuit': 2,'short': 3,'spur': 4,'spurious_copper': 5}xml_files = glob.glob('Annotations/*/*.xml')for xml_file in xml_files:try:convert_xml_to_yolo(xml_file, class_mapping)print(f"成功转换: {xml_file}")except Exception as e:print(f"转换失败 {xml_file}: {str(e)}")if __name__ == "__main__":main()
-
训练模型
通过 train 方法开始训练,若需要使用GPU加速,确保CUDA环境配置正确。
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO(r'C:\Users\DaoXin\PycharmProjects\yolov12-main\ultralytics\cfg\models\v12\yolov12n.yaml')# 代表使用yolov12的神经网络结构model.load(r'C:\Users\DaoXin\PycharmProjects\yolov12-main\yolov12n.pt')# 代表使用yolov12n的预训练权重model.train(data=r'C:\Users\DaoXin\PycharmProjects\yolov12-main\TILDA\data.yaml', # 数据集yaml路径imgsz=640, # 输入图像的尺寸为 640x640 像素epochs=300, # 训练300轮batch=16, # 每一批样本的数量workers=32, # 同时32个线程scale=0.5, #设置图像缩放因子,影响数据增强中的尺度变化。mosaic=1.0, # 启用 Mosaic 数据增强,值为 1.0 表示完全启用。mixup=0.0, # 设置 MixUp 数据增强的混合比例,这里设置为 0.0,表示不使用。copy_paste=0.1, # 设置 Copy-Paste 数据增强的概率。device="0", #只使用第一张显卡进行训练project=r'C:\Users\DaoXin\PycharmProjects\yolov12-main\train',name='yolov12n',)
-
导出与部署
训练完成后,将模型导出并部署。可选择导出为TorchScript文件进行部署。
# 导出模型
model.save('yolov12n_final.pt') # 导出为 .pt 格式# 可选:将模型导出为 TorchScript
scripted_model = torch.jit.script(model)
scripted_model.save('yolov12n_scripted.pt')
-
推理与预测
使用以下代码加载训练好的模型进行推理。
# 加载已训练模型
model = YOLOv12n.load('yolov12n_final.pt')# 图像推理
image = 'path/to/test_image.jpg'
result = model.predict(image)# 显示推理结果
result.show(
四、YOLOv12无代码全流程
Coovally平台已上线最新的YOLOv12模型,如果你想使用可另存为我的模型或一键下载,助力实验研究与产业应用。
-
添加模型
进入Coovally平台点击【全部模型】,搜索YOLOv12,在这里可以选择不同的YOLOv12版本。
完成下载代码包或者点击另存为我的模型,模型已全部配置完成,下载即用。进入【模型集成】页面,进行安装。
-
创建数据集
进入【图像数据】页面,点击创建数据集,输入数据集名称、描述,选择任务类型,上传压缩包文件。创建数据集时可以按照比例拆分训练集、验证集、测试集。
Coovally平台还有转换工具等多种工具帮助建模。
-
数据标注
进入【辅助标注】页面,点击创建样本集,进入样本集详情页,创建好标签进行数据标注。
可以选择几组数据进行人工标注,标注完成后发布为数据集启动微调训练,剩余样本集数据即可全部自动化完成。
-
模型训练
进入数据集详情页,输入任务名称,选择模型配置模版,设置实验E-poch次数,训练次数等信息,即可开始训练。
除此之外还可进行算法增强,提高模型的泛化能力。
-
模型预测
模型训练完成后,可查看数据集和标签的具体信息,还能看到标签类别与真实标签、预测标签的数量,以及精确率和召回率等信息;
成模型转换与模型部署后,即可上传图片进行结果预测。完成后还可以将模型下载与分享。
-
模型转换
Coovally平台还支持云边端转换,可转换成onnx、TensorRT格式。
无论你是AI领域的专家,还是刚刚接触机器学习的初学者,Coovally平台都能为你提供简便高效的模型训练体验。从数据准备到训练调优、模型验证,甚至是部署应用,平台都能为你提供一站式的解决方案。通过使用Coovally平台,你可以大大缩短项目的开发周期,提高生产力,快速将你的想法转化为实际应用。
总结
YOLOv12凭借其创新的注意力机制和多任务支持,展现了YOLO系列的技术进步。虽然在一些情况下(如FPS和训练时间)较YOLOv11略有下降,但在精度和功能扩展上,YOLOv12无疑是一次重大的飞跃。如果你想体验这一版本的优势,可以通过合理配置硬件和CUDA,发挥其最大潜力。