七夕“加餐”:深度學習圖像算法在內容安全領域的應用實踐和優化

作者介紹:李雨珂博士,網易易盾資深算法專家,畢業於浙江大學信息與電子工程學系,研究方向包括數據挖掘、機器學習以及計算機視覺,目前在網易易盾主導內容安全領域多媒體信息相關人工智能算法研發。

深度學習圖像算法近年來在學術領域經歷了爆發式的發展,目前已經在工業界多個實際場景取得了較完整的應用落地,例如安防、營銷、娛樂、金融等場景。其中內容安全也是非常典型的落地案例,深度學習圖像算法在鑑黃鑑暴、廣告識別、違禁攔截、敏感人物過濾等方向都取得了不錯的應用效果。

算法自動識別一方面可以全面減輕人工審覈投入,另一方面可以更有效率、更快速地對信息進行判斷。本篇分享將會介紹如何快速搭建深度學習圖像算法服務以及易盾在圖像算法優化方面的經驗。

一、內容安全難點

內容安全領域是一個相對特殊的場景,我們面對的問題往往目標定義不明確,數據種類繁雜多變、圖像質量差距大,還會經常面臨對抗攻擊,這一場景對算法能力的要求較高。

相比較而言,在2C營銷場景中,例如手機掃描商品/圖標,對用戶來說召回能力相對重要一些,誤判在使用過程中不容易被發現;在門禁考勤場景中,由於攝像頭採集到的圖像質量較高,算法需要解決的是限定圖片質量範圍內的效果問題。

而在內容安全領域,由於線上數據正常比例較高,且圖像類型衆多,誤判問題非常容易集中體現;另一方面,由於UGC圖像質量參差不齊,圖像敏感特徵往往不夠明顯,小目標、模糊、形變等問題較常出現。

伴隨易盾內容安全業務的發展,我們深入探索了深度學習圖像算法在這個領域內的應用,在實際場景中取得了預期效果。

二、小試牛刀:教你快速搭建深度學習圖像算法服務

深度學習算法已經成爲圖像算法中的重要組成部分,深度學習相關公開資源已經非常豐富,針對圖像任務創建一個簡單模型是十分容易上手的,這裏將會展示如何快速搭建一個深度學習圖像分類服務。

我們以場景識別爲例子,即根據圖像全局信息判斷拍攝場景,例如泳池、車內、公寓等。我們可以選取公開數據集places365用於模型訓練、數據說明和下載鏈接參見[1],通過tensorflow-slim接口進行圖像分類模型訓練[2],最終使用常見服務框架將算法服務進行透出。

其中數據方面僅以公開數據爲例,實際應用中需要以業務數據爲主。模型訓練採用的框架可以選擇Tensorflow\Keras、Mxnet\Gluon、Pytorch、Chainer等。隨着深度學習框架的逐步發展,訓練便捷性越來越高,相比較而言Tensorflow-slim也不算特別友好,但其代碼組織思路和拓展性還是很值得借鑑的。這裏我們將以Tensorflow-slim爲例分幾個步驟完成這項工作。

2.1 數據處理

原始PLACES365數據集的標籤類別較多,爲了快速驗證代碼我們僅挑選了其中小部分類別,用作示例。數據按如下進行組織,一個文件夾存儲一類數據,文件夾爲標籤名。

參考源碼中flowers數據集處理腳本download_and_convert_flowers.py,創建圖像數據到tfrecord文件轉換的腳本,原始項目中似乎沒有一個通用的數據文件轉換工具,建議可以自己簡單寫一個,將可變參數做成腳本入參,轉換數據即可用命令方式執行,便於後續處理其他數據集。

腳本處理結束後,目標圖像數據將轉換成tfrecord文件,同時標籤描述文件label.txt會自動生成。參考源碼中flowers數據集描述腳本flowers.py,構建一個對應於場景數據的描述腳本,這裏會對數據集的一些基本信息進行定義,如下所示:

通過上面一系列操作,數據準備層面的工作基本完成。

2.2 模型訓練和測試

完成數據處理後,我們將挑選一個模型進行訓練,我們以inception-v3爲例,實際工作中模型挑選主要考慮的是性能和效果的平衡,需要通過一定量的實驗來評估。

首先我們根據開源項目中提供的鏈接將IMAGENET預訓練模型下載到本地。tensorflow-slim項目已經對訓練功能進行了非常棒的上層包裝,我們在實際使用過程中直接調用train_image_classifier.py腳本即可。我們首先以較大的學習率訓練最後一層全連接參數,其他參數保持不動,然後以較小的學習率對所有參數進行調整。

訓練腳本train_image_classifier.py對數據讀取、預處理選擇、模型選擇、參數配置等都有較好的支持,建議詳細閱讀其中的代碼和組織形式。完成訓練後,我們通過測試腳本eval_image_classifier.py完成效果評估,如果在測試集上取得比較好的效果,我們就可以進入下一步。

2.3 服務透出

完成訓練和評估後,我們可以簡單寫一個轉換腳本將原始模型文件處理成pb文件,這會帶來一系列好處,不但可以只保留inference所需的網絡結構,砍掉一些訓練輔助結構,將網絡參數值進行freeze,減小模型文件大小,而且由於pb文件和框架關聯性不大,可以脫離tensorflow進行使用和部署。tensorflow-slim已經提供了pb文件轉換支持,但個人建議可以參考其他方式進行編寫[3],使用上更加直觀和簡便。

接下來是算法模型服務化的工作,這一部分可以選擇的方案也比較多,可以使用基於tensorflow的tf-serving進行完整的服務管理,也可以只通過Flask、Tornado等通用框架創建HTTP服務,還可以選擇跨語言RPC框架構建服務。其中Flask方案可以參考[3]。我們需要寫一個服務腳本來啓動服務,同時需要創建客戶調用腳本對服務進行調用測試。如果有服務併發評估需求,建議可以通過Locust,使用上非常便捷[4]。

以上工作完成後,我們就基本上完成深度學習圖像服務的簡單構建,如果有移動端方面的部署需求可以參考tensorflow官方iOS的例子[5]。以上內容以場景識別爲例子進行簡單說明,實際上模型使用框架、服務使用框架選擇的空間都是比較大的,個人比較建議算法模型部分可以按需求靈活挑選,服務部署部分需要有統一的規範進行約束。

三、重裝上陣:易盾實際優化經驗分享

以上工作非常容易實現,也僅僅是算法工作的小開端,離算法應用到實際場景還有非常遙遠的距離。

哪怕經歷了業務數據擴充、負樣本收集、參數調優、模型結構改造等大量工作之後,算法應用到線上數據後的實際效果仍會非常糟糕,不但會出現大量解釋性較差的誤判,而且存在困難樣例不能召回的困境。

在實際工作中,網易易盾往往會從以下幾個角度着手來提升算法真實效果:

1、標籤定義:明確識別範圍,建議先縮小識別範圍,再逐步增強召回能力,按照這種方式,效果測試相對容易進行。在場景識別中,總結出全局特徵相似、具有分類意義的標籤是非常關鍵的;

2、數據有效收集:隨着數據量的不斷累積,數據收集的重點往往不是數量,而是收集效率和質量。我們在實際工作過程中採取了一些主動學習機制,既能保證數據有效性,又能儘可能減小標註成本。在場景識別中,我們利用初始數據訓練一個簡單模型後,就可以用於業務數據的過濾,挑選有效數據進行擴充。

3、測試集定義:挑選足夠代表線上實際情況的測試集,主要關注數據量和覆蓋範圍兩個方面,並且針對特殊問題收集特定類型測試集,測試的有效性對線上算法效果起決定性作用。

4、算法方案:結合多模型融合、目標檢測和判定策略,擴充算法方案。場景識別相對來說使用全局特徵爲主,但如果遇到小目標、多尺度、模糊等問題,FPN、Attention等結構就可能發揮一定的作用。

5、線上閉環:服務上線後迴流數據,形成閉環迭代,對模型能力不斷進行矯正。

嘗試新算法、學習新知識往往是非常愉快的,但上述這部分的工作卻是枯燥和痛苦的。真正對線上優化起到最直接幫助的往往不是模型調參,而是枯燥乏味的事前數據工作,以及不遺餘力的事後測試工作。

基於明確定義、重視大規模測試、形成數據閉環的算法優化思路,易盾圖像算法在業務算法上取得了一定的突破,核心算法模塊效果在過去的幾年中持續穩步提升,基礎能力越來越厚重,定向優化也取得進展,不斷提升識別精準度,並逐漸擴大識別範圍。

四、未來展望

易盾內容安全圖像算法服務經過多年發展,已經形成了一系列服務,形式多、範圍廣,維護成本也會逐漸增加。我們在這些項目經驗的基礎上凝練出最佳實踐方案(平臺方向),爲快速搭建服務滿足客戶新需求提供了條件當然,由於內容安全場景效果要求相對苛刻,解決特定業務問題往往需要通過特殊路徑(定製方向),進行長期投入,平臺化和定製化之間需要做到一定平衡。

另一方面,隨着業務量不斷增加,易盾團隊在性能和效果平衡方面也做了非常多的嘗試,通過網絡剪枝量化、圖像預處理優化、模型級聯等方法不斷減小服務響應時間,算法吞吐能力也會是我們長期追求的重點目標。

以上分享是網易易盾算法團隊在深度圖像領域落地探索方面的一些初淺分享,實際上網易易盾在背後做了很多的工作,比如網易易盾人工智能實驗室方正研究員在2018年研發出了一種對多視角多模態特徵信息進行有效融合的自編碼器神經網絡,在準確率、NMI、Purity、ARI等各項性能指標上,較當下多項國際先進的多視角多模態信息融合技術有顯著性的領先。再比如今年,網易易盾人工智能工程師姚益武在全球計算機多媒體頂級會議ICME 2019展示int8量化新算法,有助於構建端到端的純整數運算通路,且統一表示層的設計簡化了網絡結構的拓撲設計,應用於易盾內容安全圖像識別上,則在確保業務模型推理精度的前提下,其服務的響應時間能得到顯著降低

展望未來,網易易盾算法團隊還將不斷研究、創造和創新,持續提升易盾在內容安全服務上的效果,幫助合作伙伴和客戶解決其遇到的內容安全問題。

文中資源彙總:

[1].PLACES365數據集說明和下載:http://places2.csail.mit.edu/download.html

[2].tensorflow-slim官方地址:https://github.com/tensorflow/models/tree/master/research/slim

[3].模型轉換和Flask服務編寫:https://blog.metaflow.fr/tensorflow-how-to-freeze-a-model-and-serve-it-with-a-python-api-d4f3596b3adc

[4].壓力測試:https://locust.io/

[5].IOS端部署:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/ios

點擊免費體驗網易易盾安全解決方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章