PaddleDetection学习(一)

安装

GitHub地址:https://github.com/PaddlePaddle/PaddleDetection

1、安装PaddlePaddle框架

# CUDA 10.1
python -m pip install paddlepaddle-gpu==2.2.0.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

# CPU
python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

2、安装PaddleDetection

# 克隆PaddleDetection仓库
git clone https://github.com/PaddlePaddle/PaddleDetection.git

# 安装依赖
cd PaddleDetection
pip install -r requirements.txt

# 编译安装paddledet
python setup.py install

  安装后验证:

python ppdet/modeling/tests/test_architectures.py

​ 如若出现问题:libSM.so.6: cannot open shared object file: No such file or directory

​ 解决方案:

apt-get install libsm6		# 安装对应软件包

​ 通过验证会打印如下信息:

orRXEd.png

3、案例体验

​ 通过官方给定的Demo进行体验:

export CUDA_VISIBLE_DEVICES=0
python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=true weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg

​ 预测结果在output目录下:

oUtbXd.png

PaddleDetection特点

一、模型丰富

提供丰富的模型套件,场景包含目标检测、实力分割、人脸检测、追踪等,并且提供相对应的预训练模型,涵盖了多种全球竞赛冠军方案;

套件结构图:

oUwpan.png

二、简洁易用

1、动态图开发,可灵活调试代码;

2、模块化设计,使用配置文件即可修改超参数,使用简单方便;

产业级目标检测算法

在实际落地场景中,目标检测方案有以下问题:

  • 模型选用及开发:高精度or轻量化,如何快速改进并训练新的数据集;
  • 模型优化:如何提升精度,进行版本迭代;
  • 模型部署:服务器or端侧部署,

PP-YOLO

一、YOLO最根本原理:

目标检测实质是通过滑窗的方法找到目标对应位置,YOYO用CNN实现滑窗的作用:

oUwHeJ.png

二、YOLOV3的简单结构图:

oU0NXF.png

三、PP-YOLO简介:
V2版本在COCO2017数据集上的精度达到49.5%,在640*640的输入尺寸下,FPS达到68.9;PP-YOLOV2在同等速度下,精度已经超越YOLOV5;

oUBAHJ.png

四、PP-YOLO改进点

1、MixUP数据增强:将两张图像线性相加来平滑数据集;

2、Backbone的替换:DarkNet53 —> Paddle分类中的ResNet50(用好的预训练模型);

3、Backbone中添加DCN,原理是让参与计算的点集中在物体上,涨精度但会掉一点点速度;

orWqzV.md.png

4、Neck部分加入SPP,获得不同的感受野,增加了一点参数;

o6PkCj.md.png

5、Neck部分加入Coordconv,由于Conv做one-hot转坐标任务差,所以加入坐标信息;

o6PcsP.png

6、Neck加入PAN,增强Neck部分的特征融合能力;

7、Neck加入MISH激活函数,希望处处平滑,<0处也有值;

o6kE2d.png

8、Loss部分加入IOU Loss,定位时xywh的loss一同计算,公式1-IOU的平方;

9、Loss部分加入IoU Aware Branch,也就是加多了一个分支来预测IOU;

10、加指数滑动平均EMA,平均一下更容易得到最优解;

11、SoftNMS的并行处理版本,就算IOU很大,也不直接抑制掉,而是降分;

12、调大一定Batch后调大Input size,Batch到一定值后已经稳定训练,调大Input size对小物体好;

关于PP-YOLO2的模型使用案例,可参考官方教程:https://aistudio.baidu.com/aistudio/projectdetail/3200646?forkThirdPart=1

总结

  Paddle是百度自研的一款框架,在当前很场景中已经有很好的应用;不管是目标检测、NLP、OCR,都在工业界能简单快速的应用;虽然大部分项目还是用Pytorch、Tensorflow比较多,但Paddle也是不比这两者差的一个框架;

Logo

更多推荐