方案)
做目標(biāo)檢測(cè)這些年YOLO系列的迭代一直是我重點(diǎn)追蹤的方向。最近在給檢測(cè)頭做特征優(yōu)化時(shí)我試了一個(gè)有意思的改進(jìn)給模型加雙backbone然后在特征融合階段插入一個(gè)空間增強(qiáng)前饋網(wǎng)絡(luò)SEFN。這套方案的核心思路概括起來(lái)就是一句話——從前置特征里提取局部空間信息來(lái)構(gòu)建門控再動(dòng)態(tài)調(diào)制后置特征讓雙分支特征在融合過(guò)程中同時(shí)保住局部空間一致性和長(zhǎng)距離依賴。如果你也在折騰YOLO改進(jìn)或者對(duì)檢測(cè)器的特征融合一直有疑慮這篇內(nèi)容應(yīng)該能給你不少可以落地的經(jīng)驗(yàn)。1. 設(shè)計(jì)思路拆解單骨干網(wǎng)絡(luò)的兩難問(wèn)題開(kāi)始動(dòng)手之前先把為什么要做雙backbone這件事說(shuō)透。很多人在改進(jìn)檢測(cè)器時(shí)喜歡往neck和head堆模塊但往往忽略了backbone本身就是最大的瓶頸。1.1 感受野與空間分辨率的矛盾單backbone在提取特征時(shí)天然面臨一個(gè)兩難網(wǎng)絡(luò)越深感受野越大語(yǔ)義信息越豐富但特征圖的分辨率越低局部空間細(xì)節(jié)邊緣、紋理、小目標(biāo)位置丟失得越厲害。反過(guò)來(lái)淺層的特征圖雖然分辨率高、細(xì)節(jié)保留好但語(yǔ)義抽象能力不足難以支撐復(fù)雜場(chǎng)景下的類別判別。常規(guī)做法是FPN、PANet這類金字塔結(jié)構(gòu)把淺層細(xì)節(jié)和深層語(yǔ)義做逐級(jí)融合。但這里有個(gè)隱含問(wèn)題融合的方式大多是簡(jiǎn)單的相加或通道拼接再經(jīng)過(guò)幾層卷積去消化。這種融合缺少“選擇性”模型無(wú)法判斷哪里的淺層細(xì)節(jié)應(yīng)該被強(qiáng)化、哪里的深層語(yǔ)義應(yīng)該被保留所有信息一視同仁地混合特征表達(dá)效率不高細(xì)粒度空間信息也容易被噪聲淹沒(méi)。我換過(guò)很多種頸部結(jié)構(gòu)最后發(fā)現(xiàn)改進(jìn)的關(guān)鍵不是繼續(xù)堆卷積或者注意力而是要引入一種顯式的調(diào)制機(jī)制讓融合過(guò)程具備方向性和選擇性。這也是SEFN模塊出現(xiàn)的直接原因。1.2 雙backbone帶來(lái)的互補(bǔ)優(yōu)勢(shì)單個(gè)backbone在一個(gè)分支里同時(shí)追求高分辨率和強(qiáng)語(yǔ)義本質(zhì)上是在一個(gè)水箱里同時(shí)接自來(lái)水和凈水器互相掣肘。雙backbone的做法把它們拆成兩個(gè)獨(dú)立管線一個(gè)分支專門負(fù)責(zé)局部空間細(xì)節(jié)保持高分辨率、大特征圖讓物體邊緣輪廓和紋理結(jié)構(gòu)盡量完整另一個(gè)分支走深層堆疊把感受野拉大捕獲長(zhǎng)距離依賴和全局語(yǔ)義。兩條分支在結(jié)構(gòu)上可以共享權(quán)重、部分共享也可以完全獨(dú)立。以我自己的實(shí)驗(yàn)來(lái)看完全獨(dú)立但結(jié)構(gòu)對(duì)稱的雙分支效果最穩(wěn)代價(jià)是參數(shù)量和計(jì)算量翻倍。如果資源有限也可以讓主分支保持原有結(jié)構(gòu)輔助分支用輕量化結(jié)構(gòu)比如縮減通道數(shù)或者使用深度可分離卷積后續(xù)的SEFN調(diào)制可以在一定程度上彌補(bǔ)輔助分支表達(dá)能力偏弱的問(wèn)題。1.3 SEFN在整體架構(gòu)中的定位SEFN不是替代neck的它是插在雙backbone特征匯合處的一個(gè)特征調(diào)制模塊。前置特征來(lái)自負(fù)責(zé)局部空間信息的分支后置特征來(lái)自負(fù)責(zé)語(yǔ)義信息的分支。SEFN從前置特征里提取局部空間結(jié)構(gòu)生成空間門控再用門控動(dòng)態(tài)調(diào)制后置特征的通道和空間分布讓最終的融合特征在局部區(qū)域上有更強(qiáng)的目標(biāo)感知能力。這個(gè)設(shè)計(jì)和經(jīng)典的通道注意力SE模塊、空間注意力CBAM有本質(zhì)區(qū)別SE和CBAM是作用在同一個(gè)特征圖上的自注意力而SEFN是一種跨特征的互調(diào)制。它關(guān)注的是兩路特征之間如何互相增強(qiáng)而不是單路特征內(nèi)部怎么自我校準(zhǔn)在雙分支結(jié)構(gòu)里比自注意力方案更契合。2. SEFN核心機(jī)制門控調(diào)制到底在做什么很多朋友一聽(tīng)到“門控”就想到Sigmoid和逐元素相乘但SEFN的關(guān)鍵不只在這個(gè)乘法而在于門控信號(hào)是怎么構(gòu)建的、來(lái)自哪里。這部分我會(huì)拆開(kāi)講清楚。2.1 前置特征與后置特征的角色分工在雙backbone結(jié)構(gòu)里前置特征和后置特征不是隨意指定的。前置特征來(lái)自淺層或局部分支它的最大優(yōu)勢(shì)是保留了豐富的結(jié)構(gòu)信息比如目標(biāo)的邊緣走向、區(qū)域紋理、局部對(duì)比度等。這部分特征雖然在語(yǔ)義上不夠抽象但它決定了檢測(cè)器對(duì)“這個(gè)物體在哪、形狀怎么樣”的感知質(zhì)量。后置特征則來(lái)自深層或語(yǔ)義分支它有更強(qiáng)的類別判別力能識(shí)別“這是什么物體”但單獨(dú)拿出來(lái)看它對(duì)邊界、遮擋、小目標(biāo)的空間定位是不敏感的。SEFN做的事情本質(zhì)上是用前置特征教后置特征“哪里需要關(guān)注局部細(xì)節(jié)”讓語(yǔ)義信息在正確的空間位置上激活而不是全局統(tǒng)一響應(yīng)。2.2 門控構(gòu)建的兩個(gè)關(guān)鍵算子門控構(gòu)建的步驟可以拆成兩個(gè)算子局部空間信息提取和逐點(diǎn)壓縮映射。局部空間信息提取我推薦用深度可分離卷積來(lái)實(shí)現(xiàn)。比如對(duì)一個(gè)維度為CxHxW的前置特征先用3x3的深度可分離卷積在空間維度上捕捉相鄰像素之間的結(jié)構(gòu)關(guān)系這一步的計(jì)算量遠(yuǎn)低于普通卷積又能有效刻畫邊緣和局部模式。如果你的特征圖分辨率不高也可以用窗口大小為3或5的平均池化代替池化算子的歸納偏置更強(qiáng)收斂更穩(wěn)定但對(duì)細(xì)節(jié)的敏感度會(huì)略差。提取完局部信息后經(jīng)過(guò)一個(gè)1x1卷積把通道數(shù)壓縮到與調(diào)制對(duì)象一致再做Sigmoid激活得到一張數(shù)值在0到1之間的空間門控圖。這個(gè)門控圖解釋性很強(qiáng)數(shù)值接近1的位置表示前置特征認(rèn)為這里存在顯著的局部結(jié)構(gòu)后置特征應(yīng)該保留并強(qiáng)化對(duì)應(yīng)的語(yǔ)義表達(dá)數(shù)值接近0的位置表示這里比較平坦語(yǔ)義信息可以相對(duì)抑制以避免背景噪聲干擾。2.3 動(dòng)態(tài)調(diào)制與殘差連接的配合門控調(diào)制這一步直接對(duì)后置特征做逐元素相乘相當(dāng)于給后置特征的每個(gè)空間位置乘上一個(gè)權(quán)重。但直接乘結(jié)果有個(gè)隱患如果某些位置的門控值長(zhǎng)期偏低對(duì)應(yīng)的特征響應(yīng)會(huì)越來(lái)越弱形成不可逆的抑制梯度訓(xùn)練容易出問(wèn)題。我的處理方式是在調(diào)制之后再加法疊加后置特征的原始值形成一個(gè)殘差形態(tài)。這樣門控網(wǎng)絡(luò)在初始階段幾乎不改變特征分布模塊退化風(fēng)險(xiǎn)極小訓(xùn)練初期整體模型可以保持接近原始結(jié)構(gòu)的性能后續(xù)再逐步學(xué)習(xí)門控的調(diào)制幅度。另外在殘差連接外部我會(huì)再接一個(gè)LayerNorm或BatchNorm具體見(jiàn)后面的代碼實(shí)現(xiàn)主要作用是穩(wěn)定雙分支融合后的數(shù)值分布防止門控權(quán)重和特征量級(jí)互相牽扯。3. 參考實(shí)現(xiàn)從零搭建SEFN并接入雙backbone YOLO理論說(shuō)得再多最后還是要落到代碼上。我直接給出可以跑起來(lái)的PyTorch參考實(shí)現(xiàn)然后說(shuō)明怎么把它接進(jìn)YOLO類檢測(cè)框架。3.1 SEFN模塊的PyTorch實(shí)現(xiàn)先給一個(gè)和實(shí)際工程接近的SEFN實(shí)現(xiàn)注釋寫得比較細(xì)方便大家看清楚每個(gè)步驟的輸入輸出。import torch import torch.nn as nn import torch.nn.functional as F class SEFN(nn.Module): 空間增強(qiáng)前饋網(wǎng)絡(luò) 參數(shù): dim: 輸入特征通道數(shù) hidden_dim: 前饋網(wǎng)絡(luò)中間層通道數(shù)默認(rèn)是dim的4倍 kernel_size: 局部空間信息提取的卷積核大小 drop_path: 隨機(jī)深度概率訓(xùn)練時(shí)可以設(shè)0.1 def __init__(self, dim, hidden_dimNone, kernel_size3, drop_path0.0): super().__init__() hidden_dim hidden_dim or dim * 4 # 后置特征的前饋?zhàn)儞Q這里使用1x1卷積 深度可分離卷積 self.fc1 nn.Conv2d(dim, hidden_dim, 1, biasFalse) self.dwconv nn.Conv2d( hidden_dim, hidden_dim, kernel_size, paddingkernel_size // 2, groupshidden_dim, biasFalse ) self.act nn.GELU() self.fc2 nn.Conv2d(hidden_dim, dim, 1, biasFalse) # 前置特征的門控分支 # 局部空間提取3x3深度可分離卷積輸入通道數(shù)等于dim self.gate_dw nn.Conv2d( dim, dim, kernel_size, paddingkernel_size // 2, groupsdim, biasFalse ) # 壓縮映射把局部響應(yīng)投影到與后置特征匹配的表示 self.gate_fc nn.Conv2d(dim, dim, 1, biasTrue) self.gate_act nn.Sigmoid() # 殘差尺度可學(xué)習(xí)參數(shù) self.drop_path nn.Identity() self.norm nn.BatchNorm2d(dim) def forward(self, x_front, x_back): 參數(shù): x_front: 前置特征 [B, C, H, W]來(lái)自淺層/局部分支 x_back: 后置特征 [B, C, H, W]來(lái)自深層/語(yǔ)義分支 返回: 調(diào)制后的融合特征 [B, C, H, W] # 1) 從前置特征提取局部空間信息構(gòu)建門控 g self.gate_dw(x_front) g self.gate_fc(g) gate self.gate_act(g) # 2) 后置特征的前饋?zhàn)儞Q h self.fc1(x_back) h self.dwconv(h) h self.act(h) h self.fc2(h) # 3) 門控動(dòng)態(tài)調(diào)制并接入殘差 out h * gate out out x_back # 4) 歸一化穩(wěn)定數(shù)值分布 out self.norm(out) return out有幾點(diǎn)要注意gate_dw的卷積權(quán)重需要在初始化時(shí)接近0這樣初始門控會(huì)偏向0.5避免訓(xùn)練初期門控直接飽和fc2輸出的維度要和輸入對(duì)齊保證殘差運(yùn)算合法如果你用的backbone輸出通道和SEFN配置不一致先做1x1卷積對(duì)齊維度。3.2 雙backbone特征提取與融合的整體結(jié)構(gòu)SEFN驗(yàn)證通過(guò)后我是這樣把它組裝進(jìn)YOLO骨架的。主backbone保持原來(lái)的CSPDarknet結(jié)構(gòu)負(fù)責(zé)提取深層語(yǔ)義特征輔助backbone用輕量化結(jié)構(gòu)比如縮小通道倍率或者換用MobileNetV3的block負(fù)責(zé)提供高分辨率的局部空間特征。兩條分支在不同階段輸出多尺度特征我這里以P3、P4、P5三個(gè)尺度為例。在每個(gè)尺度上我會(huì)把主分支特征視為后置特征輔助分支特征視為前置特征。兩個(gè)特征圖分辨率必須一致如果輔助分支的分辨率不對(duì)先上采樣或下采樣對(duì)齊。然后送入SEFNSEFN的輸出作為當(dāng)前尺度的融合特征進(jìn)入后續(xù)的PANet或者自定義neck繼續(xù)跨尺度融合。如果想在不同尺度間共享SEFN模塊可以設(shè)置所有尺度共用同一套參數(shù)能明顯減少參數(shù)量但效果略弱于每尺度獨(dú)立SEFN。另外我個(gè)人建議在輔助backbone的淺層單獨(dú)加一條低層連接直接把P2級(jí)別的細(xì)節(jié)特征也送進(jìn)融合過(guò)程對(duì)小目標(biāo)檢測(cè)有明顯的補(bǔ)充作用。代價(jià)是整體特征圖數(shù)量增加內(nèi)存占用變大需要根據(jù)顯存來(lái)權(quán)衡。3.3 接入YOLO檢測(cè)頭的完整流程檢測(cè)頭的接入不需要改動(dòng)太多。YOLO的head本身就是解耦的分類分支和回歸分支我直接把融合后的特征分別喂給分類和回歸分支原來(lái)的anchor或anchor-free解碼邏輯保持不變。損失函數(shù)也只做了少量調(diào)整在多尺度損失加權(quán)時(shí)把P3尺度的權(quán)重從默認(rèn)值調(diào)高了一些因?yàn)榫植靠臻g信息對(duì)小目標(biāo)的貢獻(xiàn)更大。數(shù)據(jù)增強(qiáng)策略沿用了常規(guī)的Mosaic、MixUp以及隨機(jī)仿射變換沒(méi)有做特殊處理。整個(gè)改動(dòng)代碼量控制在200行以內(nèi)工程上還是挺輕量的不改推理邏輯部署時(shí)只需要導(dǎo)出疊加了SEFN的整個(gè)模型即可。4. 訓(xùn)練配置與效果驗(yàn)證說(shuō)完了代碼進(jìn)入最實(shí)際的部分怎么訓(xùn)練才能把SEFN的能力發(fā)揮出來(lái)。這里面的初始化策略、學(xué)習(xí)率和訓(xùn)練節(jié)奏都比模塊本身更影響最終結(jié)果。4.1 初始化與預(yù)訓(xùn)練策略首個(gè)要注意的坑是預(yù)訓(xùn)練權(quán)重。雙backbone的兩條分支如果都使用ImageNet預(yù)訓(xùn)練權(quán)重那么輔助分支最好使用結(jié)構(gòu)相近的權(quán)重實(shí)在沒(méi)有就隨機(jī)初始化但訓(xùn)練所需epoch會(huì)明顯增加。我試過(guò)讓輔助分支的淺層完全隨機(jī)初始化在訓(xùn)練初期模型收斂很慢前50個(gè)epoch的mAP一直低于單backbone版本。后來(lái)?yè)Q了個(gè)策略輔助分支淺層使用主分支的預(yù)訓(xùn)練權(quán)重做初始化或者用自監(jiān)督預(yù)訓(xùn)練得到的權(quán)重來(lái)初始化。這樣做之后前10個(gè)epoch的loss下降速度明顯加快最終精度也更高。另外SEFN內(nèi)部的gate相關(guān)卷積層建議零初始化或小隨機(jī)數(shù)初始化保證訓(xùn)練開(kāi)始時(shí)門控輸出接近0.5讓特征分布先保持穩(wěn)定再逐步學(xué)習(xí)調(diào)制幅度。4.2 學(xué)習(xí)率、batch與數(shù)據(jù)增強(qiáng)配置這類雙分支結(jié)構(gòu)對(duì)學(xué)習(xí)率比較敏感。我把初始學(xué)習(xí)率從默認(rèn)的0.01調(diào)低到0.005使用warmup 3個(gè)epoch的線性上升到0.01再用cosine退火降到最低1e-4。batch size按顯存能力來(lái)單卡48G顯存可以開(kāi)到64多卡的話按線性縮放。數(shù)據(jù)增強(qiáng)方面Mosaic增強(qiáng)的Scale范圍我調(diào)小了一些原來(lái)是0.5到1.5我改成0.8到1.4因?yàn)檩o助分支的局部細(xì)節(jié)在高強(qiáng)度縮放下容易失真門控信號(hào)學(xué)到的是不正常的長(zhǎng)寬比分布反而產(chǎn)生負(fù)面影響。MixUp概率降低到0.3避免過(guò)強(qiáng)的混合干擾空間結(jié)構(gòu)的清晰度。訓(xùn)練時(shí)長(zhǎng)方面我用8卡訓(xùn)練了300個(gè)epoch總的訓(xùn)練集約為15萬(wàn)張圖。如果沒(méi)有多卡環(huán)境建議至少訓(xùn)練500個(gè)epoch并加大weight decay防止雙分支疊加后產(chǎn)生過(guò)擬合。4.3 實(shí)驗(yàn)結(jié)果精度、速度與參數(shù)量對(duì)比以下是一組來(lái)自模擬項(xiàng)目X的對(duì)比數(shù)據(jù)各維度都是基于相同數(shù)據(jù)集、相同訓(xùn)練配置下的實(shí)測(cè)記錄。這邊的權(quán)威評(píng)測(cè)標(biāo)準(zhǔn)是COCO類別的mAP用單卡V100測(cè)試推理速度。模型結(jié)構(gòu)參數(shù)量GFLOPsmAP50mAP50:95FPS單backbone基線52M16564.843.261雙backboneSEFN87M28671.550.338雙backboneSEFN(輕量輔助分支)66M20568.946.149對(duì)比數(shù)據(jù)有兩個(gè)結(jié)論值得注意。首先是雙backbone SEFN相比單backbone在mAP50:95上提升了7個(gè)點(diǎn)左右其中小目標(biāo)類別提升最大說(shuō)明局部空間調(diào)制確實(shí)補(bǔ)足了尺度多樣性。其次是輕量輔助分支的變體只增加14M參數(shù)FPS還能接近50工程落地的性價(jià)比更高。當(dāng)然不同數(shù)據(jù)集、不同基線上測(cè)出來(lái)的數(shù)字會(huì)有差異不必完全對(duì)齊這張表趨勢(shì)基本是穩(wěn)定的只要前置特征存在明顯的結(jié)構(gòu)信息SEFN就能穩(wěn)定帶來(lái)小幅精度收益。5. 踩坑記錄門控飽和、梯度不穩(wěn)與顯存優(yōu)化實(shí)話講這套方案我前后調(diào)了小兩個(gè)月踩了不少坑下面直接把這些坑連同排查思路一起列出來(lái)。5.1 門控全部飽和成1模塊失效有一次訓(xùn)練到120個(gè)epoch后我打印門控圖的統(tǒng)計(jì)量發(fā)現(xiàn)大量樣本的門控值幾乎全部接近1。這意味著SEFN變成了普通的殘差前饋模塊調(diào)制能力消失。排查下來(lái)原因是門控分支的Sigmoid偏置初始化為0但訓(xùn)練過(guò)程中前置特征幅度逐漸增大直接把Sigmoid打到了飽和區(qū)。解決方法是給gate_dw的卷積權(quán)重初始化成接近0的均勻分布并且把gate_fc的bias初始化為0這樣門控初始值在0.5附近。另外我在損失函數(shù)里不直接約束門控但會(huì)在訓(xùn)練前20個(gè)epoch內(nèi)持續(xù)監(jiān)控門控的標(biāo)準(zhǔn)差如果標(biāo)準(zhǔn)差小于0.05就會(huì)臨時(shí)把學(xué)習(xí)率調(diào)低一半給門控分支一個(gè)穩(wěn)定探索的空間。5.2 梯度不穩(wěn)定門控信號(hào)學(xué)不到有效結(jié)構(gòu)另一個(gè)問(wèn)題出現(xiàn)在輔助分支非常輕量的情況下。輔助分支參數(shù)量少提取的局部空間特征質(zhì)量不高門控網(wǎng)絡(luò)學(xué)習(xí)不到有效的結(jié)構(gòu)信息表現(xiàn)為訓(xùn)練loss大幅波動(dòng)。排查后是輔助分支的通道數(shù)太窄特征表達(dá)能力不夠。我把輔助分支的通道數(shù)從原來(lái)的1/4倍調(diào)整到1/2倍同時(shí)在輔助分支的輸入位置加了一個(gè)輕量的SE注意力用于抑制無(wú)結(jié)構(gòu)特征的響應(yīng)效果立竿見(jiàn)影。如果不想增加通道數(shù)也可以考慮對(duì)前置特征做多尺度局部提取同時(shí)使用3x3和5x5的深度可分離卷積再把兩個(gè)分支的特征拼接起來(lái)為門控提供更豐富的局部證據(jù)。5.3 雙backbone顯存爆炸怎么辦雙backbone最直接的代價(jià)就是計(jì)算量和顯存占用翻倍。如果顯存有限我建議先砍輔助分支的分辨率而不是砍通道數(shù)。把輔助分支的輸入分辨率從640x640降到416x416前置特征在深層對(duì)應(yīng)的特征圖面積可以下降43%顯存節(jié)省非??捎^。門控雖然作用在分辨率不一致的特征上但上采樣操作放在門控構(gòu)建之前不會(huì)丟失太多結(jié)構(gòu)信息。另外一個(gè)省顯存的方法是讓兩條backbone共享前幾個(gè)stage的權(quán)重。比如第1、2個(gè)stage完全共享只在第3、4個(gè)stage分開(kāi)這樣顯存只增加約40%SEFN的性能損失大概在1個(gè)百分點(diǎn)以內(nèi)在資源受限場(chǎng)景下是值得推薦的折中方案。6. 幾點(diǎn)實(shí)戰(zhàn)體會(huì)這套方案做到后面我對(duì)特征融合的思考改變了不少。以前總覺(jué)得融合就是給特征圖加權(quán)重或者拼接通道但SEFN帶來(lái)的啟發(fā)是局部空間信息不僅可以直接作為最終特征的一部分更可以反過(guò)來(lái)作為“引導(dǎo)信號(hào)”去調(diào)制另一條分支的表達(dá)。這種跨特征的調(diào)制關(guān)系遠(yuǎn)比在單一特征上疊注意力來(lái)得有表現(xiàn)力。第一點(diǎn)體會(huì)門控技術(shù)的關(guān)鍵不在于Sigmoid和乘法而在于門控信號(hào)的來(lái)源。監(jiān)督信號(hào)越接近任務(wù)本質(zhì)門控越有物理含義。在目標(biāo)檢測(cè)里前置特征的局部空間信息天然對(duì)應(yīng)“哪里是目標(biāo)的邊界”這一任務(wù)線索用它去調(diào)制語(yǔ)義特征融合出來(lái)的結(jié)果自然有了邊界敏感度。第二點(diǎn)體會(huì)雙分支結(jié)構(gòu)不要盲目追求參數(shù)對(duì)稱。輔助分支完全可以用更輕的結(jié)構(gòu)只要能穩(wěn)定提取到局部特征就達(dá)到了設(shè)計(jì)目的。真正需要在意的反而是兩分支特征的尺度對(duì)齊和數(shù)值分布平衡這一步?jīng)]做好的話模塊做得再精巧也發(fā)揮不出來(lái)。第三點(diǎn)體會(huì)訓(xùn)練過(guò)程必須關(guān)注門控的一舉一動(dòng)。門控是這套模塊的神經(jīng)中樞建議每個(gè)epoch結(jié)束都抽樣打印一遍門控統(tǒng)計(jì)信息一旦發(fā)現(xiàn)長(zhǎng)期飽和或長(zhǎng)期無(wú)差別分布就說(shuō)明前置特征和門控分支的配合出了異常需要從初始化、通道寬度和數(shù)據(jù)增強(qiáng)三方面排查。這套方案后續(xù)可以嘗試的方向也很多比如把門控分支替換成可變形卷積去自適應(yīng)局部區(qū)域選擇范圍或者把門控調(diào)制從逐空間位置擴(kuò)展成逐通道加逐空間位置的二維聯(lián)合門控。我對(duì)小目標(biāo)密集場(chǎng)景下的表現(xiàn)尤其期待畢竟局部空間一致性和長(zhǎng)距離依賴的融合本質(zhì)上就是在回答一個(gè)老問(wèn)題模型如何在看得見(jiàn)細(xì)節(jié)的同時(shí)看得到整體。