Deep Semantic Hashing with Generative Adversarial Networks
- 创新点:
a) 通过半监督网络生成合成数据解决了监督哈希数据集的问题
b) 提出结合对抗网络的哈希结构,增强了哈希模型的泛化性,生成哈希码,不仅保存了图像之间的相似性,还保留了图像的语意(分类信息) - background
a) 现有大规模图像检索方法:hashing technique
将监督哈希用于新领域 -> 注释数据成本大
训练集和测试集分布不同,鲁棒性受影响
b) 解决方案:通过GAN生成合成训练数据用来改进哈希算法。 - method:
先同时用打了标签的和没打标签的数据集对半监督GAN网络进行预先训练,产生类标签的 例子。
创建三元组(真实图片,生成的语意相似的图片,生成的不同类的图片),真实的图片作为 query image。
三元组通过一个shared CNN网络(前面的网络相同,最后一层输出不同), 分别生成 adversary stream,hash stream, classification stream
通过 adversary loss来计算修正预测的标签(生成的还是真的) triple ranking loss 保留 hash stream的相关相似性,classification error 修正分类准确度。通过对三个stream的联合学习,提供更加泛化的哈希模型,并且生成的哈希码可以更好的反应了图像间的语意关系。
整个架构为端到端的方式进行训练
和GAN相比,生成器加入了class label 输入不只是random noise 和 zero vector
生成器生成的图片和labeled及unlabeled 的数据一起传入CNN中 - loss function(训练过程)
notation:
假设在一个数据集?里面有n 张图片? = {? ? |? = 1, · · · , ?}
:打了标签的图片集, , L打了标签的图片的数量
image hash的目的是得到一个 的映射,输入图片将被编码成K位的二进制码
(1) hash stream
三元组:
要获取一个hash mapping 让和更接近
三元组的ranking loss定义为
(2) adversary stream
因为输入的图片不仅有包含相同语意的也有从不同标签里面得到的。因此 adversary stream 区分synthetic images from real ones和each real-synthetic triplet,目标是利用哈希码学习和GAN中的来源判别之间的相互模糊关系。
在adversary stream中,共享的用于学习图像特征的CNN可以当作是GAN里的判别器,在这之后有一层cross entropy loss layer用于判断source
所以adversary loss可以用来判断预测source的准确性(是real的还是synthetic的)
la 是对每个图片的log-likelihood adversarial loss
(3) classification stream
图片的标签不仅是分类信息,也是为mining semantic structures in images提供监督信息。
将语义监督用于hash和GAN,并使生成的hash码更好地反映图像之间的语义相似性。
我们通过组合哈希流,对手流和分类流来提出联合学习机制。
在分类流中,基于输入的真实合成三元组来测量分类误差。对于单个标签的分类采用softmax optimization method 对于输入x
x(诡异的x)是CNN网络的输出, 是parameter matrix in a softmax layer
y是图像标签。 I = 1 如果condition是真否则为0;
对于多标签的,看成是多分类问题
classification error
(4) optimization of DSH-GANs
? : set of real-synthetic triplets.
生成器G:
5. 图像检索
当DSH-GAN网络训练好之后,我们可以在架构中使用哈希流,然后使用sigmoid层为每个输入图像生成K位哈希码。
在该过程中,首先图像x编码为K维特征向量h = (?). 然后对h量化,得到hash code b = ?(h)。?(h) 是一个符号函数, ?() = 1 如果 > 0.5否则?( ) = 0.
给定查询图像,通过在查询图像和搜索池中的图像之间对哈希码的汉明距离进行排序来产生图像的检索列表。