ssd目标检测算法步骤ssd如何修改

深度学习界的 “吃鸡挂”——目标检测 SSD 实验
深度学习界的 “吃鸡挂”——目标检测 SSD 实验
“卧槽,又被 LYB 干了!” 背后传来一声哀嚎。
哈哈,看来,沉迷吃鸡的室友又被戒网瘾了。作为一个充满着正义的 LYB 的游戏,这人不长点眼力还真的不行啊。不过这时候一张图片吸引了我的兴趣:
网易《荒野行动》的车辆检测
能识别出视频中的汽车和人,这,不是外挂么?想到专业制裁 LYB 们的透视挂,这波我很强好吧。
“卧槽,又被 LYB 干了!” 背后传来一声哀嚎。
哈哈,看来,沉迷吃鸡的室友又被戒网瘾了。作为一个充满着正义的 LYB 的游戏,这人不长点眼力还真的不行啊。不过这时候一张图片吸引了我的兴趣:
网易《荒野行动》的车辆检测
能识别出视频中的汽车和人,这,不是外挂么?想到专业制裁 LYB 们的透视挂,这波我很强好吧。为探秘这 “外挂” 效果有多强,那我就来复现这个深度学习界的 “吃鸡挂”——SSD 目标检测。
SSD 目标检测介绍
SSD 是一种 Object Detection 方法。本文的源代码是基于论文 SSD: Single Shot MultiBox Detector(https://arxiv.org/abs/ ),实现的 keras 版本。
该文章在既保证速度,又要保证精度的情况下,提出了 SSD 物体检测模型,与现在流行的检测模型一样,将检测过程整个成一个 single deep neural network。便于训练与优化,同时提高检测速度。 SSD 将输出一系列离散化(discretization)的 bounding boxes,这些 bounding boxes 是在不同层次(layers)上的 feature maps 上生成的,并且有着不同的 aspect ratio。
使用 RussellCloud 复现
做深度学习的,大家都知道最纠结的莫过于配置环境了。那么多框架那么多库那么多版本,稍有不注意,成倍的时间都花在踩坑上了。这在做复现的时候尤为明显,我不过是想跑一下别人的代码看看效果,结果完全搞不定。
使用 RussellCloud,轻松搞定环境问题,要啥,写个 requirement 就行了!
复现前准备:
注册 RussellCloud 账号
(注册邀请码可至论坛跟帖求助获取,每位已经注册的用户也有五枚好友邀请码)
安装 russell-cli 终端工具
$ sudo pip install -U russell-cli
Clone 项目代码,Git 地址 RussellCloud/SSD_keras
# clone代码
$ git clone https://github.com/RussellCloud/SSD_keras.git
使用命令行登录:
# 使用russell login命令
$ russell login
输入 y,网页登录后在网页端拷贝账户的 Token,粘贴进终端,回车。如果你使用 Windows 的命令行,可能会出现粘贴不进的情况,请右键窗口粘贴(或者点击左上角图标)。
成功登录输出:
Login Successful as XXX
新建项目:
来到 RussellCloud 主页,进入控制台,新建一个项目。项目名随便起一个,很多都可以不填,比较重要的是默认容器环境一定要选择:keras 。
RussellCloud 创建项目页
初始化项目:
项目创建完成后记得在项目主页复制概览 ID,用于项目初始化。
# 绑定远程项目,此处&project_id&是在网页上复制的项目概览 ID
$ russell init --id &project_id&
初始化成功输出:
Project "XXX" initialized in current directory
运行项目:
初始化完成后我们就可以用 russell run 命令运行项目了,这里我们项目下实现的是一个 IPython Notebook 工程,所以我们要使用 Jupyter 模式来启动我们的项目。
# russell run 以Jupyter模式启动项目
$ russell run --mode jupyter --data df:model
成功运行 task 输出:
--------------------------------
------------------
780a8e053ffaabc9f2694
RussellCloud/ssd:1
Setting up your instance and waiting for Jupyter notebook to become available ...
Path to jupyter notebook: http://cpu.russellcloud.com/notebook/780a8e053ffaabc9f2694/
To view logs enter:
russell logs 780a8e053ffaabc9f2694
然后我们就会浏览器自动打开一个页面,这就进入到了我们的 Jupyter 环境下。
在线的 jupyter
然后我们可以看到我们所有的项目文件都展现在这个网页中了,当然我们还有挂载的 SSD_Weight 数据集在 / input/model 目录下没有显示出来。接下来我们就是打开这个 SSD.ipynb 开始运行啦!不过这里的代码有一些目录还还没有对应改好哦,所以我们这里按 cell 运行时候要及时查错,把相应的目录修改好。
成功运行完一遍,OK!
检测效果演示
“小编你这不是耍我么,吃鸡挂呢?”
当然我是有做测试的啦!只是效果不太理想(哭脸)。先上两张图感受一下。
这两张图都是来源于《绝地求生:大逃杀》的官方宣传片。第一张图算是识别出了人,可是,你识别自己有啥用喂喂喂。虽然玩家面前还有另一个人开着一辆跑车疾驰而来,但是它并没有识别出来。第二张图,穿着吉利服的 LYB,结果确实识别出来是一个鸟…… 好吧这还看着是有点像个鸟头。
我这里做的都只是一个图片的目标检测。如果做视频的目标检测,我想它应该能识别出来那辆疾驰而来的车。至于这个吉利服选手,怕是识别不出来了哈哈哈。看来,这个 “吃鸡挂” 的功力还远远不够。
但在其他图片上,这个 SSD 目标检测还是有不错的效果的:
检测出来的小猫咪
转自:“卧槽,又被 LYB 干了!” 背后传来一声哀嚎。
哈哈,看来,沉迷吃鸡的室友又被戒网瘾了。作为一个充满着正义的 LYB 的游戏,这人不长点眼力还真的不行啊。不过这时候一张图片吸引了我的兴趣:
网易《荒野行动》的车辆检测
能识别出视频中的汽车和人,这,不是外挂么?想到专业制裁 LYB 们的透视挂,这波我很强好吧。为探秘这 “外挂” 效果有多强,那我就来复现这个深度学习界的 “吃鸡挂”——SSD 目标检测。
SSD 目标检测介绍
SSD 是一种 Object Detection 方法。本文的源代码是基于论文 SSD: Single Shot MultiBox Detector(https://arxiv.org/abs/ ),实现的 keras 版本。
该文章在既保证速度,又要保证精度的情况下,提出了 SSD 物体检测模型,与现在流行的检测模型一样,将检测过程整个成一个 single deep neural network。便于训练与优化,同时提高检测速度。 SSD 将输出一系列离散化(discretization)的 bounding boxes,这些 bounding boxes 是在不同层次(layers)上的 feature maps 上生成的,并且有着不同的 aspect ratio。
使用 RussellCloud 复现
做深度学习的,大家都知道最纠结的莫过于配置环境了。那么多框架那么多库那么多版本,稍有不注意,成倍的时间都花在踩坑上了。这在做复现的时候尤为明显,我不过是想跑一下别人的代码看看效果,结果完全搞不定。
使用 RussellCloud,轻松搞定环境问题,要啥,写个 requirement 就行了!
复现前准备:
注册 RussellCloud 账号
(注册邀请码可至论坛跟帖求助获取,每位已经注册的用户也有五枚好友邀请码)
安装 russell-cli 终端工具
$ sudo pip install -U russell-cli
Clone 项目代码,Git 地址 RussellCloud/SSD_keras
# clone代码
$ git clone https://github.com/RussellCloud/SSD_keras.git
使用命令行登录:
# 使用russell login命令
$ russell login
输入 y,网页登录后在网页端拷贝账户的 Token,粘贴进终端,回车。如果你使用 Windows 的命令行,可能会出现粘贴不进的情况,请右键窗口粘贴(或者点击左上角图标)。
成功登录输出:
Login Successful as XXX
新建项目:
来到 RussellCloud 主页,进入控制台,新建一个项目。项目名随便起一个,很多都可以不填,比较重要的是默认容器环境一定要选择:keras 。
RussellCloud 创建项目页
初始化项目:
项目创建完成后记得在项目主页复制概览 ID,用于项目初始化。
# 绑定远程项目,此处&project_id&是在网页上复制的项目概览 ID
$ russell init --id &project_id&
初始化成功输出:
Project "XXX" initialized in current directory
运行项目:
初始化完成后我们就可以用 russell run 命令运行项目了,这里我们项目下实现的是一个 IPython Notebook 工程,所以我们要使用 Jupyter 模式来启动我们的项目。
# russell run 以Jupyter模式启动项目
$ russell run --mode jupyter --data df:model
成功运行 task 输出:
--------------------------------
------------------
780a8e053ffaabc9f2694
RussellCloud/ssd:1
Setting up your instance and waiting for Jupyter notebook to become available ...
Path to jupyter notebook: http://cpu.russellcloud.com/notebook/780a8e053ffaabc9f2694/
To view logs enter:
russell logs 780a8e053ffaabc9f2694
然后我们就会浏览器自动打开一个页面,这就进入到了我们的 Jupyter 环境下。
在线的 jupyter
然后我们可以看到我们所有的项目文件都展现在这个网页中了,当然我们还有挂载的 SSD_Weight 数据集在 / input/model 目录下没有显示出来。接下来我们就是打开这个 SSD.ipynb 开始运行啦!不过这里的代码有一些目录还还没有对应改好哦,所以我们这里按 cell 运行时候要及时查错,把相应的目录修改好。
成功运行完一遍,OK!
检测效果演示
“小编你这不是耍我么,吃鸡挂呢?”
当然我是有做测试的啦!只是效果不太理想(哭脸)。先上两张图感受一下。
这两张图都是来源于《绝地求生:大逃杀》的官方宣传片。第一张图算是识别出了人,可是,你识别自己有啥用喂喂喂。虽然玩家面前还有另一个人开着一辆跑车疾驰而来,但是它并没有识别出来。第二张图,穿着吉利服的 LYB,结果确实识别出来是一个鸟…… 好吧这还看着是有点像个鸟头。
我这里做的都只是一个图片的目标检测。如果做视频的目标检测,我想它应该能识别出来那辆疾驰而来的车。至于这个吉利服选手,怕是识别不出来了哈哈哈。看来,这个 “吃鸡挂” 的功力还远远不够。
但在其他图片上,这个 SSD 目标检测还是有不错的效果的:
检测出来的小猫咪
转自:“卧槽,又被 LYB 干了!” 背后传来一声哀嚎。
哈哈,看来,沉迷吃鸡的室友又被戒网瘾了。作为一个充满着正义的 LYB 的游戏,这人不长点眼力还真的不行啊。不过这时候一张图片吸引了我的兴趣:
网易《荒野行动》的车辆检测
能识别出视频中的汽车和人,这,不是外挂么?想到专业制裁 LYB 们的透视挂,这波我很强好吧。为探秘这 “外挂” 效果有多强,那我就来复现这个深度学习界的 “吃鸡挂”——SSD 目标检测。
SSD 目标检测介绍
SSD 是一种 Object Detection 方法。本文的源代码是基于论文 SSD: Single Shot MultiBox Detector(https://arxiv.org/abs/ ),实现的 keras 版本。
该文章在既保证速度,又要保证精度的情况下,提出了 SSD 物体检测模型,与现在流行的检测模型一样,将检测过程整个成一个 single deep neural network。便于训练与优化,同时提高检测速度。 SSD 将输出一系列离散化(discretization)的 bounding boxes,这些 bounding boxes 是在不同层次(layers)上的 feature maps 上生成的,并且有着不同的 aspect ratio。
使用 RussellCloud 复现
做深度学习的,大家都知道最纠结的莫过于配置环境了。那么多框架那么多库那么多版本,稍有不注意,成倍的时间都花在踩坑上了。这在做复现的时候尤为明显,我不过是想跑一下别人的代码看看效果,结果完全搞不定。
使用 RussellCloud,轻松搞定环境问题,要啥,写个 requirement 就行了!
复现前准备:
注册 RussellCloud 账号
(注册邀请码可至论坛跟帖求助获取,每位已经注册的用户也有五枚好友邀请码)
安装 russell-cli 终端工具
$ sudo pip install -U russell-cli
Clone 项目代码,Git 地址 RussellCloud/SSD_keras
# clone代码
$ git clone https://github.com/RussellCloud/SSD_keras.git
使用命令行登录:
# 使用russell login命令
$ russell login
输入 y,网页登录后在网页端拷贝账户的 Token,粘贴进终端,回车。如果你使用 Windows 的命令行,可能会出现粘贴不进的情况,请右键窗口粘贴(或者点击左上角图标)。
成功登录输出:
Login Successful as XXX
新建项目:
来到 RussellCloud 主页,进入控制台,新建一个项目。项目名随便起一个,很多都可以不填,比较重要的是默认容器环境一定要选择:keras 。
RussellCloud 创建项目页
初始化项目:
项目创建完成后记得在项目主页复制概览 ID,用于项目初始化。
# 绑定远程项目,此处&project_id&是在网页上复制的项目概览 ID
$ russell init --id &project_id&
初始化成功输出:
Project "XXX" initialized in current directory
运行项目:
初始化完成后我们就可以用 russell run 命令运行项目了,这里我们项目下实现的是一个 IPython Notebook 工程,所以我们要使用 Jupyter 模式来启动我们的项目。
# russell run 以Jupyter模式启动项目
$ russell run --mode jupyter --data df:model
成功运行 task 输出:
--------------------------------
------------------
780a8e053ffaabc9f2694
RussellCloud/ssd:1
Setting up your instance and waiting for Jupyter notebook to become available ...
Path to jupyter notebook: http://cpu.russellcloud.com/notebook/780a8e053ffaabc9f2694/
To view logs enter:
russell logs 780a8e053ffaabc9f2694
然后我们就会浏览器自动打开一个页面,这就进入到了我们的 Jupyter 环境下。
在线的 jupyter
然后我们可以看到我们所有的项目文件都展现在这个网页中了,当然我们还有挂载的 SSD_Weight 数据集在 / input/model 目录下没有显示出来。接下来我们就是打开这个 SSD.ipynb 开始运行啦!不过这里的代码有一些目录还还没有对应改好哦,所以我们这里按 cell 运行时候要及时查错,把相应的目录修改好。
成功运行完一遍,OK!
检测效果演示
“小编你这不是耍我么,吃鸡挂呢?”
当然我是有做测试的啦!只是效果不太理想(哭脸)。先上两张图感受一下。
这两张图都是来源于《绝地求生:大逃杀》的官方宣传片。第一张图算是识别出了人,可是,你识别自己有啥用喂喂喂。虽然玩家面前还有另一个人开着一辆跑车疾驰而来,但是它并没有识别出来。第二张图,穿着吉利服的 LYB,结果确实识别出来是一个鸟…… 好吧这还看着是有点像个鸟头。
我这里做的都只是一个图片的目标检测。如果做视频的目标检测,我想它应该能识别出来那辆疾驰而来的车。至于这个吉利服选手,怕是识别不出来了哈哈哈。看来,这个 “吃鸡挂” 的功力还远远不够。
但在其他图片上,这个 SSD 目标检测还是有不错的效果的:
检测出来的小猫咪
转自:http://blog.csdn.net/Y0W1as5eg37urFdS/article/details/
用云栖社区APP,舒服~
【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。&&
阿里云机器学习是基于阿里云分布式计算引擎的一款机器学习算法平台。用户通过拖拉拽的方式可视化的...
基于深度学习技术及阿里巴巴多年的海量数据支撑, 提供多样化的内容识别服务,能有效帮助用户降低...
服务底层使用经国家密码管理局检测认证的硬件密码机,通过虚拟化技术,帮助用户满足数据安全方面的...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...RCNN、RFCN和SSD 深度学习目标检测模型全面综述:Faster-智察
RCNN、RFCN和SSD 深度学习目标检测模型全面综述:Faster作者:智察 / 公众号:Infi-inspection发表时间 : 点击上方“智察”可以订阅哦注:本文由智察机器人利用深度学习和知识图谱等技术, 从海量信息中自动发现并生成。来源:medium编译:机器之心编辑:智察(ID:Infi-inspection)转自:机器之心本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载FasterR-CNN、R-FCN和SSD是三种目前最优且应用最广泛的目标检测模型,其他流行的模型通常与这三者类似。本文介绍了深度学习目标检测的三种常见模型:FasterR-CNN、R-FCN和SSD。图为机器之心小编家的边牧「Oslo」被 YOLO 识别为猫随着自动驾驶汽车、智能监控摄像头、面部识别以及大量对人有价值的应用出现,快速、精准的目标检测系统市场也日益蓬勃。这些系统除了可以对图像中的每个目标进行识别、分类以外,它们还可以通过在该目标周围绘制适当大小的边界框(boundingbox)来对其进行定位。这让目标检测技术较传统计算机视觉处理技术——图像分类而言,难度上升了不少。然而,幸运的是,目前最成功的目标检测方法是对图像分类模型的扩展。几个月前,Google为Tensorflow发布了一个新的目标检测API。与其同时发布的还有针对一些特定模型预构建的框架和权重。基于MobileNets框架的SingleShotMultiboxDetector(SSD)模型。基于InceptionV2框架的SSD模型。使用ResNet-101框架的基于Region的全卷积网络(R-FCN)模型。基于ResNet-101框架的FasterRCNN模型。基于InceptionResNetv2的FasterRCNN模型。在以前的文章中,机器之心曾梳理了Xception、Inception和ResNet等基本网络的架构和背后的设计思路。在本文中,我们会对Tensorflow的目标检测模型FasterR-CNN、R-FCN以及SSD做同样的介绍。希望在结束本文的阅读之后,你可以了解到以下两点:1、深度学习是如何在目标检测中得到应用的。2、这些目标检测模型的设计是如何在相互之间获得灵感的同时也有各自的特点。FASTERR-CNN模型FasterR-CNN模型现在是一个典型的基于深度学习的目标检测模型。在它的启发下,出现了很多目标检测与分割模型,比如本文中我们将会看到的另外两个模型。然而,要真正开始了解FasterR-CNN我们需要理解其之前的R-CNN和FastR-CNN。所以,现在我们快速介绍一下FasterR-CNN的来龙去脉。R-CNN模型如果要拟人化比喻,那R-CNN肯定是FasterR-CNN的祖父了。换句话说,R-CNN是一切的开端。R-CNN,或称 Region-based Convolutional Neural Network,其工作包含了三个步骤:借助一个可以生成约2000个regionproposal的「选择性搜索」(SelectiveSearch)算法,R-CNN可以对输入图像进行扫描,来获取可能出现的目标。在每个regionproposal上都运行一个卷积神经网络(CNN)。将每个CNN的输出都输入进:a)一个支持向量机(SVM),以对上述区域进行分类。b)一个线性回归器,以收缩目标周围的边界框,前提是这样的目标存在。下图具体描绘了上述3个步骤:换句话说,首先,我们给出一些建议区域,然后,从中提取出特征,之后,再根据这些特征来对这些区域进行分类。本质而言,我们将目标检测转化成了图像分类问题。R-CNN模型虽然非常直观,但是速度很慢。FastR-CNN直接承接R-CNN的是FastR-CNN。FastR-CNN在很多方面与R-CNN类似,但是,凭借两项主要的增强手段,其检测速度较R-CNN有所提高:在推荐区域之前,先对图像执行特征提取工作,通过这种办法,后面只用对整个图像使用一个CNN(之前的R-CNN网络需要在2000个重叠的区域上分别运行2000个CNN)。将支持向量机替换成了一个softmax层,这种变化并没有创建新的模型,而是将神经网络进行了扩展以用于预测工作。FastR-CNN模型结构示意图:如图所见,现在我们基于网络最后的特征图(而非原始图像)创建了regionproposals。因此,我们对整幅图只用训练一个CNN就可以了。此外,我们使用了一个softmax层来直接输出类(class)的概率,而不是像之前一样训练很多不同的SVM去对每个目标类(objectclass)进行分类。现在,我们只用训练一个神经网络,而之前我们需要训练一个神经网络以及很多SVM。就速度而言,FastR-CNN提升了许多。然而,存在一大未解决的瓶颈:用于生成regionproposal的选择搜索算法(selectivesearchalgorithm)。FASTERR-CNN到现在为止,我们完成了对FasterR-CNN两大早期模型的溯源。下面我们开始研究FasterR-CNN。FasterR-CNN的主要创新是,它用一个快速神经网络代替了之前慢速的选择搜索算法(selectivesearchalgorithm)。具体而言,它引入了一个regionproposal网络(RPN)。RPN工作原理:在最后卷积得到的特征图上,使用一个3x3的窗口在特征图上滑动,然后将其映射到一个更低的维度上(如256维),在每个滑动窗口的位置上,RPN都可以基于k个固定比例的anchorbox(默认的边界框)生成多个可能的区域。每个regionproposal都由两部分组成:a)该区域的objectness分数。b)4个表征该区域边界框的坐标。换句话说,我们会观察我们最后特征图上的每个位置,然后关注围绕它的k个不同的anchorbox:一个高的框、一个宽的框、一个大的框等等。对于每个这些框,不管我们是否认为它包含一个目标,以及不管这个框里的坐标是什么,我们都会进行输出。下图展示了在单个滑动框位置上发生的操作:图中2k分数代表了k中每一个边界框正好覆盖「目标」的softmax概率。这里注意到,尽管RPN输出了边界框的坐标,然而它并不会去对任何可能的目标进行分类:它惟一的工作仍然是给出对象区域。如果一个anchorbox在特定阈值之上存在一个「objectness」分数,那么这个边界框的坐标就会作为一个regionproposal被向前传递。一旦我们有了regionproposal,我们就直接把他们输入一个本质上是FastR-CNN的模型。我们再添加一个池化层、一些全连接层以及最后,一个softmax分类层和边界框回归器(boundingboxregressor)。所以在某种意义上,FasterR-CNN=RPN+FastR-CNN。总体而言,FasterR-CNN较FastR-CNN在速度上有了大幅提升,而且其精确性也达到了最尖端的水平。值得一提的是,尽管未来的模型能够在检测速度上有所提升,但是几乎没有模型的表现能显著超越FasterR-CNN。换句话说,FasterR-CNN也许不是目标检测最简单、最快的方法,但是其表现还是目前最佳的。例如,Tensorflow应用InceptionResNet打造的FasterR-CNN就是他们速度最慢,但却最精准的模型。也许FasterR-CNN看起来可能会非常复杂,但是它的核心设计还是与最初的R-CNN一致:先假设对象区域,然后对其进行分类。目前,这是很多目标检测模型使用的主要思路,包括我们接下来将要提到的这个模型。R-FCN还记得FastR-CNN是如何通过在所有regionproposal上共享同一个CNN,来改善检测速度的吗?这也是设计R-FCN的一个动机:通过最大化共享计算来提升速度。R-FCN,或称Region-basedFullyConvolutionalNet(基于区域的全卷积网络),可以在每个输出之间完全共享计算。作为全卷积网络,它在模型设计过程中遇到了一个特殊的问题。一方面,当对一个目标进行分类任务时,我们希望学到模型中的位置不变性(locationinvariance):无论这只猫出现在图中的哪个位置,我们都想将它分类成一只猫。另一方面,当进行目标检测任务时,我们希望学习到位置可变性(locationvariance):如果这只猫在左上角,那么我们希望在图像左上角这个位置画一个框。所以,问题出现了,如果想在网络中100%共享卷积计算的话,我们应该如何在位置不变性(locationinvariance)和位置可变性(locationvariance)之间做出权衡呢?R-FCN的解决方案:位置敏感分数图每个位置敏感分数图都代表了一个目标类(objectclass)的一个相关位置。例如,只要是在图像右上角检测到一只猫,就会激活一个分数图(scoremap)。而当系统看见左下角出现一辆车时,另一个分数图也将会被激活。本质上来讲,这些分数图都是卷积特征图,它们被训练来识别每个目标的特定部位。以下是R-FCN的工作方式:在输入图像上运行一个CNN(本例中使用的是ResNet)。添加一个全卷积层,以生成位置敏感分数图的scorebank。这里应该有k?(C+1)个分数图,其中,k?代表切分一个目标的相关位置的数量(比如,3?代表一个3x3的空间网格),C+1代表C个类外加一个背景。运行一个全卷积regionproposal网络(RPN),以生成感兴趣区域(regionsofinterest,RoI)。对于每个RoI,我们都将其切分成同样的k?个子区域,然后将这些子区域作为分数图。对每个子区域,我们检查其scorebank,以判断这个子区域是否匹配具体目标的对应位置。比如,如果我们处在「上-左」子区域,那我们就会获取与这个目标「上-左」子区域对应的分数图,并且在感兴趣区域(RoIregion)里对那些值取平均。对每个类我们都要进行这个过程。一旦每个k?子区域都具备每个类的「目标匹配」值,那么我们就可以对这些子区域求平均值,得到每个类的分数。通过对剩下C+1个维度向量进行softmax回归,来对RoI进行分类。下面是R-FCN的示意图,用RPN生成RoI:当然,即便有上述文字以及图片的解释,你可能仍然不太明白这个模型的工作方式。老实说,当你可以实际看到R-FCN的工作过程时,你会发现理解起来会更加简单。下面就是一个在实践中应用的R-FCN,它正在从图中检测一个婴儿:我们只用简单地让R-FCN去处理每个regionproposal,然后将其切分成子区域,在子区域上反复询问系统:「这看起来像是婴儿的『上-左』部分吗?」,「这看起来像是婴儿的『上-中』部分吗?」,「这看起来像是婴儿的『上-右』部分吗?」等等。系统会对所有类重复这个过程。如果有足够的子区域表示「是的,我的确匹配婴儿的这个部分!」那么RoI就会通过对所有类进行softmax回归的方式被分类成一个婴儿。」借助这种设置,R-FCN便能同时处理位置可变性(locationvariance)与位置不变性(locationinvariance)。它给出不同的目标区域来处理位置可变性,让每个regionproposal都参考同一个分数图scorebank来处理位置不变形。这些分数图应该去学习将一只猫分类成猫,而不用管这只猫在在那个位置。最好的是,由于它是全卷积的,所以这意味着网络中所有的计算都是共享的。因此,R-FCN比FasterR-CNN快了好几倍,并且可以达到类似的准确率。SSD我们最后一个模型是SSD,即Single-ShotDetector。和R-FCN一样,它的速度比FasterR-CNN要快很多,但其工作方式却和R-FCN存在显著不同。我们前两个模型分两个步骤执行regionproposal和regionclassification。首先,它们使用一个regionproposal网络来生成感兴趣区域(regionofinterest);然后,它们既可以用全连接层也可以用位置敏感卷积层来对那些区域进行分类。然而,SSD可以在单个步骤中完成上述两个步骤,并且在处理图像的同时预测边界框和类。具体而言,给定一个输入图像以及一系列真值标签,SSD就会进行如下操作:在一系列卷积层中传递这个图像,产生一系列大小不同的特征图(比如10x10、6x6、3x3等等。)对每个这些特征图中的每个位置而言,都使用一个3x3的卷积滤波器(convolutionalfilter)来评估一小部分默认的边界框。这些默认边的界框本质上等价于FasterR-CNN的anchorbox。对每个边界框都同时执行预测:a)边界框的偏移;b)分类的概率。在训练期间,用这些基于IoU(IntersectionoverUnion,也被称为Jaccard相似系数)系数的预测边界框来匹配正确的边界框。被最佳预测的边界框将被标签为「正」,并且其它边界框的IoU大于0.5。SSD的工作方式听上去很直接,但是训练它却会面临一个不一般的挑战。在之前那两个模型那里,regionproposal网络可以确保每个我们尝试进行分类的对象都会有一个作为「目标」的最小概率值。然而,在SSD这里,我们跳过了这个筛选步骤。我们从图像中每个单一位置那里进行分类并画出形状、大小不同的边界框。通过这种办法,我们可以生成比别的模型更多的边界框,但是它们基本上全是负面样本。为了解决这个问题,SSD进行了两项处理。首先,它使用非极大值抑制(nonmaximumsuppression,NMS)技术来将高度重叠的边界框整合成一个。换句话说,如果有4个形状、尺寸等类似的边界框中有同一只狗,那么NMS就会保留信度最高的那个边界框而抛弃掉其它的。第二,SSD模型使用了一种被称为hardnegativemining的技术以在训练过程中让类保持平衡。在hardnegativemining中,只有那些有最高训练损失(trainingloss)的负面样本(negativeexample)子集才会在每次训练迭代中被使用。SSD的「正负」比一直保持在1:3。下图是SSD的架构示意图:如上所述,最终有可缩小尺寸的「额外特征层」。这些尺寸变化的特征图有助于捕捉不同大小的目标。例如,下面是一个正在执行的SSD。在更小的特征图中(比如4x4),每一单元覆盖图像的一个更大区域,使其探测更大的目标。regionproposal与分类同时被执行:假设p为目标类别,每个边界框与一个(4+p)-维度向量相连接,其输出4个框偏移坐标和p分类概率。在最后一步中,softmax又一次被用来分类目标。最终,SSD与最初的两个模型并无不同。它简单跳过「regionproposal」这一步,而不是同时考虑图像每个位置的每个边界及其分类。由于SSD一次性完成所有,它是三个模型中最快的,且相对而言依然表现出色。结论FasterR-CNN、R-FCN和SSD是三种目前最优且应用最广泛的目标检测模型。其他流行的模型通常与这三者类似,都依赖于深度CNN(如ResNet、Inception等)来进行网络初始化,且大部分遵循同样的proposal/分类pipeline。但是,使用这些模型需要了解Tensorflow的API。Tensorflow有一份使用这些模型的初学者教程。原文链接:https://medium.com/towards-data-science/deep-learning-for-object-detection-a-comprehensive-review-d9End.文章由智察搜索推荐引擎,根据用户喜好自动生成,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容![声明]本站文章版权归原作者所有内容为作者个人观点本站只提供参考并不构成任何投资及应用建议。本站拥有对此声明的最终解释权。扫描二维码,关注微信公众号:智察(ID:Infi-inspection),我们有更多更好的内容推荐给大家!相关文章猜你喜欢欧美音乐沙龙DIY留学全球币界YTB精彩视频大秦O范儿#统计代码

我要回帖

更多关于 ssd目标检测算法 的文章

 

随机推荐