《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于深度学习的图像分类搜索系统
基于深度学习的图像分类搜索系统
2019年电子技术应用第12期
张 璘,杨丰墒
厦门理工学院 光电与通信工程学院,福建 厦门361024
摘要: 图像分类是根据图像的信息将不同类别的图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像、声音和文本。该系统基于Caffe深度学习框架,首先对数据集进行训练分析构建深度学习网络,提取数据集图像特征信息,得到数据对应的分类模型,然后以bvlc-imagenet训练集模型为基础,对目标图像进行扩展应用,实现“以图搜图”Web应用。
中图分类号: TN919.8;TP389.1
文献标识码: A
DOI:10.16157/j.issn.0258-7998.190639
中文引用格式: 张璘,杨丰墒. 基于深度学习的图像分类搜索系统[J].电子技术应用,2019,45(12):51-55.
英文引用格式: Zhang Lin,Yang Fengshang. Image classification search system based on deep learning method[J]. Application of Electronic Technique,2019,45(12):51-55.
Image classification search system based on deep learning method
Zhang Lin,Yang Fengshang
School of Opto-Electronic and Communication Engineering,Xiamen University of Technology,Xiamen 361024,China
Abstract: Image classification is to distinguish different types of images based on image information. It is an important basic issue in computer vision, and is also the fundamental for image detection, image segmentation, object tracking and behavior analysis. Deep learning is a new field in machine learning research. Its motivation is to simulate the neural network of the human brain for analytical learning. Like the human brain, deep learning can interpret the data of images, sounds and texts. The system is based on the Caffe deep learning framework. Firstly, the data set is trained and analyzed, and a model based on deep learning network is built to obtain the image feature information and corresponding data classification. Then the target image is expanded based on the bvlc-imagenet training set model. And finally,"search an image with an image" Web application is achieved.
Key words : image classification;depth learning;Caffe framework;convolution neural network

0 引言

    Caffe(Convolutional Architecture for Fast Feature Embedding)是由伯克利大学的贾杨清等人开发的一个开源的深度学习框架[1],采用高效的C++语言实现,并内置有Python和MATLAB接口,以供开发人员开发和部署以深度学习为核心算法的应用。本文从基本的深度学习概念出发,以mnist手写识别数据集为基础,通过Caffe框架设计的LeNet卷积网络对数据集进行训练分析,提取目标图像特征信息,训练出一个模型进行测试以及网络结构的图解[2]。为了更好地展示深度学习的应用效果,使用bvlc_reference_caffenet.caffemodel来作为基本模型进行图片识别分类,实现了一个简单的“以图搜图”Web应用。

1 深度学习的介绍

    深度学习的概念由HINTON G E等人于2006年提出[3],基于深度置信网络(DBN)提出非监督贪心逐层训练算法,多非线性层级系统有效解决了深度学习在训练过程中的过拟合问题,通过在图像层次稀疏表示中引入图像显著信息,加强了图像特征的语义信息,得到图像显著特征表达。

1.1 卷积过程

    对于一维信号,卷积定义为:

rgzn3-gs1-2.gif

其中,f表示Mr×Nc的二维图像矩阵,g表示Nr×Nc的二维图像矩阵,卷积结果y的大小为(Mr+Nr-1)×(Mc+Nc-1),即0≤m<Mr+Nr-1,0≤n<Mc+Nc-1。以具体图像处理为例,卷积过程其实还是基于一个固定的矩阵,将另外一个矩阵一格一格扫过去得到数值的和,如图1所示。

rgzn3-t1.gif

    如果输入的图像是6×6的一组矩阵,其前3×3格的数据经过权值weight的加权求和后可以得到429,得到第一个卷积后的数据;输入矩阵每次运算向后移动一小格,并与权值weight进行加权求和,扫完整个数据可以得到一个4×4的数据,卷积的结果是维数降低了,如图2所示。

rgzn3-t2.gif

1.2 卷积核

    卷积核为图1中3×3矩阵的数量,因为有时要提取的特征非常多且广泛,所以需要用更多不同的矩阵来扫(多扫几遍),那么矩阵的个数就是卷积核个数。

    输出的矩阵公式为:

     rgzn3-gs3.gif

    当使用n个不同权重的矩阵卷积6×6矩阵时,可以将6×6的一个矩阵转变成n个4×4的矩阵,即6×6-->n×4×4的矩阵。

1.3 池化(pooling)

    池化与卷积非常相似,简单来说就是下采样,都是使用一个矩阵与另一个矩阵的加权和得到最后的数据。池化与卷积最大的不同是卷积重复使用一个数据,而池化是每个数据只加权求和使用一次。当原来的矩阵是m×m、采样窗口是n×n时,卷积能够取得(m-n+1)×(m-n+1)的矩阵结果,而池化在不重复使用数据加权求和的情况下,一共只能采样(m/n)×(m/n)的结果矩阵。之所以这么做,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。之所以能这么做,是因为即使减少了许多数据,特征的统计属性仍能够描述图像,而且由于降低了数据维度,有效地避免了过拟合[4-5]。池化的过程如图3所示,原始图片大小是12×12 维度,对其进行下采样,采样窗口为10×10,通过池化将其下采样成为一个2×2大小的特征图。

rgzn3-t3.gif

1.4 训练流程

    训练的主要流程是训练卷积神经网络(CNN)的某一个卷积层时,实际上是在训练一系列的滤波器(filter)。简单来说,训练CNN在相当意义上是在训练每一个卷积层的滤波器,让这些滤波器组对特定的模式特征有较高的激活,从而达到CNN网络的分类/检测等目的[6]。因此,在相当程度上,构建卷积神经网络的任务就在于构建这些滤波器,也就是改变滤波器矩阵的值,即改变权值weight,用来识别特定的特征[7]。这个过程叫做训练,图4是深度学习训练流程图。

rgzn3-t4.gif

    其中weight权值即图4中的W0、W1、W2,其值由初始权值随着学习训练的过程由损失函数来控制和调整,从而达到学习的目的。

2 LeNet卷积网络的mnist手写识别模型

2.1 训练过程

    由LECUN Y等人于1998年提出的LeNet网络[8]是最早的卷积神经网络之一,它在手写数字的识别问题中取得成功。本文使用的mnist图片数据来源于官网http://yann.lecun.com/exdb/mnist/,数据分成了训练集(60 000张共10类)和测试集(共10 000张10类),每个类别放在一个单独的文件夹里,并将所有的图片都生成txt列表清单(train.txt和test.txt)[9]

    环境说明:采用VMware Workstation14下的Linux(Ubuntu16.04)操作系统系统,Python环境:Anaconda2.7,Caffe 以及Caffe所需要的Opencv(3.4)支持。环境搭建如图5所示。

rgzn3-t5.gif

2.2 测试结果

    本文使用mnist官方提供的测试集对训练好的模型进行训练,每类数字有1 000张共10个分类10 000张图片,判断正确结果较多,因此这里跳过了判断正确结果的输出,图6依次为0~9的测试出错结果:头顶标记为模型对图片预测分类的结果。

rgzn3-t6.gif

    从测试的结果可以看出:

    (1)测试大概10 000张图片,共用时不到10 s(仅使用CPU运算,且不同性能计算机用时差异较大,仅作参考),其中判断错误数量为80张左右,正确率大概有99.2%,每张的测试时间不到1 ms。

    (2)分析输出的错误图像判断结果,可知有些错误原因是手写字迹潦草、部分较为模糊、手写有歧义(即使人为判断也无法准确断定数字具体分类)。

    (3)部分的测试结果在人眼识别过程中没有太大的问题,在字迹方面也算可以清晰显示出数字的具体信息,而此模型却给出了一个错误的结果。这些识别结果只显示了概率最大的分类,可能在识别的部分特征过于相似,导致并不能得到最好的分类结果,这应该属于深度学习的训练缺陷的一部分,原因是由于训练集的质量和数量决定的。

3 图片识别的一个简单应用:以图搜图

    百度上线了其最新的搜索功能——“识图”,该功能基于相似图片识别技术,让用户通过上传本地图片或者输入图片的URL地址后,根据图像特征进行分析,进而从互联网中搜索出与此相似的图片资源及信息内容。根据前面的深度学习图片分类的学习结果,设计出一款类似百度“识图”的应用。

3.1 总体设计思路

    使用Web前端获取用户所上传(POST)的图片文件或者URL,服务器接收到用户图片后调用bvlc模型进行处理,载入模型识别出图片分类信息,后台根据这个分类信息使用requests爬虫库搜索Bing上相似的图片,获取到相关的图片链接并传给前端浏览器,浏览器根据所给的图片链接进行访问请求,并显示在用户浏览界面中,从而达到以图搜图的功能。处理流程图如图7所示。

rgzn3-t7.gif

3.2 模型框架说明

    后台服务器Django:Django是一个开放源代码的Web应用框架,由Python写成,较适合中等规模的Web项目,本图片搜索系统是基于Django搭建并部署Web应用。

    Web前端框架Bootstrap:Bootstrap是当前比较流行的前端框架,起源于推特,提供了简洁的层叠样式表和HTML规则,以及更为完善的人性化网站风格。根据此框架能够较好较快地搭建前端Web UI界面,且很符合该图片展示模块的风格。

    搜索分类依据bvlc模型:该模型由Caffe团队使用imagenet图片集迭代训练30多万次而成,共有1 000种的分类,是一个可应用级别的model。此次分析图片的具体分类就是通过这个模型得到分类的关键字。

3.3 搜图流程

    前端界面:这里提供了两种图片的上传方式,即图片的本地文件以及图片的URL地址,选择上传一张小猫图片,如图8所示。

rgzn3-t8.gif

    后台分类:后台将图片载入bvlc模型进行运算,如图9展示的是第一个卷积层的卷积核与进行第一次卷积后的图片。

rgzn3-t9.gif

    最终后台经过分析特征得到图片分类的概率分布图,如下结果最可能的分类为283,再通过查找label文件得到283类为label:n02123394 Persian cat,如图10所示。

rgzn3-t10.gif

    也可以查看前5个最有可能的分类结果:

    [(0.99606931,′n02123394 Persian cat′),

    (0.0019333176,′n02127052 lynx,catamount′),

    (0.0013805312,′n02123159 tiger cat′),

    (0.00041564793,′n02123045 tabby,tabby cat′),

    (8.5782471e-05,′n02124075 Egyptian cat′)]

    更多图片搜索的实现:得到关键字后,通过requests爬虫库爬取Bing图片(https://cn.bing.com/images),对网页HTML源码进行分析,因此得到了一个API接口:https://cn.bing.com/images/async?q={%s}&mmasync=1。

    该接口提供一个搜索关键词的参数代替URL中的%s,因而得到想要的图片数据,再使用xpath:’//*[@id="mmComponent_images_1"]/ul/li/div/div/div/div[1]/ul/li[2]/text()’,从而提取到想要的图片地址以及图片源信息。获得图片的URL信息后,后台系统会整理好数据以JSON方式传送给浏览器,浏览器便可依据此地址展示给用户更多的相似图片。

    前端图片展示页面:第一张图片为搜索的原图以及其分类的信息,其他图片为向用户提供的更多相似图片的结果,并且有查看大图(view)和下载功能(download),如图11所示。

rgzn3-t11.gif

4 结论

    图片识别分类系统在应用级别的构建需要大量图片作为训练的基础,不断迭代学习才能得到一个较好的模型。本文使用的模型为Caffe官方提供的bvlc_reference_caffenet.caffemodel,使用的训练集imagenet数据集是一个强大的模型。但若以人工智能应用部署在计算机视觉领域上还远远不够,仍需要更多的大数据作为基础。同时,即使有这样一个强大模型在实际应用中,还需要动态一步步地修正和完善其模型与参数配置,这点现在的Caffe还无法很好地给出解决方案。本文最终的图片搜索应用功能依赖于识别的分类结果,本质上还是为以分类关键词搜图作为结果,若是相同分类的不同图片,搜到的结果可能相似度过高,不够智能化。可参考的解决方案是使用多个训练模型分析所选图片的各方面信息,如色调、风格、其他分类等综合结果,再加以搜索会更加智能化,但同时对训练的数据集和训练网络的学习效率会有更高的要求。

参考文献

[1] Jia Yangqing,SHELHAMER E,DONAHUE J,et al.Caffe:convolutional architecture for fast feature embedding[C].ACM International Conference on Multimedia ACM,2014:675-678.

[2] 王茜,张海仙.深度学习框架Caffe在图像分类中的应用[J].现代计算机(专业版),2016(5):72-75,80.

[3] HINTON G E,OSINDERO S,THE Y W.A fast learning algorithm for deep belief nets[J].Neural Computation,2006,18(7):1527-1554.

[4] 魏正.基于Caffe平台深度学习的人脸识别研究与实现[D].西安:西安电子科技大学,2015.

[5] 许少尉,陈思宇.基于深度学习的图像分类方法[J].电子技术应用,2018,44(6):116-119.

[6] 张顺,龚怡宏,王进军.深度卷积神经网络的发展及其在计算机视觉领域的应用[J].计算机学报,2017,42(3):453-462.

[7] 孙志军,薛磊,许阳明,等.深度学习研究综述[J].计算机应用研究,2012,29(8):2806-2810.

[8] LECUN Y,BOTTOU L,BENGIO Y,et al.Gradient-based learning applied to document recognition[J].Proceedings of the IEEE,1998,86(11):2278-2324.

[9] 黄睿,陆许明,邬依林.基于Ten-sorFlow深度学习手写体数字识别及应用[J].电子技术应用,2018,44(10):6-10.



作者信息:

张  璘,杨丰墒

(厦门理工学院 光电与通信工程学院,福建 厦门361024)

此内容为AET网站原创,未经授权禁止转载。