PulseFocusPlatform/static/docs/featured_model/YOLOv3_ENHANCEMENT.md

56 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# YOLOv3增强模型
---
## 简介
[YOLOv3](https://arxiv.org/abs/1804.02767) 是由 [Joseph Redmon](https://arxiv.org/search/cs?searchtype=author&query=Redmon%2C+J) 和 [Ali Farhadi](https://arxiv.org/search/cs?searchtype=author&query=Farhadi%2C+A) 提出的单阶段检测器, 该检测
器与达到同样精度的传统目标检测方法相比,推断速度能达到接近两倍.
PaddleDetection实现版本中使用了 [Bag of Freebies for Training Object Detection Neural Networks](https://arxiv.org/abs/1902.04103v3) 中提出的图像增强和label smooth等优化方法精度优于darknet框架的实现版本在COCO-2017数据集上YOLOv3(DarkNet)达到`mAP(0.50:0.95)= 38.9`的精度比darknet实现版本的精度(33.0)要高5.9。同时在推断速度方面基于Paddle预测库的加速方法推断速度比darknet高30%。
在此基础上PaddleDetection对YOLOv3进一步改进进一步提升了速度和精度最终在COCO mAP上可以达到43.2。
## 方法描述
1.将[YOLOv3](https://arxiv.org/pdf/1804.02767.pdf)骨架网络更换为[ResNet50-VD](https://arxiv.org/pdf/1812.01187.pdf)。ResNet50-VD网络相比原生的DarkNet53网络在速度和精度上都有一定的优势且相较DarkNet53 ResNet系列更容易扩展针对自己业务场景可以选择ResNet18、34、101等不同结构作为检测模型的主干网络。
2.引入[Deformable Convolution v2](https://arxiv.org/abs/1811.11168)(可变形卷积)替代原始卷积操作Deformable Convolution已经在多个视觉任务中广泛验证过其效果在Yolo v3增强模型中考虑到速度与精度的平衡我们仅使用Deformable Convolution替换了主干网络中Stage5部分的3x3卷积。
3.在FPN部分增加[DropBlock](https://arxiv.org/abs/1810.12890)模块提高模型泛化能力。Dropout操作如下图b中所示是分类网络中广泛使用的增强模型泛化能力的重要手段之一。DropBlock算法相比于Dropout算法在Drop特征的时候会集中Drop掉某一块区域更适应于在检测任务中提高网络泛化能力。
![image-20200204141739840](../images/dropblock.png)
4.Yolo v3作为一阶段检测网络在定位精度上相比Faster RCNNCascade RCNN等网络结构有着其天然的劣势增加[IoU Loss](https://arxiv.org/abs/1908.03851)分支可以一定程度上提高BBox定位精度缩小一阶段和两阶段检测网络的差距。
5.增加[IoU Aware](https://arxiv.org/abs/1912.05992)分支预测输出BBox和真实BBox的IoU修正用于NMS的评分可进一步提高YOLOV3的预测性能。
6.使用[Object365数据集](https://www.objects365.org/download.html)训练得到的模型作为coco数据集上的预训练模型Object365数据集包含约60万张图片以及365种类别相比coco数据集进行预训练可以进一步提高YOLOv3的精度。
## 使用方法
### 模型训练
```bash
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
python tools/train.py -c configs/dcn/yolov3_r50vd_dcn_db_iouloss_obj365_pretrained_coco.yml
```
更多模型参数请使用``python tools/train.py --help``查看,或参考[训练、评估及参数说明](../tutorials/GETTING_STARTED_cn.md)文档
### 模型效果
| 模型 | 预训练模型 | 验证集 mAP | V100 python 预测速度FPS<sup>[1](#1)</sup> | V100 paddle预测库速度ms/image<sup>[2](#2)</sup> | P4 paddle预测库速度(ms/image) <sup>[2](#2)</sup> | 下载 | 配置文件 |
| :--------------------------------------: | :----------------------------------------------------------: | :--------: | :--------: | :------------------------------------: | :----------------------------------------------------------: | :--------: | :--------: |
| YOLOv3 DarkNet | [DarkNet pretrain](https://paddle-imagenet-models-name.bj.bcebos.com/DarkNet53_pretrained.tar) | 38.9 | 48.55 | 原生19.63<br>tensorRT-FP32: 18.01<br>tensorRT-FP16: 11.47 | 原生54.10<br>tensorRT-FP32: 47.44 | [下载链接](https://paddlemodels.bj.bcebos.com/object_detection/yolov3_darknet.tar) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.1/static/configs/yolov3_darknet.yml) |
| YOLOv3 ResNet50_vd DCN | [ImageNet pretrain](https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_vd_pretrained.tar) | 39.1 | 50.80 | 原生17.04<br>tensorRT-FP32: 16.28<br>tensorRT-FP16: 11.16 | 原生40.01<br>tensorRT-FP32: 36.66 | [下载链接](https://paddlemodels.bj.bcebos.com/object_detection/yolov3_r50vd_dcn_imagenet.tar) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.1/static/configs/dcn/yolov3_r50vd_dcn.yml) |
| YOLOv3 ResNet50_vd DCN | [Object365 pretrain](https://paddlemodels.bj.bcebos.com/object_detection/ResNet50_vd_dcn_db_obj365_pretrained.tar) | 42.5 | 50.41 | 原生16.76<br>tensorRT-FP32: 16.04<br>tensorRT-FP16: 10.70 | 原生39.64<br>tensorRT-FP32: 35.93 | [下载链接](https://paddlemodels.bj.bcebos.com/object_detection/yolov3_r50vd_dcn_obj365_v2.tar) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.1/static/configs/dcn/yolov3_r50vd_dcn_obj365_pretrained_coco.yml) |
| YOLOv3 ResNet50_vd DCN DropBlock | [Object365 pretrain](https://paddlemodels.bj.bcebos.com/object_detection/ResNet50_vd_dcn_db_obj365_pretrained.tar) | 42.8 | 49.97 | 原生16.55<br>tensorRT-FP32: 16.07<br>tensorRT-FP16: 10.69 | 原生39.72<br/>tensorRT-FP32: 35.98 | [下载链接](https://paddlemodels.bj.bcebos.com/object_detection/yolov3_r50vd_dcn_obj365_dropblock.tar) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.1/static/configs/dcn/yolov3_r50vd_dcn_db_obj365_pretrained_coco.yml) |
| YOLOv3 ResNet50_vd DCN DropBlock IoULoss | [Object365 pretrain](https://paddlemodels.bj.bcebos.com/object_detection/ResNet50_vd_dcn_db_obj365_pretrained.tar) | 43.2 | 49.91 | 原生16.46<br>tensorRT-FP32: 15.83<br>tensorRT-FP16: 10.80 | 原生39.58<br/>tensorRT-FP32: 35.61 | [下载链接](https://paddlemodels.bj.bcebos.com/object_detection/yolov3_r50vd_dcn_obj365_dropblock_iouloss.tar) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.1/static/configs/dcn/yolov3_r50vd_dcn_db_iouloss_obj365_pretrained_coco.yml) |
| YOLOv3 ResNet50_vd DCN DropBlock IoU-Aware | [Object365 pretrain](https://paddlemodels.bj.bcebos.com/object_detection/ResNet50_vd_dcn_db_obj365_pretrained.tar) | 43.6 | 48.19 | 原生17.74<br>tensorRT-FP32: 16.73<br>tensorRT-FP16: 11.74 | 原生41.39<br/>tensorRT-FP32: 37.75 | [下载链接](https://paddlemodels.bj.bcebos.com/object_detection/yolov3_r50vd_dcn_db_iouaware_obj365_pretrained_coco.pdparams) | [配置文件](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.1/static/configs/dcn/yolov3_r50vd_dcn_db_iouaware_obj365_pretrained_coco.yml) |
<a name="1">[1]</a>V100 python 预测速度是在一张Tesla V100的GPU上通过```tools/eval.py```测试所有验证集得到单位是fps(图片数/秒), cuDNN版本是7.5,包括数据加载、网络前向执行和后处理, batch size是1。
<a name="2">[2]</a>paddle预测库测试时输入图片大小为640x640 去掉前10轮warmup时间测试100轮的平均时间; 开启了参数FLAGS_cudnn_exhaustive_search=True使用代码deploy/python/infer.py测试