论文提出的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. Java并发编程实例--14.在一个同步类中安排独立属性

    当你使用synchronized关键字去保护一个代码块时,你必须传入一个对象的引用. 正常来讲,你讲使用this关键字去引用执行这个方法的对象,但是你可以使用其他对象的引用. 通常的,这些对象将会是专 ...

  2. base::AtExitManager 和 base::Singleton 的结合使用

    单例模式(Singleton)也称为单件模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享.有很多地方需要这样的功能模块,如系统的日志输出,GUI 应用必须是 ...

  3. helloShell

    初识SHELL 变量 常规的变量赋值不必多说,shell脚本还可以从命令输出中提取信息,赋值给变量 反引号字符 testing= `date` $( )格式 testing=$(date) #!/bi ...

  4. 基于java的个人博客

    基于java的个人博客 效果预览 首页 详情 文章管理 文章发布 分类管理 访问地址 前台地址http://localhost:8080 后台地址:http://localhost/admin/ 开发 ...

  5. 狂神说Git学习笔记整理

    Git 版本控制 ​ 在开发过程中,项目会进行版本迭代,新版本会取代旧版本,但是我们不希望直接删除旧版本,所以就需要一个版本管理器来管理新旧版本,不然就是手动控制... 多人开发必须使用版本控制!!! ...

  6. 【LeetCode回溯算法#01】图解组合问题

    组合问题 力扣题目链接(opens new window) 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2 ...

  7. .NET周刊【3月第1期 2024-03-03】

    国内文章 推荐10款C#开源好用的Windows软件 https://www.cnblogs.com/Can-daydayup/p/18035760 DevToys.Microsoft PowerTo ...

  8. C++ //STL---常用算法 //常用遍历 for_each //transform

    1 //STL---常用算法 2 //常用遍历 for_each 3 //transform 4 #include<iostream> 5 #include<string> 6 ...

  9. uni-app实现公众号登陆实现

    公众号实现登陆流程思路: 1. 创建一个页面用于登陆,页面上需要有输入账号和密码的表单,以及登陆按钮.2. 在登陆按钮的点击事件中,调用后端接口进行账号密码校验.如果校验通过,则将后端返回的用户信息保 ...

  10. clickhouse快速上手和问题记录

    clickhouse官方中文社区实战经验:手把手教你搭建单机clickhouse开发环境 我是用的是centOS7的虚拟机, 官方教程中的:sudo /etc/init.d/clickhouse-se ...