图像-文本检索的动态模态交互建模
这里写目录标题
符号说明
特征向量
经过全相连网络形成的视觉区表示
使用平均池化后对图片I的全局表示
文本嵌入 K:单词数量,Dt:嵌入维度
经过全相连网络形成的文字区表示
使用最大池化后对图片I的全局表示
难点:
模态内推理:识别和理解视觉情态或语篇情态中的各种关系。—模态内
跨模态对齐:将不同模态的关系相匹配。–模态间
现有模式:
- 严重依赖专家经验和经验反馈,缺乏灵活性
- 现有模型是静态的,即所有样本都经过相同的固定计算流程,导致即使是简单的图像-文本对也会被复杂的交互模式处理。
DIME
本文开发:基于路由机制的新型模态交互建模网络
- 四种类型的单元作为基本单元:探索不同层次的模态交互,以密集策略连接起来,构建路由空间。
- 为了使模型具有路径探索能力:在每个单元中集成动态路由器进行探索
四种类型单元
- recti!ed identity cell:提供相同的非线性转换能力。
- intra-modal reasoning cell:捕获上下文信息和模态内关系
- global-local guidance cell,cross-modal refinement:粒度不同,为了增强模态间图像-文本对齐。
为每个单元配置动态路由器:生成数据依赖路径。
引入语义一致正则化:让相似图像-文本对学习相似的路径
Faster R-CNN
参考:https://blog.csdn.net/weixin_43198141/article/details/90178512
目标检测算法,该算法在fast rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。
R-CNN
(1)image input;
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
(3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
(4)将每个Region Proposal提取的CNN特征输入到SVM进行分类;
(5)对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.
缺陷:
(1) 训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
(2) 训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
(3) 速度慢:使用GPU,VGG16模型处理一张图像需要47s;
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算;
(5) SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.
FAST-RCNN
(1)image input;
(2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
(3)将整张图片输入CNN,进行特征提取;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过ROI pooling层使每个建议窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.
相比R-CNN,主要两处不同:
(1)最后一层卷积层后加了一个ROI pooling layer;
ROI pooling层能实现training和testing的显著加速,并提高检测accuracy。该层有两个输入:
从具有多个卷积核池化的深度网络中获得的固定大小的feature maps;
一个表示所有ROI(也可以叫GT)的N*5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示其余的左上角和右下角坐标。
ROI pooling具体操作如下:
- 根据输入image,将ROI映射到feature map对应位置,映射是根据image缩小的尺寸来的;
- 按照ROI Pooling输出的数据的坐标,将其映射到上一步中映射的feature区域上,这样就将原来feature map上的ROI映射划分成了几个sections(sections数量与输出的维度(pooled_w*pooled_h)相同);要输出几乘几的就要化成几个section
- 对每个sections进行max pooling操作;
这样我们就可以从不同大小的方框得到固定大小的相应的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小,而是取决于该层设置的pooled_h与pooled_w。ROI pooling 最大的好处就在于极大地提高了处理速度。这样不管给定feature map输入的大小,使得输出的数据维度统一,这与SPP-Net的思想类似。
(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练
改进:
(1) 测试时速度慢:
R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.
(2) 训练时速度慢:
R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.
(3) 训练所需空间大:
R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.
FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.
(4) 由于ROI pooling的提出,不需要再input进行Corp和wrap操作,避免像素的损失,巧妙解决了尺度缩放的问题.
FASTER-RCNN
(1)输入测试图像;
(2)将整张图片输入CNN,进行特征提取;
(3)用RPN先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)
上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.
相比FASTER-RCNN,主要两处不同:
(1)使用RPN(Region Proposal Network)代替原来的Selective Search方法产生建议窗口;
(2)产生建议窗口的CNN和目标检测的CNN共享
一些概念
ground truth
Ground Truth: 就是指正确打标签的训练数据
目标检测与目标识别
目标识别-object recognition是指明一幅输入图像中包含那类目标。其输入为一幅图像,输出是该图像中的目标属于哪个类别(class probability)。
而目标检测-object detection除了要告诉输入图像中包含了哪类目前外,还要框出该目标的具体位置(bounding boxes)。
region proposal
定义:Region Proposal(候选区域),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口。
IOU
简单来说IOU就是用来度量目标检测中预测框与真实框的重叠程度。在图像分类中,有一个明确的指标准确率来衡量模型分类模型的好坏。其公式为:
这个公式显然不适合在在目标检测中使用。我们知道目标检测中都是用一个矩形框住被检测物体,又因为检测物体尺度不同,预测框与真实框或大或小。所以度量标准必然是具有尺度不变性的,那么大神们就引入了一个概念IOU(交并比),用预测框(A)和真实框(B)的交集除上二者的并集,其公式为:
IOU的值越高也说明A框与B框重合程度越高,代表模型预测越准确。反之,IOU越低模型性能越差。
选择性搜索(selective search)
在目标检测时,为了定位到目标的具体位置,通常会把图像分成许多子块-sub-regions / patches,然后把子块作为输入,送到目标识别的模型中。分子块的最直接方法叫滑动窗口法-sliding window approach。滑动窗口的方法就是按照子块的大小在整幅图像上穷举所有子图像块
。这种方法产生的数据量想想都头大。和滑动窗口法相对的是另外一类**基于区域(region proposal)**的方法。selective search就是其中之一!
算法步骤:
step0:生成区域集R。
step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}
step2:找出相似度最高的两个区域,将其合并为新集,添加进R
step3:从S中移除所有与step2中有关的子集
step4:计算新集与所有子集的相似度
step5:跳至step2,直至S为空
相似度:
颜色、纹理、尺寸和空间交叠这4个参数。
- 颜色相似度(color similarity)
- 纹理相似度(texture similarity)
- 尺寸相似度(size similarity)
- 交叠相似度(shape compatibility measure)
个人理解:选择相似度低的集合,分成子块
Bounding Box Regression 边框回归
参考:https://blog.csdn.net/zijin0802034/article/details/77685438
对于上图,绿色的框表示Ground Truth, 红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调, 使得经过微调后的窗口跟Ground Truth 更接近, 这样岂不是定位会更准确。 确实,Bounding-box regression 就是用来微调这个窗口的。
做法:
平移+尺度放缩
粒度
粒度就是统计的粗细程度,简单说粒度就是事实表里测量值的测量‘频率’。比如理解一段话,一句一句理解是粗力度,一个词一个词理解是细粒度。
自底向上和自顶向下
- 自底向上:由局部到整体,由具体到抽象是自底向上
- 自顶向下:由整体到局部,由抽象到具体是自顶向下
Attention 机制
参考 https://blog.csdn.net/guohao_zhang/article/details/79540014
当我们人在看一样东西的时候,我们当前时刻关注的一定是我们当前正在看的这样东西的某一地方,换句话说,当我们目光移到别处时,注意力随着目光的移动也在转移。
这意味着,当人们注意到某个目标或某个场景时,该目标内部以及该场景内每一处空间位置上的注意力分布是不一样的。
这一点在如下情形下同样成立:当我们试图描述一件事情,我们当前时刻说到的单词和句子和正在描述的该事情的对应某个片段最相关,而其他部分随着描述的进行,相关性也在不断地改变。