李河偉
摘要:近年來,隨著卷積神經(jīng)網(wǎng)絡理論的快速發(fā)展和移動設備的普及,基于移動式TensorFlow平臺構建定制化的卷積神經(jīng)網(wǎng)絡分類模型,成為深度學習愛好者的主要研究方向之一。將個人圖片庫作為訓練集輸入模型,通過調(diào)整閥值和權值,最終獲得定制化的分類模型,滿足個性化的分類需求。對移動式TensorFlow平臺、卷積神經(jīng)網(wǎng)絡及其移植到移動平臺上的相關步驟進行了研究。通過此開發(fā)流程,為進一步使用移動式TensorFlow平臺解決現(xiàn)實圖片分類問題提供了參考。
關鍵詞:移動式;TensorFlow;卷積神經(jīng)網(wǎng)絡;人工智能
中圖分類號:TP18 文獻標識碼:A 文章編號:1009-3044(2017)22-0179-04
1概述
即便是普通人也可以在有攝像頭的手機上運行Tensofr-How的Inception分類器,甚至是自定義的分類器。然后只要把攝像頭對準希望做分類的東西,TensorHow就會給出結果一它認為這是什么東西。2017年2月16日PeteWarden在Tensor-How Dev Summit 2017上的一篇以Mobile a11d Embedded Tensor-How為題的報告,引發(fā)了深度學習愛好者對于移動式Tensor-How平臺的熱情。
一個皮膚癌圖像分類的應用案例:一位小哥拿到了一批皮膚癌的數(shù)據(jù),使用一個pretrained的inception-v3這些數(shù)據(jù)做了一個inference,并把它搭建在手機上,完成一個app用來做皮膚癌的早期檢測,并實現(xiàn)了很高的準確率。這是一個利用廉價的移動設備,結合計算機視覺和深度學習技術,有效檢測是否有皮膚癌,大大節(jié)省醫(yī)療檢測成本的成功案例。
TensorHow作為一個開源的深度學習平臺,實現(xiàn)了對卷積神經(jīng)網(wǎng)絡的良好支持。卷積神經(jīng)網(wǎng)絡提供了一種端到端的學習模型,模型中的參數(shù)可以通過傳統(tǒng)的梯度下降方法進行訓練,經(jīng)過訓練的卷積神經(jīng)網(wǎng)絡能夠?qū)W習到圖像中的特征,并且完成對圖像特征的提取和分類。它在圖像分類、語音識別、目標檢測等領域取得了一系列重大的研究成果。而移動式的TensorFlow平臺更是為卷積神經(jīng)網(wǎng)絡的應用插上了飛翔的翅膀。下面,分別介紹移動式TensorFlow平臺和卷積神經(jīng)網(wǎng)絡。
2移動式TensorFlow平臺
2.1TensorFlow簡介
TensorFlow是谷歌基于DistBelief進行研發(fā)的第二代人工智能開源學習系統(tǒng)。如今Google對待TensorHow系統(tǒng),有點類似于該公司對待旗下移動操作系統(tǒng)Android。它是一個采用數(shù)據(jù)流圖(dataflow graphs),用于數(shù)值計算的開源軟件庫。其命名來源于本身的原理,Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算。Tensofflow運行過程就是張量從圖的一端流動到另一端的計算過程。張量從圖中流過的直觀圖像是這個工具取名為“TensorFlow”的原因。
Tensorflow的特性:
1)高度的靈活性:TensorFlow不是一個嚴格的“神經(jīng)網(wǎng)絡”庫。只要你可以將你的計算表示為一個數(shù)據(jù)流圖,你就可以使用TensorFlow。
2)可移植性(Portabihty):Tensorflow可以運行在臺式機、服務器、手機移動等等設備上。而且它可以充分使用計算資源,在多CPU和多GPU上運行。
3)多語言支持:Tensorflow提供了一套易用的Pvthon使用接口來構建和執(zhí)行graphs,也同樣提供了一套易于C++使用的接口f目前訓練神經(jīng)網(wǎng)絡只支持python,C++接口只能使用已經(jīng)訓練好的模型)。未來還會支持Go、Java、Lua、JavaScript、R等等。
4)性能最優(yōu)化:TensorFlow給予了線程、隊列、異步操作等最佳的支持,TensorFlow可以把你手邊硬件的計算潛能全部發(fā)揮出來,它可以充分利用多CPU和多GPU。
本文主要借助此平臺搭建個人專屬的自學習圖片分類器模型,并實現(xiàn)在移動設備上實時地進行圖片的識別分類工作。
2.2移動式TensorFlow平臺的搭建
1)TensorFlow的安裝可參考官方提供的教程。
下面僅演示在Ubuntu 16.4 64位python2.7環(huán)境下,通過pip安裝TensorFlow的相關代碼
#Ubuntu/Linux 64-bit
#Ubuntu/Linux 64-bit,CPU 0nly,Python 2.7:
2)然后下載安卓的SDK和NDK,并將其解壓縮到你的Ten-sorFlow目錄里。
下載額外的SDK編譯工具
下載安卓NDK,并解壓縮:
下載分類器Inception
為了使用安卓工具編譯應用,需修改WORKSPACE文件
拷貝下面的代碼,并替換掉WORKSPACE文件里的相應行。
3)開啟USB調(diào)試和adb工具
為了測試調(diào)試設置是否成功,可以把手機連上電腦,并用下面的命令安裝adb,并測試設備:
至此,就可以在安卓設備上使用TensorFlow和Inception分類器了。需要注意的是,這個分類器會有偶爾出錯的時候。原版的Inception分類器只能識別ImogeNet挑戰(zhàn)里出現(xiàn)的1000種圖片分類。
2.3TensorFlow的數(shù)據(jù)流圖
TensorFlow包含圖、張量、操作、會話、變量等基本概念。其程序通常被組織成一個構建階段和一個執(zhí)行階段。構建階段,op的執(zhí)行步驟會被描述成一個圖;執(zhí)行階段,創(chuàng)建一個Session對象,使用會話執(zhí)行圖中的op,使用完成后關閉以釋放資源。用數(shù)據(jù)流圖可表示如圖1:
3卷積神經(jīng)網(wǎng)絡設計
LeCun等基于Fukushima的研究訓練的LeNet-5模型是經(jīng)典的卷積神經(jīng)網(wǎng)絡結構,后續(xù)的很多改進都是基于此模型的。李宏毅教授對此模型給出了以下3條解釋。
1)Some patterns are much smaller than the whole image;
2)The same patterns appear in different regions;
3)Subsampling the pixels will not change the object.
3.1卷積神經(jīng)網(wǎng)絡的基本結構
最早Yann LeCun教授提出的卷積神經(jīng)網(wǎng)絡,用于圖像識別,充當分類器的功能。卷積神經(jīng)網(wǎng)絡LeNet5的結構,如圖2LeNet5結構圖所示。
如圖2LeNet5結構圖所示,卷積神經(jīng)網(wǎng)絡主要由5部分組成,分別是輸入層、卷積層、池化層、全連接層和輸出層。
輸入層大小取輸入圖像的大小,若是彩色圖像,則R、G、B三色分別用x1、x2、x3表示。可以不對圖像做預處理。
卷積層可通過卷積操作從小到大提取圖像的特征,層數(shù)越多,特征的表達能力越強。其具體操作,如圖3卷積層操作示意圖所示。
池化層通過均值池化或者最大值池化,可以計算出卷積層輸入的局部區(qū)域的重要特征值,實現(xiàn)降維和保持空間不變性,避免過擬合。池化層操作如圖4池化層操作示意圖。
如圖4池化層操作示意圖,左側(cè)黃色矩陣大小是6*6,要進行大小為3*3的池化(紅色矩陣表示),對應到右側(cè)矩陣中每個元素的值,是左側(cè)紅色矩陣每個元素的值求和后再除以紅色矩陣的元素個數(shù),即為平均值形式的池化。
全連接層會根據(jù)不同的應用情況,對前一層輸出的特征進行映射??蛇x用sigmoid或tanh函數(shù)作為激活函數(shù)。
輸出層的形式面向具體的應用。采用softmax回歸就可以把卷積神經(jīng)網(wǎng)絡變成一個分類器,產(chǎn)生一個圖像類別的向量或者屬于哪一類的概率大小。
3.2卷積神經(jīng)網(wǎng)絡的應用
卷積神經(jīng)網(wǎng)絡由于其強大的特征表達能力,被應用與圖像識別、人臉識別、語音識別等方面。
判斷給定圖像屬于哪個類別屬于圖像分類。Hetn等人通過把空間金字塔池化層加入最后一個卷積層和第一個全連接層中,打破了傳統(tǒng)CNN模型圖像輸入大小固定的限制,并在LS—VRC-14的比賽中獲得了很好的成績。2016年,HeIs]等人采用捷徑連接技術實現(xiàn)跨層連接的殘差網(wǎng)絡解決了退化問題,并在LSVRC-15的圖像分類比賽中取得第一名。
在人臉識別中,DeepFaee先對圖像進行了3D人臉對齊的預處理,然后在把它輸人的卷積神經(jīng)網(wǎng)絡中。FaceNet通過引入三元組損失函數(shù)進行端對端學習,在LFW和YouTube的人臉數(shù)據(jù)庫中測試的準確率分別為99.63%和95.12%。DeeplD3把人臉辨識一人臉確認的監(jiān)督信號加入網(wǎng)絡中間層,在最后的特征提取層中不共享權值,在LFW的人臉識別準確率為99.53%。
Hamidtm在CNN卷積層采用受限權值共享技術,并結合隱含馬爾科夫鏈建立的語音識別模型比常規(guī)模型的識別錯誤率降低了10%。
3.3移動設備下的卷積神經(jīng)網(wǎng)絡
對個人圖片做分類,就必須用移動設備的圖片文件數(shù)據(jù)重新訓練,比如在安卓設備上使用定制化的分類器,讓它學會通過識別不健康的葉子來發(fā)現(xiàn)營養(yǎng)不良或者有病害的植物。移植過程如下。
1)編譯圖片訓練優(yōu)化器
2)對個人圖片數(shù)據(jù)做訓練
3)往assets目錄下放訓練后的標簽
4)編輯java文件,并替換相應變量
替換如下變量
5)重新編譯APK
重新安裝APK
至此,就可以使用個人定制的分類器在移動設備上進行圖片分類的工作。
4總結
TensorFlow自2015年開源以來,就被廣泛應用與學術界,用于解決深度學習中神經(jīng)網(wǎng)絡的構建、參數(shù)優(yōu)化等方面的困難。TensorFlow工作流程相對容易,API穩(wěn)定,穩(wěn)定性好,能與Numpy完美結合,并且能在各種類型的機器上運行,從超級計算機到嵌入式系統(tǒng)。谷歌對移動式TensorFlow平臺的支持和研發(fā),為極客提供了更大的開發(fā)平臺和應用場所。卷積神經(jīng)網(wǎng)絡作為深度學習的一個熱門分支,被應用于圖像處理、語音識別、人臉識別等各個領域。以移動式TensorFlow為平臺,構建并訓練定制化的卷積神經(jīng)網(wǎng)絡成為了當前的一個研究熱點。如何提高卷積神經(jīng)網(wǎng)絡模型的訓練效率和優(yōu)化構建放式,以使其更好的應用于移動設備,是今后的進一步研究方向。