深度學習在計算機視覺領域取得了巨大成功,在分類、檢測甚至跟蹤任務上都有了巨大的進步,可以產生實時的高質量預測,但高速的實例分割的發展卻落后于目標檢測的進步。在目標檢測領域,我們已經擁有了高效的SSD和YOLO,但實例分割領域對于模型表現更多的重視、使得網絡的速度進展緩慢。
SSD和YOLO的加速主要通過移除Faster R-CNN這類網絡的第二個階段,通過單階段來提升速度,并通過其他的手段來彌補精度的下降。但實例分割的難度遠大于目標檢測,這樣的方法不能簡單的拓展到實例分割中。先進的實例分割算法強烈依賴于特征的定位來預測mask,通過將特定區域的特征進行“池化”后輸入到mask預測器中,這種串行的運行的方法難以加速。雖然也有像FCIS等單階段的方法,但他們卻需要較為復雜的后處理操作,難以保證實時性。
為了解決這個問題、提高實例分割的速度,研究人員提出了一種快速、單階段的實例分割模型YOLACT,在單個Titan Xp上實現了30幀以上的實例分割速度,并在MS COCO上實現了約30mAP的表現。這種方法拋棄了先前方法中的定位步驟,將實例分割分為了兩個并行的任務:一方面在整幅圖像上生成一系列mask原型,另一方面為每個實例預測出一系列線性疊加系數。隨后對于圖中的每個實例,基于線性疊加系數對原型mask進行組合并利用預測框進行剪切實現最后的實例輸出。在此過程中,網絡學會了如何定位不同位置、顏色和語義實例的mask。
此外,由于mask原型的預測不依賴于類別的數量,這一模型學習到如何組合mask原型的表示可以被所用類別所共享。這種表示的學習使得原型空間可以表示圖像中不同的位置、定位實例、檢測邊緣和編碼位置敏感信息,并對這些結果進行有效組合。
YOLACT通過并行的計算架構和輕量化的組合過程加速了實例分割的過程,在單階段檢測基礎網絡上僅僅添加了少量的計算,使得它可以輕松達到30fps。
YOLACT預測的mask由于充分利用了圖像空間的信息,不受特征池化的影響,對于大物體預測有著明顯的提升。而這種基于mask原型和mask系數的思想可以移植到很多先進的目標檢測架構上,實現快速精確的實例分割。
具體實現
先前的實例分割主要在提升精度上下功夫,Mask-RCNN是兩階段方法的代表,而單階段的方法主要基于位置敏感圖池化來實現實例分割,這些計算極大的限制了模型運行的速度。而目前的實時實例分割方法要么在精度上無法與先進的實例分割方法比擬,要么所面對的分割情形較為簡單。
在這篇文章的工作中,研究人員通過在現有的單階段目標檢測網絡上加上mask預測分支,但去除了精確的定位步驟(eg feature repooling)。在模型中一個分支利用FCN來產生一系列不依賴與實例的原型mask,第二個分支則是在目標檢測模塊后加上了預測mask系數的結構(每個 anchor),用于編碼實例在原型空間中的表示。
研究人員首先利用FCN實現了對于原型mask的預測。在基礎網絡特征層后添加了輸出為k通道的Protonet,它將生成k個獨立的mask原型。為了保證生成原型mask的穩定,研究人員選用了基礎網絡中更深層的特征圖,這還有益于提高原型mask的分辨率,對于提高mask的質量和小物體的效果有著重要的作用。
對于mask系數的預測,研究人員對現有的單階段目標檢測網絡進行了改造,為每個anchor添加了k個預測,并利用tanh對k個系數進行操作提高穩定性。
最后對生成的mask原型和系數進行線性組合即可得到最終的mask。
值得一提的是,研究人員還在這一工作中實現了一種快速非極大值抑制方法Fast NMS,比傳統的方法提高了11-16ms的速度。通過基于GPU實現的批量排序算法和IoU計算實現了加速,并利用矩陣運算和閾值找到每類需要保留的檢測結果。最后,研究人員還使用了語義分割損失在訓練中補償FastNMS帶來的下降(0.1-0.3mAP),通過在基礎網絡P3上添加1*1卷積,和sigmoid激活實現了0.4mAP的提升。
下表顯示了YOLACT在不同基礎網絡與輸入圖像尺寸上的表現,可以看到在保持較高mAP時實現了較快的速度。
FastNMS算法只會造成算法表現輕微的下降,但在速度上有較大的提升:
讓我們再來圍觀一下網絡的表現,對于重疊的物體表現依舊優異:
目前這一代碼已經開源,可以在下面的地址中找到:code:https://github.com/dbolya/yolact它基于Pytorch 1.0.1實現,并依賴于一些額外的python包:
# Cython needs to be installed before pycocotoolspip install cython opencv-python pillow pycocotools matplotlib
直接將代碼下載到本地即可開始調試:
git clone https://github.com/dbolya/yolact.gitcd yolact
現在就可以開始進行訓練或者測試了,當然測試之前需要先下載coco數據集
# Train setsh data/scripts/COCO.sh# Test setsh data/scripts/COCO.sh
# Display qualitative results on the specified image.python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.3 --top_k=100 --image=my_image.png# Display qualitative results on the specified image.python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.3 --top_k=100 --image=input_image.png:output_image.png# Process a whole folder of images.python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.3 --top_k=100 --images=path/to/input/folder:path/to/output/folder
愉快的開始分割吧!
-
圖像
+關注
關注
2文章
1084瀏覽量
40457 -
計算機視覺
+關注
關注
8文章
1698瀏覽量
45985 -
深度學習
+關注
關注
73文章
5502瀏覽量
121124
原文標題:實例分割太慢怎么破?戴維斯分校提出實時分割框架YOLACT突破速度邊界
文章出處:【微信號:thejiangmen,微信公眾號:將門創投】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論