多图文帖智能封面提取方案
導(dǎo)語?一個帖子在用戶點進去觀看之前,能被用戶捕捉到的信息只有封面縮略圖、標(biāo)題、作者等少量信息,這些因素直接決定了用戶是否愿意點擊該帖。一個好的封面能明顯提高用戶的點擊欲,而對于不少UGC內(nèi)容的帖子,用戶也不會去指定封面,這時智能提取封面就顯得尤為重要。
對于資訊類App,從文章的配圖中選擇1-3張圖片并裁剪出適合區(qū)域作為封面,是一種很常見的場景。這里會涉及到兩個問題:如何從多張圖片中選擇質(zhì)量較高的前幾張圖作為封面?挑選出來的圖片寬高比可能與封面要求的比例不符,如何從圖中裁剪出適合的區(qū)域呈現(xiàn)給用戶?
本文主要跟大家分享一下我們團隊最新開發(fā)的智能封面提取方案。
針對以上需求,我們提出了一種多圖文帖的封面提取方案,其主要流程如下:
可以看到單張圖片處理的流程主要包括人臉檢測、顯著性檢測、區(qū)域提名和區(qū)域打分(其中長圖分割屬于異常流程,非必經(jīng)主流程)。通過人臉檢測和顯著性檢測技術(shù)來提名候選區(qū)域是比較有效的聚集方法,可以讓我們快速地找到圖片中的“重點”,過濾掉一些無用信息。
在前兩步檢測的基礎(chǔ)上,通過提名算法,我們會選取出多個候選區(qū)域作為備選封面,最后再用打分模型對候選區(qū)域進行美學(xué)打分,輸出高分區(qū)域作為這張圖的最適區(qū)域。
在我們的應(yīng)用場景波洞星球App中有許多長圖,每張長圖是由多張小圖片組合而成,例如一張長漫畫可能包含多畫圖片。因此在單張圖片提取之前,我們會先檢測圖片是否為長圖,如果是長圖,則先對其進行分割操作,分割后的結(jié)果再走后續(xù)流程。
對于多張圖片的最終封面選取,我們首先會依次對每張圖片進行封面提取,同時得到該封面對應(yīng)的得分。然后對得到的所有封面按分值進行排序,再通過相似度檢測算法對相似封面進行抑制。最后,選取Top-N作為最終的帖子封面。
下面我們分模塊說一下各自的實現(xiàn)原理。?
在人臉檢測中,我們用的是經(jīng)典的yolov3模型。由于模型適用的場景不只需要檢測真人人臉,還有很大一部分是動漫人物的人臉。動漫人物與真人存在許多差異,例如人物可能是簡筆畫風(fēng)格、人物的身材比例失真、五官缺失等等(見下圖)。因此我們對重新訓(xùn)練了模型對得到新的權(quán)重。我們收集了約3萬張圖片作為訓(xùn)練集,其中包含了來自WiderFace數(shù)據(jù)集的1萬多張圖片,Danbooru2018數(shù)據(jù)集的1萬多張動漫人物圖片以及從波洞星球上收集的6千多張動漫和Cosplay圖片。驗證集4500多張,測試集2800多張(動漫人物與真人各一半)。
最終模型在測試集上的召回率為97.88%,精準(zhǔn)率為99.08%。
動漫人物上的檢測效果:
在觀看一張圖片時,人眼自動地對聚集到感興趣區(qū)域上而選擇性地忽略不感興趣區(qū)域,這些人們感興趣區(qū)域被稱之為顯著性區(qū)域。目前顯著性檢測算法主要分成兩大類:傳統(tǒng)算法和基于深度學(xué)習(xí)的算法。深度學(xué)習(xí)算法由于復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)和計算量,一般會比傳統(tǒng)算法耗時更長一些,但是效果也會好一些。由于顯著性檢測只是作為提名的一個參考依據(jù),不需要十分準(zhǔn)確,所以封面提取模型使用了性能更好的傳統(tǒng)算法。我們在傳統(tǒng)的FT算法上做了改進,檢測的過程主要有以下幾個步驟:
1、對圖像做高斯平滑,去掉高頻信息。對顯著性檢測來說,細節(jié)信息顯得沒那么重要,相反低頻信息更有價值。
2、在Lab色彩模式下,計算每個像素點與均值的歐氏距離,該距離與該點的顯著性直接正相關(guān)。因為與均值距離更遠,說明該點更加“與眾不同”,更容易被人眼捕獲。
3、對2中得到的結(jié)果作歸一化,將取值限定在0~255之間,然后用三個不同閾值分別對其進行二值化處理,這樣一共可以得到三張二值圖片。之所以要用三個閾值是因為很難找到一個通用的經(jīng)驗閾值可以適合不同圖片。
4、用漫水填充算法將這三張二值圖的邊緣附近的噪點去掉。
5、將三張二值圖上的同一個像素點求和并作歸一化處理,得到的即為最終的顯著圖。
下面對比了改進FT算法和幾種常見顯著性檢測算法的效果以及耗時:
不同算法得到的顯著圖
在CPU環(huán)境下的各算法耗時:
算法 | 耗時(ms) |
Improved Frequency-Tuned(IFT) | 150 |
Frequency-Tuned(FT) | 120 |
Minimum Barrier detection(MBD) | 1880 |
Robust Background Detection(RBD) | 3660 |
Deeply Supervised Salient Object Detection (DSS) | 1510 |
?
區(qū)域提名在獲取到圖片的人臉信息以及顯著性信息后,下一步要做的就是根據(jù)這兩個基準(zhǔn)信息做區(qū)域提名。通過區(qū)域提名模塊,我們可以挑選出多個候選區(qū)域,再由后續(xù)打分模塊選出最佳區(qū)域。區(qū)域提名主要解決了兩個問題:
1、在同一張圖內(nèi)可能會有多個人臉以及多個顯著區(qū)域,當(dāng)這些區(qū)域比較分散時,一個裁剪框可能無法包含所有的內(nèi)容,這時如果隨機選擇其中一個可能會錯失最佳區(qū)域。
2、即使這些區(qū)域較為集中,也會存在不同布局帶來美觀程度上的變化。區(qū)域提名的方式避免了“一刀切”可能帶來的badcase,進一步提高了截圖的準(zhǔn)確性。
區(qū)域提名采用的是一種基于權(quán)重的提名機制。
首先,生成mask矩陣(M)。我們會用人臉信息和顯著性信息分別生成兩個mask矩陣(Mf和Ms),矩陣大小與原圖保持相同(實際為了節(jié)省運行開銷,可以作等比例resize),將有信息區(qū)域的值設(shè)為m(m為常數(shù),人臉信息權(quán)重較高m=10,顯著性區(qū)域信息權(quán)重較低m=1),并將mask四條邊框置0(為避免懲罰因子影響,下文講到)。這時可以得到兩張掩碼圖(無人臉時只有顯著性mask):
然后,生成權(quán)重矩陣(W)。權(quán)重矩陣表征的是裁剪框中每個位置所占的比重,它的大小與最終裁剪區(qū)域的大小相同(用WxH表示)。假設(shè)要從一張1280x720的圖片中裁剪出一個800x800大小的區(qū)域,那么W即為800x800的矩陣。權(quán)重矩陣有幾個參數(shù):邊框懲罰因子k,邊緣衰減因子alpha,以及半衰長度L。為簡化說明,下面以一個8x8的權(quán)重矩陣為例。
在下圖的權(quán)重矩陣中,外圍點的取值由邊框懲罰因子k乘以-1后得到,它的作用是在圖像區(qū)域提名過程中對裁剪到人臉框或是顯著區(qū)域的情況進行抑制。由于Mf的m值更大,所以抑制會更加明顯,幾乎不會出現(xiàn)把人臉切開的情況。
矩陣中心的Wi取值由邊緣衰減因子alpha和半衰長度L共同決定。對人眼而言,中心區(qū)域往往會比邊緣區(qū)域更容易被注視到,因此我們把矩陣按“井”字型劃為9個子區(qū)域,每個子區(qū)域共享一個權(quán)重。在實際操作中,中心區(qū)域共享同一個權(quán)重W1,左上、右上、左下、右下的4個區(qū)域共享一個權(quán)重W3,其余區(qū)域共享權(quán)重W2。半衰長度L表示中心區(qū)域的長度,在下圖中L=2。在超出半衰長度后,權(quán)重從W1衰減到W2,衰減大小等于衰減因子的一半,即
W3是全衰減的結(jié)果
一般地,將W1設(shè)為1作為基準(zhǔn);alpha取值在(0.8,1]之間,為1時表示不啟用衰減;k取值在[2W1, 4W1]之間。
權(quán)重矩陣
得到權(quán)重矩陣W以后,可以用W根據(jù)一定步長對疊加后的掩碼矩陣M(Mf+Ms)做2D卷積,得到提名矩陣:
過程類似卷積神經(jīng)網(wǎng)絡(luò)中的卷積層,此處不再贅述。
最終的提名矩陣是一個二維矩陣,每一點的值代表其所表示起始點所獲得的提名權(quán)重,數(shù)值越大,說明位于該點的裁剪越好,我們從中挑選出Top-N個候選區(qū)域輸入到區(qū)域打分模塊。
注:從提名矩陣中選值會可能會碰到多個連續(xù)的極大值點,這時我們會選擇中心點,并對附近點作近鄰抑制,保證提名區(qū)域不會太過相似。由于篇幅關(guān)系,這里不展開細說。
由權(quán)重矩陣提名的Top-2區(qū)域
?
區(qū)域打分區(qū)域打分的作用是從候選區(qū)域中選擇最佳的區(qū)域作為最終裁剪區(qū)域,打分綜合考慮截圖區(qū)域的美觀程度、清晰度和內(nèi)容完整程度(后統(tǒng)稱為美學(xué)得分)。這里用到的是深度學(xué)習(xí)的方法,我們選用了模型相對較小的SqueezeNet網(wǎng)絡(luò)。
SqueezeNet用FireModule的網(wǎng)絡(luò)架構(gòu)來進行模型壓縮,FireModule先用1x1卷積對上一expand層的輸出進行降維操作,降低參數(shù)數(shù)量,然后再分別用1x1卷積和3x3卷積結(jié)合提取特征,padding使得輸出維度相同后concat拼合。這樣可以使模型參數(shù)有效地減少,整個模型大小僅有1.5M左右,運行速度較快。
FireModule結(jié)構(gòu),圖片來自網(wǎng)絡(luò)
我們從動漫、真人以及風(fēng)景場景中共搜集了5萬張左右的訓(xùn)練樣本,按產(chǎn)品需求將其按分為5類,對應(yīng)1~5分的美學(xué)得分。模型最后取輸出向量的加權(quán)平均分作為圖片的美學(xué)得分。在第一版本的模型中,我們只區(qū)分了內(nèi)容完整度,對內(nèi)容布局上的美觀程度區(qū)分不明顯,在第二版本優(yōu)化模型中,我們加入了對圖片子等的預(yù)測,效果得到明顯提升。目前,CPU環(huán)境下單幀打分耗時約為40ms。
上一輪提名的兩張圖片的打分結(jié)果分別為4.73分(頭部略有些不完整)和5.0分(完美),因此最終會選擇右圖作為最終的裁剪方案。
訓(xùn)練過程中的其他設(shè)置:使用EMD推土距離作為損失函數(shù),采用階梯衰減的學(xué)習(xí)率(初始為3e-4)來加快訓(xùn)練過程,梯度下降優(yōu)化算法使用Adam。
在波洞星球App中有大量的長圖,如果不加以分割可能會造成幾個問題:首先,人臉檢測的輸入尺寸是416x416,長圖下采樣到這個尺寸后已經(jīng)無法檢出人臉;其次,在顯著性檢測中多耗費大量計算資源;再次,區(qū)域提名可能越過長圖邊界截到下一張圖的區(qū)域。
長圖分割主要有以下幾個步驟,核心思想是在二值圖像上尋找相鄰的凸包并進行合并。
圖片分割效果如下:
?
最終提取效果我們選取了波洞星球上的1945組真實帖子圖片作為測試集,采用按Group的形式提取圖片,若帖子圖片多于3張則從中提取3張子圖片作為封面,若帖子圖片少于3張,則提取相應(yīng)張數(shù)的圖片作為封面,同一Group有一張封面不好時即視為badcase。經(jīng)統(tǒng)計,新算法提取封面的準(zhǔn)確率為81%,舊算法準(zhǔn)確率73%,提升了8%。長圖場景下,新算法的表現(xiàn)得更加突出,在160張長圖中,新算法準(zhǔn)確率88%,相比舊算法57%的準(zhǔn)確率提高了31%。
可以看兩組新舊算法提取的封面效果感受一下:
第一組:
舊算法
新算法
第二組:
舊算法
新算法
?
總結(jié)與感謝封面提取方案在動漫、Cosplay、風(fēng)景等多種場景下都有較好的表現(xiàn),目前波洞星球App已經(jīng)在接入,后續(xù)我們會持續(xù)優(yōu)化模型,也歡迎大家留言討論。
總結(jié)
以上是生活随笔為你收集整理的多图文帖智能封面提取方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘿,你有没有发现我今天有什么不同?
- 下一篇: 腾讯开源国际化新突破,将紧密参与全球开源