粒度圖像檢索系統(tǒng)的設(shè)計(jì)與實(shí)戰(zhàn))
1. 細(xì)粒度圖像檢索為什么區(qū)分鳥種比區(qū)分貓狗難這么多先說個(gè)真實(shí)的項(xiàng)目背景。VisionSearch-FG是我去年底開始折騰的一套細(xì)粒度圖像檢索系統(tǒng)實(shí)驗(yàn)場(chǎng)景選的是鳥類識(shí)別。做之前我以為這不就是套個(gè)圖像檢索的殼在鳥類數(shù)據(jù)集上微調(diào)一下就能跑結(jié)果被現(xiàn)實(shí)教育了一整輪貓狗分類、常見的商品圖檢索和細(xì)粒度鳥類檢索根本不是一個(gè)量級(jí)的難度。細(xì)粒度Fine-Grained的核心矛盾在于類間差異極小類內(nèi)差異反而很大。同樣是鴉科灰喜鵲和松鴉的站姿、輪廓、顏色分布高度相似區(qū)別可能只體現(xiàn)在翅膀上某幾根覆羽的斑紋走向、尾羽的末端顏色、甚至虹膜周圍那一小圈色環(huán)。而同一個(gè)物種里幼鳥和成鳥差異巨大繁殖羽和非繁殖羽形態(tài)完全不同不同亞種之間的差異甚至比跨物種還大。CUB-200-2011這個(gè)經(jīng)典鳥類數(shù)據(jù)集里200個(gè)類別、11788張圖很多類別之間的視覺差異不是普通分類網(wǎng)絡(luò)那種一眼就能分的程度而是需要同時(shí)觀察多個(gè)局部區(qū)域的聯(lián)合判別證據(jù)。再說檢索任務(wù)本身的差異。分類任務(wù)的輸出是一個(gè)類別標(biāo)簽?zāi)P椭恍枰⒁粋€(gè)從圖像到標(biāo)簽的映射決策邊界即使比較粗糙也能work。但圖像檢索的本質(zhì)是在特征空間里做近鄰查找給定一張查詢圖系統(tǒng)需要在百萬級(jí)甚至更大的圖庫中返回最相似的結(jié)果。這意味著特征表達(dá)必須滿足兩個(gè)硬指標(biāo)一是判別力同類特征要聚攏異類特征要拉開二是泛化性特征不能只是死記硬背訓(xùn)練集的紋理組合否則查詢圖一換姿態(tài)、換光照、換背景檢索結(jié)果立刻崩盤。通用圖像檢索系統(tǒng)在細(xì)粒度場(chǎng)景下掉鏈子的原因也很明確。我在項(xiàng)目早期直接用現(xiàn)成開源的多模態(tài)特征比如CLIP的視覺端做鳥類檢索第一輪mAP只有0.31Recall1不到20%。問題出在CLIP這類預(yù)訓(xùn)練模型是為跨模態(tài)對(duì)齊優(yōu)化的它學(xué)到的特征是概念級(jí)的共性表達(dá)對(duì)灰喉山椒鳥雌鳥和雄鳥的羽色差異這種細(xì)粒度線索不敏感。換成ImageNet上預(yù)訓(xùn)練的ResNet50直接抽特征情況更慘高層語義特征被通用物體類別主導(dǎo)鳥種間的細(xì)微紋理差異在Embedding空間里幾乎是噪聲。這就是VisionSearch-FG立項(xiàng)時(shí)的出發(fā)點(diǎn)專門針對(duì)細(xì)粒度場(chǎng)景設(shè)計(jì)的檢索系統(tǒng)核心思路是先定位判別性區(qū)域再提取區(qū)域級(jí)特征最后在度量空間里做檢索。整條鏈路從特征提取、判別性區(qū)域定位、度量學(xué)習(xí)到向量索引每一環(huán)都要圍繞細(xì)粒度特性做專門設(shè)計(jì)而不是拿通用檢索方案硬套。2. 系統(tǒng)核心設(shè)計(jì)思路定位、辨識(shí)、索引三層解耦VisionSearch-FG的整體架構(gòu)拆開看是三個(gè)模塊級(jí)聯(lián)先是主干特征提取然后是判別性區(qū)域注意力定位最后是度量嵌入學(xué)習(xí)。三個(gè)模塊各司其職串成一條完整的檢索pipeline。2.1 整體流程與模塊分工查詢圖像進(jìn)入系統(tǒng)后第一步不是直接進(jìn)檢索庫而是先過預(yù)處理和區(qū)域定位。主干網(wǎng)絡(luò)提取的是全局特征圖注意力模塊在這張?zhí)卣鲌D上標(biāo)出哪些區(qū)域是值得細(xì)看的——比如鳥的頭部、翅膀覆羽、尾羽、喙部這些部位是細(xì)粒度判別的關(guān)鍵證據(jù)。定位到的區(qū)域特征會(huì)與全局特征融合共同構(gòu)成最終的圖像描述Embedding。圖庫側(cè)的處理完全離線所有庫內(nèi)圖像經(jīng)過同一套特征提取流水線生成向量后寫入FAISS索引庫。查詢側(cè)只需要算一次查詢向量然后在索引庫里做近鄰檢索。這個(gè)設(shè)計(jì)的好處是訓(xùn)練推理階段復(fù)雜、檢索階段極快符合實(shí)際業(yè)務(wù)對(duì)檢索延遲的要求。整個(gè)架構(gòu)里最核心的設(shè)計(jì)決策是把定位和辨識(shí)拆開。為什么這么拆我在第一版模型里試過直接在主干網(wǎng)絡(luò)上加一個(gè)self-attention層讓模型自己決定關(guān)注哪里結(jié)果訓(xùn)練不穩(wěn)定注意力圖經(jīng)常收斂到背景區(qū)域。因?yàn)榧?xì)粒度任務(wù)里判別性區(qū)域本身是稀疏且微小的如果讓模型隱式學(xué)習(xí)哪里重要很容易被背景中常見的紋理欺騙。單獨(dú)拉一個(gè)定位分支用顯式的監(jiān)督信號(hào)去引導(dǎo)注意力聚焦效果穩(wěn)定得多。2.2 判別性區(qū)域定位二階注意力模塊的引入定位模塊我最終采用的是二階注意力機(jī)制。所謂二階是在常規(guī)的空間注意力之后再疊加一個(gè)通道維度的注意力重標(biāo)定。第一階空間注意力負(fù)責(zé)回答哪兒重要第二階通道注意力負(fù)責(zé)回答什么樣的特征重要。具體實(shí)現(xiàn)時(shí)空間注意力分支對(duì)特征圖做空間維度的加權(quán)。輸入是主干最后一層輸出的特征圖F尺寸為C×H×W先經(jīng)過1×1卷積壓縮通道數(shù)再接sigmoid生成空間權(quán)重圖將權(quán)重圖與原特征圖逐元素相乘得到加權(quán)特征。通道注意力分支則對(duì)全局特征做擠壓和激勵(lì)操作用全局平均池化得到通道描述向量經(jīng)過兩個(gè)全連接層后生成通道權(quán)重再對(duì)加權(quán)特征做通道重標(biāo)定。第二個(gè)關(guān)鍵點(diǎn)定位模塊必須接收額外的監(jiān)督信號(hào)否則就是純隱式學(xué)習(xí)。我在定位分支上加了區(qū)域一致性約束用鳥類關(guān)鍵點(diǎn)標(biāo)注信息輔助訓(xùn)練。CUB數(shù)據(jù)集自帶15個(gè)關(guān)鍵點(diǎn)比如喙尖、左眼、右眼、翅膀尖端、尾尖等這些關(guān)鍵點(diǎn)的坐標(biāo)可以生成區(qū)域掩碼讓注意力圖直接學(xué)習(xí)去擬合這些區(qū)域分布。加了這層顯式監(jiān)督之后注意力圖的質(zhì)量明顯提升檢索mAP直接漲了7到8個(gè)點(diǎn)。2.3 特征融合策略全局上下文加局部判別證據(jù)光學(xué)盯住局部還不夠細(xì)粒度檢索還要求模型同時(shí)理解全局上下文。原因在于很多鳥類的判別性區(qū)域需要通過全局姿態(tài)來對(duì)齊參照物。比如判斷一只鳥的翅膀斑紋類型必須知道翅膀在圖像中的大致位置和角度否則局部特征對(duì)齊不了。VisionSearch-FG的特征融合策略是全局特征池化后與注意力定位到的局部特征拼接再經(jīng)過一層全連接映射到低維Embedding空間。全局特征提供場(chǎng)景、姿態(tài)和結(jié)構(gòu)上下文局部特征提供判別性細(xì)節(jié)。拼接后的維度是1024維經(jīng)過BN和全連接層壓縮到256維進(jìn)入度量空間。這里有個(gè)細(xì)節(jié)值得注意局部區(qū)域不止取一個(gè)而是取了top-3判別性區(qū)域。在訓(xùn)練階段注意力圖得分最高的前三個(gè)區(qū)域分別做RoI池化ROIAlign各自提取特征再與全局特征拼接。為什么是3個(gè)我試過1個(gè)、5個(gè)、10個(gè)1個(gè)區(qū)域的信息量不夠5個(gè)以上開始引入冗余噪聲3個(gè)的性價(jià)比最高——既覆蓋了細(xì)粒度判別最核心的頭部和翅膀區(qū)域又不會(huì)因?yàn)檫^度切圖破壞特征一致性。3. 關(guān)鍵環(huán)節(jié)實(shí)現(xiàn)數(shù)據(jù)、模型、訓(xùn)練與檢索全鏈路3.1 數(shù)據(jù)集準(zhǔn)備與預(yù)處理VisionSearch-FG實(shí)驗(yàn)階段用的是CUB-200-2011細(xì)粒度領(lǐng)域最經(jīng)典的鳥類數(shù)據(jù)集200類11788張圖像平均每類約59張。別看數(shù)據(jù)量不大預(yù)處理和訓(xùn)練策略可馬虎不得。CUB官方劃分是前100類訓(xùn)練、后100類測(cè)試這種劃分方式保證了類別完全隔離模型在測(cè)試階段面對(duì)的是從未見過的鳥種。我沿用了官方劃分因?yàn)榧?xì)粒度檢索系統(tǒng)最終要面對(duì)的就是沒見過的類別。如果類別不隔離相當(dāng)于檢索庫里的類別都被訓(xùn)練見過評(píng)估結(jié)果會(huì)虛高。預(yù)處理管線我做了三層圖像縮放統(tǒng)一縮放到448×448沒有用ImageNet標(biāo)準(zhǔn)的224×224。細(xì)粒度特征的尺寸太重要了很多紋理判別證據(jù)在224分辨率下直接被壓縮丟失。448分辨率下模型能看到更清晰的翅膀覆羽紋理和喙部細(xì)節(jié)。數(shù)據(jù)增強(qiáng)隨機(jī)水平翻轉(zhuǎn)、隨機(jī)旋轉(zhuǎn)±15度、隨機(jī)顏色抖動(dòng)。沒有做隨機(jī)擦除和CutMix我在實(shí)驗(yàn)中發(fā)現(xiàn)鳥類圖像的判別區(qū)域很集中隨機(jī)擦除容易把關(guān)鍵證據(jù)區(qū)域直接抹掉反而拉低訓(xùn)練效果。歸一化ImageNet均值方差標(biāo)準(zhǔn)化標(biāo)準(zhǔn)做法。類別不均衡問題在CUB里不算嚴(yán)重每類50到60張圖但我注意到部分類別的訓(xùn)練圖都是單一背景比如全是枝頭停棲狀態(tài)這類圖訓(xùn)練出的特征對(duì)飛行姿態(tài)的泛化很差。因此我在數(shù)據(jù)加載階段做了簡(jiǎn)單的高低頻采樣策略訓(xùn)練集中如果某張圖和同類別其他圖的余弦相似度過高預(yù)提取特征計(jì)算就降低它的采樣權(quán)重強(qiáng)制模型多看視角多樣的樣本。這個(gè)小技巧有效緩解了細(xì)粒度場(chǎng)景下的類內(nèi)過擬合問題。3.2 模型選型與訓(xùn)練細(xì)節(jié)Backbone選型上我最后鎖定了ResNet50??赡苡腥藭?huì)問為什么不直接上Swin Transformer或者更大的模型原因有三第一這個(gè)系統(tǒng)的定位是工程可落地的檢索系統(tǒng)不是刷榜實(shí)驗(yàn)。ResNet50的推理速度和顯存占用都友好在CPU上也能跑得動(dòng)。第二細(xì)粒度檢索領(lǐng)域的大量Trick比如注意力模塊、關(guān)鍵點(diǎn)監(jiān)督、區(qū)域池化都是在CNN架構(gòu)上驗(yàn)證成熟的遷移到Transformer需要額外調(diào)參。第三我在實(shí)驗(yàn)里用Swin-T做過對(duì)照訓(xùn)練收斂更慢對(duì)定位模塊的配合不如CNN穩(wěn)定。如果算力充裕、數(shù)據(jù)量更大Transformer Backbone肯定有潛力但現(xiàn)階段ResNet50-BN的性價(jià)比最高。損失函數(shù)這塊是細(xì)粒度檢索的重頭戲。我先跑了一版只用Softmax分類損失微調(diào)作為baselinemAP只有0.43檢索效果一塌糊涂。問題在于Softmax只要求分類正確不顯式優(yōu)化特征距離同類特征在度量空間里的分布是松散的。最終采用的損失組合是Circle Loss ArcFace RegularizationL_total L_circle α * L_arcface其中Circle Loss是在Triplet Loss基礎(chǔ)上改的它對(duì)正負(fù)樣本對(duì)的優(yōu)化強(qiáng)度是動(dòng)態(tài)調(diào)整的可以針對(duì)處于困難位置的樣本對(duì)分配更大的梯度權(quán)重。ArcFace的加入讓特征在超球面上形成角度間隔提高度量空間的判別力。權(quán)重系數(shù)α我設(shè)為0.3這個(gè)值太小了除了基線的提升不明顯太大了會(huì)壓制Circle Loss優(yōu)化困難對(duì)的優(yōu)勢(shì)。優(yōu)化器用的SGDmomentum 0.9weight decay 1e-4。初始學(xué)習(xí)率0.01cosine退火到1e-5總共訓(xùn)練60個(gè)epoch。Batch size設(shè)為32。訓(xùn)練時(shí)FP16混合精度在單張V100上約2小時(shí)收斂。3.3 FAISS向量索引構(gòu)建特征提取完成后進(jìn)入檢索索引構(gòu)建階段。這里我用的是FAISSMeta開源的向量搜索引擎也是業(yè)界在類目規(guī)模不算巨大但要求毫秒級(jí)響應(yīng)的場(chǎng)景下最常用的方案。索引類型選擇上我對(duì)比了三類索引類型檢索耗時(shí)10萬向量精度損失內(nèi)存占用Flat暴力搜索約120ms無高IVF256, Flat約15ms極小低IVF256, PQ16約4ms有約2-3%極低10萬級(jí)向量規(guī)模下Flat暴力搜索就能滿足秒級(jí)響應(yīng)需求但VisionSearch-FG是按百萬級(jí)圖庫設(shè)計(jì)的。我選擇了IVF256 Flat作為default配置聚類數(shù)量256每個(gè)向量只和最近的聚類中心所在桶里的向量做全量精確距離計(jì)算。PQ量化版本雖然更快但細(xì)粒度檢索對(duì)精度極度敏感2%到3%的精度損失在鳥類場(chǎng)景下會(huì)導(dǎo)致難樣本直接排序錯(cuò)亂不劃算。索引構(gòu)建細(xì)節(jié)FAISS建索引前要把特征向量歸一化統(tǒng)一單位長(zhǎng)度這樣內(nèi)積距離等同于余弦相似度便于設(shè)定統(tǒng)一檢索閾值。查詢時(shí)我用的是nprobe16即檢索最近鄰的前16個(gè)聚類中心共256個(gè)這個(gè)值在效率和召回率之間比較均衡。3.4 服務(wù)化部署查詢流程與響應(yīng)設(shè)計(jì)系統(tǒng)后端我用FastAPI搭了推理服務(wù)整條查詢鏈路的耗時(shí)預(yù)算大概是圖像預(yù)處理解碼縮放約35ms→ 特征提取ResNet50推理約45msFP16下→ 注意力定位與特征融合約10ms→ FAISS檢索約15ms。理想情況下單次查詢總耗時(shí)在110ms左右實(shí)際壓測(cè)均值在128ms考慮到網(wǎng)絡(luò)傳輸和文件讀取這個(gè)數(shù)據(jù)對(duì)生產(chǎn)級(jí)系統(tǒng)來說可以接受。查詢接口的設(shè)計(jì)上我提供了兩種模式按_ID檢索直接用已有圖庫圖像的Embedding做查詢和按上傳圖像檢索走完整推理管線。同時(shí)支持設(shè)置top-k返回?cái)?shù)量以及相似度閾值過濾。檢索結(jié)果管理側(cè)除了返回圖像路徑外還會(huì)附帶類別標(biāo)簽、相似度分?jǐn)?shù)、以及注意力可視化熱力圖數(shù)據(jù)。這部分對(duì)業(yè)務(wù)端很重要用戶不僅想知道像不像還想知道模型憑什么認(rèn)為像熱力圖輸出能顯著提升結(jié)果的可解釋性。4. 訓(xùn)練調(diào)優(yōu)和系統(tǒng)落地的避坑記錄4.1 注意力模塊訓(xùn)練不收斂第一版定位模塊加上去之后訓(xùn)練loss曲線震蕩明顯收斂速度比預(yù)期慢得多。排查后定位到問題定位模塊的學(xué)習(xí)率與主干網(wǎng)絡(luò)共享同一設(shè)置但定位分支的梯度幅值遠(yuǎn)大于主干網(wǎng)絡(luò)。定位分支是隨機(jī)初始化的前期梯度噪聲大導(dǎo)致整網(wǎng)不穩(wěn)定。解決辦法是給定位模塊單獨(dú)設(shè)置學(xué)習(xí)率為主干學(xué)習(xí)率的0.1倍。同時(shí)給空間注意力圖的sigmoid輸出加了熵正則化懲罰讓注意力圖不要太模糊盡量集中到少數(shù)區(qū)域。兩項(xiàng)改動(dòng)后訓(xùn)練曲線明顯平穩(wěn)注意力圖也開始能穩(wěn)定聚焦到頭和翅膀區(qū)域。4.2 檢索效果上不去的三個(gè)真兇第一個(gè)是特征維度沒對(duì)齊。早期我直接在最后的全連接層輸出512維特征做檢索沒有做歸一化和白化處理導(dǎo)致特征在不同維度上的方差差異很大歐氏距離被少數(shù)高方差維度主導(dǎo)。解決辦法訓(xùn)練完的Embedding向量做L2歸一化再做一次PCA白化將維度從512降到256歸一化加白化之后mAP提升了約5個(gè)點(diǎn)。第二個(gè)是難樣本挖掘策略太弱。Triplet類型的損失函數(shù)極度依賴Batch內(nèi)的正負(fù)樣本對(duì)質(zhì)量。我最初的采樣策略是隨機(jī)采樣Batch里大部分樣本對(duì)都是容易對(duì)梯度幾乎為零。換成類別均衡采樣每個(gè)Batch保證至少8個(gè)類別每個(gè)類別至少4張圖之后batch內(nèi)能保證足夠的難樣本對(duì)Circle Loss的訓(xùn)練效率一下就上來了。第三個(gè)是閾值處理。檢索系統(tǒng)除了排序還涉及是否返回結(jié)果的問題。我在評(píng)估時(shí)發(fā)現(xiàn)某些負(fù)樣本對(duì)的相似度能達(dá)到0.88而某些正樣本對(duì)之間的相似度只有0.79。如果直接設(shè)一個(gè)固定閾值比如0.85大量正樣本會(huì)被誤過濾。解決辦法在驗(yàn)證集上做自適應(yīng)閾值搜索對(duì)每個(gè)類別的特征分布做高斯擬合用類間最小margin來確定動(dòng)態(tài)閾值。這個(gè)自適應(yīng)方案讓Recall1從67%提升到73%。4.3 數(shù)據(jù)質(zhì)量檢查圖庫側(cè)需要去臟很多人會(huì)忽略圖庫側(cè)的臟數(shù)據(jù)問題。我用CUB訓(xùn)練時(shí)發(fā)現(xiàn)有些類別里混入了帶水印的圖片和明顯的人工標(biāo)注框殘留圖像這類噪聲在訓(xùn)練階段還好模型能自適應(yīng)忽略但在圖庫索引階段是致命的——它們會(huì)成為檢索結(jié)果里的高相似度干擾項(xiàng)。解決辦法是在圖庫側(cè)加一道預(yù)清洗流程用訓(xùn)練好的模型對(duì)所有圖庫圖像提取特征做密度聚類DBSCAN孤立的離群點(diǎn)大概率是臟圖檢查后剔除。清洗掉約2%的圖庫樣本后檢索結(jié)果的主觀質(zhì)量提升非常明顯不再出現(xiàn)查鳥卻返回帶文字水印圖片的情況。4.4 系統(tǒng)性能瓶頸定位上線壓測(cè)階段我注意到并發(fā)吞吐量跌得厲害。單張V100部署的FastAPI服務(wù)壓測(cè)到50并發(fā)時(shí)成功率只有78%。定位后發(fā)現(xiàn)瓶頸不在GPU推理而在FAISS檢索的并發(fā)訪問上FAISS的Index不是線程安全的多個(gè)請(qǐng)求同時(shí)檢索時(shí)會(huì)產(chǎn)生資源競(jìng)爭(zhēng)。解決辦法是給FAISS檢索加了一層連接池管理預(yù)創(chuàng)建多個(gè)Index副本每個(gè)線程一個(gè)通過Round-Robin方式分發(fā)查詢請(qǐng)求。配合上GPU推理的batch動(dòng)態(tài)合批功能積壓10個(gè)請(qǐng)求后合并一次forward系統(tǒng)的吞吐量從40 QPS提升到180 QPS成功率達(dá)到99%。5. 寫在最后一點(diǎn)個(gè)人體會(huì)和后續(xù)方向VisionSearch-FG這套系統(tǒng)從最初一拍腦袋的設(shè)想到最終能在百萬級(jí)圖庫規(guī)模下做到毫秒級(jí)響應(yīng) 接近訓(xùn)練集上限的檢索精度中間踩的坑不少但總結(jié)下來核心就一件事細(xì)粒度檢索不是一個(gè)單純的模型問題也不是一個(gè)單純的工程問題而是模型設(shè)計(jì)、訓(xùn)練策略、系統(tǒng)架構(gòu)三者緊密咬合的整體方案。定位模塊的引入、Circle Loss和ArcFace的組合、FAISS的索引選型每一環(huán)都是圍繞微小差異但要精確判別這個(gè)核心矛盾展開的。我自己在實(shí)際操作中最深的一個(gè)感觸是細(xì)粒度場(chǎng)景下的效果提升往往不是靠某個(gè)單點(diǎn)突破而是多點(diǎn)小改進(jìn)的累積。一個(gè)注意力模塊可能只提升3個(gè)點(diǎn)的mAP加上關(guān)鍵點(diǎn)監(jiān)督又提升7個(gè)點(diǎn)再配合難樣本挖掘、特征白化、自適應(yīng)閾值最后整體從0.31一路爬到0.74級(jí)。中間最關(guān)鍵的還是建立一套完整的評(píng)估和迭代閉環(huán)每次改動(dòng)后都能快速看到檢索效果的真實(shí)變化而不是憑感覺調(diào)參。后續(xù)我打算在三個(gè)方向上繼續(xù)擴(kuò)展第一個(gè)是多模態(tài)融合把文本描述比如鳥類的形態(tài)描述文字和視覺特征聯(lián)合嵌入實(shí)現(xiàn)更靈活的文字檢索第二個(gè)是引入更多Dataset的跨域驗(yàn)證在NABirds、iNaturalist等更大規(guī)模數(shù)據(jù)集上做泛化測(cè)試第三個(gè)就是模型輕量化用蒸餾的方式把ResNet50壓縮到MobileNet級(jí)別的模型上把整套檢索能力部署到邊緣設(shè)備。如果大家也在做類似的細(xì)粒度檢索項(xiàng)目歡迎在評(píng)論區(qū)一起交流踩坑經(jīng)驗(yàn)特別是注意力機(jī)制設(shè)計(jì)和損失函數(shù)調(diào)優(yōu)這兩個(gè)方向我覺得還能挖出很多有價(jià)值的東西。最后分享一個(gè)小技巧在細(xì)粒度檢索項(xiàng)目的啟動(dòng)階段先別急著上復(fù)雜模型先用一個(gè)帶分類損失的預(yù)訓(xùn)練模型跑一版特征基線用UMAP降維可視化一下特征的分布情況。這一步花不了多少時(shí)間但只要看到特征分布圖你就能立刻意識(shí)到細(xì)粒度問題的真實(shí)難度——同類樣本在嵌入空間里可能完全不聚攏不同類之間也可能高度重疊。可視化往往是調(diào)整系統(tǒng)設(shè)計(jì)方向最有價(jià)值的一步。