手把手教你在百度飞桨云平台下运行PPYOLO-E,训练COCO数据集

百度ai云平台:飞桨AI Studio - 人工智能学习实训社区 (baidu.com)

首先感谢百度提供这样一个云平台 。ps 每天会送8个算力也就是每天可以使用8个小时V100-32G

完成任务还可以得到更多算力。


这个博客仅是运行和评估这个PPYOLOE源码,如果后续大家需要对PPYOLOE网络结构进行魔改,大家喜欢我也可以出一期改网络模型的教程。

那么不墨迹直接进入手把手环节。

我们首先进入百度飞桨平台注册账号,然后根据教程创建项目,只可以选择paddle框架

 

 默认是这样的根据自己的需求选择,接下来需要选择数据集,训练COCO选择时候选择COCO就好了,但是我发现上面第一个没有lable标签,需要lable标签的可以把下面那个也给选了。(ppyoloe用的json文件)

 接下来我们启动以后就进入了云平台服务界面,因为这最大上传不可以超过150M所以我们通过git把代码弄到上面

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

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

# 编译安装paddledet
python setup.py install

这就把代码拷贝到云平台了,下面的命令是安装相关依赖。结束后我们要把数据集解压到work/PaddleDetection/dataset/coco下,命令我就举个例子,这个还是需要一些时间的。

cd data

unzip 2017train.zip -d /work/PaddleDetection/dataset/coco

这就将数据集解压到我们指定的文件下了,接下来就可以训练了

首先我们要找到几个重要的配置文件,首先我们要在config文件下找到ppyoloe文件

aistudio@jupyter-2901782-4889022:~/work/PaddleDetection/configs/ppyoloe$ tree
.
├── application
│   ├── _base_
│   │   ├── exdark_detection.yml
│   │   ├── pcb_detection.yml
│   │   └── wgisd_detection.yml
│   ├── ppyoloe_crn_m_80e_exdark.yml
│   ├── ppyoloe_crn_m_80e_pcb.yml
│   ├── ppyoloe_crn_m_80e_wgisd.yml
│   ├── ppyoloe_plus_crn_m_80e_coco_pretrained_exdark.yml
│   ├── ppyoloe_plus_crn_m_80e_coco_pretrained_pcb.yml
│   ├── ppyoloe_plus_crn_m_80e_coco_pretrained_wgisd.yml
│   ├── ppyoloe_plus_crn_m_80e_obj365_pretrained_exdark.yml
│   ├── ppyoloe_plus_crn_m_80e_obj365_pretrained_pcb.yml
│   ├── ppyoloe_plus_crn_m_80e_obj365_pretrained_wgisd.yml
│   └── README.md
├── _base_
│   ├── optimizer_300e.yml
│   ├── optimizer_36e_xpu.yml
│   ├── optimizer_400e.yml
│   ├── optimizer_80e.yml
│   ├── ppyoloe_crn.yml
│   ├── ppyoloe_plus_crn.yml
│   ├── ppyoloe_plus_reader.yml
│   └── ppyoloe_reader.yml
├── ppyoloe_crn_l_300e_coco.yml
├── ppyoloe_crn_l_36e_coco_xpu.yml
├── ppyoloe_crn_m_300e_coco.yml
├── ppyoloe_crn_s_300e_coco.yml
├── ppyoloe_crn_s_400e_coco.yml
├── ppyoloe_crn_x_300e_coco.yml
├── ppyoloe_plus_crn_l_80e_coco.yml
├── ppyoloe_plus_crn_m_80e_coco.yml
├── ppyoloe_plus_crn_s_80e_coco.yml
├── ppyoloe_plus_crn_x_80e_coco.yml
├── README_cn.md
├── README_legacy.md
└── README.md

3 directories, 34 files

这是ppyoloe文件下的所有配置文件,我们首先看ppyoloe_crn_s_300e_coco.yml,这里我以ppyoloe-s为基准。

文件下_BASE是下是所有要经过的配置文件,log_iter为多少iter输出一次,snapshot_epochiter输为多少轮评估一次,weights为预训练权重的位置,下面那两个就是s模型的深度和宽度。

我们首先看第一个../datasets/coco_detection.yml

 这里面是定义了训练、验证、测试的路径信息,根据自己的实际情况进行更改,接下来看./_base_/optimizer_300e.yml

这里主要是训练300轮时候的初始学习率,前几轮热身,优化器,动量等。接下来看./_base_/ppyoloe_crn.yml

这里是对backbone,neck,head的传参文件,很奇怪为啥默认设置不是[1024,512,256],这应该就是ppyoloe参数小的原因吧!!!(狗头保命)

接下来是./_base_/ppyoloe_reader.yml

 这里面设置的是一些参数,有使用多少线程、验证宽高、还有多尺度训练的各个尺度是320-768,不想用可以将后面设置为Flase


到这里基本上配置文件就全部看完了接下来我们进行训练。首先我们要指定我们的设备,如果多GPU训练有几块就设置几个。

单GPU训练命令
export CUDA_VISIBLE_DEVICES=0

多GPU训练命令
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

 指定完GPU后我们在终端输入训练命令:

python tools/train.py -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml --eval

 -c后指定我们需要指定的配置文件 --eval为边训练边进行评估,还有很多可以设置的参数,需要的可以直接去train.py里查看,利用pycharm进行训练的同学,可以在train.py里直接设置默认配置

 需要啥就可以把default设置成你想要的参数。输入命令后PPYOLOE这个代码就在云平台上训练起来了。这里我们训练s模型的时候建议大家将batchsize设为32,64会爆显存。

这个训练出来的结果会保存到output里如果因为某些原因中途停止了,我们可以通过-r进行断点续训,我们先看看训练一轮后保存的权重。

 

 那个0.pdparams就是第一轮的训练权重,我们输入下面的命令就可以从第二轮开始训练(默认0为第一轮)

python tools/train.py -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml --eval -r work/PaddleDetection/output/ppyoloe_crn_s_300e_coco/0.pdparams

看一下断点训练后的样子:

 

( 这里要吐槽一下v100怎么还需要7天才能训练完,我在A40上跑yolox也就4天半就结束了,我感觉就是这个repvgg结构虽然推理的很快,但是训练的嘎嘎慢。。。难搞对设备不好的真是要命)

如果想对训练结果进行评估可以用下面这个命令:

python tools/eval.py -c -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_roadsign.pdparams

 weights就填自己训练结果权重就就行,这里做个示范用官方的训练权重进行评估。

 这里就是官方标记的300epoch的结果,感觉评估也很慢。。。不知道各位大佬是不是也这样。

这次的博客就到这里了,作为一个记录如果有错误的地方欢迎指出。如果喜欢也可以出一期对PP

YOLOE网络结构进行魔改的博客。(把torch代码转成paddle可是废了大劲)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>