| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【CVPR 2021】基于解耦特征的目标检测知识蒸馏:Distilling Object Detectors via Decoupled Features -> 正文阅读 |
|
[人工智能]【CVPR 2021】基于解耦特征的目标检测知识蒸馏:Distilling Object Detectors via Decoupled Features |
【CVPR 2021】基于解耦特征的目标检测知识蒸馏:Distilling Object Detectors via Decoupled Features论文地址:https://arxiv.org/abs/2103.14475 主要问题:与图像分类不同的是,目标检测的知识蒸馏更加复杂,因为它往往具有具有多个损失函数,其中语义信息所依赖的特征纠缠在一起 此外其他的目标检测知识蒸馏算法往往忽略了排除对象的区域的特征信息(就是背景区域的特征),而作者通过相关实验发现,只有通过背景区域特征蒸馏学生也可以显著提高学生,也就是说背景区域的特征对知识蒸馏也非常重要 之前也有相关研究考虑了背景区域,但一旦将背景和前景集成在一起,蒸馏性能就会意外下降。原因可能是他们的方法直接整合了这两种区域。 从梯度的角度,作者在下图中说明了对象和背景区域之间的不一致: 左列的图像是从COCO训练集中随机选择的,右列的图像是在学生检测器中它们的neck部分特征的相应梯度 我们可以观察到,对象区域的梯度大小始终大于来自背景区域的梯度大小 因此,这提醒我们在蒸馏过程中物体区域和背景区域的不同重要性 主要思路:基于上述观察,作者提出了一种新的蒸馏算法,通过解耦特征(DeFeat)来学习一个更好的学生检测器 具体地说就是该算法会预处理两层解耦特征,从而将有用信息嵌入学生 作者说的两层就是从颈部(neck)的解耦特征和从分类头(head)的解耦建议区域(proposals),提取出FPN特征和RoI Align特征 前者利用GT掩码将FPN特征分为前景和背景部分,并在师生模型之间使用均方误差损失 后者的RoI Align特征也被解耦为正部分和负部分,然后利用师生模型基于RoI Align特征生成的logits计算KL散度损失 具体实现:基本符号:假设 S ∈ R H × W × C S\in R^{H×W×C} S∈RH×W×C 和 T ∈ R H × W × C T\in R^{H×W×C} T∈RH×W×C 分别是学生模型和教师模型的证件特征,基于中间特征的知识蒸馏损失就可以写作: L f e a = γ 2 N ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C I ( ? ( S h , w , c ) ? T h , w , c ) 2 L_{fea}=\frac{\gamma}{2N}\sum^{H}_{h=1}\sum^{W}_{w=1}\sum^{C}_{c=1}I(\phi(S_{h,w,c})-T_{h,w,c})^2 Lfea?=2Nγ?∑h=1H?∑w=1W?∑c=1C?I(?(Sh,w,c?)?Th,w,c?)2 其中 N = H W C N=HWC N=HWC为元素总数,用 γ γ γ控制蒸馏损失的大小, ? \phi ?表示自适应层(用来降维), I I I表示模拟掩模(imitation mask),即中的高斯掩模或者细粒度掩模 在以前的工作中,只考虑对象区域或均匀地提取整个特征图,这些方法中的掩模可以看作是一个全是1的张量 给定RPN输出的K个建议区域,分类头需要计算所有proposals的软标签,通过软预测进行的蒸馏可以表述为: L c l s = 1 K ∑ i = 1 K L C E ( y i s , Y i ) + λ K ∑ i = 1 K L K L ( y i s , y i t ) L_{}cls=\frac{1}{K}\sum^K_{i=1}L_{CE}(y_i^s,Y_i)+\frac{\lambda}{K}\sum^K_{i=1}L_{KL}(y_i^s,y_i^t) L?cls=K1?∑i=1K?LCE?(yis?,Yi?)+Kλ?∑i=1K?LKL?(yis?,yit?) 其中 L C E L_{CE} LCE? 是交叉熵损失, L K L L_{KL} LKL? 是KL散度, Y i Y_i Yi? 是第 i i i 个proposal的真实标签, y i s , y i t y_i^s,y_i^t yis?,yit? 分别是学生模型和教师模型的预测输出 这样总损失就可以写作: L = L f e a + L c l s + L r e g + L r p n L=L_{fea}+L_{cls}+L_{reg}+L_{rpn} L=Lfea?+Lcls?+Lreg?+Lrpn? Decouple Intermediate Features in Distillation:作者通过实验发现仅通过背景区域进行蒸馏仍然能获得与仅通过对象区域进行蒸馏相当的结果 以此得出的结论是,中间特征中的背景区域可以补充对象区域,并进一步有助于训练学生检测器,但剩下的问题是如何在蒸馏中适当地整合这两种区域 基于上述观察,作者建议通过解耦特征对学生模型进行蒸馏 给定 H × W H×W H×W大小的中间特征,我们首先根据真值框 B B B生成一个二进制掩模 M M M: M i , j = 1 [ ( i , j ) ∈ B ] M_{i,j}=\mathbb{1}[(i,j)\in B] Mi,j?=1[(i,j)∈B] 其中 M ∈ { 0 , 1 } H × W M\in\{0,1\}^{H×W} M∈{0,1}H×W,位置 ( i , j ) (i,j) (i,j) 的值为 1 1 1 表示它属于前景, 0 0 0 则表示背景 更具体地说就是,如果检测器包含可以输出多层次特征的特征金字塔网络(FPN),我们将每个真值框分配到相应的层次,并相应地生成掩模 M M M 然后我们就可以使用生成的二进制掩码来解耦颈部特征,如图所示: 中间特征蒸馏的公式为: 其中 N o b j = C ∑ h = 1 H ∑ w = 1 W M w , h N_{obj}=C\sum^H_{h=1}\sum^W_{w=1}M_{w,h} Nobj?=C∑h=1H?∑w=1W?Mw,h? 是正样本区域元素数目, N b g = C ∑ h = 1 H ∑ w = 1 W ( 1 ? M w , h ) N_{bg}=C\sum^H_{h=1}\sum^W_{w=1}(1-M_{w,h}) Nbg?=C∑h=1H?∑w=1W?(1?Mw,h?) 是负样本区域元素数目, α o b j α_{obj} αobj?和 α b g α_{bg} αbg?分别是前景和背景区域的损失系数 Decouple Region Proposals in Distillation:作者通过实验发现,正样本的蒸馏损失始终比负样本的蒸馏损失要大。而且如果它们没有适当地平衡,负样本产生的小梯度可能会淹没在正样本产生的大梯度中,从而限制了进一步的细化 因此作者建议在提取分类头时,将region proposal解耦为正样本和负样本,以达到最优收敛性 作者将教师模型产生的区域建议输入教师和学生的头部,以生成 p t p^t pt和 p s p^s ps的类别预测 正样本和负样本在作者提出的方法中单独处理 假设正样本输出logits为 z z z,作者通过温度参数 T o b j T_{obj} Tobj?对教师模型和学生模型的预测进行软化: p s , T o b j ( c ∣ θ s ) = e x p ( z c s / T o b j ) ∑ j = 1 C e x p ( z j s / T o b j ) , c ∈ Y p^{s,T_{obj}}(c|\theta^s)=\frac{exp(z^s_c/T_{obj})}{\sum^C_{j=1}exp(z^s_j/T_{obj})},c\in Y ps,Tobj?(c∣θs)=∑j=1C?exp(zjs?/Tobj?)exp(zcs?/Tobj?)?,c∈Y p t , T o b j ( c ∣ θ t ) = e x p ( z c t / T o b j ) ∑ j = 1 C e x p ( z j t / T o b j ) , c ∈ Y p^{t,T_{obj}}(c|\theta^t)=\frac{exp(z^t_c/T_{obj})}{\sum^C_{j=1}exp(z^t_j/T_{obj})},c\in Y pt,Tobj?(c∣θt)=∑j=1C?exp(zjt?/Tobj?)exp(zct?/Tobj?)?,c∈Y 负样本则类似的通过 T b g T_{bg} Tbg? 进行处理 最终蒸馏损失就用 KL 散度,写作: L f e a = β o b j K o b j ∑ i = 1 K b i L K L ( p i s , T o b j , p i t , T o b j ) + β b g K b g ∑ i = 1 K ( 1 ? b i ) L K L ( p i s , T b g , p i t , T b g ) \begin {aligned} L_{fea}=&\frac{\beta_{obj}}{K_{obj}}\sum^K_{i=1}b_iL_{KL}(p_i^{s,T_{obj}},p_i^{t,T_{obj}})\\ &+\frac{\beta_{bg}}{K_{bg}}\sum^K_{i=1}(1-b_i)L_{KL}(p_i^{s,T_{bg}},p_i^{t,T_{bg}}) \end {aligned} Lfea?=?Kobj?βobj??i=1∑K?bi?LKL?(pis,Tobj??,pit,Tobj??)+Kbg?βbg??i=1∑K?(1?bi?)LKL?(pis,Tbg??,pit,Tbg??)? L K L ( p s , T , p t , T ) = T 2 ∑ c = 1 C p t , T ( c ∣ θ t ) l o g p t , T ( c ∣ θ t ) p s , T ( c ∣ θ s ) L_{KL}(p^{s,T},p^{t,T})=T^2\sum^C_{c=1}p^{t,T}(c|\theta^t)log\frac{p^{t,T}(c|\theta^t)}{p^{s,T}(c|\theta^s)} LKL?(ps,T,pt,T)=T2∑c=1C?pt,T(c∣θt)logps,T(c∣θs)pt,T(c∣θt)? 其中 b i ∈ { 0 , 1 } b_i\in \{0,1\} bi?∈{0,1} 是第 i i i 个proposal相对于真值目标的二进制标签, β o b j β_{obj} βobj?和 β b g β_{bg} βbg?分别是正样本和负样本的系数, K o b j = ∑ i b i , K b g = ∑ i ( 1 ? b i ) K_{obj}=\sum_ib_i,K_{bg}=\sum_i(1-b_i) Kobj?=∑i?bi?,Kbg?=∑i?(1?bi?) 分别是正样本和负样本的数目 实验结果:联系作者:微信号:Sharpiless 作者的其他主页:
我的公众号: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/22 10:24:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |