赞
踩
我们知道图片可以通过提取特征进行分类、目标检测等后续操作,拿最简单的图片分类来说,可以将图片分类成猫、狗等,但图片中可能含有背景或者其他杂物,也就是说,不是所有的像素点都对识别出目标物有用,那图片中的哪些像素点是对于识别出目标物是重要的呢?
基于这个问题,类似人看物体,某一时刻只会把注意力放到某些事物上,例如,人看图片只会集中在图片上的某个区域,说明这块区域对我们来说是重要的,从而忽略另外的一些不重要区域。
那我们是不是就可以给重要区域赋较大的权重,不太重要的区域赋较小的权重,这样更多关注对我们有用的信息。这里所说的权重就是注意力(Attention)。
这就是最简单的注意力机制。
一张图片通过卷积层会得到特征图(feature map),假设特征图是n*
m*
L,得到的通道数是L,从通道上来看,特征图的每个通道都用来被视作一个特征检测器,所以通道特征聚焦的是图像中有用的信息是"什么"。每个通道可能对最后结果的影响不一样,我们对每个通道赋于不一样的权重,将重要的通道的权重提高,这就是通道注意力。
将特征图经过全局平均池化或者全局最大池化,特征图变成1*
1*
L,通过MLP卷积(多层感知机)得到一个1*
1 *
L的向量,再与特征图相乘,这样就将特征图上的每个通道赋上不同的权重。
从空间上看特征图,空间注意力聚焦于特征图上的有效信息在"哪里",为了计算空间注意力,首先在通道维度平均池化和最大池化,然后将他们产生的特征图进行拼接起来(concat),然后在拼接后的特征图上,使用卷积操作来产生最终的空间注意力特征图。
可将通道和空间注意力机制结合使用,Convolutional Block Attention Module(CBAM)中提出。还有空间和时间注意力结合。
假设我们数据集中有问题和答案,称问题为Key(K),答案为Value(V)。现在来了一个新的问题,成为Query(Q),当然我们的Q、K、V都是向量。计算Qi与Ki的相似度,得到结果Ci,比如使用余弦相似度,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
将Ci送入softmax函数中,得到概率Pi,将Pi与Vi相乘再相加得到VT,这个VT是Query的Value,这样就将数据库中的不同答案Value赋予了不同的权重,与数据库中问题Key相似度越高,其答案的重要程度越高,更可能是新问题Query对应的答案。
self-atttention在Transformer中使用到,它将Q=K=V,例如我们要将“我是一只猫”变翻译为“I’m a cat’”,数据集中的K=V,例如K=“我”时,V=“我”。首先将"我"、“是”、“一只”、“猫”通过word2vec变为相同维度的词向量。
首先我们单个来看,将“我”即作为Q,也作为K,还作为V,将“我”与数据集中K(“我”、“是”、“一只”、“猫”)计算相似度Ci,例如余弦相似度。将Ci送入softmax得Pi,P1*
V1+P2*
V2+…+Pi*
Vi=Bi,这样就把“我”与其他三个词关联在一起了,还赋予了权重。其他几个词按照同样的步骤计算,示例图如下:
Transformer中将的自注意力多了一部分,将Q、K、V乘以了转移矩阵W1、W2、W3,即转换后的Q*=W1*
Q、K*=W2*
K、V*=W3*
V,再按照之前的步骤计算。Muti-head self-attention是因为使用了多组转移矩阵,但不同组之间的转移矩阵size一样,同组之间的size也一样,这是为了保证输入与输出的维度一样。
DETR是用来做目标检测,将Transformer用到了CV中,它将图片经过CNN提取特征后得到T(通道数)*
N*
M的特征图,经过一个1*
1*
d(通道数)卷积,得到d(通道数)*
N*
M的特征图,再reshape成d*
(N*
M)的二维向量,送入到encoder中。编码器内部位置编码Positional Encoding仅仅作用于Query和Key,即只与Query和Key相加,Value不做任何处理。没有使用masked,是因为图片目标检测并没有答案(汉译英翻译中,每一句汉语都有一句英文对应,decoder中输入的是答案),object queries是需要学习的参数,它最后包含图片的全局信息,因此没必要规定mask,也不需要顺序,故decoder输入不需要位置编码。
object queries相当于问问题的人,有100个这样的参数,它是可以学习的,第一个参数(1*
256)相当于问图片的左下角是不是有小物体、中间是不是有大物体等,第二个参数(1*
256)相当于问图片的右下角是不是有小物体等,并不是bounding box。
根据decoder输出的结果,我们需要送入到FFN中得到类别以及位置信息,会得到100个类别和位置数据,假如图片实际只有三个物体,那通过二分图中的匈牙利算法选出最适合的3个框,通过损失函数以及反向传播,我们就可以无限拟合预测值靠近真实值的类别和位置信息。
所以transformer中的encoder可以用于特征提取,可以安插在其他网络中做backbone。transformer中不管是encoder还是decoder,输入与输出都保持一致。
记录一下学习内容,方便以后查阅,欢迎大家指正,参考了以下文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。