加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

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

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

【51CTO.com原创稿件】

1.前言

11月1日,百度发布了Paddle Fluid的1.1版本,作为国内首个深度学习框架,PaddlePaddle对中文社区非常友好,有完善的中文社区、项目为导向的中文教程,可以让更多中文使用者更方便地进行深度学习、机器学习相关的研究和实践。我本人也非常希望PaddlePaddle能够不断发展壮大,毕竟这是国内公司为开源社区做出的一项非常有意义的贡献。为了一探Paddle Fluid 1.1版本究竟做了哪些方面的更新,笔者第一时间安装了新发布的版本,用一个基于SSD的目标检测任务来测试一下新版PaddlePaddle的表现。

2.什么是目标检测

图像识别对于做视觉的同学来说应该是一个非常熟悉的任务了,最初深度学习就是是应用于图像识别任务的,举例来说,给计算机一张汽车图片,让它判断这图片里有没有汽车。

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

对于背景干净的图片来说,这样做很有意义也比较容易。但是如果是一张包含丰富元素的图片,不仅识别难度大大提高,仅仅判断出里面有没有图片的意义也不大了,我们需要找到到底在读片的什么位置出现了一辆汽车,这就提出了一个新的任务和需求——目标检测。

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

我们的任务就是给定一张图像或是一个视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别。对于人类来说,目标检测是一个非常简单的任务。然而,计算机能够“看到”的是图像被编码之后的数字,很难解图像或是视频帧中出现了人或是物体这样的高层语义概念,,也就更加难以定位目标出现在图像中哪个区域。

与此同时,由于目标会出现在图像或是视频帧中的任何位置,目标的形态千变万化,图像或是视频帧的背景千差万别,诸多因素都使得目标检测对计算机来说是一个具有挑战性的问题。目前主流的方法是FasterRCNN、YOLO和SSD,本文使用SSD进行实验。

3.PaddlePaddle简介

第一次听到PaddlePaddle是在CCF前线研讨会上,当时几个人聊起来关于机器学习算法平台的事情,有一位小伙伴提起了这个名字,所以一段时间以来我一直认为这是一个机器学习算法平台。直到16年百度开源了PaddlePaddle我才知道,原来这是一个可以跟TensorFlow媲美的深度学习框架,主打“易用、高效、灵活、可扩展”。所以,简单来说,PaddlePaddle就是百度自研的一套深度学习框架(看过发布会后了解到,百度为此建立了一套覆盖面非常广的生态,包括金融、推荐、决策等,但笔者主要是对PaddlePaddle的核心框架进行测评,不在此浪费过多笔墨了)。

3.1如何安装

笔者的工作站是Ubuntu 16.04系统,PaddlePaddle在CentOS和Ubuntu都支持pip安装和docker安装,GPU版本在Linux下也可以完美适配。下面来看一下具体的安装步骤。

首先我们使用cat /proc/cpuinfo | grep avx2来查看我们的Ubuntu系统是否支持avx2指令集,如果发现系统返回了如下一系列信息,就说明系统是支持avx2指令集的,可以放心进行后续安装。如果不支持也没关系,在官网上可以直接下载no_avx的whl包进行安装。

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

接下来使用pip安装最新的Fluid v1.1版本的PaddlePaddle(GPU),在安装前注意,需要在机器上安装python3.5-dev才可以用pip安装PaddlePaddle。下载速度会比较慢,需要20分钟左右的下载时间。

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

安装完成后,在python里import paddle测试一下,如果成功导入则说明安装成功!

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

在更新的Paddle Fluid v1.1版本中还特意优化了对MacOS的支持,可以直接通过pip安装,也可以用源码编译安装。具体细节可参考:http://www.paddlepaddle.org/documentation/docs/zh/1.1/beginners_guide/install/Start.html

3.2PaddlePaddle的计算描述方式

框架的计算描述方式是深度学习项目开发者非常关注的一个问题。计算的描述方式经历了从Caffe1.0时代的一组连续执行的layers到TensorFlow的变量和操作构成的计算图再到PaddlePaddle Fluid[1]提出不再有模型的概念一系列的演变。那么PaddlePaddle现在是怎么描述计算的呢?

PaddlePaddle使用Program来描述模型和优化过程,可以把它简单理解为数据流的控制过程。Program由Block、Operator和Variable构成,variable和operator被组织成为多个可以嵌套的block。具体的,如果要实现一个神经网络,我们只需要通过添加必要的variable、operator来定义网络的前向计算,而反向计算、内存管理、block创建都由框架来完成。下面展示一下如何在PaddlePaddle中定义program:

以一个简单的线性回归为例,我们这样定义前向计算逻辑:

#定义输入数据类型

x = fluid.layers.data(name="x",shape=[1],dtype='float32')

#搭建全连接网络

y_predict = fluid.layers.fc(input=x,size=1,act=None)

定义好计算逻辑后,与TensorFlow一样,下一步就需要定义损失函数,feed数据,开始训练,feed数据也是在执行运算的时候进行,我们先定义一下数据,这里train_data 就是我们的输入数据,y_true是label:

train_data=numpy.array([[1.0],[2.0],[3.0],[4.0]]).astype('float32')

y_true = numpy.array([[2.0],[4.0],[6.0],[8.0]]).astype('float32')

添加均方误差损失函数(MSE),框架会自动完成反向计算:

cost = fluid.layers.square_error_cost(input=y_predict,label=y)

avg_cost = fluid.layers.mean(cost)

(编辑:核心网)

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

热点阅读