DMIH
基于object的图像检索,对多尺度的instance进行hash编码
解决的问题是:通常在图像检索中,使用一张图像,找到与其相类似的图像,本文的想法是:通过输入多张图像来检索同时包含这多张图像中物体的图像。比如输入奥巴马和普京的照片,检索得到奥巴马和普京共同存在的图像。
本文的方法:使用一种弱监督的DMIH框架来实现图像检索,这个框架包含两部分内容,物体的检测以及对物体的hash表示。将物体检测问题转化为(二值)多实例学习问题,每个instance就是object proposal,这些proposal从多尺度的卷积特征图上得到,类似于SSD。对于hash学习,使用的是image piar,通过比较图像对中最大可能的proposal的hash值来学习他们之间的语义关系。
DMIH将两个部分组合在一起,形成一个端到端的网络,这个网络以CNN模型为基础,本文是VGG,在VGG基础上实现MIL和hashing learning。优化方式是SGD,BP。在训练之后,使用包含包含物体的object proposals 的hash值来表示图像。
图像级别:正例/负例,对于图像的所有proposal,如果属于某个类的概率大于某个阈值,就认为这个图像为正例,否则图像不包含任何一类,认为图像为负例。
总结:
1. 提出了一种object-based的图像检索框架,可以实现多物体查询
2. 融合MIL和hash学习。
3. 在三个datasets上效果比baseline要好,baseline是DSRH、PmH等
网络分为三个部分:
1、 基础网络:VGG16。提取图像特征
2、 FCN,全卷积网络层,利用VGG16的最后一层或者几层构建全卷积网络,实现不同尺度的feature maps。在这些feature map上提取proposal。
https://www.cnblogs.com/hellocwh/p/8729260.html
前两层合起来类似于SSD网络。SSD网络中生成的feature maps 的大小为38, 19, 10, 5, 3, 1。卷积核的大小为3*3*输出通道,对于不同尺度的feature maps,38 * 38 * 4 + 19 * 19 * 6 + 10 * 10 * 6 + 5 * 5 * 6 + 3 * 3 * 4 + 1 * 1 * 4 = 8732 个anchor。
3、 Hashing layer 和 MIL layer。两个层不是公用一个anchor,也就是说anchor个数虽然相同,但是生成的每个anchor的维度是不同的,对于hashing layer 维度为hash_size,对于MIL layer,维度为classes_num
本文的方法
以VGG16为基础网络,采用SSD的框架模式,生成多尺度的feature maps,并由此产生多个anchor。使用这些anchor来进行类别的预测和hash码的生成。
具体:
SSD:在VGG16的顶层,使用3*3_s1的滑动窗口生成多尺度的卷积层,类似于SSD生成卷积层的方式。卷积核的个数为3*3*p,p是前一层的feaure maps数。也就是前一层的channel
最终,Object proposals 被送入MIL/hashing layer用来物体检测和hash code
Ii
I
i
: 表示图像,索引是 i
Xi={xi1,...,xiM}
X
i
=
{
x
1
i
,
.
.
.
,
x
M
i
}
: 表示M个object proposals。
xim∈Rd
x
m
i
∈
R
d
N
N
: 表示类别总数。
对于每幅图像,它可能包含的不止一个类别的物体,所以使用 来表示图像
Ii
I
i
是否包含类别c的物体。
如果
tic=0,forallc
t
c
i
=
0
,
f
o
r
a
l
l
c
就认为图像
Ii
I
i
不包含任何物体。
optimization
需要训练的参数为:VGG16顶层的卷积核, f(∗),{lc(∗)}Nc=1 f ( ∗ ) , { l c ( ∗ ) } c = 1 N
pic,m=lc(xim)=σ(wTcxim+bc)
p
c
,
m
i
=
l
c
(
x
m
i
)
=
σ
(
w
c
T
x
m
i
+
b
c
)
σ
σ
是sigmoid function
得到的是每个图像中的每个proposal属于每个类的概率维度为
R1
R
1
然后使用 global pooling function
g(∗)
g
(
∗
)
来得到
Pic=g(pic,1,pic,2,...)
P
c
i
=
g
(
p
c
,
1
i
,
p
c
,
2
i
,
.
.
.
)
维度为
RN
R
N
, 使用的是
maxm(pic,m)
m
a
x
m
(
p
c
,
m
i
)
: 出发点是一幅图像不能包含很多的类别,所有关注于最为可能的物体类别,就是概率最大的:
也就是对每个类来说使用交叉上,然后将每幅图像的每个类的交叉熵加和
如果图像不包含任何的类,所有的 Pic P c i 被抑制
然后讨论 hash function f(∗) f ( ∗ )
him∈{0,1}k h m i ∈ { 0 , 1 } k k为hash_size
him=f(xim) h m i = f ( x m i )
Hi={hi1,...,hiM} H i = { h 1 i , . . . , h M i }
if
else:
作者提到如果是可训练的网络,对于汉明距离,它是离散的并且不可微分的,所以使用激励函数近似替代 hard hash, 形成 soft hash
通过这个近似hash 得到最终的 0-1 hash
维度方面:
Wf∈Rk∗d
W
f
∈
R
k
∗
d
bf∈Rk∗1
b
f
∈
R
k
∗
1
Dst(∗,∗)
D
s
t
(
∗
,
∗
)
是欧式距离
所以问题: d 应该取多大?
整个loss:
训练之后,查询阶段:
object proposals 的概率值大于
θ=0.7
θ
=
0.7
将它的hash码作为图像代表的一部分。就是用它的hash码来表示图像,但是这个hash码可能不止一个,因为图像内部可能包含多个类别概率大于0.7 的proposal。
将这些hash码组合成为一个hash bag,
H^i
H
^
i
来表示图像
Ii
I
i
。
在进行查询的时候,可以使用一个或者多个图像,将这些输入到DMIH中,会得到一系列的 hash codes,
使用汉明距离
最后通过汉明距离对检索到的图像进行排序