天天看點

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

微信“掃一掃”識物已上線一段時間,受到了外界極大的關注。相比于行内相關競品的“拍”,“掃一掃”識物的特點在于“掃”,帶來更為便捷的使用者體驗。“掃”離不開高效的移動端物體檢測,本文将為你揭秘。

作者 | arlencai,騰訊 WXG 應用研究員

一、背景

“掃”是“掃一掃”識物的亮點,帶來更為便捷的使用者體驗。相比于“拍”的互動方式,“掃”的難點在于如何自動地選擇包含物體的圖像幀,這離不開高效的移動端物體檢測。

二、問題

“掃一掃”識物是一種面向開放環境的通用物體檢測——複雜多樣的物體形态要求模型具有強的泛化性,移動端的計算瓶頸又要求模型保持高的實時性。

“掃一掃”識物需要一個什麼樣的移動端檢測(Class-wise or Object-ness)呢?

Class-wise 檢測(即傳統意義上的物體檢測)的優勢在于同時輸出物體的位置和類别,然而開放環境下的物體類别很難準确定義和完整覆寫。

是以,我們将問題定義為Object-ness 檢測(即主體檢測):隻關注是否為物體和物體的位置,并不關心物體的具體類别。

Object-ness 的物體檢測對多樣化的物體具有更強的普适性,同時大大減輕模型的負擔來保證其實時性。這是“掃一掃”識物相比于相關競品在移動端檢測問題上定義的不同。

三、選型

近幾年物體檢測算法日新月異,面對琳琅滿目的檢測模型(見圖 1),合适的才是最好的。

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

1. One-stage

從模型的層次結構上,可分為兩階段(two-stage)和單階段(one-stage)。

(1)Two-stage 檢測器以 R-CNN 系列(Fast R-CNN [1]、Faster R-CNN [2]、Mask-RCNN[3])為代表,其模型的第一階段輸出粗糙的物體候選框(proposal),第二階段進一步回歸物體坐标和分類物體類别。

Two-stage 檢測器的優勢在于:RoIPool 的候選框尺度歸一化對小物體具有較好的魯棒性;進一步的區域(region)分類對于較多類别的檢測需求更為友好。

(2)One-stage 檢測器以 YOLO 和 SSD 系列(YOLO V1-V3 [4-6]、SSD [7]、RetinaNet[8])為代表,其特點是全卷積網絡(FCN)直接輸出物體的坐标和類别,為移動端加速提供了便利。

對于“掃一掃”識物中主體檢測的應用場景,小物體和多類别的需求不如實時性來得強烈,是以我們選擇 one-stage 的模型結構。

2. Anchor-free

(1)錨點(anchor)是 R-CNN 系列和 SSD 系列檢測方法的特點:在 one-stage 檢測器中,通過滑動視窗(slide window)産生各式各樣的 anchor 作為候選框;在 two-stage 檢測器中,RPN 從 anchor 中挑選合适的候選框進行第二階段的分類和回歸。

Anchor 為檢測器提供物體的形狀先驗,可有效地降低檢測任務的複雜度,但經驗性的 anchor 參數會極大地影響模型的性能。

(2)無錨點(anchor-free)的檢測器随着網絡結構(如:FPN[9]、DeformConv [10])和損失函數(如:Focal Loss [8]、IOU Loss[11])的發展逐漸煥發出新的生機。其中,尺度魯棒的網絡結構增強模型的表達能力,訓練魯棒的損失函數解決樣本的平衡和度量問題。

Anchor-free 方法以 YOLOV1-V2 [4-5]及其衍生(DenseBox [12]、DuBox [13]、FoveaBox [14]、FCOS[15]、ConerNet [16]、CenterNet[17]等)為代表。他們抛開候選框的形狀先驗,直接分類物體的類别和回歸物體的坐标。

在“掃一掃”識物的應用場景中,複雜多樣的物體形狀對 anchor 的設計提出了巨大挑戰,是以我們選擇 anchor-free 的模型結構。

3. Light-head

近一年來,anchor-free 的檢測器日新月異。然而,在移動端的應用場景下,大部分 one-stage 且 anchor-free 的檢測器仍存在以下不足:

(1)多輸出(Multi-head):為了增強模型對多尺度物體的檢測能力,大部分檢測器(如:FoveaBox[14]、DuBox [13]、FCOS[15])普遍采用多頭輸出來提高模型的尺度魯棒性。

其中,低層特征滿足小物體檢測需求,高層特征應對大物體檢測。然而,多頭輸出的網絡結構對于移動端加速并不友好。

(2)後處理(Post-process):為了解決 anchor 先驗缺失和 multi-head 結果整合的問題,大部分檢測器都需依賴複雜的後處理,如:非極大值抑制(NMS)和各式各樣的奇技淫巧(trick),但它們普遍不适合并行化加速。

綜上,我們選取CenterNet作為“掃一掃”識物的移動端檢測模型(見圖 2)。CenterNet 是 one-stage 的 anchor-free 檢測方法,single-head 的輸出和高斯響應圖的回歸使其不依賴 NMS 的後處理。

CenterNet 将目标檢測問題變成一個标準的關鍵點估計問題:通過全卷積網絡得到中心點的熱力圖(峰值點即中心點),并預測峰值點對應的物體寬高資訊。

此外,我們引進了 TTFNet[18]中高斯采樣、高斯權重和 GIOU Loss[19]等技術實作 CenterNet 的訓練加速,僅需 5 小時即可在 4 塊 Tesla P4 下完成 MS-COCO 的訓練,這為模型調參和優化節省了大量的時間。

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

四、優化

針對移動端的檢測需求,首先我們将 CenterNet 的骨幹網絡(backbone)從 ResNet18 更換為對移動裝置更為友好的 ShuffleNetV2[20]。

然而,僅僅依賴 backbone 帶來的效能提升是有限的,對此我們進行針對性的模型優化。

1. 大感受野(Large RF)

從 ResNet 到 ShuffleNetV2 主要影響了模型的深度和感受野。在以熱力圖回歸的 CenterNet 中,模型的感受野顯得異常重要。

如何在保持網絡輕量的前提下提高模型的感受野呢?

從 AlexNet 到 VGG,VGG 通過将大尺度的卷積核拆解為多個小尺度的卷積核(1 個 5x5→2 個 3x3):在相同感受野下,2 個 3x3 卷積的參數量和計算量均隻有 1 個 5x5 的 18/25。

然而,這在深度(depth-wise)卷積的時代并不适用。

在 ShuffleNet 中,5x5 的 depth-wise 卷積獲得兩倍感受野,僅比 3x3 的 depth-wise 卷積增加極少的計算量(如圖 3)。

是以,我們将 ShuffleNetV2 中所有的 depth-wise 卷積均替換為 5x5 卷積。

因為缺少 ImageNet 預訓練的 5x5 模型,我們取巧地将 3x3 的 ShuffleNetV2 預訓練模型進行卷積核的零擴邊(zero padding),得到 5x5 的大卷積核 ShuffleNetV2。

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

2. 輕檢測頭(Light Head)

CenterNet 的檢測頭使用類 U-Net[21]的上采樣結構,可有效地融合低層細節資訊,進而提高對小物體的檢測性能。

然而,CenterNet 的檢測頭并未針對移動端進行優化,是以我們對其進行 ShuffleNet 化改造(見圖 4 紅框)。

首先,将檢測頭的所有普通 3x3 卷積替換為 5x5 的 depth-wise 卷積,并将可形變卷積(DeformConv)也改造為 depth-wise 的可形變卷積。

其次,參照 ShuffleNet 通道壓縮的技巧,将 CenterNet 中多層特征的殘差融合(residual)改造為通道壓縮的連接配接融合(concat)。

通過大感受野(Large RF)和輕檢測頭(Light Head),優化後的模型在 MS-COCO 資料庫在計算量(FLOPs)、參數量(Parameters)和檢測性能(mAP)均取得優異的結果,見表 1。

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

圖4:CenterNet檢測頭的結構優化

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

3. 金字塔插值(Pyramid Interpolation Module,PIM)

然而,可形變卷積(DeformConv)對移動端加速并不友好,是以我們需要重新設計 DeformConv 的替代品。

DeformConv 可自适應地對多尺度資訊進行抽取,在 MS-COCO 中的小物體檢測起到巨大作用。“掃一掃”識物對小物體的檢測需求并不是非常強烈,DeformConv 更多的是提供多樣化的尺度特征。

對此,我們借鑒圖像分割方法 PSPNet[22](見圖 5)的金字塔池化(Pyramid PoolingModule,PPM),提出了金字塔插值(Pyramid Interpolation Module,PIM)同時實作多尺度特征的融合和特征圖的插值(見圖 4 藍框)。

PIM 中主要包括三條分支進行 2 倍上采樣:空洞解卷積,卷積+上采樣,全局平均池化+全連接配接。

其中,“空洞解卷積”對應大尺度特征;“卷積+上采樣”對應小尺度特征;“全局平均池化+全連接配接”對應全局特征。

在 ShuffleNetV2 x0.5 的骨幹網絡下,表 2 對比了各種上采樣方法對檢測性能的影響,可見 PIM 有效地替代 DeformConv 在“掃一掃”識物中的作用。

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

圖5:PSPNet的金字塔池化子產品

微信「掃一掃」識物為什麼這麼快?背後的秘訣竟然是

五、部署

通過以上優化,我們最終采用表 2 中最優結果作為“掃一掃”識物的移動端檢測模型。

該模型采用基于 pytorch 架構的 mmdetection 作為訓練工具。在移動端部署上,我們采用 ncnn 架構,将 pytorch 模型轉換為 onnx 模型再轉換為 ncnn 模型,并在轉換過程中将參數量化到 16bit。

此外,為了進一步減小模型體積和加速,我們将網絡中 conv/bn/scale 三個連續的線性操作融合為一個 conv 層,在不影響效果的同時可減少約 5%的參數量,并提速約 5%~10%。

最終,“掃一掃”識物的移動端檢測模型僅 436 KB,在 iphone8 的 A11 CPU 上的單幀檢測時間僅 15ms。

六、展望

目前“掃一掃”移動端檢測隻是開端,移動端物體檢測的發展也才剛剛開始。

抛開“掃一掃”識物的場景,CenterNet 在通用的物體檢測上仍存在以下問題:

如何解決類别增加帶來的檢測頭爆炸性增長?可形變卷積(DeformConv)是否存在更通用的替代品?U-Net 式的上采樣結構是否可進一步優化?

路漫漫其修遠兮,在我們後續工作中将針對這些問題進行探索。

歡迎大家交流,更歡迎加入我們。微信長期招收計算機視覺和自然語言處理的人才,履歷請投至[email protected]

參考文獻:

[1] Girshick, Ross. "Fast R-CNN." international conference on computer vision

(2015): 1440-1448.

[2] Ren, Shaoqing, et al. "Faster R-CNN: Towards Real-Time Object Detection with

Region Proposal Networks." IEEE Transactions on Pattern Analysis and Machine

Intelligence 39.6 (2017): 1137-1149.

[3] He, Kaiming, et al. "Mask R-CNN." international conference on computer

vision (2017): 2980-2988.

[4] Redmon, Joseph, et al. "You Only Look Once: Unified, Real-Time Object

Detection." computer vision and pattern recognition (2016): 779-788.

[5] Redmon, Joseph, and Ali Farhadi. "YOLO9000: Better, Faster, Stronger."

computer vision and pattern recognition (2017): 6517-6525.

[6] Redmon, Joseph, and Ali Farhadi. "YOLOv3: An Incremental Improvement."

arXiv: Computer Vision and Pattern Recognition (2018).

[7] Liu, Wei, et al. "SSD: Single Shot MultiBox Detector." european conference

on computer vision (2016): 21-37.

[8] Lin, Tsungyi, et al. "Focal Loss for Dense Object Detection." international

conference on computer vision (2017): 2999-3007.

[9] Lin, Tsungyi, et al. "Feature Pyramid Networks for Object Detection."

computer vision and pattern recognition (2017): 936-944.

[10] Dai, Jifeng, et al. "Deformable Convolutional Networks." international

conference on computer vision (2017): 764-773.

[11] Yu, Jiahui, et al. "UnitBox: An Advanced Object Detection Network." acm

multimedia (2016): 516-520.

[12] Huang, Lichao, et al. "DenseBox: Unifying Landmark Localization with End to

End Object Detection." arXiv: Computer Vision and Pattern Recognition (2015).

[13] Chen, Shuai, et al. "DuBox: No-Prior Box Objection Detection via Residual

Dual Scale Detectors." arXiv: Computer Vision and Pattern Recognition (2019).

[14] Kong, Tao, et al. "FoveaBox: Beyond Anchor-based Object Detector." arXiv:

Computer Vision and Pattern Recognition (2019).

[15] Tian, Zhi, et al. "FCOS: Fully Convolutional One-Stage Object Detection."

international conference on computer vision (2019): 9627-9636.

[16] Law, Hei, and Jia Deng. "CornerNet: Detecting Objects as Paired Keypoints."

european conference on computer vision (2019): 765-781.

[17] Zhou, Xingyi, Dequan Wang, and Philipp Krahenbuhl. "Objects as Points."

arXiv: Computer Vision and Pattern Recognition (2019).

[18] Liu, Zili, et al. "Training-Time-Friendly Network for Real-Time Object

Detection." arXiv: Computer Vision and Pattern Recognition (2019).

[19] Rezatofighi, Hamid, et al. "Generalized Intersection Over Union: A Metric

and a Loss for Bounding Box Regression." computer vision and pattern recognition

(2019): 658-666.

[20] Ma, Ningning, et al. "ShuffleNet V2: Practical Guidelines for Efficient CNN

Architecture Design." european conference on computer vision (2018): 122-138.

[21] Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. "U-Net: Convolutional

Networks for Biomedical Image Segmentation." medical image computing and

computer assisted intervention (2015): 234-241.

[22] Zhao, Hengshuang, et al. "Pyramid Scene Parsing Network." computer vision

and pattern recognition (2017): 6230-6239.

[23] Li, Zeming, et al. "Light-Head R-CNN: In Defense of Two-Stage Object

Detector." arXiv: Computer Vision and Pattern Recognition (2017).

[24] Wang, Jun, Xiang Li, and Charles X. Ling. "Pelee: A Real-Time Object

Detection System on Mobile Devices." neural information processing systems

(2018): 1967-1976.

推薦閱讀

騰訊雲技術社群:微信掃物上線,全面揭秘掃一掃背後的識物技術!

海量技術實踐經驗,盡在雲加社群!

https://cloud.tencent.com/developer