PAYING MORE ATTENTION TO ATTENTION:

PAYING MORE ATTENTION TO ATTENTION : IMPROVING THE PERFORMANCE OF C NVOLUTIONAL NEURAL NETWORKS VIA ATTENTION TRANSFER

论文地址:https://arxiv.org/abs/1612.03928

github地址:https://github.com/szagoruyko/attention-transfer

文章的提出的模型结构很朴素,和大部分的知识蒸馏方式相同,教师网络通过生成的注意力图(attentior map)来指导学生网络的注意力图学习,通过attention transfer 缩小学生attentior map 和教师网络attentior map 的距离使得学生网络学习到教师网络的注意力图。这样学生网络学习到了这些知识,便能够生成尽可能与教师网络相似的特征图。

这边提一点,在学习中间层特征图,不管是热力图,注意力图还是普通的特征图,两个网络在这个地方的大小是一致的,这样才能通过距离度量计算特征图的距离。

这是hint loss的思想,不同于hint loss只是单纯缩减特征图,而是将特征图转化为注意力图,使得学生网络模型学习到的不 单纯只是特征图信息,而是真正的学到里面的特征。使得学生网络生成的特征图更加灵活,不局限于教师网络的特征图。

这个注意力图生成的方式也是非常朴素的,将多通道特征图叠加起来成为单通道图。这里的叠加可以是本身的n次方后叠加,也可以是不做乘方后的叠加。次方越高,注意力图越关注于高层特征(后几层卷积层),这是因为通过卷积后,后几层特征图的取值都是比较大的,显示出的注意力图也是明显的。如下图:

其次,模型越复杂的,生成的注意力图关注的目标特征越明显:

上图特征从上往下变复杂。

def at(x):
    return F.normalize(x.pow(2).mean(1).view(x.size(0), -1))

从源码上可以看到,先对特征图进行平方,在对平方后的特征图在通道上求平均(B,C,W,H)->(B,W,H),最后再进行平铺以进行后面的loss计算->(B,W*H)。

本文和hint loss一样使用:

def at_loss(x, y):
    return (at(x) - at(y)).pow(2).mean()

x为学生特征图,y为教师特征图。

并且,attention transfer可以在多个位置使用,并且模型不同,使用的个数影响不同:

最后,网络通过反向传播优化总损失。

实验表明本文有效,具体看原论文。

完(笑)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章