论文阅读(6):Deep Clustering and Block Hashing Network for Face Image Retrieval

走远了吗. 提交于 2020-01-23 03:14:31

在这里插入图片描述

1.Motivation
a. inter-class similarities(similar appearance between different persons)
b. intra-class variations(same person with different pose, facial expressions, illuminations)
人脸图像存在类间相似,类内变化大的问题。很多方法都会针对这个问题设计Loss或者算法

2.Contribution
针对上述的问题,文章主要做的事情有:
a. 用center-clustering loss来最小化属于同一类的人脸特征之间的距离,解决intra-class variation
b. 分别对人脸的实数值特征和哈希码应用classification loss(即softmax),目的是学习出具有判别性的特征/哈希码, 将人脸从众多身份中辨认出来
c. 提出block hashing layer,这一层的作用是同时减少哈希码之间的冗余度,以及参数的数量

3.Proposed Approach
在这里插入图片描述

(1) 网络
和之前的几篇深度哈希论文一样,取最后一个池化层和最后一个卷积层的输出分别做全局最大池化,然后合并在一起进入全连层。这样做的目的是提取多尺度特征,并且减少参数的数量。

(2) 损失函数
文章用了四个loss, 两两分别作用在descriptor(图像连续值特征)和HashCode图像哈希码上。
a. Center-Clustering Loss
作用:让属于同一个人的不同训练数据靠近这个类中心
在这里插入图片描述
说明:D={d1^,d2^},...,dN^D = \{ \hat{d_1}, \hat{d_2} \} , ... , \hat{d_N} 是图像的特征, cyi^\hat{c_{yi}} 指类别为 yiyi 的类中心向量。文章说,这些中心是用Xavier的look-up-table来进行初始化的,使得他们满足高斯分布。Xavier是一种神经网络初始化方法,参考文献:深度学习——Xavier初始化方法

b. Classification Loss from Descriptor
简单的分类损失——交叉熵损失函数
在这里插入图片描述
c. Classification Loss from Hashing code
在这里插入图片描述
说明:这里的 hi^\hat{h_i} 指的是被松弛了的哈希码,他并不真正是+1/-1的离散值,而是绝对值接近于1的连续近似离散值。哈希码是由本文使用的Block-Clustering Layer得到的,这个概念会在后面解释

d. Quantization Loss
在这里插入图片描述
说明:量化损失函数,这个是几乎所有深度哈希方法都会做的。因为神经网络要后向传播,根据损失函数计算梯度,以优化网络,得到适用于自己的任务的一套参数。但是哈希码实际上是+1/-1或0/1的离散值,直接在网络上对特征向量量化到离散值的话,网络无法传递梯度到前层中。因为取0/1,+1/-1是,梯度一般接近于0。因此在网络中要对哈希码做松弛。保持他的连续值,同时增加一个量化损失,让特征绝对值尽可能接近于1。后面要存储哈希码的时候,直接对 hi^\hat{h_i} 应用符号函数sgn即可,信息损失也不会太大。

(3)Block-Clustering Layer
前身是divide-and-encode module,分区编码模块:对全连层的输入进行分块,每一个块用一个单独的小全连层连接,对该块中的每一个元素学习权重,输出一个单一的值。最后将每个块对应的值连接起来就组成了图像的近似哈希码,即 hi^\hat{h_i}
作用:哈希码的每一个值都由不同的特征值学习得到,这样哈希值中保留的图像信息就不会重叠。使得哈希码具有判别性。

本文的Block-Clustering Layer与divide-and-encode module的不同之处在于,他并不是对每个Block连接一个小全连层,而是对block取softmax函数后的最大值作为代表该block的判别性信息:
在这里插入图片描述
然后近似哈希码有下面的公式得到:
在这里插入图片描述
这样可以减少更多的训练参数和冗余度,而且后向传播的时候只提取每一个block输出的最大值,下一层的梯度只传给取最大值的那个神经元。

As a result, discriminative information of the large real-valued descriptor is well maintained while each element of the block is effffectively trained to be a representative value of the block according to the classifification result of the descriptor.

(4) 总体损失函数就是前面几个loss的组合:
在这里插入图片描述

4. Experiments
在YoutubeFaces和FaceScrub两个数据集上做的实验。比较的方法有DSH, DHCQ, DDH, 和DDQH。
在这里插入图片描述
在这两个数据集上,本文方法比其他的深度哈希方法有较大的提升。原因在与center-clustering loss和classification loss的结合。但其实center loss早在2016年ECCV就有论文提出了,用于人脸识别的。本文只不过将它用在人脸检索上,结合哈希学习。所以并不是什么新方法。

5. Comparison
(1) Deep Supervised Hshing for Fast Image Retrieval(DSH)
在这里插入图片描述
在这里插入图片描述
说明:DSH的思想是用对比损失保留图像原特征空间中的相似性,所以它以图像对加一个监督信息的形式来作为输入。监督信息 yiy_i 指示两张图像是否相似(相似为0,不相似为1)。两张图像相似时,减少他们之间的距离(Loss中的第一项),不相似时,如果他们的距离小于m,就要增大他们之间的距离(Loss的第二项)。Loss最后一项就是量化损失。

(2)Supervised deep hashing for scalable face image retrieval - IJCAI2018
在这里插入图片描述说明:非常基础的方法,Loss由分类误差和量化误差组成。

(3)Discriminative Deep Hashing for Scalable Face Image Retrieval(DDH)-IJCAI2017

在这里插入图片描述
说明:这篇论文和上一篇相比,加了2015CVPR论文Simultaneous Feature Learning and Hash Coding with Deep Neural Networks 里的divide-and-encode模块。本文论文也是借鉴这篇论文提出的block-clustering layer。DDH的损失函数不变,仍是softmax loss和quantization loss

(4)Discriminative Deep Quantization Hashing for Face Image Retrieval(DDQH)-IJCAI2017
在这里插入图片描述
说明:这篇论文和上一篇的区别在于,用全局平均池化替换掉divide-and-encode module,以减少网络参数。在Hash Layer后面加了一个批量归一化,目的是调整数据分布,加快收敛。

6. Conclusion
本文提出的深度哈希方法和上述几篇深度哈希论文大同小异。感觉没有什么理论上的前进以及方法的创新,都是用别人的方法拼拼凑凑得到的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!