发明内容
本发明所要解决的技术问题是针对现有技术的现状,提供一种同时具有良好的检索效果和聚类效果的基于自编码器的无监督哈希方法。
本发明解决上述技术问题所采用的技术方案为:一种基于自编码器的无监督哈希方法,用于在数据库存储的图像中检索出与待检索图像最相似的图像,其特征在于:包括以下步骤:
步骤1、在数据库存储的图像中选取部分图像组成训练集;
步骤2、建立栈式去噪自编码器,并初始化栈式去噪自编码器中的参数;其中建立的栈式去噪自编码器包括依次全连接的M个编码层、带有n个神经元的哈希层和M个解码层;M个编码层和哈希层共同组成编码器,M个解码层组成解码器;M为通过实验确定的最优正整数,n为预设的正整数;
步骤3、将训练集中的所有图像依次输入到步骤2中建立的栈式去噪自编码器中进行预训练,得到预训练之后的栈式去噪自编码器;
步骤4、建立与步骤2结构相同的栈式自编码器,将步骤3中预训练之后得到的栈式去噪自编码器中的参数作为栈式自编码器中的初始参数;
步骤5、将训练集中的所有图像分批输入到栈式自编码器中进行训练,最终得到训练完成的栈式自编码器;具体包括以下步骤:
步骤5-1、将第一批次的所有图像依次经过M个编码层和哈希层后得到哈希层的输出数据
计算公式为:
其中,tanh(.)为双曲正切函数,
z为实数;W
H为最后一个编码层与哈希层之间预设的权值,W
H为n*d的矩阵;a
i M为第M个编码层的输出数据,a
i M为d*1的矩阵,d为第M个编码层中的神经元数目,i=1,2,3...m;m为每一批次的所有图像数量;b
H为最后一个编码层与哈希层之间预设的偏置,b
H为n*1的矩阵;将
计算得到的矩阵中的每个元素作为z值分别代入tanh(.)函数进行计算;
步骤5-2、将哈希层的输出数据
作为第一个解码器的输入,依次经过M个解码层,最终得到第M个解码层的输出数据,该输出数据为第i幅图像x
i重构后的数据;
步骤5-3、使用聚类方法计算步骤5-1中得到的哈希层输出数据
的初始类簇中心,得到C个初始类簇中心,记为μ
j,j=1,2,3...C,C为正整数;
步骤5-4、根据步骤5-3中的C个初始类簇中心计算聚类损失Lc,并根据该批次中的所有输入图像与重构后的图像计算重构损失Lr,以及计算后续对哈希层的输出结果进行量化过程中的量化损失Lh,最后计算总的损失函数L,计算公式为:
L=γLc+αLr+βLh;
其中,γ为预设的聚类损失权重,α为预设的重构损失权重,β为预设的哈希量化损失权重;γ>0,α>0,β>0;
步骤5-6、使用总损失函数对每个编码层的权值进行更新,并使用重构损失对每个解码层的权值进行更新,得到该批次图像训练完成后参数更新的栈式自编码器;
步骤5-7、依次将下一批次的图像输入到上一批次训练完成的栈式自编码器中进行训练,直至当某一批次的图像训练完成后得到的栈式自编码器收敛,则训练完成,将此时得到的栈式自编码器作为最终的栈式自编码器;
步骤6、移除最终的栈式自编码器中的解码器,将保留的M个编码层及哈希层作为检索网络,且将步骤5最终得到的栈式自编码器中的参数作为该检索网络中的参数;
步骤7、将某幅待检索的图像输入到该检索网络中,待检索的图像依次经过M个编码层及哈希层后最终得到哈希层的输出,并对哈希层的输出结果进行量化获得哈希码,使用同样的方法计算出数据库中所有图像对应的哈希码,最后计算该待检索图像对应的哈希码与数据库中存储的图像对应的哈希码之间的汉明距离,将数据库中与待检索图像汉明距离最小的图像作为该待检索图像的检索结果。
作为改进,所述步骤3中预训练的具体过程为:
步骤3-1、将每幅图像x
i分别加入噪声后重构成
,并将重构后的数据作为输入数据依次经过M个编码层和哈希层,最终得到哈希层的输出数据;
步骤3-2、将哈希层的输出数据作为第一个解码器的输入数据,并依次经过M个解码层解码,得到最后一个解码层解码后的数据x′i;
步骤3-3、计算重构损失L1,计算公式为:
其中,||·||
2为2范数,N为训练集中所有图像的总数量;
步骤3-4、使该重构损失L1最小化,并依次更新栈式去噪自编码器中的参数,得到预训练之后的栈式去噪自编码器。
在本方案中,所述步骤5-4中某一批次图像的聚类损失Lc、重构损失Lr和哈希量化损失Lh的具体计算公式为:
其中,Q为伪标签分布,用来度量哈希层输出数据
和聚类中心μ
j之间的相似性
P为由标签分布Q生成的目标分布,
KL(P||Q)为计算Q和P之间的KL散度;
为解码器的映射,该值对应为最后一个解码层的输出数据;
进一步的,所述步骤5中使用每一批的图像对栈式自编码器进行训练后参数更新的具体过程为:
步骤a、设定学习率λ,并根据该批次的m个图像计算出目标分布P;之后更新聚类中心、解码层权值和编码层权值,更新完成后则进入到步骤b;其中,
其中,Wk′为第k个解码层对应的权值矩阵,k=1,2,3…M;
编码层权值更新的公式为:
其中,W
t为第t个编码层对应的权值矩阵,t=1,2,3…M+1;第M+1个编码层对应为哈希层,
步骤b、判断所有批次的图像是否全部完成了训练,如是,则结束训练;如否,则使用下一批次的图像对栈式自编码器进行训练,转入步骤c;
步骤c、根据下一批次的图像更新目标分布P,并计算更新目标分布P后计算分配给图像x
i的标签s
i,
转入步骤d;
步骤d、判断目标分布更新前后两次的标签分配改变率是否小于预设的阈值Φ,如是,则结束训练,如否,则转入步骤b。
与现有技术相比,本发明的优点在于:通过将聚类融合到哈希学习中,用聚类生成的伪标签来指导网络的训练,同时将聚类和哈希任务统合到一个统一的网络中,极大提高了哈希性能,也不会影响聚类的性能。因此该无监督哈希方法具有优越的检索性能,同时也得到优秀的聚类效果。
具体实施方式
以下结合附图实施例对本发明作进一步详细描述。
一种基于自编码器的无监督哈希方法,用于在数据库存储的图像中检索出与待检索图像最相似的图像,包括以下步骤:
步骤1、在数据库存储的图像中选取部分图像组成训练集;
步骤2、建立栈式去噪自编码器,并初始化栈式去噪自编码器中的参数;其中建立的栈式去噪自编码器包括依次全连接的M个编码层、带有n个神经元的哈希层和M个解码层;M个编码层和哈希层共同组成编码器,M个解码层组成解码器;M为通过实验确定的最优正整数,n为预设的正整数;本实施例中,M=4;
步骤3、将训练集中的所有图像分别输入到步骤2中建立的栈式去噪自编码器中进行预训练,得到预训练之后的栈式去噪自编码器;预训练的具体过程为:
步骤3-1、将每幅图像x
i分别加入噪声后重构成
,并将重构后的数据作为输入数据依次经过M个编码层和哈希层,最终得到哈希层的输出数据;其中,M个编码层使用ReLUs函数作为网络的激活函数,可以引导网络进行更快的训练;
步骤3-2、将哈希层的输出数据作为第一个解码器的输入数据,并依次经过M个解码层解码,得到最后一个解码层解码后的数据x′i;
步骤3-3、计算重构损失L1,计算公式为:
其中,||·||
2为2范数,N为训练集中所有图像的总数量;
步骤3-4、使该重构损失L1最小化,并依次更新栈式去噪自编码器中的参数,得到预训练之后的栈式去噪自编码器;其中更新栈式去噪自编码器中的参数的方法采用深度学习中比较常规的方法,例如:梯度下降法;
通过在输入数据中加入噪声,使训练的自编码器有更强的鲁棒性,从而提高了模型的泛化能力,也能防止出现过拟合问题;且由于经过预训练后栈式自编码器需要对哈希层的输出数据进行聚类,因此无需在输入数据中添加噪声;
步骤4、建立与步骤2结构相同的栈式自编码器,将步骤3中预训练之后得到的栈式去噪自编码器中的参数作为栈式自编码器中的初始参数;本实施例中,该栈式自编码器与步骤1中的栈式去噪自编码器均为欠完备的自编码器,结构与使用的参数均相同,不同的是,该栈式自编码器中移除了噪声,输入数据无需加入噪声;
步骤5、将训练集中的所有图像分批输入到栈式自编码器中进行训练,最终得到训练完成的栈式自编码器;具体包括以下步骤:
步骤5-1、将第一批次的所有图像依次经过M个编码层和哈希层后得到哈希层的输出数据
计算公式为:
其中,tanh(.)为双曲正切函数,
z为实数;W
H为最后一个编码层与哈希层之间预设的权值,W
H为n*d的矩阵;a
i M为第M个编码层的输出数据,a
i M为d*1的矩阵,d为第M个编码层中的神经元数目,i=1,2,3...m;m为每一批次的所有图像数量;b
H为最后一个编码层与哈希层之间预设的偏置,b
H为n*1的矩阵;将
计算得到的矩阵中的每个元素作为z值分别代入tanh(z)函数进行计算;
步骤5-2、将哈希层的输出数据
作为第一个解码器的输入,依次经过M个解码层,最终得到第M个解码层的输出数据,该输出数据为第i幅图像x
i重构后的数据;
步骤5-3、使用聚类方法计算步骤5-1中得到的哈希层输出数据
的初始类簇中心,得到C个初始类簇中心,记为μ
j,j=1,2,3...C,C为正整数;本实施例中,使用k-means聚类方法;
步骤5-4、根据步骤5-3中的C个初始类簇中心计算聚类损失Lc,并根据该批次中的所有输入图像与重构后的图像计算重构损失Lr,以及计算后续对哈希层的输出结果进行量化过程中的量化损失Lh,最后计算总的损失函数L,计算公式为:
L=γLc+αLr+βLh;
其中,γ为预设的聚类损失权重,α为预设的重构损失权重,β为预设的哈希量化损失权重;γ>0,α>0,β>0;
量化损失Lh使得哈希层的每个神经元输出接近1或-1,避免当将哈希层的输出结果量化为二进制码时引入不必要的误差;
某一批次图像的聚类损失Lc、重构损失Lr和哈希量化损失Lh的具体计算公式为:
其中,Q为伪标签分布,用来度量哈希层输出数据
和聚类中心μ
j之间的相似性q
ij,
P为由标签分布Q生成的目标分布,
KL(P||Q)为计算Q和P之间的KL散度;
为解码器的映射,该值对应为最后一个解码层的输出数据;
步骤5-6、使用总损失函数对每个编码层的权值进行更新,并使用重构损失对每个解码层的权值进行更新,得到该批次图像训练完成后参数更新的栈式自编码器;
步骤5-7、依次将下一批次的图像输入到上一批次训练完成的栈式自编码器中进行训练,直至当某一批次的图像训练完成后得到的栈式自编码器收敛,则训练完成,将此时得到的栈式自编码器作为最终的栈式自编码器;
使用每一批的图像对栈式自编码器进行训练后参数更新的具体过程为:
步骤a、设定学习率λ,并根据该批次的m个图像计算出目标分布P;之后更新聚类中心、解码层权值和编码层权值,更新完成后则进入到步骤b;其中,
其中,Wk′为第k个解码层对应的权值矩阵,k=1,2,3…M;
编码层权值更新的公式为:
其中,W
t为第t个编码层对应的权值矩阵,t=1,2,3…M+1;第M+1个编码层对应为哈希层,
步骤b、判断所有批次的图像是否全部完成了训练,如是,则结束训练;如否,则使用下一批次的图像对栈式自编码器进行训练,转入步骤c;其中,当所有批次的图像均完成训练后,如果目标分布更新前后两次的标签分配改变率仍大于预设的阈值时,则可根据需要重新选择训练集对该栈式自编码器进行训练;
步骤c、根据下一批次的图像更新目标分布P,并计算更新目标分布P后计算分配给图像x
i的标签s
i,
转入步骤d;
步骤d、判断目标分布更新前后两次的标签分配改变率是否小于预设的阈值Φ,如是,则结束训练,如否,则转入步骤b;标签分配改变率为计算目标分布更新前后的标签出现更改的图像占所有图像的比例;当目标分布更新前后两次的标签分配改变率小于预设的阈值,则认为此时的栈式自编码器收敛,从而结束训练;
步骤6、移除最终的栈式自编码器中的解码器,将保留的M个编码层及哈希层作为检索网络,且将步骤5中最终的栈式自编码器的参数作为该检索网络中的参数;
步骤7、将某幅待检索的图像输入到该检索网络中,待检索的图像依次经过M个编码层及哈希层后最终得到哈希层的输出,并对哈希层的输出结果进行量化获得哈希码,使用同样的方法计算出数据库中所有图像对应的哈希码,最后计算该待检索图像对应的哈希码与数据库中存储的图像对应的哈希码之间的汉明距离,将数据库中与待检索图像汉明距离最小的图像作为该待检索图像的检索结果。
在现实生活中,绝大部分数据都是无标签的,相比于有监督方式,无监督的训练方式不需要对数据进行人工标注,节省了大量的人力物力,同时,还可以充分地利用无标签数据,无监督方法比有监督方法具有更广阔的应用前景。其中,聚类是一种以无监督形式对数据进行分类的方法,本发明中将聚类融合到哈希学习中,用聚类生成的伪标签来指导网络的训练,同时将聚类和哈希任务统合到一个统一的网络中,极大提高了哈希性能,也不会影响聚类的性能。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。