我们的方法的目标是找到一个哈希函数解决基于内容的图像检索的任务。鉴于<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M4">
N
训练图像<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M5">
X
=
{
x
1
,
x
2
,
…
,
x
N
}
属于<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M6">
K
类别,<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M7">
x
我
在原始RGB值的形式。标签信息而著称<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M8">
l
=
{
l
1
,
l
2
,
…
,
l
N
}
,<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M9">
l
我
∈
{
1、2
,
…
,
K
}
。我们的目标是学习一个函数<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M10">
H
(
x
)
输入图像映射到紧凑的二进制代码<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M11">
b
我
=
H
(
x
我
)
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M12">
b
我
∈
{
0 1
}
C
,在那里<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M13">
C
代表散列的长度。哈希函数<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M14">
H
(
x
)
满足以下几点:
(1)<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M15">
b
我
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M16">
b
j
在汉明空间相似吗<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M17">
l
我
=
l
j
。
(2)<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M18">
b
我
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M19">
b
j
在汉明远太空的时候<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M20">
l
我
≠
l
j
。
图
1显示了我们的系统和图的整个流程图
2显示了该网络。提出了一种目标哈希代码生成组件生成最优训练基于散列码代码长度和类别数。我们的框架包含一个CNN模型为主要组件。通常CNN的最后一层是一个Softmax分类层。我们把它换成一个散列层<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M21">
C
节点。CNN模型的输出层以来发生了变化,我们需要新的输出信息更换标签。哈希函数<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M22">
H
(
x
)
是训练模型和修正后的连接吗<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M23">
年代
g
n
函数。最后,我们使用训练有素的哈希函数来执行基于内容的图像检索。
图1
我们工作的流程。首先,我们使用我们提出的目标散列码生成算法生成最优散列码集。接下来,我们使用哈希代码集和训练图像训练哈希学习CNN网络,这被认为是哈希函数。最后,我们使用哈希函数来执行基于内容的图像检索。
图2
我们的建议的CNN网络。上部是DBR网络,下一个是DBR-v3网络基于inception-v3净。首先,目标生成哈希代码集基于散列的长度<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M24">
C
和图像类别数<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M25">
K
。然后用原始图像和深度网络训练目标的散列码。最后,图像检索处理哈希函数,这是训练有素的网络连接<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M26">
年代
g
n
函数。
3.1。目标代码生成散列
3.1.1。正常情况下
散列码是数学最优目标代码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M27">
K
码字;每个码字之间的汉明距离最大化。我们使用目标散列码与原始图像作为训练样本训练整个网络。我们希望得到一个网络接收的原始图像作为输入,并可以将其映射到二进制代码接近目标的散列码。训练网络,作为哈希函数<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M28">
H
(
x
)
满足我们的目标,产生二进制代码。学习图像之间的关系与不同的标签不是我们的目的。相反,我们的目的是教网络将图像映射到一个二进制代码。这就是为什么我们计算目标哈希码,并喂给网络,不让网络从最初的标签。这是我们方法的主要区别和其他人。此外,目标哈希代码生成组件使我们学习点态的方式。我们不需要成对输入(
18),训练速度要快得多。我们的目标散列码的功能类似于自适应二进制量化中的原型代码(ABQ) [
30.]。不同之处在于,在ABQ,任何数据点表示的二进制代码的最近的原型。哈希函数的输出二进制代码位于原型代码集。在我们的方法中,目标散列码只用于培训。哈希函数可以产生二进制代码不在目标散列码集。
以适应目标散列码长度,我们替换原来的最后一层CNN分类模型与一个完全连接层叫做散列层<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M29">
C
节点。如何生成图像的目标散列码<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M30">
K
不同的标签是这部分的重点。以下是详细的问题描述和主要算法。
因为训练图像<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M31">
K
类别,我们的目标是找到一组二进制代码<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M32">
K
码字。任意两个码字之间的最小汉明距离应尽可能大。更具体地,鉴于二进制代码长度<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M33">
C
和码字号码<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M34">
K
,我们想找一个代码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M35">
米
=
{
米
1
,
米
2
,
…
,
米
K
}
,<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M36">
米
我
∈
{
0 1
}
C
的最小汉明距离最大化。这个优化问题可以先分成更小的工作:给定代码长度<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M37">
C
和最小汉明距离<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M38">
H
,找到一个以上的代码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M39">
K
码字。之后,大的重复这个过程<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M40">
H
直到没有可以找到代码集。最后一个可以解决的<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M41">
H
最大化最小汉明距离。整个过程中描述的算法
1。请注意,这个优化问题是一个复杂的问题,没有固定的结果。为不同的<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M42">
C
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M43">
H
,代码集的规模可能并不一定数量(
31日]。我们已经证明我们的算法能够至少在我们的实验情况下找到第二个最佳解决方案。考虑一个24位代码集12-category数据集,最好的解决方案是一套代码的最小汉明距离是13位。我们的算法将找到一个最小汉明距离的12位。
<大胆>算法1:< /大胆>最佳的哈希代码生成。
输入:二进制代码长度<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M44">
C
数量的类别<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M45">
K
输出:代码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M46">
{
米
1
,
米
2
,
…
,
米
K
}
,<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M47">
米
我
∈
{
0 1
}
C
满足<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M48">
最小值
H
一个
米
米
我
n
g
米
我
,
米
j
≥
H
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">1)codeset.add (0)
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">2)gydF4y2Ba为(<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M49">
我
=
1、2
,
…
,
2
C
- - - - - -
1
)gydF4y2Ba做
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">3)<年代tyled- - - - - -content年代tyle="margin-left:14pt">国旗= 0
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">4)<年代tyled- - - - - -content年代tyle="margin-left:14pt">
为
j
=
c
o
d
e
年代
e
t
0
,
c
o
d
e
年代
e
t
1
,
…
做
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">5)<年代tyled- - - - - -content年代tyle="margin-left:27pt">
如果汉明<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M51">
(
我
,
j
)
<
H
然后
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">6)<年代tyled- - - - - -content年代tyle="margin-left:41pt">标志= 1
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">7)<年代tyled- - - - - -content年代tyle="margin-left:41pt">打破
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">8)<年代tyled- - - - - -content年代tyle="margin-left:14pt">
如果标志= = 0gydF4y2Ba然后
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">9)<年代tyled- - - - - -content年代tyle="margin-left:27pt">codeset.add (<我t一个l我c>我)
(<年代tyled- - - - - -content年代tyle="margin-left:0pt">10)gydF4y2Ba返回代码集
重复一遍:执行的算法<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M52">
H
=
1、2
,
3
,…直到代码集的长度比<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M53">
K
。
选择<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M54">
K
与最大码字的代码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M55">
H
,将目标散列码集。
例如,给定代码长度<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M56">
C
=
12
的数据集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M57">
K
=
10
类别,与我们的算法,最小汉明距离<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M58">
H
=
6
结果代码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M59">
米
16码字。我们进一步尝试<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M60">
H
=
7
结果是一组有4码字,也不符合我们的需要。然后我们随机选择10码字前集合<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M61">
米
(
C
=
12
,
H
=
6
)
和目标构造哈希代码如表
1所示。
表1
目标12位哈希代码集10-category数据集。
标签
十进制码
目标散列码
0
504年
000111111000
1
1611年
011001001011
2
1652年
011001110100
3
1932年
011110001100
4
1971年
011110110011
5
2709年
101010010101
6
2730年
101010101010
7
2898年
101101010010
8
2925年
101101101101
9
3294年
110011011110
3.1.2。语义不均匀的情况
在某些情况下,不同标签之间的语义关系的分布并不均匀。例如,图像样本数据集分为三种不同的分类和标签<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M62">
l
=
{
l
1
,
l
2
,
l
3
}
=
{
c
一个
t
,
d
o
g
,
c
一个
r
}
。图片属于标签<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M63">
l
1
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M64">
l
2
不同的类别,但是是很相似的。然而,图片的标签<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M65">
l
3
是真的远离吗<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M66">
l
2
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M67">
l
3
。当我们输入一只猫作为查询的形象,我们希望检索狗之前的汽车。目标的哈希代码需要重新设计;一个均匀分布的每个标签之间的汉明距离是不合理的。在这个例子中,我们需要一个目标散列码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M68">
米
=
{
米
1
,
米
2
,
米
3
}
小汉明距离之间<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M69">
米
1
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M70">
米
2
。在这个<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M71">
{
c
一个
t
,
d
o
g
,
c
一个
r
}
例子中,目标散列码集<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M72">
米
=
{
11001、11010、00000
}
是合理的因为猫和狗之间的汉明距离是2和其他3。
生成哈希代码集这样的目标,我们需要进一步的信息称为语义关系矩阵<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M73">
年代
。<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M74">
年代
是一个<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M75">
K
×
K
矩阵。每个元素<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M76">
年代
我
,
j
在<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M77">
年代
显示标签之间的语义关系<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M78">
l
我
和标签<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M79">
l
j
。所以<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M80">
年代
我
,
j
总是等于<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M81">
年代
j
,
我
和<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M82">
年代
我
,
我
=
0
。一个负数意味着比平均水平更紧密的关系,例如,猫和狗。一个正数意味着更多的不同的关系比其他标签。零值意味着正常的两个标签和最值之间的关系应该是零。为<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M83">
{
c
一个
t
,
d
o
g
,
c
一个
r
}
的例子,<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M84">
年代
将是一个<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M85">
3
×
3
矩阵。<我nl在e- - - - - -为米ul一个><米米l:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M86">
年代