作者 | 忘返

一、摘要
惡心圖檔,顧名思義,就是讓人感到惡心,不适的圖檔。其大緻可以被分為跟動物有關的,跟人有關的,以及物體這三種類型。要從數量巨大的商品池中精确地将惡心圖檔過濾出來,面臨着以下幾個技術難點:
(1)初始樣本很少且難收集,面臨模型冷啟動的問題;
(2)線上真實資料場景下,正負樣本比例差距過大,面臨嚴重的類别不平衡問題;
(3)惡心樣本多種多樣,如昆蟲,爬行動物,人的各個身體部位等等,樣本的特征分布非常分散。
針對第一個問題,我們通過本團隊的小樣本平台從淘寶内容池中召回惡心圖檔擴充樣本量,并通過半監督算法利用淘寶的無标簽資料進行訓練。針對第二個問題,我們在訓練中通過online hard example mining +級聯的方法,并且通過active learning和噪聲樣本識别算法加快模型疊代。針對第三個問題,我們在模型中引入了attention機制,讓模型focus在惡心的局部區域。本文的二、三、四節分别論述了這三個解決方案。
模型于19年10月初在首猜上線,在集團的各個業務場景下累計召回了幾萬張惡心圖檔。最新版的模型的精确率為95%,召回率為94%。
二、冷啟動方案
由于初始樣本量比較少,面臨冷啟動的問題。我們從首猜負回報資料裡拿到了幾百張惡心圖檔,并通過本團隊的小樣本召回平台,用圖像檢索的方法從淘寶内容池中召回了幾百張惡心圖檔,組成了最開始的訓練樣本。為了防止過拟合,我們采用了輕量級的網絡mobilenet v2。另外,我們通過半監督算法利用淘寶的無标簽資料進行訓練,提高模型的泛化能力。具體思想為:一個網絡的輸出可以被認為是,其中W是網絡參數,X是輸入圖檔。一個好的模型應該足夠魯棒,無論是W的擾動(本文稱為參數擾動)還是X的擾動(本文稱為輸入擾動),輸出都應該保持不變。訓練流程如下所示:
對于有标簽資料,對student網絡的輸出構造交叉熵損失函數,對于所有資料(無标簽+有标簽),對student網絡和teacher網絡(兩個網絡結構一緻)的輸出構造MSE損失函數。每次疊代的時候使用梯度下降法更新student網絡參數并使得teacher網絡的參數成為student網絡參數的滑動指數平均。(具體可參考論文《Mean teachers are better rolemodels:Weight-averaged consistency targets improve semi-supervised deeplearning results》)如下式所示:
在參數擾動上,我們使用的是上述公式中的滑動指數平均。在輸入擾動上,我們對student網絡和teacher網絡的輸入做了不同的資料增強。我們使用了随機翻轉,randomresizedcrop,random erasing等方法,在後來召回來的badcase中,發現有一部分召回來的負樣本是化了妝的嘴唇、眼部、臉部等,這些區域和某些惡心圖正樣本比較相似。是以嘗試了random_distort的方法,經過處理之後,類似的badcase基本消除。
三、算法疊代流程
線上上資料中,正負樣本的比例非常不均衡(遠低于千分之一),大部分都是各種各樣的正常圖檔,隻有少量的惡心圖。這意味着,即使模型在驗證集上能達到99%的準确率,剩下的1%的錯誤也會線上上被無限放大,而且線上還有很多訓練集裡沒出現過的負樣本。
在模型版本快速的更替中,我們采取了active learning,噪聲樣本識别,OHEM+級聯的疊代流程,如下圖所示。
1、active learning
在每次的版本疊代過程中,模型都會召回一批資料。在一開始資料量比較少的情況下,可以全部标注然後進行訓練。但是當資料變多了以後,一方面标注成本是非常巨大的,而另一方面根據curriculum learning的思想,應該讓模型的學習由易到難,先學習簡單的樣本,然後逐漸學習更難的樣本,提高難例樣本在訓練集的權重,這樣能夠加快模型的訓練,找到更好的局部最優。是以如果每次都将所有的召回樣本全部标注投入訓練,結果是吃力又不太讨好的。在此我們借鑒active learning的思想,去找出有标注價值的難例樣本。樣本選擇政策有兩方面:
(1)在每次召回來的樣本中,選擇置信度在以上的和在以下的樣本進行标注,挑選出前者中的負樣本和後者中的正樣本;
(2)在訓練時引入損失預測子產品,訓練的時候預測各個樣本的相對損失大小。通過該子產品對召回來的樣本進行loss預測,并取出排名靠前的樣本進行标注。
上面兩個政策都是挑選出難例樣本進行标注。選擇第一個政策是因為,一般情況下,我們希望模型對正樣本預測的置信度越高越好,希望模型對負樣本的置信度越低越好,而置信度在以上的負樣本和以下的正樣本對于模型來說都是難例樣本。實際中選擇的門檻值可以根據情況來進行調節。選擇第二個政策是因為,我們可以根據loss的大小來判斷是否是難例樣本,但是這些樣本都沒有現成的label,是以我們借鑒論文《learning loss for active learning》的方法,在訓練的時候加入一個損失預測(loss prediction,以下簡稱LP)子產品,來預測各個樣本的loss。
LP子產品從target prediction子產品(簡稱TP)的一些中間層抽取特征(使其特征更加豐富),組合起來用于loss預測。訓練流程為:每次一個batch進來B個樣本(B為偶數),将這B個樣本拆分成B/2個樣本對,分别送入TP子產品和下面的LP子產品。LP子產品的loss如下所示:
對于每個樣本對,LP子產品預測出來的loss的相對大小要與TP子產品預測出來的相對大小保持一緻,且絕對值要大于一定的門檻值,才會使loss等于0。TP子產品的loss在這裡就是Ground Truth。由于Ground Truth是随着訓練不斷變化的,直接對兩個子產品的輸出計算MSE損失函數會導緻效果非常差。而且在做inference的時候,并不需要知道每個樣本具體的loss大小,而隻需要知道他們的loss的排名。
在實際場景運用中,我們同時運用了置信度選擇和LP子產品兩個政策,并且線上上做了測試。結果如下:
每一行表示的是,從上一版的模型召回的資料中,用相應的政策選擇樣本,進行标注後加入訓練,然後相比于上一版的模型的精确率提升量和召回率提升量(注:本文所有的提升量都是指的絕對值)。最後一行是名額注全部資料,|代表取并集。從中可以看出,相比于最後一行,隻需要标注30%的資料(25%的資料和置信度選擇的資料取并集),就獲得大部分的精确率提升和召回數量提升。也就是說,後續performance的提升主要來源于這些難例資料,而在這個過程中可以減少約70%的标注量。
2、噪聲樣本識别
在解決業務問題時,我們總希望能獲得高品質的訓練樣本,而從業務場景中拿到的資料都含有一定比例的噪聲樣本,可能是因為标注規則不清晰,教育訓練不夠完善,或者是有一些邊界樣本,或者是其他的一些原因,即使是外包同學标注的資料往往也存在誤标的情況。如下圖所示,這些都被标注成了正樣本,如果将這些資料送入模型訓練,很容易造成誤殺。
在實驗中我們發現,如果不對噪聲樣本進行處理的話,無論怎麼改進算法本身,在驗證集的精度一直上不去,到達了一個瓶頸。
經過調研之後,我們發現,針對噪聲樣本問題,大緻有以下四種解決方案:
(1)多人标注後進行投票,這種方法能在根源上消除噪聲樣本,但是成本巨大;
(2)訓練時采取更大的batch size,這種方法能夠在一定程度上降低噪聲樣本帶來的影響,但是無法完全消除,而且容易受到計算資源的限制;
(3)設計一個noise-robust model,這種方法一般會設計特殊的網絡結構或者loss函數,來提高模型的抗噪性能,但是其設計往往過于複雜;
(4)通過噪聲樣本識别方法來識别出噪聲樣本并進行校驗,然後在幹淨的資料集重新訓練。
最終,我們選擇了上面第四種方案。我們使用本團隊發表在ICCV2019的論文《O2U-Net: A Simple Noisy Label Detection Approachfor Deep Neural Networks》。其基本思想為:在訓練過程中循環調整學習率,使得模型在過拟合和欠拟合狀态間反複切換。突然增大學習率,使得網絡跳出局部最優,進入欠拟合狀态,此時噪聲樣本産生的loss較大,而幹淨樣本的loss偏小,随着訓練,學習率衰減,網絡慢慢進入過拟合狀态。此時噪聲樣本和幹淨樣本的loss都很小。在此過程中噪聲樣本的loss的均值和方差都比幹淨樣本大。論文中學習率和樣本loss的周期性變化如下圖所示:
網絡的訓練分為三步:
(1)pre-training階段。學習率設為正常值,訓練直到在驗證集的accuracy達到穩定。
(2)循環學習率階段。
(3)對疑似噪聲樣本進行校驗,在幹淨的資料集上重新訓練。
我們對loss均值排名前5%的疑似噪聲資料重新進行了标注。發現其中有約71%的是錯标的噪聲樣本(其他的是難例樣本),将這些噪聲樣本重新标注後加入訓練集訓練,在驗證集的精度提高了0.74%,線上上的精确率提高了約8%。從此可以看出,驗證集的一個小的進步可以線上上改進很多,反之一個小的錯誤線上上會被放大很多倍。
3、OHEM +級聯
在資料量達到一定的規模之後,此時mobilenet_v2的performance表現非常疲軟,線上上的結果表明,densenet的精确率比mobilenet_v2高5個百分點,于是我們果斷切到了densenet。另一方面,面臨樣本不平衡問題,如何保證精确率達到90%以上,同時要保證召回率,就構成一個挑戰。我們調研了一些處理樣本不平衡問題的方法。其中,我們注意到目标檢測領域的經典的adaboost+cascade的算法。目标檢測領域裡會生成很多候選區域,是以會産生很多負樣本。用adaboost算法建構強分類器,然後将多個分類器級聯就可以使大部分正樣本通過的同時拒絕掉幾乎所有的負樣本。在我們的業務場景下,我們采用了OHEM(online hard example mining)+級聯的方法,如下圖所示:
在訓練的時候,第一個網絡densenet161的batch size為A,然後将其loss最大的B個樣本,送入到第二個網絡resnet50進行訓練。這樣每次第二個網絡學習到的是第一個網絡覺得比較難的樣本。在inference的時候,對兩個模型的結果取與。第二個網絡選擇resnet50是因為其表現優異,在驗證集的精度隻比densenet161低0.2%,之是以不選擇同系列更大的網絡是為了防止過拟合。另一方面,OHEM算法本身就可以處理樣本不平衡問題,是以不需要像某些two stage的目标檢測算法,在第一個網絡中設定1:3的超參數來進行欠采樣。
采用級聯的方法後,線上上的精确率和召回率的變化見下表。相比于單網絡densenet161,精确率提高了21%,召回率降低了4.3%。
四、attention機制
惡心圖大緻可以分為三類。第一種類型是跟動物有關的,包括各種令人感到驚悚的爬行動物(從無腿的到無數條腿的都有),昆蟲,以及一些顔色鮮紅的死體活體,動物内髒等。第二種類型,是跟人有關的,展示的是人體的各個醜陋、病态的部位。如過度肥胖,髒牙齒,臉部、鼻子、身體、手腳等各種皮膚問題。第三種是其他類型,即一些物體,包括驚悚的衣服、模型,髒亂的洗衣機、房間,馬桶等。(下圖高能,可直接跳過)
惡心樣本多種多樣,樣本的特征分布非常分散。我們分析樣本後觀察到,大部分圖檔都是某個或者某幾個局部區域表現出令人惡心的特征,而不是全局都呈現出惡心的特征。是以針對各種各樣的惡心圖,如何讓模型focus到這些局部的惡心區域,對于提高模型的performance和泛化能力至關重要。我們首先調研了論文《Learning Deep Features for DiscriminativeLocalization》,作者将分類網絡中最後的全連接配接層換成了GAP(Global average pooling)層,針對某一個類别,将最後一次卷積操作得到的feature map與其權重進行累加求和,于是就得到了這個類别的class activation map(CAM),如下圖所示:
CAM反映了這個類别關注圖檔中的哪個區域。那麼反過來,如果我們能夠調整各個feature map的權重,對每個通道進行權重,那麼就能夠調整網絡所關心的區域。另一方面,卷積操作本身涉及到通道和空間兩個次元,我們不僅可以對每個通道的特征進行權重,也可以對每個空間位置的特征進行權重。是以我們采用了下圖的方案。
我們在網路的基礎block中嵌入了上圖中的attention block。其中,每個attentionblock由一個channel attention module和一個spatial attention module組成。(具體實作細節可參考《CBAM:Convolutional Block Attention Module》)。我們使用Grad-CAM的方法,利用梯度資訊對網絡關注的特征進行了可視化,如下圖所示(高能,可直接跳過),反映出模型focus在惡心的區域上。
五、業務結果
目前,我們的惡心圖模型已經在首猜上線,持續掃描首猜的增量商品池。主要取得的業務結果如下:
(1)在今年雙十一的前兩天,對首猜的全量商品池進行掃描,為雙十一期間消費者購物體驗的提升作出了貢獻;
(2)對便宜好貨和阿裡媽媽的廣告圖檔進行掃描,營運根據掃描結果進行手動商品下線;
(3)最新一版的模型在首猜達到了95%的精确率,召回率為94%。
目前,惡心圖的精确率和召回率都達到了要求。在圖像品質次元上,淘寶對素材品質有以下訴求:
(1) 電商圖像資訊表達準确度要高(賣家秀和買家秀差異吐槽,誤導購買的平台風險)
(2) 高品質圖檔的轉化效率更高;
(3) 不同場景營運标準和顆粒度差異。
是以,我們打造了一個水滴平台,對于各個業務方關注的圖像品質問題,比如清晰度、牛皮癬、拼接圖、白底圖、多主體、插畫圖、純色背景圖、低俗、惡心圖等等,利用各任務間的共享特征、以及海量的無标簽資料,通過multi-task learning提高圖像任務的識别精度同時加快模型疊代的效率、減少資料标注量。目前已用于素材品質檢測、基于視覺的自動化測試、基礎處理(空窗、天坑、錯誤頁)等方面。
參考資料:
1、《MobileNetV2: Inverted Residuals and Linear Bottlenecks》
2、《Mean teachers are better role models:Weight-averaged consistencytargets improve semi-supervised deep learning results》
3、《Learning Loss for Active Learning》
4、《O2U-Net: A Simple Noisy Label Detection Approach for Deep NeuralNetworks》
5、《Training Region-Based Object Detectors With Online Hard ExampleMining》
6、《Deep Residual Learning for Image Recognition》
7、《Densely Connected Convolutional Networks》
8、《Squeeze-and-Excitation Networks》
9、《CBAM: Convolutional Block Attention Module》
10、《Learning Deep Features for Discriminative Localization》
11、《Grad-CAM:Visual Explanations from Deep Networks viaGradient-based Localization》
開放下載下傳!《5G+AI 阿裡文娛技術實踐》
從優酷窄寬高清革新布局,到大麥物聯網的實踐之路;從文娛内容認知的AI大腦,到互動式的6DoF視訊技術。
5G時代來臨,阿裡文娛如何用新技術開拓從制作、宣發到使用者的全方位體驗提升,這本書裡給你答案!識别下方二維碼即可下載下傳!