目录
- 前言
- 泛读
- 摘要
- Introduction
- Related Work
- 小结
- 精读
- 模型
- 模型构架
- 全卷积定位层
- 卷积锚点
- 边界回归
- 边界采样
- 双线性插值
- 识别网络
- RNN
- 损失函数
- 训练与优化
- 实验
- 数据集,预处理
- DenseCap
- 评价标准
- 基线
- 区域和图像级统计之间的差异
- RPN vs EdgeBoxes
- Qualitative results
- 区域+caption的图像检索
- 结论
前言
本课程来自深度之眼《多模态》训练营,部分截图来自课程视频。
文章标题:DenseCap: Fully Convolutional Localization Networks for Dense Captioning
用于密集字幕的全卷积定位网络
作者:Justin Johnson+AK+李飞飞
单位:斯坦福
发表时间:2016 CVPR ORAL
Latex 公式编辑器
泛读
摘要
We introduce the dense captioning task, which requires a computer vision system to both localize and describe salient regions in images in natural language. The dense captioning task generalizes object detection when the descriptions consist of a single word, and Image Captioning when one predicted region covers the full image.
我们介绍了密集caption任务,该任务要求计算机视觉系统既能定位图像中的突出区域,又能用自然语言对其进行描述。当描述由单个单词组成时,密集caption任务将物体检测任务和当一个预测区域覆盖整个图像时的图像字幕任务进行了概括。(密集字幕任务包含定位及利用自然语言描述定位物体两个主要任务。)
To address the localization and description task jointly we propose a Fully Convolutional Localization Network (FCLN) architecture that processes an image with a single, efficient forward pass, requires no external regions proposals, and can be trained end-to-end with a single round of optimization.
为了同时解决物体定位和对其进行描述这两个任务,文中提出Fully Convolutional Localization Network,简称FCLN。该架构只需一次高效的前向传递即可处理图像,无需外部区域建议,并且只需一轮优化即可进行端到端训练。
The architecture is composed of a Convolutional Network, a novel dense localization layer, and Recurrent Neural Network language model that generates the label sequences.
FCLN由一个卷积网络,一种新的密集定位层,和一个产生标签序列的RNN语言模型组成。
We evaluate our network on the Visual Genome dataset, which comprises 94,000 images and 4,100,000 region-grounded captions. We observe both speed and accuracy improvements over baselines based on current state of the art approaches in both generation and retrieval settings.
实验描述:我们在视觉基因组数据集上对我们的网络进行了评估,该数据集包括 94,000 张图片和 4,100,000 个区域基础caption。在生成和检索设置中,我们观察到速度和准确性都比基于当前最先进方法的基线有所提高。
Introduction
描述图像任务有赖于对视觉场景及其所有元素的深刻语义理解。然而,尽管有许多潜在的应用,图像任务对于我们最先进的视觉识别系统来说仍然是一个挑战。过去几年中,图像分类技术取得了重大进展,其任务是为图像分配一个标签。相关工作有两个方向: 第一个,物体检测领域的快速发展确定了能有效识别和标记图像多个突出区域的模型(RCNN)。其次,图像caption方面的最新进展已经将标签空间的复杂性从一组固定的类别扩展到能够表达更丰富概念的单词序列。
虽然标签的密集度和复杂度两个方向的研究是双向的,本文则将这两个研究统一为一个联合框架。本文引入了密集caption任务(参见图1),它
需要一个模型来预测图像区域之间的一组描述。因此,当目标标签由一个单词组成时,对象检测将作为一种特殊情况被恢复,当所有图像由横跨整个图像的一个区域组成时,图像字幕将被恢复。
创新点1:Additionally,本文提出了FCLN来解决密集caption任务,然后介绍该模型由哪些工作引出来。
创新点2:提出dense localization layer. 密集定位层
Related Work
将上面创新点1进行展开,先来一段总:本工作借鉴了最近在物体检测、图像caption方面的工作,这些工作允许对图像中的特定区域进行下游处理。
然后在分小标题进行讲解:
Object Detection. 我们的核心视觉处理模块是卷积神经网络(CNN),它已成为视觉识别任务的主流模型。在 R-CNN 中首次将这些模型应用于密集预测任务,其中每个感兴趣区域(RoI)都是独立处理的。进一步的工作集中在仅使用 CNN 的单次前向传递处理所有区域,以及通过在图像坐标系中或在完全卷积从而位置不变的设置中直接预测边界框来消除显式区域建议方法。与我们的方法最相关的是 Ren 等人的研究,他们开发了一种区域建议网络 (RPN),可以从锚点回归到感兴趣的区域。不过,他们采用的是 4 步优化流程,而我们的方法不需要训练管道。此外,我们用一种可微分的空间软关注机制取代了他们的 RoI 池机制。这一改变使我们能够通过区域建议网络进行反向传播,并对整个模型进行联合训练。
Image Captioning.有几种开创性的方法探索了用自然语言描述图像的任务。最近,基于神经网络的方法采用了递归神经网络(RNN)作为生成caption的核心架构元素。这些模型以前曾用于语言建模,众所周知,它们可以学习强大的长期互动。最近的几种图像caption方法都依赖于以图像信息为条件的 RNN 语言模型的组合,包括软注意力机制。与我们的工作类似,Karpathy 和 Fei-Fei 在区域上运行图像caption模型,但他们没有在一个模型中解决检测描述的联合任务。我们的模型是端到端的,其设计方式使每个区域的预测都是全局图像上下文的函数,我们的研究表明,这最终也会带来更强的性能。最后,我们为密集caption任务设计的指标受到了图像caption任务中指标的启发。
小结
主要介绍了一种CNN解决密集字幕任务的方法。密集字幕任务主要含两个方面:
(1)单个单词描述的目标检测任务;
(2)对整个图像的一个预测区域的字幕标注任务。
精读
模型
先给overview:我们的目标是设计一种架构,它可以同时做两个事情,一个是定位(localization)RoI,另一个是用自然语言描述每个区域。主要的挑战是开发一个支持端到端训练的模型,只需一步优化,并进行高效有效的推理。我们提出的体系结构(参见图2)借鉴了最近在对象检测、图像方面的工作中出现的结构元素, 图像字幕和软空间注意,同时解决这些设计限制。
在3.1节中,我们首先描述了模型的组件。然后在第3.2节和3.3节中,我们讨论了损失函数以及训练和推理的细节。
模型构架
文中使用VGG-16模型(当时的SOTA)。它由13个3×3卷积层和嵌入其中的5个2×2 max pooling层组成,文中移除了最后的pooling层(只用了4个max pooling层),因此如果输入图像是 3 × W × H 3×W ×H 3×W×H,那么输出是 C × W ′ × H ′ , C = 512 , W ′ = ⌊ W 16 ⌋ , H ′ = ⌊ H 16 ⌋ C×W' ×H',C=512,W'= \left \lfloor \cfrac{W}{16}\right \rfloor,H'= \left \lfloor \cfrac{H}{16}\right \rfloor C×W′×H′,C=512,W′=⌊16W⌋,H′=⌊16H⌋。
该网络的输出对一组均匀采样的图像位置处的图像外观进行编码,并构成定位层的输入。
然后详细分小节讲解每个组件
全卷积定位层
定位层接收激活的输入张量,识别感兴趣的空间区域,并从每个区域提取固定大小的表征。
我们的方法基于Faster R-CNN的方法,但我们用双线性插值取代了他们的RoI池化机制,允许我们的模型通过预测区域的坐标进行BP传播。这种改动打开了预测仿射或变形区域提议的大门(而不是边界框),但我们将这些扩展留给未来的工作。
输入/输出:对于输入的 C × W ′ × H ′ C×W' ×H' C×W′×H′张量,网络选择 B B B个感兴趣的区域,并且对于这些区域给出了三个输出张量,分别是
区域坐标:一个 B × 4 B×4 B×4大小的矩阵。
区域得分:长度为 B B B的向量,向量每个元素对应每个输出区域的置信度得分。得分越高,与ground-truth的RoI越接近。
区域特征(见图1右下角): B × C × X × Y B × C × X × Y B×C×X×Y大小的张量,对应了 B B B个输出区域的特征。 X × Y X\times Y X×Y代表网格大小, C C C是维度。这里全卷积定位层的输出因为对应RNN的输入,而RNN的输入要固定大小的,因此这里全卷积定位层将不同大小的RoI区域输出为固定大小的表征。
卷积锚点
与 Faster R-CNN类似,定位层也是通过对一系列平移不变的anchors进行回归得到候选区域。
具体过程就是把输入的特征向量(也就是 W ′ × H ′ W'×H' W′×H′)网格中的每一个点映射回 W × H W×H W×H的原始图像平面中,并且以该投影点为中心考虑 k = 12 k=12 k=12个不同大小比例的锚框anchor boxes。
定位层对每个anchor box的都进行置信度得分和四个标量(scalars)的预测(这四个标量是通过对anchor box到predicted box坐标的回归而得到的)。以上这些结果是通过将特征图送入有着256个3×3滤波器的卷积层,一个ReLU层,以及有着 5 k 5k 5k个1×1滤波器的卷积层而得到的。
最后的结果大小为: 5 k × W ′ × H ′ 5k\times W'\times H' 5k×W′×H′,包含了置信分数和锚点的偏移信息。
边界回归
边界回归主要是对刚刚预测的候选区域的一次精修,进行边界回归的原因主要是当前的候选区域可能与真实区域并不是特别匹配。
我们对文献13(Fast R-CNN)中获取候选区域锚点的参数为基础进行修改。给定锚点边界框中心点为: ( x a , y a ) (x_a,y_a) (xa,ya),宽高分别为: w a , h a w_a,h_a wa,ha,本文是利用归一化偏移和对数空间缩放变换得到关于边框的四个位移参数 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th),因此输出区域的中心为 ( x , y ) (x,y) (x,y),大小为 ( w , h ) (w,h) (w,h),计算公式为:
x − x a + t x w a y = y a + t y h a w = w a exp ( t w ) h = h a exp ( h w ) x-x_a+t_xw_a\quad y = y_a+t_yh_a\\ w=w_a\exp(t_w)\quad h=h_a\exp(h_w) x−xa+txway=ya+tyhaw=waexp(tw)h=haexp(hw)
输出区域位置受到L-2正则表达式的控制,不会距离锚点太远。
边界采样
处理 k = 12 k = 12 k=12个锚框的典型图像( W = 720 , H = 540 W = 720, H = 540 W=720,H=540)会产生17,280个候选区域。
由于产生的候选区域过多,代价太大,所以要对其进行二次抽样(subsample)。这里采用Fast R-CNN中的方法。(对不同IoU的region进行分类等,另外,与每一个ground-truth region有着最大IoU的预测区域也被视为positive)。 具体描述如下:
在训练时,我们采用Fast R-CNN 的方法,对包含 B = 256 B = 256 B=256 个方框的minibatch进行采样,其中最多有 B / 2 B/2 B/2 个正区域,其余为负区域。如果一个区域与某个ground-truth区域的交集大于联合(IoU)至少为 0.7,则该区域为正区域;此外,与每个地面实况区域的最大 IoU 的预测区域为正区域。如果一个区域与所有地面实况区域的 IoU < 0.3,则该区域为负区域。我们的minibatch包含 B P ≤ B / 2 B_P ≤ B/2 BP≤B/2个正区域和 B N = B − B P B_N = B-B_P BN=B−BP 个负区域,分别从所有正区域和负区域的集合中进行无替换均匀抽样。
测试时,我们根据预测的建议可信度,使用贪婪非最大抑制(NMS,greedy non-maximum suppression)技术进行子采样,选出 B = 300 B = 300 B=300 个可信度最高的候选区域。采样结果的坐标和置信度分别收集到形状为 B × 4 B × 4 B×4 和 B B B 的张量中,并从定位层输出。
双线性插值
经过采样得到的region proposals,其大小和比例都是不一样的。考虑到要与全连接层和RNN语言模型相连接(RNN要求输入尺寸要一致),必须要从这些不同大小尺寸的region中提取处固定尺寸的特征表示。
Fast R-CNN所采用的方法提出了RoI pooling层,使每个region proposal都被映射回特征图中,并被与像素边缘对齐的尺寸大致为 X × Y X ×Y X×Y的网格所分割。随后对每个网格中的特征进行max pooling,最后得到大小为 X × Y X × Y X×Y的输出特征向量。
RoI pooling层需要两个输入:卷积特征和候选区域坐标。但是在应用梯度下降时,该方法只能对卷积特征采用反向传播(BP),而不能对候选区域坐标使用BP算法。为了克服Fast R-CNN的缺点,在本文中,作者采用了双线性插值。具体做法如下:
给定大小为 C × W ′ × H ′ C\times W'\times H' C×W′×H′的输入特征图 U U U和一个候选区域,我们将大小为 C × X × Y C\times X\times Y C×X×Y的输出特征图 V V V与 U U U进行插值计算。
在将候选区域投影到 U U U后,将大小为 X × Y × 2 X\times Y\times 2 X×Y×2的采样网格 G G G与 V V V逐元素的associating到 U U U,这里原文描述有点怪怪的。用自己的话描述就是要对是对 U U U的特征进行插值后得到的新的feature map( V V V),这里面最关键的是sampling grid G G G,其大小为 X × Y × 2 X\times Y\times 2 X×Y×2,这样就可以根据 U U U中坐标计算出 V V V中对应元素的值。
如果 G i , j = ( x i , j , y i , j ) G_{i,j}=(x_{i,j},y_{i,j}) Gi,j=(xi,j,yi,j),则 V c , i , j V_{c,i,j} Vc,i,j应在 ( c , x i , j , y i , j ) (c,x_{i,j},y_{i,j}) (c,xi,j,yi,j)处等于 U U U, V V V中的每个元素和 U U U中的实值坐标插值/计算公式如下:
V c , i , j = ∑ i ′ = 1 W ∑ j ′ = 1 H U c , i ′ , j ′ k ( i ′ − x i , j ) k ( j ′ − y i , j ) V_{c,i,j}=\sum_{i'=1}^W\sum_{j'=1}^HU_{c,i',j'}k(i'-x_{i,j})k(j'-y_{i,j}) Vc,i,j=i′=1∑Wj′=1∑HUc,i′,j′k(i′−xi,j)k(j′−yi,j)
双线性插值的采样核函数为:
k ( d ) = max ( 0 , 1 − ∣ d ∣ ) k(d)=\max(0,1-|d|) k(d)=max(0,1−∣d∣)
由于采样网格是候选坐标的线性函数,因此其可通过BP操作进行候选区域的预测,使用双线性插值法提取采样区域获得的tensor大小为: B × C × X × Y B\times C\times X\times Y B×C×X×Y,这也是定位层的最终输出。
举个栗子:
假设 U U U大小是5×5(当然也可以别的大小,这个是不固定的), V V V大小是3×3(这个是固定的)。
第一步:要使用sampling grid G G G计算反向坐标投影值,也就是知道 V V V中每一个点是由 U U U哪几个点投影得来;
第二步:利用上面 V c , i , j V_{c,i,j} Vc,i,j的计算公式,计算V中所有像素点的坐标值
识别网络
识别网络是一个全连接的神经网络,它处理来自定位层的区域特征。来自每个区域的特征被平铺成一个向量,并通过两个全连接层,每个层都使用了带Dropout的整流线性单元。对于每个区域,这将生成一个 D = 4096 D = 4096 D=4096的一维表征,该表征包含了该区域的视觉外观。所有正区域的表征被收集到形状为 B × D B × D B×D的矩阵中(这里多一个维度是指B个区域),并传递给RNN语言模型。
此外,我们还允许识别网络有更多的机会来细化每个候选区域的置信度和位置。它输出每个建议区域的最终标量置信度和四个编码应用于区域建议的最终空间偏移量的标量。这两个输出是通过每个区域的 D D D维表征的线性变换来计算的。最后的盒回归使用的参数与第3.1.2节相同。
用自己的话来说:
识别网络的作用就是将来自定位层的每个区域的特征faltten为一个向量并将其传至两个全连接层,这两层都是使用了ReLU单元并且使用了Dropout。每一个region从而能够产生一个维数为 D = 4096 D = 4096 D=4096的code,里面包含了这一个region中的visual appearance。所有positive region的codes被收集到了一个大小为 B × D B × D B×D的矩阵中,然后被传送至RNN语言模型。
RNN
根据区域表征构建一个RNN来生成caption。给定一个待训练的序列: s 1 , ⋯ , s T s_1,\cdots,s_T s1,⋯,sT,我们将长度为 T + 2 T+2 T+2的词向量 x − 1 , x 0 , x 1 , ⋯ , x T x_{-1},x_0,x_1,\cdots,x_T x−1,x0,x1,⋯,xT作为RNN的输入,其中
x − 1 = CNN ( I ) x_{-1}=\text{CNN}(I) x−1=CNN(I)是经过线性变换层+ReLU非线性层得到的区域表征;
x 0 x_0 x0是START起始词;
x t x_t xt是待训练的序列 s t , t = 1 , ⋯ , T s_t,t=1,\cdots,T st,t=1,⋯,T对应的编码.
RNN模型通过隐藏层 h t h_t ht(大小是512)计算得到一系列的输出 y t y_t yt,计算方式就是LSTM: y t = f ( h t − 1 , x t ) y_t=f(h_{t-1},x_t) yt=f(ht−1,xt), y t y_t yt的大小为 ∣ V ∣ + 1 |V|+1 ∣V∣+1, V V V为词表大小,加1是加了结束词END的结果。
RNN的损失函数是输出向量的交叉熵,在 t = 0 , ⋯ , T − 1 t=0,\cdots,T-1 t=0,⋯,T−1时间步的目标词为 s t + 1 s_{t+1} st+1,在 t = T t=T t=T时间步的目标词为END,输出 y − 1 y_{-1} y−1将被忽略。
在测试阶段,我们将可视化信息 x − 1 x_{-1} x−1丢进RNN,则在下一个时间步开始对最大概率出现的词进行采样,指导出现END为止。
损失函数
在训练过程中,我们的ground-truth包括正方框和描述。我们的模型会对采样区域的位置和可信度进行两次预测:一次在定位层,另一次在识别网络。我们使用二元逻辑损失对正负区域采样训练的置信度进行预测。对于边界回归,我们在变换坐标空间中使用类似于 L1 的平滑损失。损失函数中的第五项是语言模型每个时间步的交叉熵项。
我们根据 RNN 中的批量大小和序列长度对所有损失函数进行归一化处理。我们搜索了其他文献中权重的有效设置,发现合理的设置是前四项标准的权重为 0.1,captioning权重为 1.0。
具体公式居然没给出来。。。
训练与优化
我们只需一步优化就能对整个模型进行端到端训练。我们使用在 ImageNet上预先训练好的权重和标准偏差为 0.01 的高斯权重对 CNN 进行初始化。我们使用动量为 0.9 的随机梯度下降来训练卷积网络的权重,并使用Adam优化器来训练模型的其他组件。我们使用 1 × 1 0 − 6 1×10^{-6} 1×10−6的学习率,并设置 β 1 = 0.9 , β 2 = 0.99 β_1 = 0.9,β_2 = 0.99 β1=0.9,β2=0.99。我们在 1 个epoch后开始微调 CNN 的各层,为了提高效率,我们不微调网络的前四个卷积层。
我们的训练批次由单张图像组成,该图像已被调整大小,长边的像素为720。我们使用 Torch框架。在 Titan X GPU 上运行一个迷你批次大约需要 300 毫秒,模型收敛大约需要三天。
实验
数据集,预处理
数据集:文中实验所用到的是 Visual Genome(VG)region caption数据集,其中包含了 94313张图片和 4100413个描述片段(平均每张图片43.5个snippets)。图片取自 MS COCO 和YFCC100M,对每个图片中区域的注释是在Amazon Mechanical Turk人工完成。
预处理:压缩词库,将出现次数小于15次的单词都归类到<UNK>里面。对于注释的内容,去掉了类似于“there is…”和“this seems to be a”这一类的 referring phrases。为了效率,去除了大于10个单词的注释,另外还有注释个数小于20或者大于50的图片。最终留下的有87398张图, validation sets和test sets各分得5000张图,剩下的全部拿来作为训练集使用。同时在验证过程中,对 validation和test图片进行预处理,将其中严重重叠的boxes改为一个box,这一个box同时指向多个reference captions。同时对于每张图中预测的boxes也进行不断迭代的选择(IoU高于0.7),将那些重叠率最高的boxes通过取平均值的方式进行融合变为单个box。
DenseCap
评价标准
既要评估图片识别划分的效果,还要判断文字描述的准确性。根据object detection和image captioning两个任务,本文提出使用mean Average Precision来评价定位和描述的准确率。
对于localization使用的是IoU阈值,对于语言模型使用METEOR得分阈值。
为了将语言模型的精确度与定位层结果进行分离,文中将真实的注释打包,并将预测的注释与它们进行比较。这样就可以不用考虑空间位置的关系了。
基线
文中使用的是 Region RNN model。为了调查在full images上的训练和regions上的训练,在 MS
COCO用同样的模型也进行了训练。
在测试过程中我们考虑region proposals的三个来源:
- 在ground truth boxes上建立上限。
- 2.使用 EdgeBoxes为每张测试图片提取300个boxes。
- EdgeBoxes经过微调,得到高的召回率。
文中是在VG数据集上使用单独的RPN。
区域和图像级统计之间的差异
上表报告了5000张图片的对比结果,区域和图像级统计数据之间的差异,region level和image level数据的区别,RPN比external region proposals更好,我们的模型优于单个区域描述。
RPN vs EdgeBoxes
在所有情况下,当使用 RPN 网络而不是 EB 区域时,我们都能提高性能。唯一的例外是 FCLN 模型,该模型仅在 EB 框上进行了训练。我们的假设是,这反映了人们在标注区域时更倾向于标注一般区域,而不是包含物体的区域。RPN 网络可以从原始数据中学习这些分布,而 EdgeBoxes 方法则是针对对象的高召回率而设计的。特别要指出的是,这也使得我们的模型(FCLN)在 EB 基线上的表现优于 FCLN,后者在训练过程中受限于 EdgeBoxes(5.24 vs. 4.88 和 5.39 vs. 3.21)。尽管与本地化无关的语言分数不相上下,但这表明我们的模型由于更好的本地化而实现了改进。最后,在对 RPN 框进行评估时,FCLN on EB 模型的性能明显下降(从 5.39 降至 3.21),这也表明 EB 框具有特殊的视觉统计特性,而 RPN 框很可能不是 FCLN on EB 模型的样本。
Qualitative results
该模型能生成丰富的区域片段描述,并准确地将标题置于图像中。例如,大象的几个部分都得到了正确的定位和描述(“大象的躯干”、"大象站立 "以及 “大象的腿”)。飞机的例子也是如此,机尾、发动机、机头和窗户都被正确定位。常见的失败情况包括重复检测(例如大象被描述为站立两次)。
区域+caption的图像检索
文中提出的dense captioning模型除了能生成新的描述外,还能够利用自然语言中的提问来支持图片检索。
Experiment setup:从VG模型中随机选择的1000张图片,通过重复的采样得到得到100个test queries,然后希望模型能够根据每个query找到原图。
Evaluation:对于每一个query caption都会对相应的图片和 ground-truth bounding box进行检测。我们在 ground-truth box和 model’s predicted grounding之间计算IoU。
结论
本文引入了DenseCap任务,它需要一个模型同时本地化和描述图像的区域。为了解决这个问题,我们开发了FCLN架构,它支持端到端训练和高效的测试时性能。我们的FCLN架构基于最近为图像字幕开发的CNN-RNN模型,但包括一个新颖的可微定位层,可以插入任何神经网络,以实现空间本地化预测。我们在生成和检索设置中的实验证明了我们的模型相对于之前工作相关的基线的能力和效率,定性实验显示了视觉上令人满意的结果。在未来的工作中,我们希望放松矩形建议区域的假设,并放弃测试时间NMS,以支持可训练的空间抑制层。