
1.本发明属于图像分类技术领域,尤其是涉及一种基于蒸馏网络的半监督图像分类方法。
背景技术:2.深度神经网络在图像分类方面做出了重要贡献,卷积神经网络对物体的识别甚至超过了人类的视觉。然而我们对神经网络分类能力提升的追求是不间断的,在注重神经网络能力的同时,我们也要关注所需耗费的资源,使深度神经网络既便宜又高效。
3.为了达到高效目的同时又能兼顾便宜,申请人发现现有的技术主要存在两方面问题:
4.第一,在对神经网络进行图像分类监督训练时,需要带有标签数据的图像,将图像输入神经网络后再告诉它这张图像中所需识别对象的名字,在这个过程中,需要耗费巨大的人力对图像进行人为的标注标签,这个过程是极其漫长且乏味的。因此可以引入半监督学习,即只需要用少量的带有标签的图像就可以达到很高的分类能力。
5.如公开号为cn108416370a的中国专利文献公开了一种基于半监督深度学习的图像分类方法,包括:获取标签训练图像样本和非标签训练图像样本,得到标签训练集;结合深度学习以及半监督学习对标签训练集进行卷积神经网络训练,建立统一的半监督深度学习和未标注样本类别估计的模型;基于半监督深度学习和未标注样本类别估计的模型进行图像识别分类。
6.第二,对于提升神经网络能力最简单有效的方法就是增加网络层数,加大参数量,但是大量的参数也意味着需要更大的计算量,更大的存储空间。而且深度神经网络中并不是每一层卷积层都能提供有效的特征知识识别,也就是说它的有效特征知识信息占比很低,即知识饱和度低。
7.针对第一点,需要解决怎样使用少量标签使神经网络达到较高的性能。在传统的监督学习中,只使用了对图像预测的标签和真实标签之间的损失函数,忽略了数据集本身所固有的信息。
8.针对第二点,可以使用相互蒸馏的方式来进行融合,蒸馏网络可以将负标签所携带的信息成为特征知识进行训练,但是在多个网络的知识相互蒸馏中,很难保证网络知识的互补性。假如两个神经网络都只能识别一个物体的同一个特征部位,那么将这两个网络融合起来是没有意义的。
9.因此,亟需设计一种新的图像分类方法,用于解决现有技术存在的上述问题。
技术实现要素:10.本发明提供了一种基于蒸馏网络的半监督图像分类方法,可以使网络所表达的特征量大大增加,从而提升对物体的识别能力,提高分类精度。
11.一种基于蒸馏网络的半监督图像分类方法,包括以下步骤:
12.(1)准备数据集,对数据集进行预处理,将数据集中的少量图像标注类别标签,剩余图像作为无标签的训练数据;
13.(2)构建用于分类的神经网络模型,所述的神经网络模型采用改进的vgg11网络,结构包括五个卷积块和投影层,依次为:第一卷积层、第一最大池化层、第一relu层、第二卷积层、第二最大池化层、第二relu层、第三卷积层、第三最大池化层、第三relu层、第四卷积层、第四最大池化层、第四relu层、第五卷积层、第五最大池化层、第五relu层和投影层;
14.其中,第一至第五卷积层的卷积核大小均为3
×
3,数量分别设置为1、1、2、2、2;第一至第五relu层的输入通道分别为3、16、32、64、128,输出通道分别为16、32、64、128、128;投影层的结构依次为第一全连接层、batchnorm1d层、第六relu层和第二全连接层,第一全连接层的输入节点数为6272,输出节点数为100,第二全连接层的输入节点数为100,输出节点数为4;
15.(3)对数据集中没有标注类别标签的图像,旋转不同角度后自动标注对应角度的伪标签,利用具有伪标签的图像对初始的神经网络模型进行自监督学习;
16.接着将自监督学习后的神经网络模型的投影层替换为分类器,并用数据集中少量标注类别标签的图像对调整后的神经网络模型进行训练,直到损失函数收敛后得到模型1;
17.(4)将数据集中的每张图片分别进行两次预处理,每张图片得到对应的img1和img2两张相似图片;将初始神经网络模型的投影层修改为:第一全连接层的输入节点数为6272,输出节点数为2048,第二全连接层的输入节点数为2048,输出节点数为128;
18.利用相似图片img1和img2对神经网络模型进行自监督训练,训练时利用投影层输出的特征向量计算两张图像的相似度,并计算相似度损失函数;
19.接着将自监督训练后神经网络模型的投影层替换为分类器,并用数据集中少量标注类别标签的图像对调整后的神经网络模型进行训练,直到损失函数收敛后得到模型2;
20.(5)将模型1和模型2使用相互学习的网络蒸馏策略进行融合,交换所学到的知识;融合过程中,使用数据集中带分类标签的图像分别放入模型1和模型2进行训练,得到两个分类概率后计算总损失函数,直到总损失函数收敛,得到训练好的模型1和模型2;
21.(6)对于待分类的图像,输入训练好的模型1或模型2,得到图像的分类结果。
22.进一步地,步骤(1)中,所述的数据集有两个,数据集中分别包含不同类别的图像。
23.所述的预处理具体为:
24.对每张图像随机裁剪,然后缩放所裁剪得到的图像为224
×
224;对每张图片以0.5的概率进行水平翻转;对每张图像的亮度、对比度、饱和度和色相进行调整;对每张图片以0.2的概率转换为灰度图。
25.步骤(3)中,对数据集中没有标注类别标签的图像,旋转不同角度后自动标注对应角度的伪标签具体为:
26.对于每一张图像分别进行三次旋转,加上原图得到旋转0度、90度、180度和270度的四张图像,分别对应的标注标签1、2、3和4。
27.步骤(3)和步骤(4)中,所述的分类器包含三个全连接层,其中,三个全连接层的输入和输出节点依次为(6272,2048)、(2048,512)、(512,10),前两个全连接层后均连接有relu层和dropout层。
28.步骤(4)中,利用投影层输出的特征向量计算两张图像的相似度公式为:
[0029][0030]
其中,zi,zj为投影层输出的特征向量;τ是可调节的温度参数,通过缩放输入并扩大余弦相似度的范围,这里取0.5,‖zi‖是向量的范数。
[0031]
相似度损失函数的计算公式如下:
[0032][0033]
其中,n表示样本图像的数量。
[0034]
步骤(5)中,计算总损失函数的公式为:
[0035][0036]
式中,α用来调节celoss和klloss的比重,这里α取0.2;celoss是交叉损失函数,klloss是kl散度,计算公式如下:
[0037][0038]
out1和out2由带标签的图像img分别输入模型1和模型2后得到,p1(outi)和p2(outj)分别为使用两个模型计算输入图像属于类别c的概率,计算公式如下:
[0039][0040]
其中,τ表示可调节的温度参数,τ在这里取20,c表示总类别数。
[0041]
与现有技术相比,本发明具有以下有益效果:
[0042]
本发明通过自监督学习,对同一网络模型进行不同的自监督预训练任务,不同的预训练任务能挖掘出图像不同的特征知识,从而达到对同一个物体进行多视图的表达;同时,进一步对这些不同视图的网络进行融合,从而能使网络所表达的特征量大大增加,从而提升对物体的识别能力。
附图说明
[0043]
图1为本发明实施例中一种基于蒸馏网络的半监督图像分类方法的流程图;
[0044]
图2为本发明实施例中旋转自监督学习的流程图;
[0045]
图3为本发明实施例中两个训练好的神经网络进行相互学习图。
具体实施方式
[0046]
下面结合附图和实施例对本发明做进一步详细描述,需要指出的是,以下所述实施例旨在便于对本发明的理解,而对其不起任何限定作用。
[0047]
如图1所示,一种基于蒸馏网络的半监督图像分类方法,包括以下步骤:
[0048]
1)数据处理
[0049]
(1.1)准备数据集:使用两个数据集,第一个数据集为cifar-10,包含10类图像,每
类6000张图像,每张图像大小为32
×
32,其中5000张图像被指定为训练样本,1000张图像被指定为测试样本。第二个数据集为caltech-256,它的256个图像集涵盖了257个类。在该数据集中共有30,607张图片,每个类别包括超过80张图片。
[0050]
(1.2)数据集预处理:对每张图像做一些适当的变化以适应模型训练。
[0051]
①
使用torchvision.transforms.randomresizedcrop(224)将给定图像随机裁剪,然后缩放所裁剪得到的图像为224
×
224;
[0052]
②
对每张图片以0.5的概率进行水平翻转;
[0053]
③
使用torchvision.transforms.colorjitter(brightness=0.4,contrast=0.4,saturation=0.4,hue=0.1)对每张图像的亮度、对比度、饱和度和色相进行调整;
[0054]
④
对每张图片以0.2的概率转换为灰度图。
[0055]
(1.3)数据集划分:在训练自监督模型时,我们从cifar-10训练集的每一类中随机选取300张有标签的图像作为有标签的数据,总共3000张,其余47000张训练图像作为无标签的训练数据。我们采用10000张测试图像来评估模型的性能。在caltech-256数据集中,对于每一类,我们取60张图片用作无标签的数据,从其中随机选取20张图像作为有标签的训练数据,从剩下的图像中选取20张作为测试图像来评估模型的性能。
[0056]
2)旋转自监督学习
[0057]
(2.1)数据加载器:对图像自动进行标注标签信息,对于每一张图像分别进行三次旋转,加上原图得到旋转0度、90度、180度和270度的四张图像,如图2所示,分别打上标签1、2、3和4。
[0058]
(2.2)神经网络模型:使用类似vgg11网络,具体如下,covblock1:3*3卷积
×
1+最大池化+relu(输入通道:3,输出通道:16)covblock2:3*3卷积
×
1+最大池化+relu(输入通道:16,输出通道:32)covblock3:3*3卷积
×
2+最大池化+relu(输入通道:32,输出通道:64)covblock4:3*3卷积
×
2+最大池化+relu(输入通道:64,输出通道:128)covblock5:3*3卷积
×
2+最大池化+relu(输入通道:128,输出通道:128)投影层g:全连接层(6272,100)
[0059]
batchnorm1d+relu
[0060]
全连接层(100,4)
[0061]
(2.3)自监督学习:对具有伪标签的图像进行监督学习,损失函数为交叉熵,使用pytorch函数f.cross_entropy(out,y),其中out为神经网络输出的值,y为图像所对应的标签。
[0062]
(2.4)监督训练:使用少量标签对神经网络模型进行调整,将投影层替换为分类器,具体如下,
[0063]
fc1:全连接层(6272,2048)+relu+dropout
[0064]
fc2:全连接层(2048,512)+relu+dropout
[0065]
fc3:全连接层(512,10)
[0066]
使用交叉熵作为损失函数直到收敛得到model1。
[0067]
3)对比自监督学习
[0068]
(3.1)数据加载器:对同一张图像分别进行两次上述预处理变化,生成img1和img2两张相似图像。
[0069]
(3.2)神经网络模型:将步骤(2.2)中投影层g修改为如下:
[0070]
投影层g’:全连接层(6272,2048)
[0071]
batchnorm1d+relu
[0072]
全连接层(2048,128)
[0073]
(3.3)自监督训练:计算img1和img2两张图像的相似度,使之越来越相近,相似度计算公式如下,
[0074][0075]
其中,zi,zj为投影层输出的特征向量,τ是可调节的温度参数,它可以缩放输入并扩大余弦相似度的范围,这里取0.5,‖zi‖是向量的范数;
[0076]
损失函数计算公式如下,
[0077][0078]
将生成的相似矩阵取平均值。
[0079]
(3.4)监督训练参照(2.4)的过程得到model2。
[0080]
4)神经网络融合
[0081]
将不同的自监督预训练深度神经网络使用相互学习的网络蒸馏策略进行融合,交换它们所学到的知识,从而使神经网络在原有的结构上增加知识量,提高分类正确率。
[0082]
使用带标签的图像img分别放入模型model1和model2,得到out1和out2,如图3,p1(outi)和p2(outj)的计算公式如下:
[0083][0084]
该公式在softmax的基础上加上了一个τ,τ在这里取20。
[0085]
使用如下公式计算总损失函数:
[0086][0087]
其中,α用来调节celoss和klloss的比重,这里α取0.2;celoss是交叉损失函数,使用pytorch函数f.cross_entropy计算;klloss是kl散度,计算公式如下:
[0088][0089]
总损失函数收敛后,得到训练好的model1和model2,对于待分类的图像,输入训练好的model1或model2,便可以得到图像的分类结果。
[0090]
以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换,均应包含在本发明的保护范围之内。