这里推荐一个YOLO系列的算法实现库YOLOU,此处的“U”意为“United”的意思,主要是为了学习而搭建的YOLO学习库,也借此向前辈们致敬,希望不被骂太惨;
整个算法完全是以YOLOv5的框架进行,主要包括的目标检测算法有:YOLOv3、YOLOv4、YOLOv5、YOLOv5-Lite、YOLOv6、YOLOv7、YOLOX以及YOLOX-Lite。
同时为了方便算法的部署落地,这里所有的模型均可导出ONNX并直接进行TensorRT等推理框架的部署,后续也会持续更新。
模型精度对比
服务端模型
这里主要是对于YOLO系列经典化模型的训练对比,主要是对于YOLOv5、YOLOv6、YOLOv7以及YOLOX的对比,部分模型还在训练之中,后续所有预训练权重均会放出,同时对应的ONNX文件也会给出,方便大家部署应用落地。
注意,这里关于YOLOX也没完全复现官方的结果,后续有时间还会继续调参测试,尽可能追上YOLOX官方的结果。
下表是关于YOLOU中模型的测试,也包括TensorRT的速度测试,硬件是基于3090显卡进行的测试,主要是针对FP32和FP16进行的测试,后续的TensorRT代码也会开源。目前还在整理之中。
轻量化模型
为了大家在手机端或者其他诸如树莓派、瑞芯微、AID以及全志等芯片的部署,YOLOU也对YOLOv5和YOLOX进行了轻量化设计。
下面主要是对于边缘端使用的模型进行对比,主要是借鉴之前小编参与的YOLOv5-Lite的仓库,这里也对YOLOX-Lite进行了轻量化迁移,总体结果如下表所示,YOLOX-Lite基本上可以超越YOLOv5-Lite的精度和结果。
如何使用YOLOU?
安装
这里由于使用的是YOLOv5的框架进行的搭建,因此安装形式也及其的简单,具体如下:
git clone https://github.com/jizhishutong/YOLOU
cd YOLOU
pip install -r requirements.txt
数据集
这里依旧使用YOLO格式的数据集形式,文件夹形式如下:
train: ../coco/images/train2017/
val: ../coco/images/val2017/
具体的标注文件和图像list如下所示:
├── images # xx.jpg example
│ ├── train2017
│ │ ├── 000001.jpg
│ │ ├── 000002.jpg
│ │ └── 000003.jpg
│ └── val2017
│ ├── 100001.jpg
│ ├── 100002.jpg
│ └── 100003.jpg
└── labels # xx.txt example
├── train2017
│ ├── 000001.txt
│ ├── 000002.txt
│ └── 000003.txt
└── val2017
├── 100001.txt
├── 100002.txt
└── 100003.txt
参数配置
YOLOU为了方便切换不同模型之间的训练,这里仅仅需要配置一个mode
即可切换不同的模型之间的检测和训练,具体意义如下:
注意:这里的mode
主要是对于Loss计算的选择,对于YOLOv3、YOLOv4、YOLOv5、YOLOR以及YOLOv5-Lite直接设置mode=yolo
即可,对于YOLOX以及YOLOX-Lite则设置mode=yolox
,对于YOLOv6和YOLOv7则分别设置mode=yolov6和mode=yolov7
;
注意由于YOLOv7使用了Aux分支,因此在设置YOLOv7时有一个额外的参数需要配置,即use_aux=True
。
具体训练指令如下:
python train.py --mode yolov6 --data coco.yaml --cfg yolov6.yaml --weights yolov6.pt --batch-size 32
检测指令如下:
python detect.py --source 0 # webcam
file.jpg # image
file.mp4 # video
path/ # directory
path/*.jpg # glob
'https://youtu.be/NUsoVlDFqZg' # YouTube
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
检测结果
服务端模型
轻量化模型
参考
[1].https://github.com/jizhishutong/YOLOU