-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
bf530ff
commit e14a7ac
Showing
1 changed file
with
118 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,118 @@ | ||
# yolo3-tf2 | ||
这是一个yolo3-tf2的源码,可以用于训练自己的模型。 | ||
## YOLOV3:You Only Look Once目标检测模型在Tensorflow2当中的实现 | ||
--- | ||
|
||
## 目录 | ||
1. [性能情况 Performance](#性能情况) | ||
2. [所需环境 Environment](#所需环境) | ||
3. [文件下载 Download](#文件下载) | ||
4. [训练步骤 How2train](#训练步骤) | ||
5. [预测步骤 How2predict](#预测步骤) | ||
6. [评估步骤 How2eval](#评估步骤) | ||
7. [参考资料 Reference](#Reference) | ||
|
||
## 性能情况 | ||
| 训练数据集 | 权值文件名称 | 测试数据集 | 输入图片大小 | mAP 0.5:0.95 | mAP 0.5 | | ||
| :-----: | :-----: | :------: | :------: | :------: | :-----: | | ||
| COCO-Train2017 | [yolo_weights.pth](https://github.com/bubbliiiing/yolo3-pytorch/releases/download/v1.0/yolo_weights.pth) | COCO-Val2017 | 416x416 | 38.0 | 67.2 | ||
|
||
## 所需环境 | ||
tensorflow==2.2.0 | ||
|
||
## 文件下载 | ||
训练所需的yolo_weights.pth可以在百度云下载。 | ||
链接: https://pan.baidu.com/s/1ncREw6Na9ycZptdxiVMApw | ||
提取码: appk | ||
|
||
VOC数据集下载地址如下: | ||
VOC2007+2012训练集 | ||
链接: https://pan.baidu.com/s/16pemiBGd-P9q2j7dZKGDFA 提取码: eiw9 | ||
|
||
VOC2007测试集 | ||
链接: https://pan.baidu.com/s/1BnMiFwlNwIWG9gsd4jHLig 提取码: dsda | ||
|
||
## 训练步骤 | ||
### a、数据集的准备 | ||
**本文使用VOC格式进行训练,训练前需要自己制作好数据集,如果没有自己的数据集,可以通过Github连接下载VOC12+07的数据集尝试下。** | ||
训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。 | ||
训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。 | ||
### b、数据集的处理 | ||
在完成数据集的摆放之后,我们需要对数据集进行下一步的处理,目的是获得训练用的2007_train.txt以及2007_val.txt,需要用到根目录下的voc_annotation.py。 | ||
voc_annotation.py里面有一些参数需要设置。第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。 | ||
训练自己的数据集时,可以自己建立一个cls_classes.txt,里面写自己所需要区分的类别。 | ||
model_data/cls_classes.txt文件内容为: | ||
```python | ||
cat | ||
dog | ||
... | ||
``` | ||
### c、开始网络训练 | ||
**通过voc_annotation.py我们已经生成了2007_train.txt以及2007_val.txt,此时我们可以开始训练了。训练的参数较多,大家可以在下载库后仔细看注释,其中最重要的部分依然是train.py里的classes_path。** | ||
**classes_path用于指向检测类别所对应的txt,这个txt和voc_annotation.py里面的txt一样!训练自己的数据集必须要修改!** | ||
修改完classes_path后就可以运行train.py开始训练了,在训练多个epoch后,权值会生成在logs文件夹中。 | ||
## d、训练结果预测 | ||
训练结果预测需要用到两个文件,分别是yolo.py和predict.py。我们首先需要去yolo.py里面修改model_path以及classes_path,这两个参数必须要修改。 | ||
**model_path指向训练好的权值文件,在logs文件夹里。 | ||
classes_path指向检测类别所对应的txt。** | ||
完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。 | ||
|
||
## 预测步骤 | ||
### a、使用预训练权重 | ||
1. 下载完库后解压,在百度网盘下载yolo_weights.pth,放入model_data,运行predict.py,输入 | ||
```python | ||
img/street.jpg | ||
``` | ||
2. 在predict.py里面进行设置可以进行fps测试和video视频检测。 | ||
### b、使用自己训练的权重 | ||
1. 按照训练步骤训练。 | ||
2. 在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;**model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类**。 | ||
```python | ||
_defaults = { | ||
#--------------------------------------------------------------------------# | ||
# 使用自己训练好的模型进行预测一定要修改model_path和classes_path! | ||
# model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt | ||
# 如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改 | ||
#--------------------------------------------------------------------------# | ||
"model_path" : 'model_data/yolo_weight.h5', | ||
"classes_path" : 'model_data/coco_classes.txt', | ||
#---------------------------------------------------------------------# | ||
# anchors_path代表先验框对应的txt文件,一般不修改。 | ||
# anchors_mask用于帮助代码找到对应的先验框,一般不修改。 | ||
#---------------------------------------------------------------------# | ||
"anchors_path" : 'model_data/yolo_anchors.txt', | ||
"anchors_mask" : [[6, 7, 8], [3, 4, 5], [0, 1, 2]], | ||
#---------------------------------------------------------------------# | ||
# 输入图片的大小,必须为32的倍数。 | ||
#---------------------------------------------------------------------# | ||
"input_shape" : [416, 416], | ||
#---------------------------------------------------------------------# | ||
# 只有得分大于置信度的预测框会被保留下来 | ||
#---------------------------------------------------------------------# | ||
"confidence" : 0.5, | ||
#---------------------------------------------------------------------# | ||
# 非极大抑制所用到的nms_iou大小 | ||
#---------------------------------------------------------------------# | ||
"nms_iou" : 0.3, | ||
"max_boxes" : 100, | ||
#---------------------------------------------------------------------# | ||
# 该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize, | ||
# 在多次测试后,发现关闭letterbox_image直接resize的效果更好 | ||
#---------------------------------------------------------------------# | ||
"letterbox_image" : False, | ||
} | ||
``` | ||
3. 运行predict.py,输入 | ||
```python | ||
img/street.jpg | ||
``` | ||
4. 在predict.py里面进行设置可以进行fps测试和video视频检测。 | ||
|
||
## 评估步骤 | ||
1. 本文使用VOC格式进行评估。 | ||
2. 如果在训练前已经运行过voc_annotation.py文件,代码会自动将数据集划分成训练集、验证集和测试集。如果想要修改测试集的比例,可以修改voc_annotation.py文件下的trainval_percent。trainval_percent用于指定(训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1。train_percent用于指定(训练集+验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1。 | ||
3. 利用voc_annotation.py划分测试集后,前往get_map.py文件修改classes_path,classes_path用于指向检测类别所对应的txt,这个txt和训练时的txt一样。评估自己的数据集必须要修改。 | ||
4. 运行get_map.py即可获得评估结果,评估结果会保存在map_out文件夹中。 | ||
|
||
## Reference | ||
https://github.com/qqwweee/keras-yolo3 | ||
https://github.com/eriklindernoren/PyTorch-YOLOv3 | ||
https://github.com/BobLiu20/YOLOv3_PyTorch |