深度學習淺析,以及又拍雲圖片鑑別的實踐進階

若是如今 Google 上搜深度學習,咱們會發現深度學習的關注度從2012年到2017年上升了數十倍。尤爲在中國,近兩年幾乎都在談機器學習、人工智能。在深度學習這一塊又拍雲也進行了諸多的實踐。python

先介紹一下又拍雲在人工智能方面的首個產品——又拍雲內容識別服務。「內容識別」是又拍雲「圖像視覺」項目下的第一個產品,是基於人工智能、大數據分析而研發的新型信息安全解決方案,能實時處理多媒體內容(圖片、視頻、直播等),識別色情、廣告、暴恐等多種信息,目前色情內容識別正確率已高達 99.7%,並且在不斷提升中。算法

本文以又拍雲內容識別服務爲例,向你們展現又拍雲在深度學習系統中的實踐。docker

深度學習理論

在介紹深度學習以前,先簡單介紹一下深度學習的基本理論知識。安全

深度學習—分類器與分類算法

1.分類器:常見的分類方式有垃圾郵件過濾、手寫數字識別、圖片分類、鑑黃等;
2.分類算法:深度學習算法有樸素按貝葉斯算法,以及基於 KNN、SVM 的算法和人工神經網絡算法等;網絡

從圖 1 咱們能夠看到傳統機器學習算法準確率前期會隨着數據量的增加有所上身,但增加到一個點時就很難繼續增加,而基於人工神經網絡的模型隨着數據量的增加,準確率會持續上升。架構

目前所處的互聯網時代,數據積累相對比較容易,且擁有很大的數據積累量,很是適合機器深度學習。因此又拍雲選用的分類器是人工神經網絡。框架

圖片描述

△ 圖1 傳統機器學習 vs 人工神經網絡機器學習

圖 2 所示爲人工神經網絡示意圖,人工神經網絡由不少的層組成,每一層有不少節點,節點之間有邊相連的,每條邊都有一個權重。對於文原本說輸入值是每個字符,對於圖片來講輸入值就是每個像素。
圖片描述異步

△ 圖2 人工神經網絡分佈式

人工神經網絡經過前向傳播對輸入值,進行權值運算,最後一層層傳下去獲得最終輸出預測的值。再經過反向傳播,與真實值作對比修正前向傳播的權值和偏置。

圖片描述

△圖3 反向傳播

反向傳播是如何更新參數 W 和 B 的?經過梯度降低的算法,運用梯度降低的算法能夠找出一組 W 和 B,使得函數 C 最小,在樣本上找到最優或者近似最優的 W 和 B ,以後使用 W 和 B 進行預測。圖片描述

△ 圖4 梯度降低

深度學習硬件&軟件準備

在瞭解深度學習的基本知識以後,咱們看下須要哪些硬件、軟件工具。

硬件

下圖表格是又拍雲第一臺深度學習訓練機器的硬件配置:

圖片描述

軟件

深度學習機器配置的操做系統,又拍雲選擇了 Ubuntu 16.04,框架選擇 Caffe 和 Tensorflow,下文咱們也主要介紹這兩種框架。

Caffe 框架

Caffe 容易入門,性能優異,支持 python 和 C++ 接口,同時還有不少 model zoo,能夠輕鬆找到語音識別、計算機圖片識別、人臉識別等類型的深度學習模型。可是 Caffe 存在難以擴展,設計架構沒有爲擴展留好接口,只能單機運行且安裝太複雜等缺點,而且 Caffe 每個版本都須要從新編寫 C++ 代碼。

TensorFlow 框架

TensorFlow 支持 GPU、分佈式(彌補了Caffe 不支持的缺點),擁有 TensorBoard 功能,能夠訓練整個可視化的過程,同時還有活躍的社區和完善的文檔,而且功能強大、容易擴展。可是 TensorFlow 的模型沒有 Caffe 直觀,經過文本文件定義的 Caffe 不用編輯代碼,而使用 TensorFlow 須要有編寫能力和算法功底。

又拍雲深度學習實踐

什麼是內容識別系統

內容識別:主要是指色情、廣告、暴恐等圖像、視頻內容的智能鑑別;

內容識別系統原理:上傳圖片到樣本管理平臺,人工進行標註圖片是否是性感圖、色情圖、廣告圖或者是暴恐圖片,標註完成後將它放到線下處理平臺訓練,得出訓練模型和結果,再將模型拿到線上進行智能鑑別。
圖片描述

△ 圖5 又拍雲圖片鑑別系統原理

又拍雲內容識別後臺

圖6是又拍雲圖片鑑黃控制檯,用戶將圖片上傳到又拍雲鑑黃控制檯後,就能夠實現色情識別,不須要本身開發後臺。

圖7是又拍雲人臉類似度識別後臺,用戶將攝像頭、圖片接入控制檯後,系統會自動判斷圖片裏面的人物。
圖片描述

△ 圖6 圖片鑑黃!

圖片描述

△圖7 人臉類似度識別

深度學習三要素:數據、模型、計算

數據

數據來源:主要經過對初始數據圖片進行人工標註和機器標註。數據樣本很是的重要,好的樣本等於成功了一半。

模型

從 Caffe model zoo 找到適用模型以後主要針對兩個文件進行修改調整:第一個文件是輸入,好比說修改一下 data 文件,或將輸入的地址改爲剛剛定義的 TXT 文件;第二個是 solver 文件,對 baselr 參數進行調整。

圖片描述

△ 圖8 模型輸入修改

調整完輸入和 solver 文件就能夠進行深度學習訓練了。根據任務的大小,訓練每每會花費幾個小時、甚至幾周。訓練完以後 Caffe 會生成 model 文件,能夠直接用 Caffe text 將模型的參數代入,對測試文件進行預測,並輸出預測的結果。

計算

訓練計算方式主要有命令行和 python 接口兩種方式。上文提到的訓練方式主要是以命令行的方式進行的。此外咱們還能夠經過 python 接口進行訓練。

經過 python 接口進行預測的 Caffe 主體代碼,在開始時定義 Caffe 的 net,這裏須要指定模型,指定的參數文件。圖9 中間一段代碼是對輸入的圖片進行諸如將像素減去平均值這類的預處理。完成以後輸入須要進行預測的圖片,將圖片的地址給它,調用前向傳播,就能夠獲得一個輸出,這裏是不須要作反向傳播,由於咱們是進行預測而不是訓練,最後能夠把預測結果打印出來。

圖片描述

△圖9 python 接口

深度學習訓練以外的要點

1.對模型進行二次調優

Fine-turning,中文翻譯「微調」,若是咱們只有幾千張、幾萬張圖片,很難訓練優質的模型。訓練優異的模型須要花費的長達幾天、幾周時間。咱們想快速獲得訓練結果,能夠對以前訓練好的版本進行二次調優,在原有的文件 model 上進行二次訓練,就把預訓練的模型加在 Caffe 後面,Caffe 會使用後面的參數進行初始化。若是不指定的話,Caffe 的初始化是隨機的。

當數據量增大後,咱們會發現一臺機器運行速度太慢,須要使用多臺機器進行訓練,可是 Caffe 只支持多 GPU 模式,不支持多機器聯機模式,因此涉及到多機器訓練時,咱們能夠選擇 TensorFlow。

2.Data Augmentation

當圖片數量達到必定數量級後,由於互聯網裏的圖片都互相連接,不免相同,這帶來了樣本增加困難的問題。

Data Augmentation 算法經過對同一張圖片進行旋轉、縮放以及翻轉等操做,將圖10老鼠加強了不少倍。可是 Caffe 原生系統中是不支持數據加強的,這須要本身編寫程序。
圖片描述

△ 圖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 等參數須要進行屢次重試,不斷地調整設定。

上述就是又拍雲深度學習的實踐,主要涉及硬件、軟件,以及框架選型,感興趣的朋友能夠本身嘗試操做一下。

推薦閱讀:

性感與色情有多遠——你不知道的圖片鑑黃那些事兒

相關文章
相關標籤/搜索