DenseBox检测算法的设计十分超前,如今很多Anchor-free方法有其影子,如果当时不是比Faster R-CNN晚了一点出现,可能目标检测领域很早就开始往Anchor-free的方向发展了



来源:晓飞的算法工程笔记 公众号

论文: DenseBox: Unifying Landmark Localization withEnd to End Object Detection

Introduction


  DenseBox是早期的Anchor-free目标检测算法,当时R-CNN系列在小物体的检测上有明显的瓶颈,所以作者提出DenseBox,在小物体的检测也有不错的表现。在DenseBox提出的早些时间,著名的Faster R-CNN出现了,其强大的性能主导了目标检测算法往anchor-based的方向发展。直到FPN的出现后,Anchor-free算法的性能才有了很大的提升,更多的工作开始涉及Anchor-free领域。目前很多Anchor-free目标检测研究都有DenseBox的影子,所以DenseBox的设计思路还是很超前的。

DenseBox for Detection


  DenseBox的整体设计如图1所示,单个卷积网络同时输出多个预测框及其类别置信度,输出的特征图大小为\(5\times \frac{m}{4}\times \frac{n}{4}\)。假设像素\(i\)位于\((x_i, y_i)\),其期望的5维向量为\(\hat{t}_i=\{\hat{s}, \hat{dx^t}=x_i - x_t, \hat{dy^t}=y_i - y_t, \hat{dx^b}=x_i - x_b, \hat{dy^b}=y_i - y_b \}\),第一个为分类置信度,后四个为像素位置到目标边界的距离,最后,将所有像素的输出转化为预测框,经过NMS处理后进行最后的输出。

Ground Truth Generation

  DenseBox在训练时没有将完整的图片作为输入,而是截取包含目标以及足够背景的较大区域进行训练。在训练时,将截取的图片resize大\(240\times 240\),保证人脸位于截取区域的中心以及高度大约50像素,输出\(5\times 60\times 60\)的特征图。正样本区域是目标中心点半径为\(r_c\)内的圆,\(r_c\)与目标的大小相关,论文设置为0.3。如果截取的区域包含多个人脸,仅保留中心点在截取区域中心0.8到1.25范围内的人脸,其它均认为是负样本。

Model Design

  DenseBox的网络结构如图3所示,包含16个卷积层,前12个卷积层由VGG19初始化,网络也添加了一些不同层之间的特征融合,可以综合不同感受域的特征。

Multi-Task Training

  网络同时进行分类和位置预测,网络由两个任务共同学习,分类任务的损失值直接通过L2损失计算:

  位置预测任务的损失值也通过L2损失计算:

  由于论文采用了截取图片的方式进行训练,就会面临样本制作的问题,而DenseBox在正负样本制作以及学习上面做了一些工作:

  • Ignoring Gray Zone,灰色区域是处于正负点之间的过渡区域,不参与损失值的计算。对于一个非正样本点,如果其半径为2的范围内存在正样本点,则归入灰色区域。
  • Hard Negative Mining,在训练过程中,根据公式1将样本排序,取top 1%作为hard-negative,能够帮助网络重点学习这些难样本。
  • Loss with Mask,根据像素点的类型定义特征图的掩膜\(M(\hat{t}_i)\),并结合公式1、公式2以及掩膜输出最终的损失值:

  除了上面的几点,为了更好地挖掘负样本的作用,论文也通过随机裁剪训练集以生成足够的随机负样本。在训练时,正样本图片和随机负样本图片以1:1比例输入网络。此外,为了增强网络的鲁棒性,进行了一些数据增强:

  • 随机抖动每个截取的图片
  • 左右翻转
  • 水平移动25像素内
  • 随机缩放[0.8, 1.25]

Landmark Localization

  基于上面的设计,DenseBox也可用于标记点定位,仅需要在原有的基础上添加一些层用于预测标记即可。论文还发现,可通过融合标记点分支和分类分支进一步调整检测结果,具体做法如图4所示,调整输出的损失函数跟分类损失一样采用L2函数。此时,完整的网络损失变为:

Experiments


  人脸关键点上的性能对比。

  车辆关键点检测任务上的性能对比。

Conclusion


  DenseBox检测算法的设计十分超前,如今很多Anchor-free方法有其影子,如果当时不是比Faster R-CNN晚了一点出现,可能目标检测领域很早就开始往Anchor-free的方向发展了。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

DenseBox:思想超前的早期Anchor-free研究 | CVPR 2015的更多相关文章

  1. 洞察行业领先者的前沿思想——第五届TOP100全球软件案例研究峰会精彩谢幕

    (第五届TOP100summit开幕式现场) 12月09日-12日,由msup主办的第五届TOP100全球软件案例研究峰会(以下简称TOP100summit)在北京国家会议中心举行,作为互联网行业最有 ...

  2. 核心思想:评价早期SaaS创业公司时,投资人在关注什么?(是否有机会发展成一个平台,长期的护城河)

    编者按: 当聊到早期项目时,人们经常会问投资人一个问题:“在评价早期 SaaS 创业公司时,投资人会关注什么——指标还是其他方面?” Nakul Mandan 作为 Lightspeed 风投机构的合 ...

  3. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  4. Java编程思想——第17章 容器深入研究(two)

    六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...

  5. Java编程思想——第17章 容器深入研究 读书笔记(四)

    九.散列与散列码 HashMap使用equals()判断当前的键是否与表中存在的键相同. 正确的equals()方法需满足一下条件: 1)自反性.x.equals(x) 是true; 2)对称性.x. ...

  6. Java编程思想——第17章 容器深入研究 读书笔记(二)

    五.List的功能方法 排除Collection已包含的方法外还增加了 boolean addAll(int index, Collection<? extends E> c);从索引位置 ...

  7. Java编程思想——第17章 容器深入研究 读书笔记(一)

    这一章将学习散列机制是如何工作的,以及在使用散列容器时怎么样编写hashCode()和equals()方法. 一.容器分类 先上两张图 来概况完整的容器分类 再细说都为什么会有那些特性. 二.填充容器 ...

  8. Java编程思想——第17章 容器深入研究(一)

    这一章将学习散列机制是如何工作的,以及在使用散列容器时怎么样编写hashCode()和equals()方法. 一.容器分类 先上两张图 来概况完整的容器分类 再细说都为什么会有那些特性. 二.Coll ...

  9. GoogLeNet 之 Inception v1 v2 v3 v4

    论文地址 Inception V1 :Going Deeper with Convolutions Inception-v2 :Batch Normalization: Accelerating De ...

  10. tensorflow学习笔记——GoogLeNet

    GoogLeNet是谷歌(Google)研究出来的深度网络结构,为什么不叫“GoogleNet”,而叫“GoogLeNet”,据说是为了向“LeNet”致敬,因此取名为“GoogLeNet”,所以我们 ...

随机推荐

  1. spring boot2.0集成mybatis-plus实战

    说明: 本例演示spring boot2.0如何集成mybatis-plus 如何使用代码生成器 项目源码: https://gitee.com/indexman/mybatis-plus-demo ...

  2. 24个javascript最佳实践

    1. 使用 === 代替 == JavaScript utilizes two different kinds of equality operators: === | !== and == | != ...

  3. bootstrap响应式网页布局

    bootstrap可以说是没有布局和审美概念的后端狗的福利.使用它的栅格系统可以轻松的对网页进行布局,而且可以做到响应式的布局.看起来很酷,接下来我就会总结自己在开发博客系统中用到的知识点及实战案例给 ...

  4. android:加载PDF几种方法汇总对比

    在安卓项目中,加载PDF文件,是一个比较常见的需求.又分为两大类, 1.加载网络PDF 2.加载一个本地静态PDF. 查阅资料,纵观网上在安卓中打开PDF的各种方式,大致可以分为以下几类, 1.直接使 ...

  5. 进度条模块之tqdm

    导入模块 from tqdm import tqdm import time ''' desc 描述 ncols 进度条总长度 可修改 range(1000) 封装迭代器 ''' for i in t ...

  6. django时区相关说明

    # naive time 从字面意思上理解,这是个"幼稚的时间",所以可以理解为它是个本地时间,不带时区信息,不能直接用于存储,如下 import datetime datetim ...

  7. React 中 Ref 引用

    不要因为别人的评价而改变自己的想法,因为你的生活是你自己的. 1. React 中 Ref 的应用 1.1 给标签设置 ref 给标签设置 ref,ref="username", ...

  8. Python函数每日一讲 - 一文让你彻底掌握Python中的frozenset函数

    引言 在 Python 中,frozenset() 函数是一个重要的工具,用于创建不可变的集合对象.本文将介绍 frozenset() 函数的语法.用法示例以及实际应用场景,帮助大家更好地理解和应用这 ...

  9. m1芯片mac安装homebrew

    安装 ARM 版 Homebrew ARM版Homebrew最终被安装在/opt/homebrew路径下. 直接执行: /bin/bash -c "$(curl -fsSL https:// ...

  10. Java 多线程----- 解决线程安全问题的 方式三:Lock锁 --------jdk 5.0 新增

    1 package bytezero.deadlock; 2 3 import java.util.concurrent.locks.ReentrantLock; 4 5 /** 6 * 解决线程安全 ...