飞桨深度学习系列实战(一)丨PaddleDectection实践之YOLOv3

百度官方出品

由深度学习技术及应用国家工程实验室、百度技术学院联合北航人工智能专家共同撰写;百度官方出品,百度首席技术官王海峰博士作序,张钹院士、李未院士、百度集团副总裁吴甜联袂推荐的好书:《飞桨PaddlePaddle深度学习实战》

本书基于飞桨PaddlePaddle深度学习平台,以通俗易懂的方式向读者介绍深度学习技术所必须具备基础知识以及深度学习主要核心技术,包括相关的数学基础、Python编程基础、主流模型以及目标识别、机器翻译、卷积神经网络、循环神经网络、个性化推荐等深度学习应用,适合各类读者阅读,尽量做到读懂一本书即可达到“零基础”“全精通”

PaddleDectection

应用实践之YOLOv3

本部分使用MS-COCO数据集来训练Faster R-CNN目标检测算法。与前例一样,使用MS-COCO数据集来训练模型。飞桨中使用了文献 Bag of Freebies for Training Object Detection Neural Networks 中提出的图像增强和标签平滑(Label Smoothing)等优化方法,精度优于darknet框架的实现版本。

本实验代码路径为:

https://github.com/PaddleToturial-v2/DeepLearningAndPaddleTutorial-v2/tree/master/lesson10/%20yolov3

本实验的全部命令行假定在yolov3文件夹中。

1.数据准备

实验使用MS-COCO数据集训练模型,数据准备部分与上一个实验相同。

python dataset/coco/download.py

数据目录结构如下:

dataset/coco/
├── annotations
│   ├── instances_train2014.json
│   ├── instances_train2017.json
│   ├── instances_val2014.json
│   ├── instances_val2017.json
|   ...
├── train2017
│   ├── 000000000009.jpg
│   ├── 000000580008.jpg
|   ...
├── val2017
│   ├── 000000000139.jpg
│   ├── 000000000285.jpg
|   ...

2.模型训练

实验使用MS-COCO数据集训练模型,数据准备部分与上一个实验相同。

数据准备好之后,按照如下步骤来训练模型。

(1)下载预训练模型

本实验中使用DarkNet-53预训练模型。执行下述指令来下载预训练模型:

sh ./weights/download.sh

(2)安装cocoapi

本实验同样需要使用cocoapi来对数据集进行操作。cocoapi的安装与上一个实验相同。

(3)启动训练

数据和预训练模型下载完成之后,可以开始训练模型:

python train.py \
   --model_save_dir=output/ \
   --pretrain=${path_to_pretrain_model} \
   --data_dir=${path_to_data} \
   --class_num=${category_num}

其中,model_save_dir、pretrain、data_dir分别为训练完成的模型存储位置、预训练模型的路径、数据集的路径。class_num为目标类别的数量。

同样,在本实验的config.py文件中,可以修改配置量来对训练过程进行调整。

本实验的训练策略如下所述:

·采用momentum优化算法训练YOLOv3,momentum=0.9。

·学习率采用warmup算法,前4000轮学习率从0.0线性增加至0.001。在400000,450000轮时使用0.1,0.01乘子进行学习率衰减,最大训练500000轮。

·通过设置--syncbn=True可以开启Synchronized batch normalization,可以提升训练精度。

飞桨的动态图支持多进程多卡进行模型训练,本实验也不例外。启动多卡训练的步骤如下:通过设置export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7指定8卡GPU训练。在终端种运行以下命令来设置使用编号为0、1、 2、 3的GPU来巡礼那,每张卡的batch size为16。

python -m paddle.distributed.launch --selected_gpus=0,1,2,3 --started_port=9999 train.py --batch_size=16 --use_data_parallel=1

执行训练开始时,会得到类似如下输出,每次迭代打印的log数与指定卡数一致:

Iter 2, loss 9056.620443, time 3.21156
Iter 3, loss 7720.641968, time 1.63363
Iter 4, loss 6736.150391, time 2.70573
…

3.模型评估

本实验的模型评估同样采用COCO的官方评估方法。执行下述命令来启动评估:

python eval.py \
    --dataset=coco2017 \
    --weights=${path_to_weights} \
    --class_num=${category_num}

评估结果图10-19所示:

4.模型推断及可视化

本实验的模型推断执行infer.py程序,调用示例如下:

python infer.py \
   --dataset=coco2017 \
    --weights=${path_to_weights}  \
    --class_num=${category_num} \
    --image_path=data/COCO17/val2017/  \
    --image_name=000000000139.jpg \
    --draw_thresh=0.5

模型推断结果图10-20所示:


以上内容摘自《飞桨PaddlePaddle深度学习实战》一书。

百度官方出品、联合“深度学习技术及应用国家工程实验室”、PaddlePaddle总架构师共同创作的《飞桨PaddlePaddle深度学习实战》荣登京东新书榜第一名

适合谁看

01

AI领域的技术工程师,尤其是机器学习和深度学习方向的工程师

02

高校和研究机构AI专业的学生、教师和研究人员

03

希望了解AI技术的工程师和产品经理

04

对PaddlePaddle平台感兴趣的读者

内容预告

1.PaddleDectection应用实践之Faster-R-CNN

2.正向传播的计算过程

3.ERNIE应用实践  

4.传统推荐方法

5.深度学习推荐方法