定位蒸馏

定位蒸馏:Localization Distillation,简称LD

论文地址:

Localization Distillation for Dense Object Detection

开源代码地址:

https://github.com/HikariTJU/LD

MMDetection:https://github.com/open-mmlab/mmdetection/tree/master/configs/ld

方法概括:

把用于分类head的KD(知识蒸馏),用于目标检测的定位head,即有了LD(Localization Distillation)

head

head是获取网络输出内容的网络,利用之前提取的特征,head利用这些特征,做出预测。

做法:先把bbox的4个logits输出值离散化成4n个logits输出值,之后与分类KD完全一致。

意义:LD使得logit mimicking首次战胜了Feature imitation。分类知识与定位知识的蒸馏应分而治之、因地制宜

一、LD的诞生背景

1. bbox分布与定位模糊性 -- 痛点

关于bbox分布建模,它主要来源于GFocalV1 (NeurIPS 2020)Offset-bin (CVPR 2020)这两篇论文。

bbox的表示通常是4个数值,一种如FCOS中的点到上下左右四条边的距离(tblr),还有一种是anchor-based检测器中使用的偏移量,即anchor box到GT box的映射(encoded xywh)。

GFocalV1针对tblr形式的bbox建模出了bbox分布,Offset-bin则是针对encoded xywh形式建模出了bbox分布,它们共同之处就在于尝试将bbox回归看成一个分类问题。并且这带来的好处是可以建模出bbox的定位模糊性。



那么用n个概率值去描述一条边,可以显示出模型对一个位置的定位模糊估计,越尖锐的分布说明这个位置几乎没有模糊性(比如大象的上边界),越平坦的分布说明这个位置有很强的模糊性(大象的下边界)。当然不光是bbox分布的平坦度,形状上还可分为单峰型,双峰型,甚至多峰型。

2. 知识蒸馏

Knowledge Distillation (KD)最早是针对图像分类而设计的。核心思想是:用一个预训练的大模型(teacher)去指导一个小模型(student)的学习。

网络模型输出n个logits z,z经过一个带有温度 τ 的softmax变换 S(⋅,τ) ,便得到了概率分布 p=S(z,τ) .

那么只要去最小化student的概率分布 \(p_s\) 与teacher的概率分布 \(p_T\)的KL loss,就可以将大模型的知识迁移至小模型。这里温度 τ>1 对图像分类任务是常见的选取,即软化分类知识

二、定位蒸馏

看到这里,LD的idea已经不言自明,bbox的一条边是n个logits z,一个bbox就有4个 z,每个 z 作用上一个带有温度 τ 的softmax函数,把定位知识软化一下,随后一样的KL loss,让student的bbox分布去拟合teacher的bbox分布。

为验证LD的有效性,我们先在检测器的positive location上进行,也就是哪里进行了bbox regression,哪里就进行LD。大模型teacher是一个已经训练了24 epochs的高精度检测器(比如ResNet-101),小模型student可以是ResNet-50。在COCO数据集上,我们只需要稍微调一调温度 τ 就可以在GFocalV1的基础上提高1.0AP,特别是AP75的提升最为显著,说明LD确实显著改善了定位精度。

由以上可以看到,定位蒸馏LD与分类蒸馏KD从公式上来看是完全一致的,都是针对head的输出logits做知识传递,这为目标检测知识蒸馏提供了一个统一的logit mimicking框架。

三、分类KD的低效性与Feature imitation

以往许多工作指出了分类KD的蒸馏效率低下(涨点低),这主要有两个方面:

  • 1、在不同的数据集中,类别数量会变化,较少的类别可能给student提供不了很多有用的信息。

  • 2、一直以来logit mimicking都只能在分类head上操作,而无法在定位head上操作,这自然忽视了定位知识传递的重要性。

基于这两个原因,人们将视线转向了另一个很有前景的知识蒸馏方法,Feature imitation。该方法主要受到FitNet的启发,一言以概之,就是不光分类head上要做logit mimicking,中间隐藏层(特征图)也要让student去拟合teacher,通过最小化L2 loss来完成。

形成了如下的目标检测知识蒸馏框架:

分类、定位和特征图:

其中分类head上是logit mimicking(分类KD),特征图上是Feature imitation (teacher与student特征图之间的L2 loss),定位head上是伪bbox regression,即把teacher预测框当成额外的回归目标。

Feature imitation在师生的特征图上施加监督,最常见的做法是先将student的特征图尺寸与teacher特征图对齐,之后再选择一些感兴趣的区域作为蒸馏区域,例如FitNet(ICLR 2015)在全图上蒸馏;Fine-Grained(CVPR 2019)在一些anchor box的location上蒸馏;还有DeFeat(CVPR 2021)在GT box内部用小loss weight,在GT box外部用大loss weight;亦或者是GI imitation(CVPR 2021)的动态蒸馏区域,但无论选择何种区域,最后都是在蒸馏区域上计算二者的L2 loss.

那么Feature imitation有什么好处呢?

在multi-task learning框架下,特征图相当于树根,下游的各个head相当于树的叶子。那么特征图显然包含了所有叶子所需要的知识。进行Feature imitation自然就会同时传递分类知识与定位知识,而分类KD却无法传递定位知识。

Featrue imitation有什么弊端?

答案自然还是它会在蒸馏区域中的每个location上同时传递分类知识与定位知识。

前后一对比,乍看之下岂不矛盾?让我来解释一下。

分类知识与定位知识的分布是不同的。这一点在以往的工作中有提到,例如Sibling Head (CVPR 2020)

两种知识的分布不同,自然就导致了并不是在一个location上同时传递分类知识与定位知识都有利。很有可能某些区域仅对分类知识传递有利,也有可能某些区域仅对定位知识传递有利。换言之,我们需要分而治之、因地制宜地传递知识。这显然就是Feature imitation无能为力的事情了,因为它只会传递混合知识。

于是我们利用multi-task learning天然地把知识解耦成不同类型,这就允许我们在一个区域中有选择性地进行知识蒸馏。为此,我们引入了一个有价值定位区域 VLR (Valuable Localization Region)的概念,来帮助我们进行分而治之的蒸馏

与以往的Feature imitation方法不同,我们的蒸馏分为两个区域:

  • Main distillation region (主蒸馏区域):即检测器的positive location,通过label assignment获得。

  • VLR:与一般的label assignment做法类似,但区域更大,包含了Main region,但去掉了Main region。VLR可以视为是Main region的向外扩张。

于是我们来探究一下在这两个区域上进行分类的KD与定位的LD会有什么效果。

这个表格是本文的一大精髓所在,有几个有趣的现象。

  • 1、可以看到在Main区域上,KD与LD均有效,说明在这个区域上传递分类或定位知识都有好处。但明显LD提升更大,说明定位知识的传递更有利于性能的提升。

  • 2、VLR上LD也有效,这也是为什么我们把这样的区域命名为有价值定位区域。但VLR KD的加入却损害了性能。

于是就得到了本文的logit mimicking策略,Main KD + Main LD + VLR LD

有了这个logit mimicking策略,我们可以与Feature imitation对比一下

这个实验首次展示了logit mimicking的巨大潜力,也说明了logit mimicking多年以来的蒸馏效率低下的原因是缺少有效的定位知识传递。当引入了LD后,弥补了这一缺陷,logit mimicking居然可以超过Feature imitation。

当然上表也展示了,最优的蒸馏策略依然是logit mimicking与Feature imitation都用上。只是可以注意到的是,在有了logit mimicking之后,各个Feature imitation的性能差异也不是很明显了,选择哪个蒸馏区域都差不了多少。

下图展示的是student与teacher的平均分类误差与定位误差。

可以看到一些代表性Feature imitation方法(如Fine-Grained,GI)确实可以同时降低分类误差与定位误差。在仅用上LD时,定位误差得到明显下降,但分类误差无法降低也是可以理解的。而在进一步用上了KD之后,两个误差都得到了明显下降。

下图则是在两个FPN层级上的定位误差可视化

参考:目标检测-定位蒸馏 (LD, CVPR 2022)

知识蒸馏 -- 定位蒸馏LD的更多相关文章

  1. CSS基础知识(定位、浮动)

    12.浮动 特点:将当前元素脱离文档流    float: left 即左浮动  float: right 即右浮动 注:*父与子元素,设置子元素浮动不能超出父元素的范围 *多个元素均设置为浮动时,将 ...

  2. selenium 自动化基础知识(各种定位)

    元素的定位 webdriver 提供了一很多对象定位方法  例如: [ id ] , name , class name , link text , partial link text , tag n ...

  3. 带你走进CSS定位详解

    学习CSS相关知识,定位是其中的重点,也是难点之一,如果不了解css定位有时候都不知道怎么用,下面整理了一下关于定位属性的具体理解和应用方案. 一:定位 定位属性列表 position top bot ...

  4. iOS | 地图定位

    在IOS开发中,最常见的功能之一就是地图定位功能,不单单是百度地图,高德地图等专业的地图导航软件,还有美团,咕咚等一些美食购物类和运动类也需要这样的功能,所以学会这项技能是一名IOS开发工程师必须的. ...

  5. Css Position定位(简易版本)

    准备前的知识: 定位只对块级起作用.如div,p等元素是块级元素,如果是内联元素则可以先变成块级元素,display:block即可. 开始讲解: 定位共四种:static,fixed,relativ ...

  6. 1、docker简介:课程定位、是什么、能干什么、下载

    1.前提知识和定位 2.是什么 1.为什么会有docker出现 环境配置如此麻烦,换一台机器,就要重来一次,费力费时.很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把 ...

  7. Bert不完全手册7. 为Bert注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert

    借着ACL2022一篇知识增强Tutorial的东风,我们来聊聊如何在预训练模型中融入知识.Tutorial分别针对NLU和NLG方向对一些经典方案进行了分类汇总,感兴趣的可以去细看下.这一章我们只针 ...

  8. CVPR2022 | 可精简域适应

    前言 在本文中,作者引入了一个简单的框架,即Slimmable Domain Adaptation,以通过权重共享模型库改进跨域泛化,从中可以对不同容量的模型进行采样,以适应不同的精度效率权衡.此外, ...

  9. 【KAWAKO】模型的压缩、扩张,计算模型的各种成本

    目录 模型压缩 量化 稀疏化训练 剪枝 知识蒸馏 自蒸馏 集成 使用精细化模型结构 模型扩张 深度 宽度 输入图像的分辨率 深度.宽度.分辨率联合扩张 使用精细化模型结构 计算模型的各种成本 参数量 ...

  10. C产品狗

    作者:郭琦链接:https://www.zhihu.com/question/29342383/answer/110823046来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. 面试官:你是如何进行SQL调优的?

    SQL调优是我们后端开发人员面试中的高频考点,也是实际工作中提升数据库性能的关键技能.面对"你是如何进行SQL调优的?"这个问题,你是否能条理清晰地分析问题并提供解决方案? 1. ...

  2. 震惊!AI编程正在淘汰这5类人,你在其中吗?

    大家好,我是狂师. 今天在知乎上看到一个关于讨论:"人工智能大爆发,AI编程工具对程序员到底是颠覆还是辅助?'"问题,觉得蛮有意思.的确,AI编程的出现,引发了人们对于程序员职业未 ...

  3. 少样本学习实战:Few-Shot Prompt设计

    让AI用最少样本学会"举一反三" 想象一下,你要教一个外星人认识地球上的动物.如果只给它看三张哈士奇的照片,它可能会认为所有四条腿的动物都叫"哈士奇".这就是A ...

  4. 关于centos 7安装binwalk的过程中产生的问题

    啊,kali机坏了,又安的centos o(╥﹏╥)o 但是centos没有binwalk,它也不能像kali机一样之间install 又在网上搜教程 https://blog.csdn.net/qq ...

  5. Go 1.20更新了那些内容

    PGO的引入 Go 1.20 发布了配置文件引导优化(PGO)的预览版,使编译器能够根据运行时配置文件信息,执行应用程序和工作负载的特定性优化.提供要构建的配置文件,使编译器能够将应用程序的速度提高大 ...

  6. Xshell连接有跳板机(堡垒机)的服务器

    一.Xshell直连有跳板机的服务器 跳板机IP:112.74.163.161 端口号: 22     服务器IP:47.244.217.66 端口号:22 1. 新建跳板机会话 点击连接,主机和端口 ...

  7. TaskPyro:一个轻量级的 Python 任务调度和爬虫管理平台

    前言 推荐一款本人在使用的Python爬虫管理平台,亲测不错!!! TaskPyro 是什么? TaskPyro 是一个轻量级的 Python 任务调度平台,专注于提供简单易用的任务管理和爬虫调度解决 ...

  8. 从 sum 求和谈 axis=1 or 0

    二维数组 axis=0:表示从上往下 axis=1:表示从左往右 temp = np.array([[1, 2], [3, 4]]) print("原矩阵数组:\n",temp) ...

  9. 探秘Transformer系列之(19)----FlashAttention V2 及升级版本

    探秘Transformer系列之(19)----FlashAttention V2 及升级版本 目录 探秘Transformer系列之(19)----FlashAttention V2 及升级版本 0 ...

  10. CH39x产品介绍

    CH39x产品介绍 芯片 CH392 CH395 CH390 接口 异步串口/SPI 异步串口/SPI/8位并口(仅CH395L支持) SPI/16位或8位并口(仅CH390L支持) 网口速率 10M ...