README.md 4.7 KB
Newer Older
J
JiaQi Xu 已提交
1 2 3 4
## YOLOV4:You Only Look Once目标检测模型在pytorch当中的实现
---

### 目录
B
Bubbliiiing 已提交
5 6 7 8 9 10 11 12 13 14 15
1. [性能情况 Performance](#性能情况)
2. [实现的内容 Achievement](#实现的内容)
3. [所需环境 Environment](#所需环境)
4. [注意事项 Attention](#注意事项)
5. [小技巧的设置 TricksSet](#小技巧的设置)
6. [文件下载 Download](#文件下载)
7. [预测步骤 How2predict](#预测步骤)
8. [训练步骤 How2train](#训练步骤)
9. [参考资料 Reference](#Reference)

### 性能情况
B
Bubbliiiing 已提交
16 17
| 训练数据集 | 权值文件名称 | 测试数据集 | 输入图片大小 | mAP 0.5:0.95 | mAP 0.5 |
| :-----: | :-----: | :------: | :------: | :------: | :-----: |
B
Bubbliiiing 已提交
18
| VOC07+12+COCO | [yolo4_voc_weights.pth](https://github.com/bubbliiiing/yolov4-pytorch/releases/download/v1.0/yolo4_voc_weights.pth) | VOC-Test07 | 416x416 | - | 84.5 
B
Bubbliiiing 已提交
19
| COCO-Train2017 | [yolo4_weights.pth](https://github.com/bubbliiiing/yolov4-pytorch/releases/download/v1.0/yolo4_weights.pth) | COCO-Val2017 | 416x416 | 42.8 | 66.0 
B
Bubbliiiing 已提交
20

B
Bubbliiiing 已提交
21 22

### 实现的内容
J
JiaQi Xu 已提交
23 24 25 26 27 28 29
- [x] 主干特征提取网络:DarkNet53 => CSPDarkNet53
- [x] 特征金字塔:SPP,PAN
- [x] 训练用到的小技巧:Mosaic数据增强、Label Smoothing平滑、CIOU、学习率余弦退火衰减
- [x] 激活函数:使用Mish激活函数
- [ ] ……balabla

### 所需环境
J
JiaQi Xu 已提交
30
torch==1.2.0
J
JiaQi Xu 已提交
31 32

### 注意事项
J
JiaQi Xu 已提交
33
代码中的yolo4_weights.pth是基于608x608的图片训练的,但是由于显存原因。我将代码中的图片大小修改成了416x416。有需要的可以修改回来。 代码中的默认anchors是基于608x608的图片的。   
B
Bubbliiiing 已提交
34 35
**注意不要使用中文标签,文件夹中不要有空格!**   
**在训练前需要务必在model_data下新建一个txt文档,文档中输入需要分的类,在train.py中将classes_path指向该文件**
J
JiaQi Xu 已提交
36 37 38 39 40 41 42 43

### 小技巧的设置
在train.py文件下:   
1、mosaic参数可用于控制是否实现Mosaic数据增强。   
2、Cosine_scheduler可用于控制是否使用学习率余弦退火衰减。   
3、label_smoothing可用于控制是否Label Smoothing平滑。

### 文件下载
J
JiaQi Xu 已提交
44
训练所需的yolo4_weights.pth可在百度网盘中下载。  
J
JiaQi Xu 已提交
45
链接: https://pan.baidu.com/s/1VNSYi39AaqjHVbdNpW_7sw 提取码: q2iv  
J
JiaQi Xu 已提交
46 47
yolo4_weights.pth是coco数据集的权重。  
yolo4_voc_weights.pth是voc数据集的权重。
J
JiaQi Xu 已提交
48

B
Bubbliiiing 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
### 预测步骤
#### 1、使用预训练权重
a、下载完库后解压,在百度网盘下载yolo4_weights.pth或者yolo4_voc_weights.pth,放入model_data,运行predict.py,输入  
```python
img/street.jpg
```
可完成预测。  
b、利用video.py可进行摄像头检测。  
#### 2、使用自己训练的权重
a、按照训练步骤训练。  
b、在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;**model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类**
```python
_defaults = {
    "model_path": 'model_data/yolo4_weights.pth',
    "anchors_path": 'model_data/yolo_anchors.txt',
    "classes_path": 'model_data/coco_classes.txt',
    "model_image_size" : (416, 416, 3),
    "confidence": 0.5,
    "cuda": True
}

```
c、运行predict.py,输入  
```python
img/street.jpg
```
可完成预测。  
d、利用video.py可进行摄像头检测。  

J
JiaQi Xu 已提交
78 79 80 81
### 训练步骤
1、本文使用VOC格式进行训练。  
2、训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。  
3、训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。  
B
Bubbliiiing 已提交
82
4、在训练前利用voc2yolo4.py文件生成对应的txt。  
B
Bubbliiiing 已提交
83
5、再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes。**注意不要使用中文标签,文件夹中不要有空格!**   
J
JiaQi Xu 已提交
84 85 86
```python
classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
```
B
Bubbliiiing 已提交
87 88 89 90 91 92 93 94 95 96 97
6、此时会生成对应的2007_train.txt,每一行对应其**图片位置**及其**真实框的位置**
7、**在训练前需要务必在model_data下新建一个txt文档,文档中输入需要分的类,在train.py中将classes_path指向该文件**,示例如下:   
```python
classes_path = 'model_data/new_classes.txt'    
```
model_data/new_classes.txt文件内容为:   
```python
cat
dog
...
```
J
JiaQi Xu 已提交
98 99 100 101 102 103 104 105
8、运行train.py即可开始训练。

### mAP目标检测精度计算更新
更新了get_gt_txt.py、get_dr_txt.py和get_map.py文件。  
get_map文件克隆自https://github.com/Cartucho/mAP  
具体mAP计算过程可参考:https://www.bilibili.com/video/BV1zE411u7Vw

### Reference
J
JiaQi Xu 已提交
106 107 108
https://github.com/qqwweee/keras-yolo3/  
https://github.com/Cartucho/mAP  
https://github.com/Ma-Dan/keras-yolo4