图像检索入门:CVPR2016《Deep Supervised Hashing for Fast Image Retrieval》

原文代码:https://github.com/lhmRyan/deep-supervised-hashing-DSH

研究背景

在使用离散化时希望输出的特征的关于某个值对称,所以如《Deep Learning of Binary Hash Codes for Fast Image Retrieval》用了 sigmoid 作为特征层的输出的激活函数,但直接引用 sigmoid 这种非线性函数将不可避免地减慢甚至抑制网络的收敛。解决该问题就是使用正则的方法将输出约束到某一个范围内。

研究方法

本文设计了一个新的CNN模型,不是使用单张图片进行训练,而是通过输入成对图像(我们在线的生成图像对,以便在训练阶段可以使用更多的图像对)和图像对应的标签来进行训练,输出是这对图像的Hash值,并设计损失函数用于将相似图像的网络输出拉到一起,并将不相似图像的输出推送到很远的位置,以使得学习到的汉明空间可以很好地逼近图像的语义结构。具体过程如下:

  1. 设置最后一层全连接层节点数为12,将训练数据输入到网络(如下图所示)中进行预训练,得到对应数据的12位Hash值;
  2. 设置最后一层全连接层节点数为24/36/48,利用上一步得到的权重微调,得到对应数据的24/36/48位Hash值;
  3. 根据得到的Hash值进行图像检索。

 为了避免优化海明空间中的不可微的损失函数,网络输出放宽到实值,同时强制正则化器来使实值输出逼近期望的离散值。

1.网络设置

本文的网络模型设置为3个卷积层(卷积层+池化层)和2个全连接层,具体如上图所示:

conv1:卷积核为5*5*32,步数为1

max_pooling1:卷积核为3*3*32,步数为2

conv2:卷积核为5*5*32,步数为1

average_pooling2:卷积核为3*3*32,步数为2

conv3:卷积核为5*5*64,步数为1

average_pooling3:卷积核为3*3*64,步数为2

fc1:500个节点

fc2:k个节点(Hash值位数)

2.损失函数

初步设计

利用将相似图像的代码拉到一起,并且将不相似图像的代码彼此分开的思想,损失函数定义如下:

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值