基于keras平台CNN神经网络模型的服装图像识别分析

在许多介绍图像识别任务的介绍中,通常使用着名的MNIST数据集。

由Kaizong Ye,Liao Bao撰写

但是,这些数据存在一些问题:

1.太简单了。例如,一个简单的MLP模型可以达到99%的准确度,而一个2层CNN可以达到99%的准确度。

2.它被过度使用。从字面上看,每台机器学习入门文章或图像识别任务都将使用此数据集作为基准。但是,因为获得近乎完美的分类结果非常容易,所以它的实用性会受到打折,并且对于现代机器学习/ AI任务并不真正有用。

因此,出现Fashion-MNIST数据集。该数据集是作为MNIST数据的直接替代而开发的,其意义在于:

1.尺寸和风格相同:28×28灰度图像

2.每个图像与10个类中的1个相关联,即:

       0:T恤/上衣,

       1:裤子,

       2:套头衫,

       3:连衣裙,

       4 :外套,

       5:凉鞋,

       6:衬衫,

       7:运动鞋,

       8:背包,

       9:靴

×

自从2012年,卷积神经网络AlexNet在图像分类竞赛中取得突破性进展之后,深度学习进入快速的发展期,在此后的五六年的期间,出现了一些经典的卷积神经网络模型,这里对这些模型做一些介绍。

1 VGG

在2014年的ILSVRC, 牛津大学VGG(Visual Geometry Group)组提出一种简洁的卷积神经网络模型,即VGG模型。VGG模型非常的整洁和规范,可以看作是卷积神经网络的一种基础模型,在很多的实际任务中,都会先训练一遍VGG模型,看看效果如何,然后再采用其它的模型和做各种优化,以提高任务成绩。值得一提的是,在ImageNet上,首次公开超过人眼识别的模型就是借鉴VGG模型。

VGG的核心是五组卷积操作,每组卷积之后做最大池化,然后是全连接层与分类层。在VGG中使用的卷积核大小是3*3,这也是卷积神经网络中最常见的卷积核尺寸之一。特征图的通道数目从64上升到128,再到256和512,同一组卷积内通道的数目相同。

另外需要注意的是,由于每组的卷积层数目可以不同,VGG模型有11、13、16、19等几种。

2 GoogleNet

GoogleNet也出现在2014年,并在这年的ILSVRC获得了冠军。GoogleNet共22层网络,它是一个即“深”又“宽”的模型,最明显的标志是其中的Inception模块,可以说GoogleNet主要是Inception模块堆积而成的。

GoogleNet网络结构:开始为卷积,然后为三组Inception子网络,再接平均值池化层、全连接层。其中,第一组子网络包含2个Inception模块,第二组包含5个Inception模块,第三组包含2个Inception模块。

如下图所示,Inception有简单的类型和带有降纬的类型。简单的Inception模块是3个卷积操作和一个池化操作的拼接,其中卷积操作采用了1*1、3*3、5*5的三种大小的卷积核。

1*1的卷积核也是卷积神经网络中,非常常见的设计,它可以用来改变特征通道的数目。在卷积神经网络中,经过几层卷积后,通道数会越来越大,导致参数和计算量也随之增大。为了应对这个问题,可以采用1×1卷积核进行降维。如右下图所示的Inception类型,采用了3个1×1卷积层进行降维,即减少特征通道的数目。

3 ResNet

神经网络的设计一般遵循深度优先的原则,深度可以说是对网络性能影响最大的一个元素。但是越深的神经网络越难以训练,在残差网络ResNet出现之前,这是一个很大的问题。

在2015年的ImageNet图像分类、图像物体定位和图像物体检测比赛中,孙剑博士与何凯明博士设计的残差网络ResNet取得了冠军。ResNet中采用了残差模块的设计,解决了网络深度增加后准确度下降的问题,并且训练收敛较快,成功的训练了近千层的卷积神经网络。

下图为ResNet中50、101、152层网络连接示意图,使用的是瓶颈模块。这三个模型的区别在于每组中残差模块的重复次数不同(见图右上角)。

残差网络引入了残差模块,每个残差模块包含两条路径,一条路径为直连通路,另一条为两到三次卷积操作得到的特征残差,然后将两条路径的输出相加。在这里需要特别说明的是,残差的思想在神经网络设计中影响非常大,在很多种类的神经网络中,都能看到残差的结构。

残差模块如图所示,左边是基本模块连接方式,右边是瓶颈模块(Bottleneck)连接方式。基本连接方式由两个输出通道数目相同的3×3卷积组成。瓶颈的意思是上面的1×1卷积用来降维即256->64,下面的1×1卷积用来升维即64->256,使得中间3×3卷积的输入和输出通道数目都较小即64->64。

4 DenseNet

在残差网络之后,又出现了密集网络DenseNet(这个应该是受到了残差思路的影响)。密集网络顾名思义,它的连接更为密集,最明显的标志是密集模块即Dense Block。在Dence Block中,每一层都与其他层”沟通“,这种密集的联系,使得信息流最大化,也实现了特征的重复利用。同时网络的每一层可以被设计得特别”窄“,即只使用了比较少的特征图,可以达到降低冗余的目的,这使得DenseNet的计算量也比较小。

整个DenseNet是由若干个Dense Block串联而成的,在每个Dense Block之间有一个Convolution+Pooling的操作,这个被称为是transition layer。

后记

在这篇文章为大家介绍了,VGG、GoogleNet、ResNet及DenseNet这几种常用的卷积神经网络模型,这些都是非常好的学习示例,通过学习这些卷积模型,可以对如何设计卷积神经网络有更深入的认识。



3. 60000训练样本和10000个测试样本,以下是一些样本的截图:

自从它出现以来,已经有多份提交文件来对这些数据进行基准测试,其中一些能够达到95%以上的准确度 。 

我也试图用keras来对这个数据进行基准测试。keras是构建深度学习模型的高级框架,在后端选择TensorFlow,Theano和CNTK。它很容易安装和使用。对于我的应用程序,我使用了CNTK后端。 


自适应网页宽度的 Youku 视频

视频

CNN(卷积神经网络)模型以及R语言实现

探索见解

去bilibili观看

探索更多视频

在这里,我将以两个模型为基准。一种是层结构为256-512-100-10的MLP,另一种是类VGG的CNN。 

第一个模型在100个历元后的测试数据上达到了[0.89,0.90]的精度,而后者达到了45个时期后的测试数据的精度> 0.94。 

我们先用tSNE来看它。据说tSNE是最有效的降纬工具。 

 我使用了1000个样本来快速运行。如果您的PC速度足够快并且有时间,则可以针对完整数据集运行tSNE。

为了建立自己的网络,我们首先导入一些库

该模型在大约100个时期的测试数据集上达到了近90%的准确度。现在,我们来构建一个类似VGG的CNN模型。我们使用类似于VGG的体系结构,但仍然非常不同。由于图形数据很小,如果我们使用原始VGG体系结构,它很可能会过度拟合,并且在测试数据时表现不佳,这些数据在上面列出的公开提交的基准测试中观察到。在keras中构建这样一个模型是非常容易的:

这个模型有150万个参数。我们可以调用’fit’方法来训练模型:

model3_fit=model3.fit(X_train, Y_train2, validation_data = (X_test, Y_test2), epochs=50, verbose=1, batch_size=500) 

经过40次以后,这个模型在测试数据上获得了0.94的精度。显然,这个模型也存在过度拟合问题。我们稍后会解决这个问题。

​ 


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds