加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

用PaddlePaddle 实现目标检测任务——Paddle Fluid v1.1深度测评

发布时间:2018-12-14 14:07:08 所属栏目:评测 来源:睿博远航
导读:副标题#e# 【51CTO.com原创稿件】 1.前言 11月1日,百度发布了Paddle Fluid的1.1版本,作为国内首个深度学习框架,PaddlePaddle对中文社区非常友好,有完善的中文社区、项目为导向的中文教程,可以让更多中文使用者更方便地进行深度学习、机器学习相关的研

2. 如果数据没有按要求保存,则需要在reader.py修改数据路径:

class Settings(object):

def __init__(self,

dataset=None,

data_dir=None,

label_file=None,

resize_h=300,

resize_w=300,

mean_value=[127.5, 127.5, 127.5],

apply_distort=True,

apply_expand=True,

ap_version='11point'):

self._dataset = dataset

self._ap_version = ap_version

# 把data_dir替换为数据所在路径

self._data_dir = data_dir

if 'pascalvoc' in dataset:

self._label_list = []

label_fpath = os.path.join(data_dir, label_file)

for line in open(label_fpath):

self._label_list.append(line.strip())

1. 如果遇到NoneType is not iterable的错误,一般是由于数据读取错误导致的,仔细检查文件路径应该可以解决。

2. 读取PascalVOC数据集用reader.py文件中的pascalvoc()函数,两个数据集的文件结构和标注不太一样,Paddle为我们写好了两个版本数据集的读取方法,可以直接调用。

4.5模型训练

数据读取完成后,就可以着手开始模型的训练了,这里直接使用PaddlePaddle SSD model里面的train.py进行训练:

python -u train.py

train.py里为所有的超参数都设置了缺省值,不熟悉PaddlePaddle参数调整的工程师可以直接用缺省参数进行训练,非常方便。如果需要,可以根据下表进行对应超参数的修改:

在执行脚本时,传入相应的参数值即可,例如:

python -u train.py --batch_size=16 --epoc_num=1 --dataset='pascalvoc' --pretrained_model='pretrain/ssd_mobilenet_v1_coco/'

用PaddlePaddle 实现目标检测任务——Paddle Fluid v1.1深度测评

4.5.1单机多卡配置

单机多卡的配置相较于多机多卡配置较为简单,参数需要先在GPU0上初始化,再经由fluid.ParallelExecutor() 分发到多张显卡上。这里可以使用fluid.core.get_cuda_device_count()得到可用显卡数量,也可以自己定义用几张显卡。

train_exe = fluid.ParallelExecutor(use_cuda=True, loss_name=loss.name,

main_program=fluid.default_main_program())

train_exe.run(fetch_list=[loss.name], feed={...})

4.5.2参数调整

PaddlePaddle这一套SSD模型给了使用者非常大的自由度,可以对网络结构、损失函数、优化方法等多个角度对模型进行调整。本文采用的是基于MobileNet的SSD,如果想使用基于VGG的SSD,可以自己修改工程中的mobilenet_ssd.py文件,把里面定义的MobileNet Program更改为VGG的Program描述就可以了;如果需要修改损失函数或优化方法,则在train.py中找到build_program()函数,在

with fluid.unique_name.guard("train"):

loss = fluid.layers.ssd_loss(locs, confs, gt_box, gt_label, box,

box_var)

loss = fluid.layers.reduce_sum(loss)

optimizer = optimizer_setting(train_params)

optimizer.minimize(loss)

里修改损失函数或优化器即可;修改batch_num、epoch_num、learning rate等参数可以直接在train.py传入参数中进行。

4.5.3模型保存

模型在COCO数据集上训练完后,可以用fluid.io.save_persistables()方法将模型保存下来,我们实现了如下save_model()函数来将模型保存到指定路径。

def save_model(postfix, main_prog, model_path):

model_path = os.path.join(model_save_dir, postfix)

if os.path.isdir(model_path):

shutil.rmtree(model_path)

print('save models to %s' % (model_path))

fluid.io.save_persistables(exe, model_path, main_program=main_prog)

4.5.4继续训练

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读