点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

作者丨东林钟声@知乎

来源丨https://zhuanlan.zhihu.com/p/84398108

编辑丨极市平台

导读

本文以人脸识别为例解释了目标检测中Anchor的本质,也就是多尺度的滑动窗口。通过与传统的detection的做法进行比较凸显Anchor的优点,文末还附有Retina-Face的代码链接以及相关论文。

在object detection的一些非常有名的model上面,有一个最开始非常难以理解的概念----Anchor。这个Anchor在Faster RCNN上面也叫reference boxes,也就是参考框。参考框的意思肯定是会带来先验的知识。首先考虑目标检测的任务,输入图片,输出的是包含目标类别的矩形框(Bounding Boxes)具体可以看下图:

那么一个比较核心的问题,就是这个框的形状和大小,对应的就是在各种anchor-based的文章里面提的非常多的ratio和scale。ratio很简单,就是长宽之比(1:1,1:2, 2:1....),scale可以理解为边长。那为什么会有Anchor这种东西?其起到的作用是什么?其实Anchor的本质就是多尺度的滑动窗口(sliding window in multi-scale)。好像现在还没有人这样去理解他,下面具体来分析。

首先看下传统的detection是怎么做的,比如haar、hog特征的人脸、行人、车辆检测。这些方法是在CNN-based之前的主流方法,只不过后来被CNN打败。其具体的流程如下:

1.生成图像金字塔,因为待检测的物体的scale是变化的

2.用滑动窗口在图片金字塔上面滚动生成很多候选区域(如下面动图所示)

3.各种特征提取(hog)和分类器(svm)来对上面产生的候选区域中的图片信息来分类(比如:是否为人脸)

4.NMS非极大值抑制得到最后的结果

那么CNN以其强大的特征提取能力,自然而然的可以替代步骤3。但是由于步骤1和2的存在是独立于CNN之外,而且需要大量的循环遍历,速度受到了限制。而且要想好的定位精度,必须有比较多的scale和ratio不同的滑窗,这样又增加了时间。那么在深度学习中,我们总是在讲end2end,那么怎么把1/2步骤融合进去?其实在窗口滑动的时候,本质是一个遍历像素的过程,那么我们可以直接为每个像素分配几个不同scale和ratio的窗口矩形,这些矩形的中心都是其所属的像素点。至于scale和ratio的选取,可以根据一些先验知识或者像YOLO-v2一样通过k-means聚类得到。然后每个像素分配几个不同scale和ratio的窗口矩形就是Anchor。其实本质就是把基于像素遍历的一个过程直接分配到每个像素来做,然后CNN是可以直接做基于像素的一个Dense Map的预测的。下面可视化一下Anchor(这里只可视化了200个):

可以看出200个anchor已经基本上覆盖了整个图片了,一般的网络模型的anchor都是在几万个左右,比如Retina-Face的anchor在25000左右。那么我们回到步骤3. 现在就是要用CNN来给这么多个Anchor来分类了,比如是否为人脸。

那么怎么判断这些anchor的分类就比较简单了,就是看这些anchor与给定的矩形框的iou是否满足条件,比如iou>0.5认为是Postive,<0.2认为是Negtive。iou的计算也很简单,如下:

那么我们实际看一张人脸图片中,Postive anchor的可视化情况:

可以看出这些绿色的anchor都是基本上大部分包含了人脸的,是Postive的样本。可以看出这样cnn现在对于分类的基本上没有问题,但是在定位上面会有较大的误差。所以后续还有基于anchor的bbox的坐标的预测,其实本质也是增加CNN的输出的depth,来预测4个值(x, y, w, h)的offset。这个可以详细看下YOLO系列或者Faster RCNN。那么现在anchor的机制本质上,就是一堆变scale和ratio的滑动窗口,只不过通过CNN的Dense Map Prediction的方式整个嵌入到一个end2end的框架里面了。

其实最重要的核心还是弄懂CNN网络的输入与输出的shape

输入是图片、输出的是一个表示各个anchor的classification和localization的预测值

针对人脸检测来看,比如假设有N个anchor,那么输出的shape应该是N*(2 + 4),其中2表示分类的预测,是否为人脸,4表示(x,y,w,h)相对于anchor的offset的预测。

这里强烈推荐Retina-Face的代码:

https://link.zhihu.com/?target=https%3A//github.com/supernotman/RetinaFace_Pytorch

也可以看一下Retina-Face的论文:

https://arxiv.org/pdf/1905.00641.pdfarxiv.org

参考:

https://www.datacamp.com/community/tutorials/object-detection-guidewww.datacamp.com

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

目标检测中Anchor的本质分析相关推荐

  1. 目标检测中Anchor如何映射到原图

    Anchor在目标检测中是比较常见的,引入Anchor主要是为了让检测更精准,当然现在有很多Anchor Free的方法也达到了较好的结果,但是最近项目中用的是基于Anchor的方法,但是置于Anch ...

  2. 目标检测中anchor的概念

    主要从以下几个部分理解anchor的概念: 1. 什么是anchor? 2. anchor的意义 3. Faster R-CNN的Anchor Box 4 总结 1. 什么是anchor? 就是在图像 ...

  3. 目标检测中的anchor-base与anchor-free

    前言 本文参考目标检测阵营 | Anchor-Base vs Anchor-Free 如何评价zhangshifeng最新的讨论anchor based/ free的论文? - 知乎 基础知识 | 目 ...

  4. anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾

    前段时间,YOLOv4&v5大火,很多人忽视了yolov5在anchor上的一些细节变化,因此,本文从Faster RCNN着手,逐步分析SSD.YOLOv4&v5的anchor机制. ...

  5. 目标检测中的anchor-based 和anchor free

    目标检测中的anchor-based 和anchor free anchor-free 和anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在单阶段检测 ...

  6. 目标检测中的Anchor

    前言: 在计算机视觉四大基本任务(检测.分类.定位.分割)中,图像的目标检测受到的了研究者们越来越多的关注.今天我们就来聊一聊在目标检测中一项重要的机制--Anchor.Anchor机制在凯明大神提出 ...

  7. CVPR2020 | MAL:联合解决目标检测中的定位与分类问题,自动选择最佳anchor

    点击上方"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 本文是收录于CVPR2020的工作,其实文章在去年就挂在了网上,整体思路还算不错.具体来 ...

  8. 检测到目标服务器启用了trace方法_综述:目标检测中的多尺度检测方法

    ↑ 点击蓝字 关注极市平台作者丨SFXiang来源丨AI算法修炼营编辑丨极市平台 极市导读 本文从降低下采样率与空洞卷积.多尺度训练.优化Anchor尺寸设计.深层和浅层特征融合等多个方面入手,对目标 ...

  9. 综述 | 目标检测中的多尺度检测方法

    本文从降低下采样率与空洞卷积.多尺度训练.优化Anchor尺寸设计.深层和浅层特征融合等多个方面入手,对目标检测中的多尺度检测方法进行了全面概述,并介绍了多尺度检测相关方法. 前面的话 传统卷积网络通 ...

最新文章

  1. 滴滴Uber合并?光大是不行的
  2. 领域驱动设计,让程序员心中有码(七)
  3. 陕西师范大学第七届程序设计竞赛 C题 iko和她的糖
  4. 目标检测--Selective Search for Object Recognition(IJCV, 2013)
  5. 停止Java线程,小心interrupt()方法
  6. JavaFX 2 GameTutorial第3部分
  7. Linux C编程一些优秀的博客链接
  8. 31Exchange Server 2010跨站点部署-搬迁Exchange服务器到分支机构
  9. 【初等数论】指数、原根与不定方程
  10. 感觉csdn论坛不是很好用,感觉……
  11. Unable to read TLD META-INF/c.tld from JAR file
  12. JavaScript页面跳转常用代码(转)
  13. 基于springboot的疫情社区管理系统
  14. 以空间换时间经典算法
  15. 软件设计师---数据库系统基础
  16. css 文字第二行省略号,第二行的css省略号
  17. 微信公众账号高级接口使用小结
  18. Google Play应用商店开发者账号注册教程
  19. 分布式理论分布式ID生成大全
  20. [WIN7]怎样设置切换输入法变成CTRL+SHIFT

热门文章

  1. Python Scrapy 验证码登录处理
  2. MySQL 通配符学习小结
  3. boost:进程管理
  4. NSAutoreleasePool
  5. Scala’s parallel collections
  6. 在Asp.net MVC framework中使用扩展方法创建Html Helper
  7. 《Go语言从入门到实战》学习笔记(1)——Go语言学习路线图、简介
  8. Linux进程的分析和执行过程
  9. Leangoo敏捷看板管理 6.3.8
  10. 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?