CVPR目标检测:少见的知识蒸馏用于目标检测(附论文下载)-程序员宅基地

技术标签: python  机器学习  计算机视觉  深度学习  人工智能  

欢迎关注“

计算机视觉研究院

547d6ee969bb73547719be13964badad.gif

计算机视觉研究院专栏

作者:Edison_G

近年来,知识蒸馏已被证明是对模型压缩的一种有效的解决方案。这种方法可以使轻量级的学生模型获得从繁琐的教师模型中提取的知识。

89048059a6add6030082b26ff1569726.png

长按扫描二维码关注我们

回复“GID”获取论文

1、简介

然而,以往的蒸馏检测方法对不同的检测框架具有较弱的泛化性,并且严重依赖于GT,忽略了实例之间有价值的关系信息。因此,研究者提出了一种新的基于鉴别实例的检测方法,而不考虑GT的正负区别,称为通用的实例蒸馏(GID)。

新提出的方法包含了一个通用的实例选择模块(GISM),以充分利用基于特征、基于关系和基于响应的知识进行蒸馏。大量的结果表明,学生模型在各种检测框架中取得了显著的AP改进,甚至优于教师。具体来说,ResNet-50的RetinaNet在COCO数据集上使用GID在mAP中达到39.1%,超过基线36.2%,甚至优于基于ResNet-101的38.1%AP教师模型。

d46c219981b24bf3fd28d127b05c93e2.png

2、背景及动机

由Hinton等人【Geoffrey Hinton, Oriol Vinyals, and Jeff Dean. Distilling the knowledge in a neural network, 2015】提出的知识蒸馏(KD)是解决上述问题的一种很有前途的方法。知识蒸馏是将大模型的知识传递给小模型,从而提高小模型的性能,达到模型压缩的目的。目前,知识的典型形式可分为三类:反应型知识、特征型知识和关系型知识。然而,大多数蒸馏方法主要是针对多分类问题而设计的。 

直接将分类特定蒸馏方法迁移到检测模型中的效果较差,因为检测任务中正实例和负实例的比例极不平衡。 

一些为检测任务设计的蒸馏框架处理了这个问题,并取得了令人印象深刻的结果,例如。Li【Quanquan Li, Shengying Jin, and Junjie Yan. Mimicking very efficient network for object detection. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), July 2017】通过提取RPN和Wang等人【Tao Wang, Li Yuan, Xiaopeng Zhang, and Jiashi Feng. Distilling object detectors with fine-grained feature imitation. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), June 2019】抽样一定比例的正负实例来解决这个问题。进一步提出只提取近GT区。然而,蒸馏的正负实例之间的比率需要精心设计,而仅蒸馏与GT相关的区域可能会忽略背景中潜在的信息区域。此外,目前的检测蒸馏方法不能同时在多个检测框架中工作:如two-stage, anchor-free。因此,研究者希望设计一种通用的蒸馏方法,用于各种检测框架,以有效地使用尽可能多的知识,而不涉及正或负。

3、新框架优势

fa37ff274f560266c39a8e166dd793fe.png

通过上图可以知道,新框架有如下优势:

(i)可以对一个图像中实例之间的关系知识进行建模,以便进行蒸馏。Hu【Han Hu, Jiayuan Gu, Zheng Zhang, Jifeng Dai, and Yichen Wei. Relation networks for object detection. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2018】演示了关系信息对检测任务的有效性。然而,基于关系的知识蒸馏在目标检测中还没有被探索。 

(ii)避免手动设置正、负区域的比例,或只选择与GT有关的区域进行蒸馏。虽然GT相关的领域几乎是信息丰富的,但极其困难和简单的实例可能是无用的,甚至来自背景的一些信息块也可以帮助学生学习教师的泛化。此外,研究者还发现,自动选择学生和教师之间的一些判别实例进行蒸馏,可以使知识传递更加有效。这些判别实例被称为一般实例(GIS),因为新方法不关心正实例和负实例之间的比例,也不依赖于GT标签。

(iii)新方法对各种检测框架具有强大的泛化能力。基于学生和教师模型的输出计算GIS,而不依赖于特定检测器的某些模块或特定检测框架的某些关键特性,如anchor。

4、General Instance Distillation

先前的工作【Tao Wang, Li Yuan, Xiaopeng Zhang, and Jiashi Feng. Distilling object detectors with fine-grained feature imitation. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), June 2019】提出,目标附近的特征区域有相当多的信息,这对于知识蒸馏是有用的。然而,研究者发现,不仅目标附近的特征区域,而且即使是来自背景区域的判别块也有意义的知识。基于这一发现,设计了通用实例选择模块(GISM),如下图所示。

08df45c3fd1732b9974989f98ae8dc66.png

该模块利用教师和学生模型的预测来选择蒸馏的关键实例。此外,为了更好地利用教师提供的信息,提取并利用基于特征、基于关系和基于响应的知识进行蒸馏,如下图所示。实验结果表明,新的蒸馏框架对于目前最先进的检测模型是通用的。

ecca1fed364c4ae7a197404ead6d7bc8.png

5、实验

为了验证该方法的有效性和鲁棒性,在不同的检测框架和异构主架构上进行了实验,并在COCO和Pascal VOC数据集的少数类检测上进行了实验。具体来说,在【Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. Faster r-cnn: Towards real-time object detection with region proposal networks. In C. Cortes, N. D. Lawrence, D. D. Lee, M. Sugiyama, and R. Garnett, editors, Advances in Neural Information Processing Systems 28, pages 91–99. Curran Associates, Inc., 2015】中的设置之后,对于PascalVOC数据集,选择在VOC2007中分割的5k训练图像和在VOC2012中分割的16k训练图像进行训练,在VOC2007中分割的5k测试图像进行测试。对于COCO,选择默认的120k训练图像分割进行训练,5k Val图像分割进行测试。所有蒸馏性能均以AP进行评价。

0bb963964fafa0458b1151ca553db428.png

42c39a49aa09e60019afeb0d09d6f1c2.png

5aaae462af86e7760d9acc7b861319a5.png

acb90ced78176619529bd0d56225ce06.png

绿色、红色、黄色和青色框分别表示GT、正、半正和负实例。为了进一步分析了每种类型的一般实例的贡献,并验证了GISM的有效性,对每种类型的一般实例进行了实验。引入了一个名为intersection over proposals (IoP),以帮助分离这些GI:

8d33c8dfb473fff4c14afe0c24508386.png

GI的每个类型定义如下:

ac2a1d8cf310e07b002b29a3128ead72.png

1ddfba013d6aa6bd02c18b1f432e4493.png

 THE END

我们开创“计算机视觉协会”知识星球一年有余,也得到很多同学的认可,我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。

49eae1abe29d180427c450612c361e60.png

如果想加入我们“计算机视觉研究院”,请扫二维码加入我们。我们会按照你的需求将你拉入对应的学习群!

计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

1ee95f8dea5298685d073b6f96d58746.png

计算机视觉研究院

长按扫描二维码关注我们

回复“GID”获取论文

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gzq0723/article/details/122659828

智能推荐

AndroidStudio无代码高亮解决办法_android studio 高亮-程序员宅基地

文章浏览阅读2.8k次。AndroidStudio 升级到 4.2.2 版本后,没有代码高亮了,很蛋疼。解决办法是:点开上方的 File,先勾选 Power Save Mode 再取消就可以了。_android studio 高亮

swift4.0 valueForUndefinedKey:]: this class is not key value coding-compliant for the key unity.'_forundefinedkey swift4-程序员宅基地

文章浏览阅读1k次。使用swift4.0整合Unity出现[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key unity.'在对应属性前加@objc 即可。或者调回swift3.2版本_forundefinedkey swift4

Spring Security2的COOKIE的保存时间设置_springsecurity 设置cookie失效时间-程序员宅基地

文章浏览阅读1.3k次。http auto-config="true" access-denied-page="/common/403.htm"> intercept-url pattern="/login.**" access="IS_AUTHENTICATED_ANONYMOUSLY"/> form-login login-page="/login.jsp" defau_springsecurity 设置cookie失效时间

view滑动冲突解决实战篇2(外部拦截法)_viewpage2外部拦截事件-程序员宅基地

文章浏览阅读1.1k次。继上篇内部拦截法需求还是跟上篇一样。只不过这次用外部拦截法来解决;只要在父容器添加如下代码就可以解决了滑动冲突,很简单,套模板就行 // 分别记录上次滑动的坐标(onInterceptTouchEvent) private int mLastXIntercept = 0; private int mLastYIntercept = 0; @Override public bo_viewpage2外部拦截事件

汇编 堆栈 变量存储 指针_汇编语言栈指针-程序员宅基地

文章浏览阅读2.5k次,点赞7次,收藏9次。本文章系作者原创,未经许可,不得转载。汇编 堆栈 变量存储 指针先说栈的概念,栈其实也是一种。。。。。先说内存的概念吧。。。。。额 先说计算机吧,简单来说的话,可以把计算机理解成由CPU,内存,硬盘组成,而CPU内部又包括一种叫做内部寄存器的东西,包括 数据寄存器: AX,BX,CX,DX; 段寄存器: CS,DS,ES,SS; 指针与变址寄存器SP,BP,SI,DI; ..._汇编语言栈指针

架构师之路:从码农到架构师你差了哪些_web架构师-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏56次。转载自 架构师之路:从码农到架构师你差了哪些 Web应用,最常见的研发语言是Java和PHP。 后端服务,最常见的研发语言是Java和C/C++。 大数据,最常见的研发语言是Java和Python。 可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。有..._web架构师

随便推点

超级简单的Python爬虫入门教程(非常详细),通俗易懂,看一遍就会了_爬虫python入门-程序员宅基地

文章浏览阅读7.3k次,点赞6次,收藏36次。超级简单的Python爬虫入门教程(非常详细),通俗易懂,看一遍就会了_爬虫python入门

python怎么输出logistic回归系数_python - Logistic回归scikit学习系数与统计模型的系数 - SO中文参考 - www.soinside.com...-程序员宅基地

文章浏览阅读1.2k次。您的代码存在一些问题。首先,您在此处显示的两个模型是not等效的:尽管您将scikit-learn LogisticRegression设置为fit_intercept=True(这是默认设置),但您并没有这样做statsmodels一;来自statsmodels docs:默认情况下不包括拦截器,用户应添加。参见statsmodels.tools.add_constant。另一个问题是,尽管您处..._sm fit(method

VS2017、VS2019配置SFML_vsllfqm-程序员宅基地

文章浏览阅读518次。一、sfml官网下载32位的版本 一样的设置,64位的版本我没有成功,用不了。二、三、四以下这些内容拷贝过去:sfml-graphics-d.libsfml-window-d.libsfml-system-d.libsfml-audio-d.lib..._vsllfqm

vc——类似与beyondcompare工具的文本比较算法源代码_byoned compare 字符串比较算法-程序员宅基地

文章浏览阅读2.7k次。由于工作需要,要做一个类似bc2的文本比较工具,用红色字体标明不同的地方,研究了半天,自己写了一个简易版的。文本比较的规则是1.先比较文本的行数,2.再比较对应行的字符串的长度3.再比较每一个字符串是否相同。具体代码如下:其中m_basestr和m_mergestr里面存放是待比较的字符串int basecount=m_basestr.GetLength(); int mergec_byoned compare 字符串比较算法

aetna java_pom.xml-程序员宅基地

文章浏览阅读79次。xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">org.apacheapache174.0.0org.apache.atlasapache-atlas3.0.0-SNAPSHOTMetadata Management and Data Govern..._atlas.pom

生成随机数_<math.h>随机数-程序员宅基地

文章浏览阅读1.5k次。C语言中有可以产生随机数据的函数,需要添加 stdlib. h头文件与time.h头文件。首先在main函数开头加上“ srand(unsigned)time(NULL));",这个语句将生成随机数的种子(不懂也没关系,只要记住这个语句,并且知道 srand是初始化随机种子用的即可)。然后,在需要使用随机数的地方使用 rand()函数。下面是一段生成十个随机数的代码:程序代码:#incl..._随机数