超详细!百度富媒体检索比对系统的关键技术
導(dǎo)讀:百度富媒體檢索比對(duì)系統(tǒng)是一套基于 Ann(approximate nearest neighbor)檢索和內(nèi)容特征比對(duì)技術(shù),旨在提供針對(duì)圖像、音頻、視頻等多媒體資源的相似檢索系統(tǒng)。包括離線訓(xùn)練、建庫(kù),在線特征提取、檢索。目前百度富媒體檢索比對(duì)系統(tǒng)除了承接了百度 FEED 所有視頻、圖像的反作弊、下發(fā)去重以及關(guān)聯(lián)推薦和黃反等業(yè)務(wù),另外還支持了包括視頻搜索、貼吧、文庫(kù)在內(nèi)的數(shù)十個(gè)業(yè)務(wù)方,支撐了千億級(jí)數(shù)據(jù)規(guī)模。在數(shù)據(jù)規(guī)模、系統(tǒng)性能、召回率和準(zhǔn)確度上都處于領(lǐng)先地位。
01 背景
隨著互聯(lián)網(wǎng)和 AI 技術(shù)的發(fā)展,網(wǎng)絡(luò)信息的主要傳輸媒介,已經(jīng)從傳統(tǒng)的網(wǎng)頁(yè)文字發(fā)展到圖片、視頻、音頻等資源,相對(duì)純文字的網(wǎng)頁(yè),富媒體內(nèi)容能傳遞更多的信息量,同時(shí)也帶來(lái)更新的用戶體驗(yàn)。隨著富媒體內(nèi)容急劇爆發(fā), 理解這些實(shí)體內(nèi)容,找到他們之間的相似關(guān)系,不僅能夠?qū)@些富媒體內(nèi)容進(jìn)行篩選和處理,還可以更好的被推薦和搜索引擎理解,更好的服務(wù)用戶。
得益于神經(jīng)網(wǎng)絡(luò)的飛速發(fā)展,多媒體數(shù)據(jù)的檢索問(wèn)題通常可以轉(zhuǎn)化為高維向量的相似性檢索, 采用 CNN(Convolutional Neural Network)的各種特征來(lái)描述這些多媒體資源的語(yǔ)義信息,基于 CNN 特征向量,將 query 與庫(kù)中所有數(shù)據(jù)進(jìn)行相關(guān)性計(jì)算,檢索出相關(guān)的結(jié)果集。以圖像為例,我們首先會(huì)對(duì)存量圖像,進(jìn)行收錄、篩選,計(jì)算它們的 CNN 特征,然后把這些 CNN 進(jìn)行建庫(kù)。當(dāng)輸入 query 圖像,需要從歷史庫(kù)中檢索出與之相似或相同的圖像時(shí),我們首先計(jì)算 query 圖像的 CNN 特征,然后與歷史庫(kù)中的全量 CNN 特征進(jìn)行計(jì)算(通常計(jì)算歐式或 cosin 距離),選取距離最近的 topk 個(gè)圖像作為召回結(jié)果。通常情況下,我們還會(huì)提取圖像的視覺描述信息,來(lái)進(jìn)行輔助后校驗(yàn),進(jìn)一步提升召回的準(zhǔn)確率。視頻檢索比對(duì)與圖像類似,是在圖像的基礎(chǔ)上增加了關(guān)鍵幀的抽取,以及召回圖像幀序列以后,會(huì)進(jìn)行視頻和音頻級(jí)別的比對(duì)。
△圖 1. 視頻檢索比對(duì)方法
基于 CNN 特征向量的數(shù)據(jù)檢索,數(shù)據(jù)量大、特征維度高以及要求響應(yīng)時(shí)間短。隨著多媒體數(shù)據(jù)的快速增長(zhǎng),圖像幀的數(shù)據(jù)量已經(jīng)達(dá)到千億甚至萬(wàn)億級(jí)別,在這種大規(guī)模數(shù)據(jù)集的檢索上,傳統(tǒng)的暴力計(jì)算雖然能滿足準(zhǔn)確度的需求,但是在計(jì)算資源和檢索時(shí)間的消耗上是巨大和無(wú)法接受的。為了降低搜索的空間復(fù)雜度與時(shí)間復(fù)雜度,在過(guò)去的十幾年里研究者們找到了一種可供替代的方案:近似最近鄰(Approximate Nearest Neighbor)檢索方法。它們往往通過(guò)對(duì)向量集合進(jìn)行預(yù)處理,生成一些可以用來(lái)指導(dǎo)查找過(guò)程的知識(shí),在查找時(shí)以犧牲一定精度的方式加速查找過(guò)程。
02 整體架構(gòu)
百度富媒體內(nèi)容比對(duì)系統(tǒng),是一套包括離線 ANN 訓(xùn)練、建庫(kù)和模型訓(xùn)練,在線特征預(yù)估、檢索比對(duì)等功能在內(nèi)的通用多媒體資源檢索比對(duì)系統(tǒng),處理的資源包括圖像、視頻和音頻。
△圖 2. 整體架構(gòu)
- cnn-service: 用來(lái)提取資源特征的模塊,包括圖像、視頻和音頻三種類型資源的特征提取;
- feature-sevicez: 統(tǒng)一特征模塊,提供統(tǒng)一特征提取和緩存功能,對(duì)上層隱藏異構(gòu) cnn 特征,可配置化訪問(wèn)指定cnn-service;
- vs-image: 召回前,訪問(wèn) feature-service 計(jì)算 query 的特征,然后請(qǐng)求 as 獲取 ann檢索召回結(jié)果,進(jìn)行視頻和音頻級(jí)別的比對(duì);
- bs: Ann 索引服務(wù),通過(guò) cnn 特征,計(jì)算 topk召回,然后進(jìn)行視覺特征后校驗(yàn),最終得到召回結(jié)果。支持多分片和分片的自動(dòng)更新、擴(kuò)容;
- as: 支持 bs 多分片的并發(fā)訪問(wèn)和異構(gòu)索引的檢索 merge;
- finger-builder: 資源入庫(kù)統(tǒng)一入口,獲取資源 cnn 特征數(shù)據(jù),并寫入 afs;
- index-builder: 定時(shí) ann 索引建庫(kù);
03 應(yīng)用場(chǎng)景
B 端反作弊
- 作者上傳、抓取視頻全覆蓋
- 每天過(guò)濾 60%+的重復(fù)視頻,減輕審核壓力
- 高準(zhǔn)確率,嚴(yán)格反作弊
- 百家號(hào)發(fā)文、UGC、小程序、貼吧等
C 端下發(fā)去重
- 用戶體驗(yàn)
- 原創(chuàng)保護(hù),生態(tài)建設(shè)
關(guān)聯(lián)推薦
- 短帶長(zhǎng),引入廠外長(zhǎng)視頻資源,可為用戶關(guān)聯(lián)當(dāng)前視頻的完整版
風(fēng)控
- 涉政、黃反等敏感資源的識(shí)別和屏蔽
△圖 3. 業(yè)務(wù)應(yīng)用
04 關(guān)鍵技術(shù)
1、ANN
ANN 搜索方法通過(guò)將全空間分割成很多小的子空間,在搜索的時(shí)候,通過(guò)某種方式,快速鎖定在某一(幾)子空間,然后在該(幾個(gè))子空間里做遍歷,從而達(dá)到次線性的計(jì)算復(fù)雜度。正是因?yàn)榭s減了遍歷的空間大小范圍,從而使得 ANN 能夠處理大規(guī)模數(shù)據(jù)的索引。常見的 ANN 檢索算法有:
- 基于樹的方法:經(jīng)典實(shí)現(xiàn)為 KD-Tree、Annoy 等。Annoy的核心是不斷用選取的兩個(gè)質(zhì)心的法平面對(duì)空間進(jìn)行分割,最終將每一個(gè)區(qū)分的子空間里面的樣本數(shù)據(jù)限制在 K以內(nèi)通過(guò)將空間按維度進(jìn)行劃分,縮小檢索范圍的方法來(lái)加速,適用于空間維度較小的情況。
- 基于 Hash 的方法:經(jīng)典實(shí)現(xiàn)為 LSH、PCAH 等,LSH的核心思想是:在高緯度空間相鄰的數(shù)據(jù)經(jīng)過(guò)哈希函數(shù)的映射投影轉(zhuǎn)化到低維空間后,他們落入同一個(gè)吊桶的概率很大而不相鄰的數(shù)據(jù)映射到同一個(gè)吊桶的概率很小。在檢索時(shí)將歐式空間的距離計(jì)算轉(zhuǎn)化到漢明空間,并將全局檢索轉(zhuǎn)化為對(duì)映射到同一個(gè)吊桶的數(shù)據(jù)進(jìn)行檢索,從而提高了檢索速度
- 矢量量化方法:PQ、OPQ 等,PQ的主要思想是將特征向量進(jìn)行正交分解,在分解后的低維正交子空間進(jìn)行量化,采用較小的碼本進(jìn)行編碼,從而降低存儲(chǔ)空間。
- 基于倒排索引的方法:IVF、IMI、GNO-IMI 等。
- 基于圖的方法:NSW、HNSW、NSG 等。
2、GNOIMI
GNOIMI(The Generalized Non-Orthogonal Inverted Multi-Index)是百度內(nèi)自研實(shí)現(xiàn)的 ANN 檢索引擎,它通過(guò)聚類的方式將空間分割成許多子空間。在檢索的時(shí)候,通過(guò)某種方式,快速鎖定在某一(幾)子空間,然后在該(幾個(gè))子空間里做遍歷,從而達(dá)到次線性的計(jì)算復(fù)雜度。
CNN 特征通常特征維度高,保存全量數(shù)據(jù)特征所需內(nèi)存與樣本數(shù)據(jù)量成正比。對(duì)于千萬(wàn)級(jí)以上的數(shù)據(jù)集,通常面臨內(nèi)存受限的問(wèn)題。GNOIMI 使用 PQ 乘積量化的方法,用一個(gè)有限子集對(duì)全量特征空間進(jìn)行編碼,達(dá)到大幅的降低內(nèi)存消耗的目的。
1.訓(xùn)練
1)空間分割
GNOIMI 使用聚類的方法對(duì)訓(xùn)練集特征向量空間進(jìn)行分割。
用戶保證原始特征數(shù)據(jù)無(wú)重復(fù),從原始數(shù)據(jù)中隨機(jī)抽樣。抽樣數(shù)據(jù)集個(gè)數(shù)小于等于 500w,
。
對(duì)抽樣樣本進(jìn)行 KMEANS 聚類,得到初始的一級(jí)聚類中心
。計(jì)算抽樣本與其所屬一級(jí)子空間聚類中心的殘差向量,在殘差向量上進(jìn)行 K-means 聚類,將殘差向量空間分為 L 個(gè)子空間,得到二級(jí)聚類中心碼本
。一二級(jí)聚類中心將整個(gè)數(shù)據(jù)空間分割為個(gè)子空間(cell),每個(gè) cell 的聚類中心點(diǎn)定義為
。任一訓(xùn)練集樣本特征向量所屬的 cell,滿足
。
空間分割如圖 4 所示,所有一級(jí)聚類中心共享二級(jí)聚類中心。
△圖 4
因?yàn)槎?jí)聚類中心使用的是全量原始特征的殘差向量,因而認(rèn)為二級(jí)聚類中心在每個(gè)一級(jí)子空間內(nèi)分布相似,全量原始特征數(shù)據(jù)共享二級(jí)聚類中心。這種方法被稱為 NO-IMI(The Non-Orthogonal Inverted Multi-Index)。藍(lán)色點(diǎn)為一級(jí)聚類中心點(diǎn),紅色點(diǎn)為個(gè) cell 的聚類中心點(diǎn)。顯然,cell 的形狀和大小需根據(jù)數(shù)據(jù)分布可變,尤其是在全量特征數(shù)據(jù)空間同時(shí)存在稀疏和密集區(qū)域時(shí)。引入?yún)?shù)矩陣,cell 的聚類中心點(diǎn)定義為。引入?yún)?shù)矩陣后 cell 分布如圖 5 所示,cell 的形狀和大小根據(jù)實(shí)際數(shù)據(jù)分布可變,空間分割更符合一級(jí)子空間內(nèi)數(shù)據(jù)分布情況。參數(shù)矩陣是有全量數(shù)據(jù)計(jì)算得到的,因而更準(zhǔn)確的描述數(shù)據(jù)分布,稱這種方法為 GNO-IMI。
△圖 5
2)乘積量化
計(jì)算抽樣數(shù)據(jù)集中樣本所屬于的一二級(jí)距離中心,得到樣本與一二級(jí)聚類中心的殘差數(shù)據(jù)集。將殘差數(shù)據(jù)集分為 nsq 個(gè)空間,每個(gè)子空間特征維度為 feature_dim/nsq,每個(gè)子空間分別進(jìn)行 KMEANS 聚類,得到 256 個(gè)聚類中心(一個(gè) char 占 8bit,可用一個(gè) char 字長(zhǎng)標(biāo)記所有的聚類中心 ID),得到每個(gè)子空間的碼本。將 nsq 個(gè)子空間的子碼本做笛卡爾積,得到整個(gè)數(shù)據(jù)集的 PQ 碼本。
2.建庫(kù)
計(jì)算原始特征向量數(shù)據(jù)集中樣本所屬的一二級(jí)聚類中心。
計(jì)算原始特征向量數(shù)據(jù)集中樣本與其所屬的一二級(jí)聚類中心的殘差。將殘差向量分為 nsq 個(gè)子空間,在每個(gè)子空間內(nèi),計(jì)算該子特征向量距離最近的聚類中心并記錄聚類中心 ID,將 feature_dim 維度的特征向量映射為 nsq 個(gè)聚類中心的 ID,可用 nsq 個(gè)聚類中心 ID 標(biāo)識(shí)該特征向量。通常取 nsq = feature_dim 進(jìn)行四分之一量化,feature_dim * sizeof(float) -> nsq *sizeof(char)。
在檢索過(guò)程中,將 query 與該樣本在每個(gè)子空間內(nèi)的距離,轉(zhuǎn)化為與該樣本距離最近的聚類中心的距離。因而,在檢索過(guò)程中,無(wú)需加載原始特征向量,可降低檢索過(guò)程中所需要的內(nèi)存。
3.檢索
特征進(jìn)行歸一化;
計(jì)算 query 與一級(jí)聚類中心的距離并排序;
計(jì)算 query 與前 gnoimi_search_cells 個(gè)一級(jí)聚類中心下的二級(jí)聚類中心的距離并排序,共計(jì) gnoimi_search_cells * gnoimi_fine_cells_count 個(gè)二級(jí)聚類中心;
以優(yōu)先隊(duì)列的方式,從最近的二級(jí)聚類中心開始,依次取出其下的樣本,并計(jì)算 query 與這些樣本的距離,取滿 neighbors_count 個(gè)為止;
排序后返回 topK 個(gè)樣本和對(duì)應(yīng)的距離
4.實(shí)現(xiàn)
ANN 的算法本身并不算復(fù)雜,難點(diǎn)主要在實(shí)現(xiàn)上,GNOIMI 做了大量實(shí)現(xiàn)優(yōu)化,簡(jiǎn)要介紹如下:
1)設(shè)計(jì)新的訓(xùn)練方案,重新組織一二級(jí)聚類中心的關(guān)系,在召回率略微提升的前提下,訓(xùn)練速度提升 1000%。
2)對(duì)于 L2/COS 距離空間下,任意三點(diǎn)滿足三角不等式;在建庫(kù)階段,根據(jù)該特質(zhì),利用樣本、一級(jí)聚類中心和二級(jí)聚類中心之間的兩兩距離進(jìn)行剪枝,可降低 95%+的計(jì)算量,建庫(kù)速度提升 550%+。
3)訓(xùn)練 &建庫(kù)所需內(nèi)存大大降低,僅為 Faiss-IVF*和 nmslib-HNSW 的 10%。
4)在檢索階段,空間分割規(guī)模超過(guò)千萬(wàn),計(jì)算 query 與二級(jí)聚類中心過(guò)程中,設(shè)計(jì)新的計(jì)算 &排序邏輯,將百萬(wàn)級(jí)聚類中心的計(jì)算 &排序時(shí)延控制在 2ms 內(nèi),降低 20 倍。計(jì)算 query 與樣本距離時(shí),優(yōu)化 PQ 量化計(jì)算過(guò)程,降低 800%+的計(jì)算量,整體吞吐提升 30%+。
5.應(yīng)用
GNOIMI 與 IVF*比較時(shí),使用相同聚類中心個(gè)數(shù)及檢索 doc 個(gè)數(shù)下,比較檢索時(shí)間、召準(zhǔn)和內(nèi)存;與 HNSW 比較時(shí),在相同檢索時(shí)間下,比較召準(zhǔn)和內(nèi)存。
經(jīng)過(guò)測(cè)評(píng),百萬(wàn)數(shù)據(jù)量級(jí)相同檢索時(shí)間內(nèi) GNOIMI 效果略低于 HNSW,遠(yuǎn)超 ivf,內(nèi)存占用極小,HNSW 效果最優(yōu),但內(nèi)存消耗最多。隨著數(shù)據(jù)增多,維度增大,相同檢索時(shí)間內(nèi) GNOIMI 效果相比其他更優(yōu),內(nèi)存保持低增長(zhǎng)。
目前 GNOIMI 廣泛應(yīng)用于百度內(nèi)各種場(chǎng)景,包括視頻比對(duì)、圖片/視頻檢索、FEED 等等場(chǎng)景,支撐規(guī)模上千億特征,每天 PV 過(guò) 10 億
3、HNSW
HNSW(Hierarchical Navigable Small World)是 ANN 搜索領(lǐng)域基于圖的算法。它的前身是 NSW (Navigable-Small-World-Graph) 。NSW 通過(guò)設(shè)計(jì)出一個(gè)具有導(dǎo)航性的圖來(lái)解決近鄰圖發(fā)散搜索的問(wèn)題,但其搜索復(fù)雜度仍然過(guò)高,達(dá)到多重對(duì)數(shù)的級(jí)別,并且整體性能極易被圖的大小所影響。HNSW 則是著力于解決這個(gè)問(wèn)題。作者借鑒了 SkipList 的思想,提出了 Hierarchical-NSW 的設(shè)想。簡(jiǎn)單來(lái)說(shuō),按照一定的規(guī)則把一張的圖分成多張,越接近上層的圖,平均度數(shù)越低,節(jié)點(diǎn)之間的距離越遠(yuǎn);越接近下層的圖平均度數(shù)越高,節(jié)點(diǎn)之間的距離也就越近(見下圖 6)。
搜索從最上層開始,找到本層距離最近的節(jié)點(diǎn)之后進(jìn)入下一層。下一層搜索的起始節(jié)點(diǎn)即是上一層的最近節(jié)點(diǎn),往復(fù)循環(huán),直至找到結(jié)果。由于越是上層的圖,節(jié)點(diǎn)越是稀少,平均度數(shù)也低,距離也遠(yuǎn),所以可以通過(guò)非常小的代價(jià)提供了良好的搜索方向,通過(guò)這種方式減少大量沒有價(jià)值的計(jì)算,減少了搜索算法復(fù)雜度。更進(jìn)一步,如果把 HNSW 中節(jié)點(diǎn)的最大度數(shù)設(shè)為常數(shù),這樣可以獲得一張搜索復(fù)雜度僅為 log(n) 的圖。
△圖 6. hnsw
HNSW 的一個(gè)顯著優(yōu)點(diǎn)是無(wú)需訓(xùn)練,在某些沒有初始數(shù)據(jù)的場(chǎng)景非常好用。
目前百度內(nèi)容側(cè)使用的是 hnsw 的一種優(yōu)化實(shí)現(xiàn),在開源版本的基礎(chǔ)上,做了很多優(yōu)化,性能提升了將近 3.6 倍。
05 比對(duì)技術(shù)
1.圖像比對(duì)
目前主要有兩種表征圖像的方法:局部特征點(diǎn)和圖像 CNN 向量。
- 局部特征點(diǎn):對(duì)圖片的視覺描述,如 SIFT、ORB 等,對(duì)尺度、旋轉(zhuǎn)、亮度保持不變,視覺變化、防射變化、噪聲也有一定的穩(wěn)定性。
- 圖像 CNN 特征:對(duì)圖像的語(yǔ)義特征,通常使用 CNN 分類模型等的最后幾層網(wǎng)絡(luò)輸出。
△圖 7
因此當(dāng)前比對(duì)技術(shù),采用 CNN 特征篩選+視覺局部特征后校驗(yàn)
△圖 8
2.視頻比對(duì)
視頻比對(duì)復(fù)用了圖像比對(duì)的技術(shù),在幀檢索的基礎(chǔ)上增加了視頻和音頻級(jí)別的比對(duì)技術(shù),主要是基于動(dòng)態(tài)規(guī)劃計(jì)算最佳匹配序列。
△圖 9
06 總結(jié)
近年來(lái),隨著計(jì)算機(jī)技術(shù)的發(fā)展,圖片、視頻、音頻等富媒體信息的呈井噴式增長(zhǎng),內(nèi)容檢索比對(duì)技術(shù)在推薦、搜索等各個(gè)領(lǐng)域也有了更廣泛的應(yīng)用。本文對(duì)百度富媒體檢索比對(duì)系統(tǒng)的基本原理和核心技術(shù)進(jìn)行了一次全面的總覽介紹,同時(shí)介紹了各模塊的工作機(jī)制,包括:特征提取、離線訓(xùn)練建庫(kù)、在線預(yù)估、檢索比對(duì)等。它提供了一套通用的多媒體資源檢索比對(duì)方案,保證了高召回、高準(zhǔn)確和高性能。基于百度 FEED 和搜索兩大核心業(yè)務(wù),它擁有全網(wǎng)最大的數(shù)據(jù)規(guī)模和最豐富的資源類型,涵蓋了短視頻、小視頻、直播、圖片等絕大數(shù)富媒體資源,服務(wù)于 30+產(chǎn)品線,為百度產(chǎn)品的效果提升提供了有效的輔助。
文章看完,還不過(guò)癮?
更多精彩內(nèi)容歡迎關(guān)注百度開發(fā)者中心公眾號(hào)
總結(jié)
以上是生活随笔為你收集整理的超详细!百度富媒体检索比对系统的关键技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021 年,Java 开发者值得学习的
- 下一篇: 只等你来!OpenAtom XuperC