README.md 5.72 KB
Newer Older
acqpriwny1's avatar
acqpriwny1 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# YOLOV5测试

## 1.模型介绍

[YOLO](https://arxiv.org/abs/1506.02640)(You Only Look Once)是一种流行的对象检测和图像分割模型,由华盛顿大学的Joseph Redmon和Ali Farhadi开发。YOLO 于 2015 年推出,因其高速和准确性而迅速普及。

- [YOLOv2](https://arxiv.org/abs/1612.08242)于2016年发布,通过合并批处理规范化、锚框和维度集群改进了原始模型。
- [YOLOv3](https://pjreddie.com/media/files/papers/YOLOv3.pdf) 于 2018 年推出,使用更高效的主干网络、多个锚点和空间金字塔池化进一步增强了模型的性能。
- [YOLOv4](https://arxiv.org/abs/2004.10934) 于 2020 年发布,引入了 Mosaic 数据增强、新的无锚检测头和新的损失函数等创新。
- [YOLOv5](https://github.com/ultralytics/yolov5) 进一步提升了模型的性能,并增加了超参数优化、集成实验跟踪和自动导出为流行导出格式等新功能。

## 2.模型结构

YOLOv5是一种基于深度学习的目标检测算法,它的模型结构主要包括backbone、neck、head和loss四个部分。其中,backbone是用于提取特征的主干网络,neck是用于融合不同层次的特征,head是用于预测目标的检测头,loss是用于计算损失的函数。YOLOv5的模型结构相比YOLOv4有所改进,主要体现在backbone和head上。

更具体地说,YOLOv5的backbone采用CSPDarknet53网络结构,其中CSP表示Cross Stage Partial Network,它可以有效地减少参数量和计算量。neck采用FPN+PAN的结构,其中FPN表示Feature Pyramid Network,PAN表示Path Aggregation Network,它们可以将不同层次的特征进行融合。head采用YOLOv3中的anchor-based检测头,并在此基础上加入了SPP结构和SAM结构,以提高检测精度。loss采用GIOU Loss作为bounding box的损失,并使用二进制交叉熵和Logits损失函数计算类概率和目标得分的损失。

## 3.数据集

使用COCO2017数据集,COCO2017数据集是一个用于目标检测、分割、关键点检测和图像描述的数据集,由微软公司制作收集。该数据集包含超过33万张图像,其中大约20万张图像用于训练,6万张图像用于验证,7万张图像用于测试。COCO2017数据集中的物体类别共有80个,包括人、动物、交通工具、家具等。

COCO2017数据集中的每个物体都有一个矩形边界框和一个类别标签,同时还有一些物体的关键点标注和图像描述信息。COCO2017数据集的标注格式采用JSON文件存储,其中包含了每个物体的位置、类别、关键点等信息。

## 4.训练

liuhy's avatar
liuhy committed
26
### 环境配置
acqpriwny1's avatar
acqpriwny1 committed
27
28
29
30
31
32

提供光源拉取的训练镜像

```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10.1-py38-latest
```
liuhy's avatar
liuhy committed
33
34
35

python依赖安装:

acqpriwny1's avatar
acqpriwny1 committed
36
37
38
39
40
41
42
43
44
45
46
```
pip3 install -r requirement.txt
```

本地安装PyTorch1.7

```
    # 安装torch
    pip install /public/software/apps/DeepLearning/whl/dtk-21.04/torch-1.8.0a0+56b43f4-cp37-cp37m-linux_x86_64.whl
    # 安装torchvision
    pip install /public/software/apps/DeepLearning/whl/dtk-21.04/torchvision-0.9.0a0-cp37-cp37m-linux_x86_64.whl
liuhy's avatar
liuhy committed
47

acqpriwny1's avatar
acqpriwny1 committed
48
49
50
51
```
在本地创建一个pytorch_env.sh的文件,添加环境变量:
```
vi  ~/pytorch_env.sh
liuhy's avatar
liuhy committed
52

acqpriwny1's avatar
acqpriwny1 committed
53
54
export
LD_LIBRARY_PATH=/public/software/apps/DeepLearning/PyTorch_Lib/lib:/public/software/apps/DeepLearning/PyTorch_Lib/lmdb-0.9.24-build/lib:/public/software/apps/DeepLearning/PyTorch_Lib/opencv-2.4.13.6-build/lib:/public/software/apps/DeepLearning/PyTorch_Lib/openblas-0.3.7-build/lib:$LD_LIBRARY_PATH
liuhy's avatar
liuhy committed
55

acqpriwny1's avatar
acqpriwny1 committed
56
57
58
# 记得以后每次登录新的节点时,一定要执行一次source ~/pytorch_env.sh命令,这关系到服务器能不能找到PyTorch
source ~/pytorch_env.sh
```
liuhy's avatar
liuhy committed
59
### 预训练模型
acqpriwny1's avatar
acqpriwny1 committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

预训练模型均在models文件夹内

### 单卡训练

```
export HIP_VISIBLE_DEVICES=0

python train.py --data data/citrus.yaml --cfg models/yolov5s.yaml  --weights weights/yolov5s.pt --epochs 150 --batch-size 4
```

### 单节点多卡训练

```
#以单机四卡为例子
export HIP_VISIBLE_DEVICES=0,1,2,3

python3 -m torch.distributed.run --nproc_per_node 4 train.py --batch 128 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --device 0,1,2,3 --epochs 1000 2>&1 | tee  yolov5m_4.log
```

其中--nproc_per_node参数代表卡的个数,--batch参数代表global batchsize的大小


## 推理测试
```
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

```
detect.py 在各种来源上运行 YOLOv5 推论,从最新的 YOLOv5 版本中自动下载模型,并将结果保存到 runs/detect 中。推理源示例如下
```
python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images/
Image(filename='runs/detect/exp/zidane.jpg', width=600)
```

将训练好的pt文件导入weight参数中即可,推理代码如下:

```
python3 val.py --data data/coco-v5.yaml --weights runs/train/exp12/weights/best.pt --device 0
```


## 准确率数据

|  模型   | size(pixels) | map0.5:0.95 | map0.5 |
| :-----: | :------: | :---------: | :----: |
| yolov5n |   640   |    27.9     |  46.8  |
| yolov5s |   640   |    37.2     |  57.1  |
| yolov5m |   640   |    44.3     |  64.1  |
| yolov5l |   640   |     48      |  67.3  |
| yolov5x |   640   |    49.6     |  68.6  |



119
## 源码仓库及问题反馈
acqpriwny1's avatar
acqpriwny1 committed
120
121
https://developer.hpccube.com/codes/acqpriwny1/yolov-5-pytorch/

liuhy's avatar
liuhy committed
122
## 参考
acqpriwny1's avatar
acqpriwny1 committed
123
124
125
126

[GitHub - ultralytics/yolov5 at v6.1]https://github.com/ultralytics/yolov5/releases/tag/v6.1)