PulseFocusPlatform/static/docs/featured_model/YOLOv3_ENHANCEMENT.md

7.4 KiB
Raw Permalink Blame History

YOLOv3增强模型


简介

YOLOv3 是由 Joseph RedmonAli Farhadi 提出的单阶段检测器, 该检测 器与达到同样精度的传统目标检测方法相比,推断速度能达到接近两倍.

PaddleDetection实现版本中使用了 Bag of Freebies for Training Object Detection Neural Networks 中提出的图像增强和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骨架网络更换为ResNet50-VD。ResNet50-VD网络相比原生的DarkNet53网络在速度和精度上都有一定的优势且相较DarkNet53 ResNet系列更容易扩展针对自己业务场景可以选择ResNet18、34、101等不同结构作为检测模型的主干网络。

2.引入Deformable Convolution v2(可变形卷积)替代原始卷积操作Deformable Convolution已经在多个视觉任务中广泛验证过其效果在Yolo v3增强模型中考虑到速度与精度的平衡我们仅使用Deformable Convolution替换了主干网络中Stage5部分的3x3卷积。

3.在FPN部分增加DropBlock模块提高模型泛化能力。Dropout操作如下图b中所示是分类网络中广泛使用的增强模型泛化能力的重要手段之一。DropBlock算法相比于Dropout算法在Drop特征的时候会集中Drop掉某一块区域更适应于在检测任务中提高网络泛化能力。

image-20200204141739840

4.Yolo v3作为一阶段检测网络在定位精度上相比Faster RCNNCascade RCNN等网络结构有着其天然的劣势增加IoU Loss分支可以一定程度上提高BBox定位精度缩小一阶段和两阶段检测网络的差距。

5.增加IoU Aware分支预测输出BBox和真实BBox的IoU修正用于NMS的评分可进一步提高YOLOV3的预测性能。

6.使用Object365数据集训练得到的模型作为coco数据集上的预训练模型Object365数据集包含约60万张图片以及365种类别相比coco数据集进行预训练可以进一步提高YOLOv3的精度。

使用方法

模型训练

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查看,或参考训练、评估及参数说明文档

模型效果

模型 预训练模型 验证集 mAP V100 python 预测速度FPS1 V100 paddle预测库速度ms/image2 P4 paddle预测库速度(ms/image) 2 下载 配置文件
YOLOv3 DarkNet DarkNet pretrain 38.9 48.55 原生19.63
tensorRT-FP32: 18.01
tensorRT-FP16: 11.47
原生54.10
tensorRT-FP32: 47.44
下载链接 配置文件
YOLOv3 ResNet50_vd DCN ImageNet pretrain 39.1 50.80 原生17.04
tensorRT-FP32: 16.28
tensorRT-FP16: 11.16
原生40.01
tensorRT-FP32: 36.66
下载链接 配置文件
YOLOv3 ResNet50_vd DCN Object365 pretrain 42.5 50.41 原生16.76
tensorRT-FP32: 16.04
tensorRT-FP16: 10.70
原生39.64
tensorRT-FP32: 35.93
下载链接 配置文件
YOLOv3 ResNet50_vd DCN DropBlock Object365 pretrain 42.8 49.97 原生16.55
tensorRT-FP32: 16.07
tensorRT-FP16: 10.69
原生39.72
tensorRT-FP32: 35.98
下载链接 配置文件
YOLOv3 ResNet50_vd DCN DropBlock IoULoss Object365 pretrain 43.2 49.91 原生16.46
tensorRT-FP32: 15.83
tensorRT-FP16: 10.80
原生39.58
tensorRT-FP32: 35.61
下载链接 配置文件
YOLOv3 ResNet50_vd DCN DropBlock IoU-Aware Object365 pretrain 43.6 48.19 原生17.74
tensorRT-FP32: 16.73
tensorRT-FP16: 11.74
原生41.39
tensorRT-FP32: 37.75
下载链接 配置文件

[1]V100 python 预测速度是在一张Tesla V100的GPU上通过tools/eval.py测试所有验证集得到单位是fps(图片数/秒), cuDNN版本是7.5,包括数据加载、网络前向执行和后处理, batch size是1。

[2]paddle预测库测试时输入图片大小为640x640 去掉前10轮warmup时间测试100轮的平均时间; 开启了参数FLAGS_cudnn_exhaustive_search=True使用代码deploy/python/infer.py测试