论文提出的GID框架能够自动选择可辨别目标用于知识蒸馏,而且综合了feature-based、relation-based和response-based知识,全方位蒸馏,适用于不同的检测框架中。从实验结果来看,效果十分不错,值得一看

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

论文: General Instance Distillation for Object Detection

Introduction


 在目标检测应用场景中,模型的轻量化和准确率是同样重要的,往往需要在速度和准确率之间权衡。知识蒸馏(Knowledge Distillation)是解决上述问题的一个有效方法,将大模型学习到的特征提取规则(知识)转移到小模型中,提升小模型的准确率,再将小模型用于实际场景中,达到模型压缩的目的。

 目前的知识蒸馏方法大都针对分类任务,目标检测由于正负样本极度不平衡,直接将现有的方法应用到检测中一般都收益甚微。而目前提出的针对目标检测任务的知识蒸馏方法大都对知识进行了特定的约束,比如控制蒸馏的正负样本比例或只蒸馏GT相关的区域。此外,这些方法大都不能同时应用于多种目标检测框架中。为此,论文希望找到通用的知识蒸馏方法,不仅能应用于各种检测框架,还能转移尽可能多的知识,同时不用关心正负样本。

 为了达到上述目的,论文结合response-based知识、feature-based知识和relation-based知识,提出了基于可辨别目标的蒸馏方法GID(general instances Distillation),主要优点有以下:

  • 可以对单图中的多个实例间的关系进行建模并用于蒸馏中。尽管已经有研究表明实例间的关系信息在检测中的重要性,但还没有研究将其应用的知识蒸馏中。
  • 避免手动设置正负样本比例或只选择GT相关区域进行蒸馏。虽然GT相关区域包含最多信息,但背景也可能包含对student的泛化能力学习有帮助的信息。论文通过实验发现自动选择的可辨别实例(discriminative instance)对迁移学习有明显的提升作用,这些显著实例也称为通用实例(General Instance, GIs),因为不需要关心其正负。
  • 对不同检测框架通用,GIs是根据student和teacher的输出进行选择的,与网络的内部结构无关。

  总结起来,论文的主要贡献如下:

  • 定义通用实例(GIs)作为蒸馏目标,能够高效地提升检测模型的蒸馏效果。
  • 基于GI,首次将relation-based知识引入到知识蒸馏中,并与response-based知识和feature-based知识合作,使得student能超越teacher。
  • 在MSCOCO和PASCAL VOC数据集上验证不同检测框架下的有效性,均达到SOTA。

General Instance Distillation


 有研究提出GT附近的特征区域包含有助于知识蒸馏训练的丰富信息,而论文发现不仅GT附近的区域,即使属于背景的区域,只要是可辨别区域(discriminative patch)都对知识蒸馏有帮助。基于上面的发现,论文设计了通用实例选择模块(general instance selection module, GISM),用于从teacher和student的输出中选择关键实例进行蒸馏。其次,为了更好地利用teacher的信息,论文综合使用了feature-based、relation-based和response-based知识用于蒸馏。

General Instance Selection Module

 在检测模型中,预测结果能够指出信息最丰富的区域,而teacher和student的丰富区域的差异恰恰就是性能的差异。为了量化每个结果的差异,选择可辨别实例用于蒸馏,论文提出了两个指标:GI score和GI box,在每次迭代中动态计算。为了减少计算消耗,通过计算分类分数的L1 score作为GI score,而GI box则直接选择分类分数更高的box。

 整个GI的选择过程如图2所示,对于实例\(r\),其score和box的选择定义为:

 \(P_{GI}\)和\(B_{GI}\)分别为GI score和GI box。对于one-stage检测器,\(P_t\)和\(P_s\)为teacher和student的分类分数,而对于two-stage检测器则为RPN的objectness分数,\(B_t\)和\(B_s\)同理。\(R\)为预测框数目,\(C\)为类别数。由于论文将teacher和student的detection head设置成完全一样的,所以预测框也是可以根据位置一一对应的。

 需要注意的是,高GI score的实例可能重合度比较高,导致蒸馏损失翻倍。为解决这一问题,使用NMS来去重,递归选择重复实例中GI score最高的实例。在实际使用中,NMS的IoU为0.3,最终每张图片只选择top-K个实例。

Feature-based Distillation

 FPN结合了主干网络的不同层特征,能够显著提升检测模型对多尺度目标的鲁棒性。于是,论文打算将FPN加入到蒸馏中,根据GI box的尺寸选择对应的FPN层特征。

 由于每个FPN层的目标特征大小不同,直接进行pixel-wise蒸馏会导致模型更倾向于大目标。于是论文转而采用ROIAlign将不同大小的特征输出为相同大小再进行蒸馏,如图a所示。feature-based蒸馏损失计算如下:

 \(K\)为GISM选择的GI数目,\(t_i\)和\(s_i\)为ROIAlign处理后的FPN特征,\(f_{adapt}\)用于将\(s_i\)缩放到\(t_i\)的相同大小。

Relation-based Distillation

 物体间的关系信息是分类任务进行蒸馏的关键,但还没在检测任务蒸馏中进行尝试。同一场景中的物体,不管是前景还是背景,都是高度相关的,这对student网络的收敛有很大帮助。

 为了挖掘GIs中的关系知识,使用欧式距离来度量实例间的距离,然后用L1距离来传递知识。如图a所示。relation蒸馏损失计算如下:

 \(\mathbb{K}^2=\{(i,j)|i\ne j, 1\le i,j\le K\}\),\(\phi\)为归一化因子,\(l\)为smooth L1损失。

Response-based Distillation

 知识蒸馏的关键主要是来自teacher的response-based知识的约束,这里的response-based知识指的是模型的最终输出。但因为检测输出往往存在正负样本不平衡或过多负样本的情况,如果直接将detection head的所有输出进行蒸馏,这种情况带来的噪声反而会损害student的性能。

 有研究提出只蒸馏detection head的正样本,但这种方法忽略了可辨别的负样本的作用。为此,论文设计了distillation mask,将分类分支和回归分支的输出与GIs挂钩,比只选择正样本要高效。

 不同检测模型的输出是不同的,论文定义了一个通用的方法来进行detection head的蒸馏,如图b所示。首先,基于GIs的distillation mask计算为:

 函数\(F\)是标签指定算法,输入为GI box,当匹配时,输出1,否则输出0。函数\(F\)对不同的模型的定义是不同的,对于RetinaNet,使用anchor和GIs间的IoU决定是否匹配,而对于FCOS则所有中心点在GIs外的输出都是0。

 然后,response-based损失计算如下:

 \(R\)为所有与选择的GIs匹配的输出,teacher和student对应的输出其中一个匹配即可。\(y_t\)和\(y_s\)为分类分支输出,\(r_t\)和\(r_s\)为回归分支输出,\(L_{cls}\)和\(L_{reg}\)为分类损失函数和回归损失函数。需要注意的是,为了简便,对于two-stage检测器只蒸馏RPN输出。

Overall loss function

 模型的训练是端到端的,student的整体损失函数为:

 \(L_{GT}\)为模型原本的损失函数,\(\lambda\)为调节超参数。

Experiment


 在VOC上对比蒸馏效果。

 在COCO上对比蒸馏效果。

 选择的GI box可视化,前面为5000迭的选择,后面为90000迭的选择。绿色代表GT,红色为正样本,黄色为中间(非正非负)样本,青色为负样本。

Conclusion


 论文提出的GID框架能够自动选择可辨别目标用于知识蒸馏,而且综合了feature-based、relation-based和response-based知识,全方位蒸馏,适用于不同的检测框架中。从实验结果来看,效果十分不错,值得一看。





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

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

GID:旷视提出全方位的检测模型知识蒸馏 | CVPR 2021的更多相关文章

  1. 最近被旷视的YOLOX刷屏了!

    目录 论文主要信息 文章概要 背景 YOLOX-DarkNet53 实现细节 YOLOv3 baseline Decoupled head 实验 思路 story Strong data augmen ...

  2. 旷视研究院Detection组负责人

    http://www.skicyyu.org/ https://zhuanlan.zhihu.com/p/61910297 俞刚,旷视研究院Detection组负责人.2014年博士毕业于新加坡南洋理 ...

  3. ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕,旷视科技有多篇论文被此 ...

  4. ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...

  5. 旷视等Oral论文提出GeoNet:基于测地距离的点云分析深度网络

    基于网格曲面的几何拓扑信息可以为物体语义分析和几何建模提供较强的线索,但是,如此重要的连接性信息在点云中是缺失的.为此,旷视西雅图研究院首次提出一种全新的深度学习网络,称之为 GeoNet,可建模点云 ...

  6. 谷歌大脑提出:基于NAS的目标检测模型NAS-FPN,超越Mask R-CNN

    谷歌大脑提出:基于NAS的目标检测模型NAS-FPN,超越Mask R-CNN 朱晓霞发表于目标检测和深度学习订阅 235 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 ...

  7. 入职9月,旷视孙剑106分钟讲述CV创业科研的5大区别

    雷锋网按:本文为旷视科技首席科学家孙剑日前在 CCF-ADL上做的题为<如何在大公司和创业公司做好计算机视觉研究>的分享,主要介绍了近期计算机视觉的发展现状,ResNet基本原理和设计,旷 ...

  8. 旷视MegEngine核心技术升级

    旷视MegEngine核心技术升级 7 月 11 日,旷视研究院在 2020 WAIC · 开发者日「深度学习框架与技术生态论坛」上围绕 6 月底发布的天元深度学习框架(MegEngine)Beta ...

  9. 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...

    初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...

  10. 《为大量出现的KPI流快速部署异常检测模型》 笔记

    以下我为这篇<Rapid Deployment of Anomaly Detection Models for Large Number of Emerging KPI Streams>做 ...

随机推荐

  1. ipset 笔记

    官网:http://ipset.netfilter.org/ ipset是维护内核中IP sets结构的工具,允许你创建 匹配整个地址集合的规则.iptables配合ipset使用后不仅能单IP匹配, ...

  2. 【framework】DisplayContent简介

    1 前言 ​ DisplayContent 用于管理屏幕,一块屏幕对应一个 DisplayContent 对象,虽然手机只有一个显示屏,但是可以创建多个 DisplayContent 对象,如投屏时, ...

  3. vue项目设置favicon

    1.准备一个favicon.ico 放在项目的static文件夹下: 2.修改打包配置 开发环境 修改build/webpack.dev.conf.js,找到new HtmlWebpackPlugin ...

  4. java.lang.System快速指南

    1.介绍 在本教程中,我们将快速了解java.lang.System类及其特性和核心功能. 2.IO 系统类是java.lang的一部分,它的一个主要特性是让我们能够访问标准的I/O流. 简单地说,它 ...

  5. 【算法day1】复杂度和简单排序算法(1)

    复杂度和简单排序算法 时间复杂度 以一个排序(选择排序)操作举例 假设我有一个数组,我要找出其中的最小值放到0的位置上 那么 第一次我会遍历数组中N个数(在0位置处),找出最小的数交换到0位置[看了( ...

  6. [Rust] 变量的属性: 不可变(immutable), 可变(mutable), 重定义(shadowing), 常量(const), 静态(static)

    [Rust] 变量的属性: 不可变(immutable), 可变(mutable), 重定义(shadowing), 常量(const), 静态(static) 变量的可变性 在 Rust 中, 变量 ...

  7. TypeScript项目开发运行(即时编译、运行,所见所得)

    1.项目*.ts自动编译 $ tsc . --watch 2.项目本地web服务运行 $ npm install --save-dev webpack-dev-server npm install - ...

  8. 【Azure Redis】PHPRedis遇见SSL Connection Timeout问题

    问题描述 PHP Redis客户端遇见使用SSL Connection timeout,遇见问题后,切换回去Non-SSL没有出现问题.但是切换回SSL后,还是偶尔遇见Connection timeo ...

  9. C#多线程(5):资源池限制

    目录 Semaphore.SemaphoreSlim 类 Semaphore 类 示例 示例说明 信号量 SemaphoreSlim类 示例 区别 Semaphore.SemaphoreSlim 类 ...

  10. [.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC

    ​上一章我们完成了小项目的面向服务体系改造,你或许一直在思考一个问题.为什么要将业务独立成微服务? 微服务原理 以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与 ...