包曉安, 吉鵬飛
(浙江理工大學(xué), 杭州 310018)
人體關(guān)鍵點(diǎn)檢測技術(shù)在姿態(tài)估計(jì)中具有重要意義,并且在安防, 游戲娛樂等行業(yè)應(yīng)用前景廣闊.多人關(guān)鍵點(diǎn)檢測主要有自頂向下和自底向上這兩種策略, 自頂向下的策略是先將圖片中目標(biāo)分割后再分別檢測每個(gè)目標(biāo)的關(guān)鍵點(diǎn); 而后者是先檢測出所有關(guān)鍵點(diǎn)然后再用特定的算法將這些關(guān)鍵點(diǎn)與每個(gè)目標(biāo)進(jìn)行匹配.2014年Toshev等首次提出基于深度學(xué)習(xí)的deeppose模型[1]來進(jìn)行關(guān)鍵點(diǎn)檢測.之后為提高檢測效率, Tompson等[2]提出用heatmap回歸關(guān)鍵點(diǎn).Carreira等提出CPM[3], 并引入中間監(jiān)督機(jī)制來防止梯度消失, 能夠很好地融合圖片的各種信息, 但它參數(shù)較多, 檢測速度較慢.Newell等提出了Hourglass module結(jié)構(gòu)[4], 它能夠?qū)σ恍╇y檢測的關(guān)鍵點(diǎn)做出預(yù)測, 但效果不佳.CMU提出一種基于Bottom-up策略的Openpose[5], 它檢測出所有關(guān)鍵點(diǎn)后, 通過二分圖最大權(quán)匹配算法來對關(guān)鍵點(diǎn)進(jìn)行拼接, 得到每個(gè)人的骨架.2017年曠視提出了CPN網(wǎng)絡(luò)[6], 它能夠?qū)σ恍┱趽醯? 難以檢測的點(diǎn)做出很好的預(yù)測.2019年微軟提出了HRNet[7], 它將不同大小的特征層由串行變成了并行, 減小了上采樣下采樣的信息的丟失.
對于多人關(guān)鍵點(diǎn)檢測, 兩種策略各有優(yōu)劣, 使用自底向上的方法雖然計(jì)算量較小, 但當(dāng)目標(biāo)密集, 該算法容易將關(guān)鍵點(diǎn)誤判, 并且如果目標(biāo)尺度較小可能會漏檢; 自頂向下方法準(zhǔn)確率更高, 但檢測結(jié)果受目標(biāo)檢測的影響較大, 并且計(jì)算量與標(biāo)記框數(shù)量成正比.為了避免錯(cuò)判和漏檢, 還是用自頂向下的方案更合適, 因此目標(biāo)檢測標(biāo)記框的準(zhǔn)確率及關(guān)鍵點(diǎn)檢測前的圖片質(zhì)量就顯得尤為重要.常見的單階段目標(biāo)檢測算法有YOLO、SSD[8], RetinaNet[9]等; 常見的雙階段算法有Faster RCNN、Mask RCNN[10]以及 CascadeRCNN[11]等.與單階段相比雙階段要先用RPN等算法篩選出一定數(shù)量的候選框而后再分類和回歸, 準(zhǔn)確率高但速度比較慢.
目標(biāo)檢測網(wǎng)絡(luò)訓(xùn)練時(shí)通常采用IOU來劃分正負(fù)樣本, 但它不能夠很好地衡量預(yù)測框和實(shí)際框的重疊程度, 并且當(dāng)重疊度為0時(shí), 它的損失函數(shù)值也為0, 此時(shí)沒有梯度返回?zé)o法學(xué)習(xí); 另一方面由于關(guān)鍵點(diǎn)檢測網(wǎng)絡(luò)沒有給每個(gè)通道和特征層分配合適的權(quán)重, 其精度仍有提升空間.同時(shí)在實(shí)際應(yīng)用中往往是基于視頻流切片的, 難免會發(fā)生運(yùn)動(dòng)模糊現(xiàn)象影響圖片質(zhì)量進(jìn)而降低關(guān)鍵點(diǎn)檢測的準(zhǔn)確率.為此本文提出了一種改進(jìn)的RetinaNet-CPN網(wǎng)絡(luò), 能很好提升人體關(guān)鍵點(diǎn)整體檢測精度.
算法流程如圖1所示: 對視頻流切片后, 先用改進(jìn)的RetinaNet網(wǎng)絡(luò)對該圖片進(jìn)行目標(biāo)檢測, 接著用Laplacian算子對每個(gè)目標(biāo)框做模糊檢測, 如果大于設(shè)定的閾值, 則要用本文的方法估算出模糊核并用其恢復(fù)出清晰的圖片.最后用引入注意力機(jī)制的CPN網(wǎng)絡(luò)進(jìn)行關(guān)鍵點(diǎn)檢測.
圖1 算法流程圖
綜合時(shí)效性和準(zhǔn)確率考慮, 本文選用單階段中效果較好的RetinaNet做目標(biāo)檢測網(wǎng)絡(luò).如圖2所示, 為了充分利用各層的語義信息, RetinaNet采用的是ResNet+FPN[12]結(jié)構(gòu).FPN網(wǎng)絡(luò)詳細(xì)結(jié)構(gòu)如圖3所示,它主要由P3-P7構(gòu)成, ResNet的C3-C5這3層兩倍上采樣后與下層經(jīng)過1×1的卷積相加, 就成了FPN的P3-P5層, 采用1×1卷積核的目的是降低通道數(shù), C5經(jīng)過卷積得到P6, P7是C6經(jīng)過激勵(lì)函數(shù)后卷積所得.每個(gè)融合層后接一個(gè)分類網(wǎng)絡(luò)和一個(gè)位置回歸網(wǎng)絡(luò).每個(gè)FPN特征層都有3種不同大小, 3種不同長寬比例的anchor.
圖2 RetinaNet網(wǎng)絡(luò)結(jié)構(gòu)
圖3 RetinaNet FPN結(jié)構(gòu)
單階段目標(biāo)檢測效果不及雙階段的主要原因是:負(fù)樣本比例遠(yuǎn)高于正樣本.這些負(fù)樣本對網(wǎng)絡(luò)學(xué)習(xí)是沒有效果的, 而雙階段利用RPN網(wǎng)絡(luò)使得正負(fù)樣本控制在一定比例, 學(xué)習(xí)效果更好.RetinaNet優(yōu)于其他單階段網(wǎng)絡(luò)主要原因是它引入平衡因子來抑制易分樣本的損失權(quán)重, 損失函數(shù)Focal Loss的表達(dá)式如下:
實(shí)驗(yàn)發(fā)現(xiàn)當(dāng)α取0.25,γ取2時(shí)檢測效果最好.
RetinaNet用IOU (兩框的交并比)作為預(yù)測框和真實(shí)框評價(jià)函數(shù)并用它來劃分正負(fù)樣本.但I(xiàn)OU沒有將兩框的距離考慮進(jìn)去, 當(dāng)兩個(gè)框沒有重合即IOU為0時(shí), 此時(shí)沒有梯度回傳, 不能調(diào)整模型參數(shù); 另一方面如圖4所示, 盡管它們的IOU是一樣的, 但I(xiàn)OU不能很好地反映其重合的優(yōu)劣性, 第一幅圖效果最好, 最后一幅圖最差.
圖4 目標(biāo)框重疊
DIOU[13]同時(shí)考慮了預(yù)測框與實(shí)際框的歐式距離,重疊率和兩框的大小, 能夠很好地解決上述問題, 計(jì)算公式如下:
其中,b,bgt分別代表預(yù)測框和真實(shí)框的中心點(diǎn),ρ2(b,bgt)表示這兩者的歐氏距離的平方,c代表的是能夠同時(shí)包含預(yù)測框和真實(shí)框的最小閉包區(qū)域的對角線距離.當(dāng)兩框的IOU為0時(shí), DIOU可以指導(dǎo)預(yù)測框往哪個(gè)方向調(diào)整, 能得到更佳更穩(wěn)定的回歸.
如圖5所示, 運(yùn)動(dòng)模糊主要是在攝像機(jī)曝光時(shí)刻內(nèi), 目標(biāo)快速移動(dòng)造成的.對于一幅圖片來說, 如果該圖片中的高頻分量較少則可認(rèn)為它是模糊的.拉普拉斯算子是一種常用的檢測圖片是否模糊的二階微分線性算子, 公式如式(3)所示, 其檢測過程是: 先將每個(gè)目標(biāo)框的圖片resize成固定大小的圖片, 灰度化后用Laplacian算子濾波, 計(jì)算其方差.由于模糊圖片很難提取邊緣, 因此方差較小, 如果計(jì)算出的值小于閾值則認(rèn)為它是模糊照片.
圖5 運(yùn)動(dòng)模糊圖片
運(yùn)動(dòng)模糊圖像在忽略噪聲情況下可以認(rèn)為由原清晰圖像與一個(gè)模糊核卷積而成, 所以關(guān)鍵就是估算出模糊核的方向及大小, 然后用逆傅里葉變換即可得到清晰的圖像.由于攝像頭的曝光時(shí)間比較短, 目標(biāo)在這段時(shí)間里的運(yùn)動(dòng)可看成是勻速直線運(yùn)動(dòng).設(shè)曝光時(shí)長為T, 目標(biāo)沿位移方向運(yùn)動(dòng)了L像素即模糊核大小為L,x0(t)和y0(t)是位移方向分解的兩個(gè)運(yùn)動(dòng)分量, 模糊圖像g(x,y)可由清晰圖像f(x,y)積分得到, 其關(guān)系式如式(4)所示:
對式(4)進(jìn)行二維傅里葉變換:
則有:
設(shè)目標(biāo)在x軸和y軸方向的位移分量分別為a和b, 則代入式 (6)可得:
設(shè)圖像尺寸為M×N, 將它表示成離散形式得:
圖6是加入45°模糊核后的頻譜圖.
圖6 運(yùn)動(dòng)模糊頻譜圖
本文采用Radon變換[15]來檢測亮條紋的偏移角,然后根據(jù)式(9)便可計(jì)算出模糊核的角度α.
為了得到更加精確的模糊核大小, 將頻譜繞中心點(diǎn)旋轉(zhuǎn)α后, 計(jì)算出相鄰暗條紋間距d, 讓|H(u)|的值為0, 得到模糊核長度為N/d.
參考文獻(xiàn)[16], 上述去運(yùn)動(dòng)模糊算法步驟總結(jié)如下:
(1) 將目標(biāo)框圖片灰度化后得到頻譜幅度圖|G(u,v)|.
(2) 為了使條紋表現(xiàn)得更加明顯, 將中心點(diǎn)由左上角轉(zhuǎn)變成頻域矩形的中心點(diǎn)位置.
(3) 估算模糊核.用Radon變換找出變換矩陣最大值的列數(shù)即為頻譜條紋偏移角, 根據(jù)式(9)便可得到模糊核角度; 算出相鄰暗紋間距, 即可得到模糊核尺度.
(4) 得到模糊核后, 經(jīng)過逆傅里葉變換即可恢復(fù)出原清晰圖像.
RetinaNet網(wǎng)絡(luò)檢測出圖片中的每個(gè)人后, 如圖7所示, 將每個(gè)目標(biāo)框裁剪后作為輸入送入關(guān)鍵點(diǎn)檢測網(wǎng)絡(luò), 人體關(guān)鍵點(diǎn)檢測選用的是CPN網(wǎng)絡(luò)(Cascaded Pyramid Network), 如圖8所示, 它主要由GlobalNet和RefineNet兩個(gè)子網(wǎng)絡(luò)組成.GlobalNet用ResNet提取特征, 其中C2-C5這4個(gè)特征層采用FPN的結(jié)構(gòu)來進(jìn)行特征融合.GlobalNet對于一些比較容易被檢測到的、未被遮擋的如眼睛等關(guān)鍵點(diǎn)檢測效果較好, 而對于一些難檢測的, 遮擋嚴(yán)重的關(guān)鍵點(diǎn)檢測效果不佳, 需要依賴于RefineNet.RefineNet接在GlobalNet后面,在GlobalNet每層輸出后加一定個(gè)數(shù)的bottleneck (即residual block), 然后經(jīng)過不同倍數(shù)的上采樣后通過concat層(其作用是將多個(gè)特征圖在某個(gè)維度上進(jìn)行拼接)融合各層語義信息, 最后再經(jīng)過一個(gè)bottleneck輸出結(jié)果.同時(shí)GlobalNet也采用在線難挖掘技術(shù), 忽略易分樣本的損失值, 主要計(jì)算幾個(gè)難檢測點(diǎn)的損失值, 使得網(wǎng)絡(luò)注重難分樣本的學(xué)習(xí), 提高準(zhǔn)確率.
圖7 人體關(guān)鍵點(diǎn)檢測
圖8 CPN網(wǎng)絡(luò)結(jié)構(gòu)
為了進(jìn)一步提升CPN網(wǎng)絡(luò)關(guān)鍵點(diǎn)檢測的準(zhǔn)確率,在ResNet后加入CBAM注意力機(jī)制[17]能夠提升網(wǎng)絡(luò)性能.如圖9所示, CBAM主要由channel attention和spatial attention兩部分構(gòu)成.channel attention的目的是為每個(gè)通道分配合理的權(quán)重, 為了進(jìn)一步提高效率及獲得更豐富的信息, 特征圖通過一個(gè)bottleneck后經(jīng)過一個(gè)并行的最大池化層和平均池化層, 然后分別進(jìn)入多層感知機(jī)(MultiLayer Perceptron, MLP), 再將兩者疊加后就是channel attention.spatial attention更加關(guān)注于位置信息, 將channel attention得到的加權(quán)特征圖送入spatial attention后同樣經(jīng)過一個(gè)并行的maxpool和avgpool層, 得到的結(jié)果經(jīng)過一個(gè)concat層拼接后再經(jīng)過卷積層, 即可學(xué)習(xí)每個(gè)位置對預(yù)測結(jié)果的重要程度.
圖9 引入注意力機(jī)制的網(wǎng)絡(luò)
實(shí)驗(yàn)基于CentOS 操作系統(tǒng), Python 3.6, PyTorch 1.4,CUDA 10.1, GPU 型號為 Tesla T4, 顯存為15 GB, CPU型號為Intel(R) Xeon(R) Silver 4110, 2.10 GHz.實(shí)驗(yàn)采用的是COCO數(shù)據(jù)集[18], COCO數(shù)據(jù)集訓(xùn)練集有11萬張圖片, 驗(yàn)證集約有5千張圖片, 測試集有2萬多張圖片, 并且該數(shù)據(jù)集對每個(gè)人的臉部和肢體共17個(gè)關(guān)鍵點(diǎn)做了標(biāo)注.主要做了3個(gè)實(shí)驗(yàn): 用DIOU代替IOU做評價(jià)函數(shù)的對比實(shí)驗(yàn)、模糊核估算及圖像復(fù)原實(shí)驗(yàn)和引入注意力機(jī)制CPN[19]的性能對比實(shí)驗(yàn).
訓(xùn)練時(shí)先將輸入的圖片resize成256×256像素,然后用一些常用的數(shù)據(jù)增強(qiáng)的手法如翻轉(zhuǎn)、旋轉(zhuǎn)、隨機(jī)裁剪等方法來提高模型的泛化能力.實(shí)驗(yàn)學(xué)習(xí)率初始值為 4 ×10-4, 一共經(jīng)歷15輪訓(xùn)練, 評價(jià)指標(biāo)采用AP (平均準(zhǔn)確率, Average Precision), 閾值為0.5、0.75的AP.實(shí)驗(yàn)測試選用的是一些常用的單階段網(wǎng)絡(luò)如SSD、YOLOv3[20]、RetinaNet等, 它們用DIOU代替IOU前后在COCO數(shù)據(jù)集的表現(xiàn)如表1所示.
表1 用DIOU代替IOU在各單階段網(wǎng)絡(luò)的表現(xiàn)
選取50張圖片檢測框內(nèi)的人體目標(biāo)加入不同的模糊核做模糊處理, 用本文的方法估算出模糊核.圖10、圖11、圖12是其中的3幅圖, 其實(shí)際與估算的模糊角度, 模糊核長度如表2所示.
圖10 run.jpg去模糊前后對比圖
圖11 farmer.jpg去模糊前后對比圖
圖12 woman.jpg去模糊前后對比圖
表2 實(shí)際模糊核與估算模糊核
關(guān)鍵點(diǎn)檢測采用的是RetinaNet+CPN的方式, 將每個(gè)目標(biāo)框resize成 128×256 送入CPN網(wǎng)絡(luò)檢測關(guān)鍵點(diǎn).實(shí)驗(yàn)學(xué)習(xí)率初始值為 5 ×10-4, 一共經(jīng)歷了15輪訓(xùn)練.評價(jià)指標(biāo)采用AP、AR (平均召回率, Average Recall)以及閾值為0.5, 0.75的AP、AR, 結(jié)果如表3所示.
表3 CPN網(wǎng)絡(luò)改進(jìn)前后對比
將RetinaNet正負(fù)樣本評價(jià)函數(shù)由IOU變成DIOU后, AP由39.1提高到40.2, 性能提高了2.81%, 同時(shí)將DIOU用在其他單階段網(wǎng)絡(luò)也有不錯(cuò)的性能提升,有很強(qiáng)的泛化能力.50幅圖片中估算出的模糊核與實(shí)際模糊核角度、尺寸偏差均值分別為3.7°和2.1 pixel.引入注意力機(jī)制后的CPN網(wǎng)絡(luò)關(guān)鍵點(diǎn)檢測AP和AR均有小幅提高, 分別提升1.12%和0.51%.
用本文提出的改進(jìn)的RetinaNet-CPN網(wǎng)絡(luò)將目標(biāo)評價(jià)函數(shù)IOU改成DIOU能夠有效提升目標(biāo)框提取的準(zhǔn)確率; 引入注意力機(jī)后CPN網(wǎng)絡(luò)各通道和特征層分配合理的權(quán)重, 性能有一定的提升; 同時(shí)用基于Radon變換的估算出的模糊核與實(shí)際模糊核相差不大, 用它基本能夠還原清晰圖.盡管用本文的方法使得關(guān)鍵點(diǎn)檢測性能得到一定的提升, 但對遮擋嚴(yán)重, 人員密集的情況下的關(guān)鍵點(diǎn)檢測依舊欠佳, 若再提升目標(biāo)檢測準(zhǔn)確率對關(guān)鍵點(diǎn)檢測效果提升有限, 接下來的研究應(yīng)重點(diǎn)關(guān)注如何提高遮擋點(diǎn)預(yù)測準(zhǔn)確性.