如果現在 Google 上搜深度學習,我們會發現深度學習的關注度從2012年到2017年上升了數十倍。尤其在中國,近兩年幾乎都在談機器學習、人工智慧。在深度學習這一塊又拍雲也進行了諸多的實踐。
先介紹一下又拍雲在人工智慧方面的首個產品——又拍雲內容識別服務。“內容識別”是又拍雲“影象視覺”專案下的第一個產品,是基於人工智慧、大資料分析而研發的新型資訊保安解決方案,能實時處理多媒體內容(圖片、視訊、直播等),識別色情、廣告、暴恐等多種資訊,目前色情內容識別正確率已高達 99.7%,而且在不斷提高中。
本文以又拍雲內容識別服務為例,向大家展示又拍雲在深度學習系統中的實踐。
深度學習理論
在介紹深度學習之前,先簡單介紹一下深度學習的基本理論知識。
深度學習—分類器與分類演算法
1.分類器:常見的分類方式有垃圾郵件過濾、手寫數字識別、圖片分類、鑑黃等;
2.分類演算法:深度學習演算法有樸素按貝葉斯演算法,以及基於 KNN、SVM 的演算法和人工神經網路演算法等;
從圖 1 我們可以看到傳統機器學習演算法準確率前期會隨著資料量的增長有所上身,但增長到一個點時就很難繼續增長,而基於人工神經網路的模型隨著資料量的增長,準確率會持續上升。
目前所處的網際網路時代,資料積累相對比較容易,且擁有很大的資料積累量,非常適合機器深度學習。所以又拍雲選用的分類器是人工神經網路。
![](https://i.iter01.com/images/d5dac2f133cac751093012469faac8c6f31f583d6b44426e1235c2b62466c4a6.png)
△ 圖1 傳統機器學習 vs 人工神經網路
圖 2 所示為人工神經網路示意圖,人工神經網路由很多的層組成,每一層有很多節點,節點之間有邊相連的,每條邊都有一個權重。對於文字來說輸入值是每一個字元,對於圖片來說輸入值就是每一個畫素。
![](https://i.iter01.com/images/7a4d24890aac7a4fbd860948ae508ec257104e1fde475cba093901c3bc123a18.png)
△ 圖2 人工神經網路
人工神經網路通過前向傳播對輸入值,進行權值運算,最後一層層傳下去得到最終輸出預測的值。再通過反向傳播,與真實值做對比修正前向傳播的權值和偏置。
![](https://i.iter01.com/images/413549afe846a132241d3481baa1c661d6f134f527b825c81b04d7897fb171c0.png)
圖3 反向傳播
反向傳播是如何更新引數 W 和 B 的?通過梯度下降的演算法,運用梯度下降的演算法可以找出一組 W 和 B,使得函式 C 最小,在樣本上找到最優或者近似最優的 W 和 B ,之後使用 W 和 B 進行預測。
![](https://i.iter01.com/images/ed4ea2ee8a2ce1dba4459817b408feb79541804cdb07935ae59bfc8fc46410be.png)
△ 圖4 梯度下降
深度學習硬體&軟體準備
在瞭解深度學習的基本知識之後,我們看下需要哪些硬體、軟體工具。
硬體
下圖表格是又拍雲第一臺深度學習訓練機器的硬體配置:
![](https://i.iter01.com/images/aca97bf4c279f21bf936950d5fc320043ec2d83feaea92d85f4cc09756344b77.png)
軟體
深度學習機器配置的作業系統,又拍雲選擇了 Ubuntu 16.04,框架選擇 Caffe 和 Tensorflow,下文我們也主要介紹這兩種框架。
Caffe 框架
Caffe 容易入門,效能優異,支援 python 和 C++ 介面,同時還有很多 model zoo,可以輕鬆找到語音識別、計算機圖片識別、人臉識別等型別的深度學習模型。但是 Caffe 存在難以擴充套件,設計架構沒有為擴充套件留好介面,只能單機執行且安裝太複雜等缺點,並且 Caffe 每一個版本都需要重新編寫 C++ 程式碼。
TensorFlow 框架
TensorFlow 支援 GPU、分散式(彌補了Caffe 不支援的缺點),擁有 TensorBoard 功能,可以訓練整個視覺化的過程,同時還有活躍的社群和完善的文件,並且功能強大、容易擴充套件。但是 TensorFlow 的模型沒有 Caffe 直觀,通過文字檔案定義的 Caffe 不用編輯程式碼,而使用 TensorFlow 需要有編寫能力和演算法功底。
又拍雲深度學習實踐
什麼是內容識別系統
內容識別:主要是指色情、廣告、暴恐等影象、視訊內容的智慧鑑別;
內容識別系統原理:上傳圖片到樣本管理平臺,人工進行標註圖片是不是性感圖、色情圖、廣告圖或者是暴恐圖片,標註完成後將它放到線下處理平臺訓練,得出訓練模型和結果,再將模型拿到線上進行智慧鑑別。
![](https://i.iter01.com/images/ce212d349334ef0c34dbf2de9c065e3594b2a68f5bbe96ea7a28cab29d4401c2.png)
△ 圖5 又拍雲圖片鑑別系統原理
又拍雲內容識別後臺
圖6是又拍雲圖片鑑黃控制檯,使用者將圖片上傳到又拍雲鑑黃控制檯後,就可以實現色情識別,不需要自己開發後臺。
圖7是又拍雲人臉相似度識別後臺,使用者將攝像頭、圖片接入控制檯後,系統會自動判斷圖片裡面的人物。
![25.jpg](https://i.iter01.com/images/df927cc585c3052460689fe0007e6a631a68bd73258746998d911c60c45afbed.jpg)
△ 圖6 圖片鑑黃
![](https://i.iter01.com/images/b646590a8bec15f77135ec31e997f962cfad8352d90943e0636efae8a619e3c7.jpg)
△圖7 人臉相似度識別
深度學習三要素:資料、模型、計算
資料
資料來源:主要通過對初始資料圖片進行人工標註和機器標註。資料樣本非常的重要,好的樣本等於成功了一半。
模型
從 Caffe model zoo 找到適用模型之後主要針對兩個檔案進行修改調整:第一個檔案是輸入,比如說修改一下 data 檔案,或將輸入的地址改成剛剛定義的 TXT 檔案;第二個是 solver 檔案,對 baselr 引數進行調整。
![](https://i.iter01.com/images/08893aec253cde5a3b88e2ace5863892f507e28d19019bf1697ed191c0c1147e.png)
△ 圖8 模型輸入修改
調整完輸入和 solver 檔案就可以進行深度學習訓練了。根據任務的大小,訓練往往會花費幾個小時、甚至幾周。訓練完之後 Caffe 會生成 model 檔案,可以直接用 Caffe text 將模型的引數代入,對測試檔案進行預測,並輸出預測的結果。
計算
訓練計算方式主要有命令列和 python 介面兩種方式。上文提到的訓練方式主要是以命令列的方式進行的。此外我們還可以通過 python 介面進行訓練。
通過 python 介面進行預測的 Caffe 主體程式碼,在開始時定義 Caffe 的 net,這裡需要指定模型,指定的引數檔案。圖9 中間一段程式碼是對輸入的圖片進行諸如將畫素減去平均值這類的預處理。完成之後輸入需要進行預測的圖片,將圖片的地址給它,呼叫前向傳播,就可以得到一個輸出,這裡是不需要做反向傳播,因為我們是進行預測而不是訓練,最後可以把預測結果列印出來。
![](https://i.iter01.com/images/0e5a03cdcd319fbea0fd071ac7ed2186f8bafada4f3951752688b610d54a20b5.png)
圖9 python 介面
深度學習訓練之外的要點
1.對模型進行二次調優
Fine-turning,中文翻譯“微調”,如果我們只有幾千張、幾萬張圖片,很難訓練優質的模型。訓練優異的模型需要花費的長達幾天、幾周時間。我們想快速得到訓練結果,可以對之前訓練好的版本進行二次調優,在原有的檔案 model 上進行二次訓練,就把預訓練的模型加在 Caffe 後面,Caffe 會使用後面的引數進行初始化。如果不指定的話,Caffe 的初始化是隨機的。
當資料量增大後,我們會發現一臺機器執行速度太慢,需要使用多臺機器進行訓練,但是 Caffe 只支援多 GPU 模式,不支援多機器聯機模式,所以涉及到多機器訓練時,我們可以選擇 TensorFlow。
2.Data Augmentation
當圖片數量達到一定數量級後,因為網際網路裡的圖片都互相連結,難免相同,這帶來了樣本增長困難的問題。
Data Augmentation 演算法通過對同一張圖片進行旋轉、縮放以及翻轉等操作,將圖10老鼠增強了很多倍。但是 Caffe 原生系統中是不支援資料增強的,這需要自己編寫程式。
![](https://i.iter01.com/images/e7124ee7e2b047da8f2d81c15876e703c304aee297e5ce30b8110202663ee8c7.png)
△ 圖10 增加正樣本數量
3.Mesos+Docker 部署
最後當引數和模型都設定訓練完成之後,我們可以通過 Mesos+Docker 的模型將它部署到線上對外服務。
Mesos+Docker 部署有兩個模式:CPU模式和GPU模式
CPU模式:
- 優點:簡單、不受機器限制;
- 缺點:速度慢,單核處理一張圖片需要250ms
- 適用於非同步處理任務
GPU模式:
- 優點:速度快,效能是CPU的八倍
- 特性:mesos:--docker=nvidia-docker(使用 GPU 模式,必須在啟動 mesos 時設定好這個引數)
- 適用於同步處理
總結
1.pilow-simd 規換 PIL:因為PIL不支援CPU的高階的指令,所以將 pilow-simd 替換的,效能大概能提高25%左右;
2.樣本越多越好,樣本越多訓練出來的模型就越精準;
3.batch_size:這個值一次訓練圖片的數量,需要我們將數值能調到最大;
4.base_lr、 weight_decay 等引數需要進行多次重試,不斷地調整設定。
上述就是又拍雲深度學習的實踐,主要涉及硬體、軟體,以及框架選型,感興趣的朋友可以自己嘗試操作一下。