摘要

​ RCNN可以说是利用深度学习进行目标检测的开山之作。在当时的VOC 2012数据集上,将mAP提升了30%以上,达到了53.3%。

​ 这篇论文主要提出两个关键见解:

  • 可以将高容量的卷积神经网络应用在自底向上的区域建议(region proposal),以此来定位和分割对象。
  • 当训练数据不足时,可以选择进行辅助任务的监督预训练,再针对具体任务进行fine-tuning,以此获得显著的性能提升。

算法流程

  • 一张图像生成1k~2k个候选区域(使用Selective Search)
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM分类器,判别种类
  • 使用回归器对候选框进行微调

image-20230307094945946

候选区域生成

​ 使用Selective Search算法。算法大致思路是通过聚类的方法在图像上初步分割,找到

颜色/纹理/大小/相似度比较相似的区域,再根据这些区域进行加权合并,最后(希望)得到一些包括了GT box的候选框。

image-20230307095455683

AlexNet 提取特征

​ 对于每个候选框,将框中的内容提取出来,并缩放至227x227的大小,送入AlexNet中提取特征,产生4096维的向量

这里之所以一定要缩放到固定大小,是因为CNN里面有全连接层

image-20230307100723121

SVM分类

​ 将2000x4096的特征矩阵与20个SVM(20个类别)组成的4096x20权值矩阵相乘,得到2000x20的分数矩阵,行表示每个候选区域,列表是该候选区域对应类别的分数(概率).

​ 针对分数矩阵,在每一列中应用greed NMS剔除重叠的建议框,得到该列中得分较高的一些候选框。

之所以用SVM而不是直接softmax在论文附录中有提到,第一个原因是训练神经网络和训练SVM时采用的参数(IoU阈值)不一致,无法直接实现端到端。第二个原因是softmax无法实现难例挖掘(存疑)

回归器修正候选框位置

​ 回归器同样是利用CNN输出的特征向量(4096维)进行预测,通过预测相对于候选框的宽高偏移和位置偏移,可以对候选框的位置进行微调,更接近GT Box。

​ 预测时通过四个函数dx/dy/dw/dh来拟合GT Box,前两个公式拟合GTBox的中心位置,后两个位置拟合宽高的指数偏移。

image-20230307101918729

​ 训练时的标签值可以由以下公式获得。也就是上面四个公式的逆变换。

image-20230307102128616

网络框架

image-20230307101120843

卷积可视化

​ 论文里提到一个卷积可视化的概念。具体来说,选择在神经网络的某一个神经元,将他作为一个独立的对象检测器使用。对于该神经元,输入10 million的region proposal,找到这些区域中使该神经元值最大的那些候选框。通过输出这些图像,可以发现每个神经元有自己偏好的识别模式.比如上半身/狗子/红花等等。

image-20230307102830346

​ 论文中也提到这些神经元选取的是POOL5中的神经元。POOL5在网络尾部,所以偏好的识别模式也是比较抽象的(上文提到的上半身等等)。同时论文中也说到在一个通道内,坐标y/x只影响感受野,不影响识别模式。(很好理解,卷积核是不变的)

image-20230307102533964

消融实验

​ 论文里还做了一些消融实验,比较了神经网络中卷积层和全连接层的作用。在不进行fine-tuning时,不加全连接的mAP比较高;加了fine-tuning后,加了全连接的mAP比较高。得出结论:

①在HOG意义上,通过仅使用CNN的卷积层来计算任意大小的图像的密集特征图方面具有潜在的实用性。这种表示将使得能够在pool5特征之上使用滑动窗口检测器(包括DPM)进行实验。(其实就是卷积层负责提取通用特征?)

②从ImageNet学习的pool5特征是通用的,并且大部分mAP改善是通过在其上学习特定的非线性分类器获得的。(全连接层负责整合特征)

RCNN存在的问题

  • 测试速度慢,测试一张图片需要53s(CPU),首先需要2秒提取候选框,随后对2k个候选框进行卷积操作(最耗时间),最后进行矩阵乘法和NMS(以及利用回归器)筛选(回归)候选框。其中神经网络抽取特征耗时最长,因为进行很多重复操作(2k个候选框难免会有很多重叠区域)
  • 训练速度慢,不是端到端的系统,SVM分类器,BBOX回归器都需要单独训练。
  • 训练所需空间大,训练SVM和回归器的时候需要将每个候选框的特征写入磁盘。对于VGG16,从VOC2007训练集上5k个图像提取的特征,需要数百GB的存储空间。

论文地址

[1706.03762] Attention Is All You Need (arxiv.org)

Abstract

​ 目前的主流序列转译模型基本是编码器-解码器架构的复杂RNN或CNN网络(当然现在已经是Transformer了),本文提出了一个简单的网络结构——Transformer。Transformer完全基于注意力机制,在机器翻译上可以达到比RNN/CNN更好的效果,同时并行化效率更高,训练时间更少。作者测试了模型在英翻德/英翻法翻译任务的效果,并尝试证明了Transformer对其它任务的泛化能力。

Introduction

​ 简单介绍了一下当前序列建模和预测的主流方法——LSTM/GRU。

RNN在每个时间步都会生成一个隐状态Ht,Ht中保存了以往单词的历史信息,使RNN在序列任务上表现较好。当然,Ht需要按时间步依次计算,并行度比较低,计算效率比较低。同时历史信息是逐步传递的,对于序列比较长的输入,较早时间步的信息有可能被遗忘,当然这个可以通过增加隐藏层单元来缓解,不过这也会进一步导致内存过大的问题。

​ Attention机制其实已经应用在序列模型中,不过依旧是结合RNN在做。

​ 本文提出完全基于Attention机制的Transformer,并行度比较高。

Model Architecture

​ Transformer整体架构如下图。接下来将逐层介绍。

image-20230320220735447

Encoder

​ 编码器由N=6个层组成,每层由两个子层组成。第一个子层是多头注意力,第二个子层是FeedForward层(就是一个隐藏层的MLP)。每个子层都使用了残差链接LayerNorm

$$ LayerNorm(x + Sublayer(x)) $$

Decoder

​ 解码器同样由N=6个层组成,每层由三个子层组成。除了Encoder中的两个子层外,还有一个Masked Multi-Head Attention层。这里之所以要Mask是因为在训练时,t时刻需要保证Decoder无法看到t时刻以后的输入,保证训练和预测行为是一致的。

Attention

​ 注意力简单来说由K(key) Q(query) V(value)三部分组成,对于每个query,根据query和每个key的相似度算对应value的加权和。

Scaled Dot-Product Attention

​ 本篇论文中计算query和key的相似度采用内积的方法,根据内积的值来作为对应value的权重(加权前需要做一次softmax)。

​ 实际应用中,做完内积后需要除以sqrt($d_k$)。主要原因是当$d_k$比较大时,做完内积后的值会比较大,那么不同内积值之间的绝对差距就会比较大,这会影响softmax的输出,即softmax的输出会向两边分散(0/1),那么反向传播的时候,就会难以训练。(因为softmax一般是跟1/0的label去比较)。所以需要÷$d_k$来缩小绝对差距。

​ mask操作也比较简单,在t时刻计算完内积后,将t+1时刻及往后的key对应的内积值换成很小的负数,那么之后做softmax并加权计算得到的value中那些“不应该出现的key-value”所占的比例就很小了。

$$ Attention(Q,K, V) = softmax(QK^T/sqrt(d_k))V $$

image-20230320222343891

Multi-Head Attention

​ 来自CNN多通道识别不同模式的灵感,做多头注意力。

​ 具体操作是先把KQV映射到比较低的维度(具体维度大小就是$d_{model}/h$),分别做h次注意力机制,将结果concat起来并映射回原尺度。

image-20230320222814348

$$ MultiHead(Q,K, V) = Concat(head1, ..., headh)W^O \\where headi = Attention(QW^Q_i ,KW^K_i , VW^V_i ) $$

image-20230320223208490

Applications of Attention in our Model

​ 总共在三个部分用到了多头注意力机制。

  • 第一个应用在Encoder中,KQV都是输入本身
  • 第二个是在Decoder中的Masked Multi-Head Attention,跟第一个相比多了一个Mask操作KQV同样是输入本身
  • 第三个也在Decoder中,其K和V是来自Encoder的输出;Q则来自Masked Multi-Head Attention的输出。也就是把编码器的输出根据Mask注意力的输出(想要的东西)抽出来。

FeedForward

​ 其实就是一个带有一个隐藏层的MLP,将MLP对于每个词都作用一次。这个的作用跟RNN中的MLP效果很像,就是把注意力抓取(aggregation)得到的信息(包括了序列信息)做一次投影,映射到更合适的语义空间,或者说利用MLP做语义转换

$$ FFN(x) = max(0, xW1 + b1)W2 + b2 $$

image-20230320224053838

Embeddings and Softmax

​ Embedding就是把token映射到一个向量。编码器和解码器用的Embedding用的权重一致,方便训练。最后Embedding的结果乘了一个sqrt($d_{model}$),这是为了和之后的Positional Encoding做scale适配

Positional Encoding

​ 因为Attention机制只记录序列信息,而不记录时序信息。通过在输入加入位置编码信息,来增加时序信息。具体编码方式如下。

$$ PE_{(pos,2i)} = sin(pos/10000^{2i/d_{model}}) \\PE_{(pos,2i+1)} = cos(pos/10000^{2i/d_{model}}) $$

Why Self-Attention

​ 本节介绍了为什么要用自注意力机制。主要总结了一下这张表。

​ 从计算复杂度/序列计算复杂度/最大路径复杂度。

最大路径可以理解成获得任意两个点的关系最少需要的步数

image-20230320225319835

Train

​ 具体详见论文/源码。

  • 使用Adam,β1=0.9,β2=0.98
  • image-20230320225609440
  • 正则化手段

    • Residual Dropout P=0.1
    • Label Smoothing

Different Variations on the Transformer architecture

image-20230320225859976

Conclusion

​ 本篇论文提出了一个完全基于注意力机制的序列转译模型,用多头注意力代替了以往常用的RNN。对于机器翻译任务,Transformer有明显的训练速度和准确率优势。同时Transformer有可能应用在图片/视频等其他媒体,实现多模态的输入,