专栏首页Petrichor的专栏论文阅读: RetinaNet

论文阅读: RetinaNet

Introduction

此篇论文获得了ICCV最佳学生论文奖,指导人是FAIR的He Kaiming大神:

众所周知,detector主要分为以下两大门派:

-

one stage系

two stage系

代表性算法

YOLOv1、SSD、YOLOv2、YOLOv3

R-CNN、SPPNet、Fast R-CNN、Faster R-CNN

检测精度

检测速度

这种鱼(speed)与熊掌(accuracy)不可兼得的局面一直成为Detection的瓶颈。

究其原因,就是因为one-stage受制于万恶的 “类别不平衡” 。

  1. 什么是“类别不平衡”呢? 详细来说,检测算法在早期会生成一大波的bbox。而一幅常规的图片中,顶多就那么几个object。这意味着,绝大多数的bbox属于background。
  2. “类别不平衡”又如何会导致检测精度低呢? 因为bbox数量爆炸。 正是因为bbox中属于background的bbox太多了,所以如果分类器无脑地把所有bbox统一归类为background,accuracy也可以刷得很高。于是乎,分类器的训练就失败了。分类器训练失败,检测精度自然就低了。
  3. 那为什么two-stage系就可以避免这个问题呢? 因为two-stage系有RPN罩着。 第一个stage的RPN会对anchor进行简单的二分类(只是简单地区分是前景还是背景,并不区别究竟属于哪个细类)。经过该轮初筛,属于background的bbox被大幅砍削。虽然其数量依然远大于前景类bbox,但是至少数量差距已经不像最初生成的anchor那样夸张了。就等于是 从 “类别 极 不平衡” 变成了 “类别 较 不平衡” 。 不过,其实two-stage系的detector也不能完全避免这个问题,只能说是在很大程度上减轻了“类别不平衡”对检测精度所造成的影响。 接着到了第二个stage时,分类器登场,在初筛过后的bbox上进行难度小得多的第二波分类(这次是细分类)。这样一来,分类器得到了较好的训练,最终的检测精度自然就高啦。但是经过这么两个stage一倒腾,操作复杂,检测速度就被严重拖慢了。
  4. 那为什么one-stage系无法避免该问题呢? 因为one stage系的detector直接在首波生成的“类别极不平衡”的bbox中就进行难度极大的细分类,意图直接输出bbox和标签(分类结果)。而原有交叉熵损失(CE)作为分类任务的损失函数,无法抗衡“类别极不平衡”,容易导致分类器训练失败。因此,one-stage detector虽然保住了检测速度,却丧失了检测精度。

这个时候,He Kaiming带着他的《Focal Loss》出现了。

该篇文章指出,“类别不平衡”是one-stage detector在精度上逊于two-stage detector的病结所在。

那么,只要通过将原先训练 回归任务 惯用的 交叉熵误差 (CE(pt)=−αtlog(pt)CE(pt)=−αtlog⁡(pt)CE(p_t)=-\alpha_t \log(p_t)) 改为 FL (focal loss) 即可。

focal loss的标准公式非常简单:

FL(pt)=−(1−pt)γlog(pt)=(1−pt)γCE(ŷ )iFL(pt)=−(1−pt)γlog⁡(pt)=(1−pt)γCE(y^)i

FL(p_t) = -(1-p_t)^\gamma \log(p_t) = (1-p_t)^\gamma CE(\hat{y})_{i}

也可以更复杂一点(论文中的实验即采用此公式):

FL(pt)=−αt(1−pt)γlog(pt)FL(pt)=−αt(1−pt)γlog⁡(pt)

FL(p_t) = -\alpha_t (1-p_t)^\gamma \log(p_t)

本质改进点在于,在原本的 交叉熵误差 (CE(pt)=−αtlog(pt)CE(pt)=−αtlog⁡(pt)CE(p_t)=-\alpha_t \log(p_t)) 前面乘上了 (1−pt)γ(1−pt)γ(1-p_t)^\gamma 这一权重。

我推算了一下乘上该权重所带来的影响:

loss量级

量大的类别 (如background)

量少的类别

被正确分类时的loss

大幅↓↓\downarrow

稍微↓↓\downarrow

被错误分类时的loss

适当↓↓\downarrow

近乎保持不变

也就是说,一旦乘上了该权重,量大的类别所贡献的loss被大幅砍削,量少的类别所贡献的loss几乎没有多少降低。虽然整体的loss总量减少了,但是训练过程中量少的类别拥有了更大的话语权,更加被model所关心了。

为此,FAIR还专门写了一个简单的one-stage detector来验证focal loss的强大。并将该网络结构起名RetinaNet:

文章也对于 γγ\gamma 的取值做了一番实验:

在实验中,发现 γ=2,α=0.25γ=2,α=0.25\gamma = 2,\alpha = 0.25 的取值组合效果最好。

Innovation

文章的两大贡献:

  1. new cls loss:Focal Loss FL(pt)=−(1−pt)γlog(pt)FL(pt)=−(1−pt)γlog⁡(pt) FL(p_t) = -(1-p_t)^\gamma \log(p_t)
  2. new network:RetinaNet RetinaNet = FPN + sub-network + FL

Note

  • RetinaNet简单而十分强大,以至于成为了当下最佳(accuracy/speed/complexity trade-off)的detector之一。
  • RetinaNet的detector部分是两条平行pipe-line,且 设计相同 (除了尾部的output不一样) 但 参数不共享 (Faster R-CNN中第一层的参数是共享的) 。
  • reg_pipe-line直接输出target,所以是采用了无分类的bbox regressior(Faster R-CNN是每个类各一个bbox regressor)。

Result

新的detector标杆,state-of-the-art一词的新定义:

Thinking

  • focal loss的提出就像海面上的冰山。虽然看起来只是一个公式(冰山一角),但其实是来源于FAIR对于类别不平衡根本原因的深刻洞察和分析(海平面下的部分)。
  • 指出问题的意义远大于解决问题。focal loss很简单,但却是它第一个洞察到了one-stage detector的accuracy不高的问题根源在于“类别不平衡”。
  • RetinaNet就是一个FPN-based的one-stage detector,靠着最后面的focal loss来解决由于过量background而引起的类别不平衡。

[1] Focal Loss for Dense Object Detection [2] 度学习: 分类 目标函数 (交叉熵误差(CE) -> 焦点误差(FL))

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • tensorflow: 损失函数(Losses Functions) 探究

    易得 l2_loss( t, name=None ) 等同于 output = sum(t ** 2) / 2

    JNingWei
  • git:辅助

    JNingWei
  • leetcode: 83. Remove Duplicates from Sorted List

    JNingWei
  • 2019年ACM Fellow出炉,陈熙霖、陶大程、周礼栋、谢源、李向阳等7位华人学者入选

    AI 科技评论消息,纽约时间12月11日,美国计算机学会(ACM)宣布了 2019 年新当选 ACM Fellow 名单,共有 58 位科学家当选,其中包括 7...

    AI科技评论
  • 什么是后端开发?

    软件应用程序就像冰山一样。用户看到的只是应用程序的一部分——在大多数情况下——应用程序的最大部分是看不到的。这就是令人难以捉摸又神秘的“后端”。

    哲洛不闹
  • 什么是后端开发?

    软件应用程序就像冰山一样。用户看到的只是应用程序的一部分——在大多数情况下应用程序的最大部分是看不到的,这就是令人难以捉摸又神秘的“后端”。 在 Web 开发的...

    企鹅号小编
  • 云应用程序开发人员面试应该考虑的6个问题

    由于云计算提供了新的灵活性和可扩展性,它也改变了组织开发和部署软件的方式。因此,也促进了人们积极开发新品种的云计算应用程序。 作为一个软件开发者,在其职业生涯中...

    静一
  • SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务

    在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技...

    知了一笑
  • 大数据视角下的春运迁徙图 来看看你的城市的迁徙半径

    今年春节期间,百度做了一个可视化很高的专题【百度迁徙】,讲春运期间各地区的人口迁徙情况。动态图,图很漂亮,也很直观。前两天我在微博分享了9张主要地区的迁徙图,反...

    小莹莹
  • 【云+社区年度征文】safari浏览器播放自适应码流分辨率规格的选择

    众所周知,自适应码流,是一种将视频内容制作成多种分辨率版本,最终播放器根据当前的网络情况自动选择版本播放的技术。在腾讯视频、优酷、爱奇艺等视频媒体平台,腾讯课堂...

    clairehou

扫码关注云+社区

领取腾讯云代金券