前言
v9还没整明白,v10又来了。而且还是打败天下无敌手的存在,连最近很火的RT-DETR都被打败了。那么,笑傲目标检测之林的v10又能持续多久呢?
一、YOLO10检测模型
近年来,YOLO在实时目标检测领域中因其在计算成本和检测性能之间的有效平衡而成为主要范式。
研究人员在YOLO的架构设计、优化目标、数据增强策略等方面进行了探索,并取得了显著进展。然而,依赖非极大值抑制(NMS)进行后处理限制了YOLO的端到端部署,并对推理延迟产生了不利影响。此外,YOLO中各种组件的设计缺乏全面深入的检验,导致明显的计算冗余,限制了模型的能力。这导致了次优的效率,以及相当大的性能提升潜力。
在这项工作中,原作者旨在从后处理和模型架构两个方面进一步推进YOLO的性能-效率边界。为此,首先提出了YOLO的无NMS训练的一致双重分配策略,同时带来了竞争力的性能和低推理延迟。此外,引入了面向效率-准确性驱动的YOLO模型设计策略,从效率和准确性角度全面优化YOLO的各个组件,大大减少了计算开销并增强了能力。
作者的努力成果是一代新的YOLO系列用于实时端到端目标检测,被称为YOLOv10。广泛的实验表明,YOLOv10在各种模型规模上实现了最先进的性能和效率。
在延迟性和精度上的性能对比
模型尺寸和精度上的对比
二、YOLO安装过程
硬件环境:显卡NVIDIA GeForce RTX 4090;
软件环境:Linux 20.04,Conda
2.1 新建conda的环境 yolo10
在conda创建一个名为yolov10的新环境,并在其中安装python3.9,这个环境是独立的不会影响系统中的其他环境:
conda create -n yolov10 python=3.9
然后再激活yolov10的Conda环境:
conda activate yolov10
通过pip命令安装requirements.txt中的python包及其版本号:
pip install -r requirements.txt
然后设置开发者模式:
pip install -e .
2.2 安装依赖包
然后安装预训练的模型文件:
wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
最后在执行运行代码:
python app.py
最后就进入了操作界面:
2.3 测试
先输入要处理图片,
模型:使用上面下载的预训练模型yolov10s.pt
处理完的图片:
从上面图片可以精确看到识别的效果,因此可以判断出来模型可以正常使用。
三、训练定制的数据集
3.1 装载数据:
数据入口的切换,前提是需要准备好yolo格式的数据集:
3.2 训练过程记录:
engine/trainer: task=detect, mode=train, model=yolov10n.pt, data=NEU.yaml, epochs=120, time=None, patience=100, batch=64, imgsz=640, save=True, save_period=-1, val_period=1, cache=False, device=None, workers=8, project=None, name=train, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=/home/wqt/Projects/yolov10NEU/runs/detect/train
Overriding model.yaml nc=80 with nc=6
from n params module arguments
0 -1 1 464 ultralytics.nn.modules.conv.Conv [3, 16, 3, 2]
1 -1 1 4672 ultralytics.nn.modules.conv.Conv [16, 32, 3, 2]
2 -1 1 7360 ultralytics.nn.modules.block.C2f [32, 32, 1, True]
3 -1 1 18560 ultralytics.nn.modules.conv.Conv [32, 64, 3, 2]
4 -1 2 49664 ultralytics.nn.modules.block.C2f [64, 64, 2, True]
5 -1 1 9856 ultralytics.nn.modules.block.SCDown [64, 128, 3, 2]
6 -1 2 197632 ultralytics.nn.modules.block.C2f [128, 128, 2, True]
7 -1 1 36096 ultralytics.nn.modules.block.SCDown [128, 256, 3, 2]
8 -1 1 460288 ultralytics.nn.modules.block.C2f [256, 256, 1, True]
9 -1 1 164608 ultralytics.nn.modules.block.SPPF [256, 256, 5]
10 -1 1 249728 ultralytics.nn.modules.block.PSA [256, 256]
11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest']
12 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1]
13 -1 1 148224 ultralytics.nn.modules.block.C2f [384, 128, 1]
14 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest']
15 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1]
16 -1 1 37248 ultralytics.nn.modules.block.C2f [192, 64, 1]
17 -1 1 36992 ultralytics.nn.modules.conv.Conv [64, 64, 3, 2]
18 [-1, 13] 1 0 ultralytics.nn.modules.conv.Concat [1]
19 -1 1 123648 ultralytics.nn.modules.block.C2f [192, 128, 1]
20 -1 1 18048 ultralytics.nn.modules.block.SCDown [128, 128, 3, 2]
21 [-1, 10] 1 0 ultralytics.nn.modules.conv.Concat [1]
22 -1 1 282624 ultralytics.nn.modules.block.C2fCIB [384, 256, 1, True, True]
23 [16, 19, 22] 1 863668 ultralytics.nn.modules.head.v10Detect [6, [64, 128, 256]]
YOLOv10n summary: 385 layers, 2709380 parameters, 2709364 gradients, 8.4 GFLOPs
Transferred 493/595 items from pretrained weights
Freezing layer 'model.23.dfl.conv.weight'
AMP: running Automatic Mixed Precision (AMP) checks with YOLOv8n...
Downloading https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8n.pt to 'yolov8n.pt'...
需要下载yolov8的模型,v10是基于v8来重构造的
总结
通过这次安装到最后的功能实现,体现了yolo10的特点:便捷安装,运行好。