当前位置: 首页 > 编程日记 > 正文

深度学习目标检测法进化史,看这一篇就够了

640?wx_fmt=jpeg


作者 | 黄浴,奇点汽车美研中心首席科学家兼总裁

来源 | 转载自知乎专栏自动驾驶的挑战和发展


本文将介绍自动驾驶中的深度学习目标检测的基本概念和方法,并对几个主要 Anchor free 方法进行了比较,希望对读者有所帮助,以下为正文:


Anchor free深度学习的目标检测方法是回归,以前是没有anchor(“锚”?)的,现在觉得还是去掉anchor好,主要是因为灵活性强,今后硬件芯片兼容性好。


回顾一下,目标检测分单步和两步,单步法的历史中从SSD和YOLO-2开始引入锚框(anchor box),而两步法直到Faster RCNN才开始采用“锚”的想法。 

什么是锚框呢?其实就是固定 的参考框。锚框的出现,使得训练时可以预设一组不同尺度不同位置的锚框,覆盖几乎所有位置和尺度, 每个锚框负责检测与其区域交叉比(intersection over union, IOU)大于阈值的目标,这样问题就转换为"这个锚框中有没有认识的目标,目标框偏离锚框多远"的问题。


  • UnitBox: An Advanced Object Detection Network

  • Densebox

  • Yolo-1/(-2/3)

  • CornerNet

  • ExtremeNet

  • FSAF: Feature Selective Anchor-Free

  • FCOS: Fully Convolutional One-Stage

  • FoveaBox

  • Center and Scale Prediction: A Box-free Approach for Object Detection

  • Region Proposal by Guided Anchoring(GA-RPN)

  • CenterNet: Objects as Points

  • CenterNet: Keypoint Triplets for Object Detection

  • CornerNet-Lite: Efficient Keypoint Based Object Detection


UnitBox: 一个先进的检测网络


主要思想:Intersection over Union (IoU) loss function for bounding box prediction


640?wx_fmt=jpeg

架构


640?wx_fmt=jpeg

IoU loss vs l2 loss


640?wx_fmt=jpeg

l2 loss和IoU loss 结果比较


DenseBox:统一地标定位和目标检测



基本思想:直接预测目标框和目标类。



640?wx_fmt=jpeg




系统流水线:1) 图像金字塔. 2) 类似编码器-解码器. 3) feature map 转换成 bounding boxes,加NMS处理。


640?wx_fmt=jpeg

DenseBox


640?wx_fmt=jpeg

地标定位 DenseBox 


YOLO目标检测


检测定义为一个张量的回归问题,直接通过张量的估计得到目标框位置和类别概率。


640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg



注:之后YOLO-2/3版采用了anchor方法,这里也加在一起参考。


YOLO9000: 更好、更快、更强


Darknet-19:19卷积层和5个最大池层


9418 种类别的WordTree


640?wx_fmt=jpeg

使用WordTree层次结构组合数据集


640?wx_fmt=jpeg

具有尺寸先验和位置预测的边界框


640?wx_fmt=jpeg

 VOC 和 COCO上的聚合框维度


640?wx_fmt=jpeg

结果


YOLOv3: 逐步改进


640?wx_fmt=jpeg

Darknet-53


CornerNet: 将对象检测为配对关键点


把检测目标框变成一对关键点的问题,即左上角和右下角,这样就消除了锚框的设计麻烦。另外,采用的角点池化(corner pooling)技术帮助CNN更好地定位角点位置。下图给出了系统流程图:CNN模型输出两个关键点的各自热图(heatmap),同时各跟一个嵌入向量。同一个目标的角点,训练后的神经网络会预测类似的嵌入。



640?wx_fmt=jpeg



将对象检测为组合在一起的一对边界框角



下图是定位的角点池化技术:每个特征图通道沿着两个方向取最大值,然后求和。


640?wx_fmt=jpeg

Corner pooling


640?wx_fmt=jpeg

用于训练的“Ground-truth” 热图


测试流程图:沙漏型的核心网络的后面跟着两个预测模块定位和聚类焦点。


640?wx_fmt=jpeg


定义loss函数聚类corner:push和pull




640?wx_fmt=jpeg


ExtremeNet:通过分组极端点和中心点进行自下而上的物体检测


主要思想:也是将目标检测变成了纯粹关键点估计问题,包括目标的4个extreme points 和1个中心点,将这几何校准的5个点组成一个目标框。


下图是系统流程图:类似CornerNet,对每个目标类,CNN网络预测5个热图,只有几何中心的热图响应足够大才会生成目标框。



640?wx_fmt=jpeg


该网络预测每个类别的四个极端点热图和一个中心热图



如下是模型的测试流程图:输入图像得到5个C-通道热图,4个2-通道类别无关的偏差图(offset map)。热图是通过加权逐像素逻辑回归(logistic regression)训练得到,. 而偏差图则是由平滑L1 损失函数训练的。


640?wx_fmt=jpeg

下图是中心分组(Center grouping)算法:输入是5个热图,输出则是带有可信度的目标框。


640?wx_fmt=jpeg


下图是边缘聚集的结果:当一个边缘的多个点都成为extreme point,可见边缘聚集使中间像素的可信度得到增大。


640?wx_fmt=jpeg


FSAF:功能选择性无锚模块


主要思想:基于特征金字塔网络(feature pyramid structure,FPN)的在线特征选择能力, 在训练时可以动态分配每个实例到最适合的特征层,在推理时能够和带锚的模块分支一起工作,最后并行地输出预测。


640?wx_fmt=jpeg



基于锚的方法


640?wx_fmt=jpeg


下图展示一个特征层中的实例监督信号,其中两个损失函数:分类的focal loss 和目标框回归的IoU loss 。


640?wx_fmt=jpeg


监督信号指示无锚分支的一个特征级别中的实例

在线特征选择的操作如图:每个实例通过无锚框的所有层计算出所有有效区域的分类损失和回归损失,在最小损失的那层构建该实例的监督信号。


640?wx_fmt=jpeg

在线特征选择机制


640?wx_fmt=jpeg具有 FSAF 模块的RetinaNet 网络架构


FCOS: 完全卷积的一步目标检测


主要思想:是分割,不需要锚框也不需要区域提议。这样,避免了锚框在模型训练中涉及的重叠计算和性能敏感的参数设计环。


FCOS中定义了一个新损失函数“中心度(centerness)”,如下图( 红和蓝对应 1 和 0, 其他颜色位于其中)。



640?wx_fmt=png

640?wx_fmt=jpeg


640?wx_fmt=jpeg

 FCOS网络架构


640?wx_fmt=jpeg

结果


FoveaBox: 基于锚的目标检测之外


主要思想:直接学习目标存在的概率和目标框的坐标位置,其中包括预测类别相关的语义图和生成类别无关的候选目标框,目标框的大小和特征金字塔的表示相关(如图所示)。


640?wx_fmt=jpeg

FoveaBox 目标检测


FoveaNet的网络结构如图,一个基于ResNet的特征金字塔网络(FPN)送入两个子网络, 一个做分类,一个做预测。


640?wx_fmt=jpeg

FoveaBox 网络架构


640?wx_fmt=jpeg

结果


引导锚定的区域proposal (GA-RPN)


利用语义特征指导抛锚,称为指导性的抛锚。一起预测感兴趣目标的中心位置以及不同位置的尺度和长宽比。有代码://github.com/open-mmlab/m.


640?wx_fmt=jpeg

GA-RPN


对特征金字塔的每个输出特征图,采用带有两个分支的锚框生成模块分别预测锚位置和形状。一个特征适应模块对原始特征图处理,使其更能体现锚的形状。



640?wx_fmt=jpeg


Anchor location target


采用多级特征,根据其尺度把真实目标(ground truth objects)提供给不同特征级,相应定义 CR, IR和OR 。


640?wx_fmt=jpeg

性能比较


CenterNet: 目标定义为点


把目标定义成一个单点,即目标框的中心点(下图),检测器采用关键点估计找到中心点并从其关键点的特征回归其他目标特性,如大小,3D位置,朝向和姿势。


640?wx_fmt=jpeg

目标定义为边界框中心点


640?wx_fmt=jpeg

(a) 标准anchor 检测. (b) 中心点检测


下面是CenterNet的模型框图,其中数字是步进(stride)量:(a) 沙漏网络;(b) 带转置卷积的ResNet,在每个上采样层前面加了个3 × 3 可变形卷积层(deformable convolutional layer);(c) 语义分割的DLA-34 (Deep layer aggregation);(d) 修正的 DLA-34,在可变形卷积层加更多的跳线(skip connections)上采样步骤。


640?wx_fmt=jpeg

模型图


CenterNet: 三个关键点目标检测


主要思想:基于前面提到的CornerNet,检测目标变成三个关键点的估计(a triplet of keypoints)。


架构图:一个核心网络执行级联角点池化(cascade corner pooling)和中心点池化(center pooling ),输出两个角点热图和一个中心关键点热图;和CornerNet类似,一对检测的角点和嵌入用来检测潜在目标框;然后检测的中心关键点确定最终的框位置。


640?wx_fmt=jpeg

CenterNet


640?wx_fmt=jpeg

(a) 中心点池化. (b) 角点池化. (c) 层叠角点池化


下图给出角点池化和中心点池化的结构图。


640?wx_fmt=jpeg

中心点池化模块 (a) 层叠顶部角点池化模块(b)


CornerNet-Lite: Efficient Keypoint Based Object Detection


CornerNet-Lite:CornerNet-Saccade(attention mechanism)+ CornerNet-Squeeze


CornerNet-Saccade:缩小的图像中产生的目标框,加上attention map,预测一组可能的目标位置。在每个位置附近取一个小区域,检测目标。对检测的目标位置排序,取前k个,运行NMS。


640?wx_fmt=jpeg

CornerNet-Saccade


模型加速:SqueezeNet/MobileNets for CornerNet-Squeeze

  1. 替换3 × 3 kernels 成 1 × 1 kernels;

  2. 减少输入通道 to 3 × 3 kernels;

  3. 下采样.

640?wx_fmt=jpeg

结果


中心和尺度预测:一种无边界框目标检测方法


主要思想是:目标中心点,语义抽象。


目标检测变成一个直接的中心和尺度预测。最后卷积有两个通道,一个是关于中心位置的热图,另一个是中心的尺度图。


640?wx_fmt=jpeg

CSP (Center and Scale Prediction) 检测器


包括两个成分:特征提取和检测。前者把不同分辨率的特征图连在一起,后者是卷积层和两个预测层,分别对应中心位置和尺度大小。


640?wx_fmt=jpeg

CSP 架构


原文链接:https://zhuanlan.zhihu.com/p/64563186


(*本文为 AI科技大本营转载文章,转载请联系原作者


精彩推荐


“只讲技术,拒绝空谈2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。


目前,大会盲订票限量发售中~扫码购票,领先一步!


640?wx_fmt=jpeg

640?wx_fmt=jpeg


推荐阅读


640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

Bridge Pattern

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/hegezhou_hot/archive/2010/12/10/1902185.html 桥接模式的主要目的是将一个对象的变化因素抽象出来,不是通过类继承的方式来满足这个因素的变化,而是通过对象组合的方式来…

matlab神经网络工具箱函数汇总

转自:http://hi.baidu.com/lingyin55/blog/item/7a968ead11fe180c4b36d61e.html 1. 网络创建函数 newp 创建感知器网络 newlind 设计一线性层 newlin 创建一线性层 newff 创建一前馈BP网络 newcf 创建一多层前馈BP网络 newfftd 创建一前馈输入延迟BP网…

[每日短篇] 17 - 正确使用随机数 Random

2019独角兽企业重金招聘Python工程师标准>>> 随机数在系统开发中几乎是不可避免的一个需求,在大多数面试宝典一定会告诉你所谓的随机数其实是“伪”随机数,除此之外也就没有什么别的了。实际上这条知识本身已经是非常落后了,更不用…

LoadRunner的参数化功能分享

LoadRunner的参数化功能分享http://automationqa.com/forum.php?modviewthread&tid1598&fromuid2

MFC菜单的使用

1、 创建弹出菜单: (1)、利用向导,创建一个基于单文档的应用程序; (2)、在资源视图中选中”menu”,鼠标右键插入一新菜单IDR_POPMENU; (3)、在IDR_POPMENU菜单中添加”弹出菜单”选项,在”弹出菜单”下…

超阿里、大华,澎思科技行人再识别(ReID)技术刷新三大数据集记录

整理 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】不久前,江苏省某市公安通过 AI 技术分析监控摄像头中的信息,抓获了一个偷盗电动车的嫌疑人员。监控摄像头在现场拍到的是嫌疑人背对摄像头的情况,未有…

[转] vuewebpack多页面配置

前言 最近由于项目需求,选择使用vue框架,webpack打包直接使用的vue-cli,因为需要多页面而vue-cli只有单页面,所以就决定修改vue-cli的配置文件来满足开发需求。 html-webpack-plugin 实现需求需要用到这个插件, 具体信…

微信扫描二维码登入实现,网页端

2019独角兽企业重金招聘Python工程师标准>>> 服务器端要做得事很多,虽然逻辑不是很复杂,但是我们必须要分析清楚我们要做哪些事,请看下图: 通过这张图,我们看出,服务器端的接口一共有6个&#…

微软洪小文:AI将成为人类未来最好的左脑

演讲嘉宾 | 洪小文整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)导读:2019 年 6 月 14 日,由清华大学五道口金融学院、清华大学国家金融研究院、清华大学研究生会联合主办的“未来已来—全球领袖论天下”系列讲座再次开讲。应清华…

计算机视觉相关网站

转自:http://blog.sciencenet.cn/home.php?modspace&uid454498&doblog&id377338 1、OpenCV中文网站 http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5 2、Advanced Digital Imaging Solutions Laboratory (ADISL) Image Apprentice is a C/C ba…

预告 · Flutter Live 2018 全球同步直播

Flutter Live 2018 是 Google 在伦敦线下举办,并面向全球线上直播的一次 Flutter 庆祝活动。在 2018 年已经过去的这段时间里,Flutter 有着非常大的进展: 2 月底在世界移动大会 (MWC) 上宣布了第一个 Beta 版发布;5 月的 Google I/O 大会上发…

context-param与init-param的区别与作用

<context-param>与<init-param>的区别与作用 spring2009-11-04 16:49阅读39 评论0字号&#xff1a;大 中 小<context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个…

C#中object的使用

转自&#xff1a;http://www.hackvip.com/article/sort0129/sort0143/Hackvip_233655.html C#中system.object的函数方法功能介绍 在C#中&#xff0c;Object类型是所有类型的根&#xff0c;大家平常开发中都要跟它打交道&#xff0c;但不见得对它里面的每个方法都知根知底&am…

百炼智百炼智能获5000万元Pre-A轮融资,深耕智能获客赛道

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019年7月9日&#xff0c;百炼智能正式宣布完成5000万元Pre-A轮融资。该轮融资由东方嘉富领投&#xff0c;上市公司任子行、元投资本和酷我音乐创始人雷鸣等投资者跟投。百炼智能利用自有核心自然语言处理、图像识别和…

阿里巴巴连任 Java 全球管理组织席位

百度智能云 云生态狂欢季 热门云产品1折起>>> 11 月 23 日&#xff0c;阿里巴巴宣布连任 Java 全球管理组织 JCP 最高执行委员会委员&#xff0c;任期从 2018 年 12 月 4 号开始&#xff0c;为期两年。阿里表示&#xff0c;这意味将有更多中国开发者的声音被引入 Ja…

Django ModelForm操作及验证

一、内容回顾 Model- 数据库操作- 验证class A(MOdel): user email pwd Form - class LoginForm(Form): email fields.EmailField() user pwd - is_valid -> 每一个字段进行正则(字段内置正则)clean_字段 -> clean(__all__) -> _post_clean - cleand_data - err…

matlab外部接口简介

1、MATLAB外部接口主要包括3部分内容&#xff1a; (1)、MEX文件&#xff1a;外部程序调用接口&#xff1b; MEX文件是MATLAB解释器可以自动加载和运行的动态链接过程&#xff0c;MATLAB可以像调用内部函数一样调用它们。用户通过MEX文件可以完成以下功能&#xff1a; 可以在…

IE调试网页之一:F12 开发人员工具简介

F12 开发人员工具是可帮助生成和调试网页的一套工具。 编写出色的网页需要编码知识以及适当的工具来发现和调试难免会出现的问题。Windows Internet Explorer 9 提供所呈现代码的视图&#xff0c;F12 工具提供 Internet Explorer 9 如何在代码级别上解释这些页面的视图。F12 工…

100万奖金池,这不仅仅是场比赛

这&#xff0c;不仅仅是场比赛&#xff0c;更是对最前沿领域的共同探索2019 E起AI&#xff01;2019年度的大赛&#xff0c;由香港科大商学院和香港科大商学院内地办事处主办&#xff0c;由香港科大EMBA校友企业安讯科技冠名&#xff0c;将围绕人工智能领域的创新及运用展开赛事…

举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C代码。 使用MATLAB Coder产生代码的3个步骤&#xff1a;准备用于产生代码的MATLAB算法&#xff1b;检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c代码)&#xff1b;产生最终使用的源代码或MEX。 利…

媒体智能应用落地靠5G,视频社交需要想象力

作者简介&#xff1a;卢迪&#xff0c;中国传媒大学新媒体研究院书记、副教授、硕士研究生导师。人工智能正逐渐成为重要的基础设施&#xff0c;在与各行各业传统领域紧密结合的基础上对社会生产、生活方式带来深刻的影响。中央多次强调媒体融合&#xff0c;“要探索将人工智能…

堆栈的链表实现

2019独角兽企业重金招聘Python工程师标准>>> /** stack3.c** Created on: Dec 6, 2012* Author: fsxchen* 链式结构的栈*/ #include #include #include #include typedef struct StackNode //节点结构体 {int data; //存放数…

registry ---------仓库 -----------------镜像

registry --------->仓库 ----------------->镜像    本地镜像都保存在宿主机下 :    /var/lib/docker/containers    镜像从仓库下载下来.镜像保存在仓库中,而仓库存在于Registry中.    Docker Hub 中有两种类型的仓库:    用户库:    用户仓库…

BigBiGAN问世,“GAN父”都说酷的无监督表示学习模型有多优秀?

作者 | Jeff Donahue、Karen Simonyan 译者 | Lucy、一一出品 | AI开发者大本营&#xff08;ID:rgznai100&#xff09;众所周知&#xff0c;对抗训练生成模型&#xff08;GAN&#xff09;在图像生成领域获得了不凡的效果。尽管基于GAN的无监督学习方法取得了初步成果&#xff0…

技术人生:与其鸟宿檐下,不如击翅风雨

人生途中&#xff0c;有些是无法逃避的&#xff0c;比如命运&#xff1b;有些是无法更改的&#xff0c;比如情缘&#xff1b;有些是难以磨灭的&#xff0c;比如记忆&#xff1b;有些是难以搁置的&#xff0c;比如爱恋……与其被动地承受&#xff0c;不如勇敢地面对&#xff1b;…

C++递归用法

转自&#xff1a;http://bbs.ikaka.com/showtopic-664019.aspx 简单谈谈C 递归的思想实现以及和循环的关系 很多初学者往往对递归迷惑不解&#xff0c;也在这上面花了不少的时间。其实教材上的例子很经典&#xff0c;只是它说的有一些唠叨了。初学者会看的头大的。编程是解决…

java导入excle表格,并且对表格进行相应的修改,并对表格数据进行整理,最后导出本地表格等一系列...

1.首先创建一个java项目 完成效果如下图所示 2.导入以下jar包 3.代码如下 其中行和列的操作是根据需求自动划分的 复制代码1 public class auto_date {2 private static List<List<String>> readExcel(File file) throws Exception {3 // 创建输入流&#xff0c;读…

RetinaFace,最强开源人脸检测算法

作者 | CV君 来源 | 我爱计算机视觉&#xff08;ID&#xff1a;aicvmlaicvmlaicvml&#xff09;人脸检测为目标检测的特例&#xff0c;是商业化最早的目标检测算法&#xff0c;也是目前几乎各大 CV 方向 AI 公司的必争之地。WIDER FACE 数据集是由香港中文大学发布的大型人脸数…

OpenCV中cvBlobsLib的编译与使用

OpenCV的cvBlobsLib库的作用类似于matlab中的regionprops函数。 cvBlobsLib库的编译&#xff1a; 首先从http://opencv.willowgarage.com/wiki/cvBlobsLib#Blobextractionlibrary下载最新的v8.3版本的源代码&#xff0c;其次机子上要装有OpenCV1.0的环境&#xff0c;从http:/…

AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术

现在的技术环境下&#xff0c;容器具有快速启动时间和高密度&#xff0c;VM可以对硬件虚拟化&#xff0c;具有更好的安全性&#xff0c;并对工作负载具有更好的隔离性。容器和VM的特性现在还不可兼得。 现在AWS开源了Firecracker&#xff0c;一种利用KVM的新虚拟化技术&#xf…