如何使用Tensorflow對象檢測進行像素級分類?
最近,Tensorflow添加了一些新的功能,現在我們可以擴展API來確定感興趣的對象的像素和像素位置。請參見下面的例子:
GIF
代碼的部分就不在這裡贅述,詳情可以參見(https://github.com/priya-dwivedi/Deep-Learning/blob/master/Mask_RCNN/Mask_RCNN_Videos.ipynb)
實例分割
實例分割是對象檢測的一個擴展,其中一個二進位掩碼(即對象和背景)與每個邊界框關聯。這允許對框內對象的範圍進行更細粒度的信息。
那麼我們什麼時候會需要這種額外的粒度呢?我想到的一些例子是:
1.自動駕駛汽車——它的使用需要知道其他的車輛的在行駛過程中、停靠在路邊時等等的確切的位置,或者是一個人過馬路的地點、行駛的路徑等。
2.機器人系統——如果機器人知道兩個部件的準確位置,它們的行為就會表現的更好。
有幾種演算法實現了實例分割,但Tensorflow對象檢測API所使用的演算法是掩碼RCNN。
Mask RCNN
讓我們先從比較簡單的地方說起。
Mask RCNN 架構
Faster RCNN是一個非常好的演算法,用於對象檢測。Faster RCNN由兩個階段組成。第一階段,稱為區域提案網路(RPN),提出候選對象邊界框。第二階段,在本質上是Faster RCNN,從每個候選框中提取出使用RoIPool的特性,並進行分類和邊界框的回歸。兩個階段使用的特性可以共享,以獲得更快的推理。
Mask R-CNN在概念上很簡單:Faster RCNN對每個候選對象有兩個輸出,一個類標籤和一個邊界框偏移。為此,我們添加了輸出對象掩碼的第三個分支——這是一個二進位掩碼,表示對象在邊界框中的像素。但是額外的掩碼輸出與類和框輸出不同,需要提取更精細的物體空間布局。為此,RCNN使用了下面描述的全卷積網路掩碼RCNN文件(FCN)。
全卷積網路體系結構
FCN是一種常用的語義分割演算法。這個模型使用了不同的卷積和最大池化層,首先將圖像解壓到原始大小的1/32。然後在這個粒度級別上進行類別預測。最後,它使用了採樣和反褶積來調整圖像的大小。
因此,簡而言之,我們可以說,Mask RCNN結合了兩個網路——Faster RCNN和一個大型架構中的FCN。該模型的損失函數是在進行分類、生成邊界框和生成掩碼時的總損失。
Mask RCNN有一些額外的改進,使得它比FCN更加精確。你可以在他們的論文中了解更多。
實現
測試圖像
要在圖像上測試這個模型,你可以利用在Tensorflow網站上共享的代碼。我測試了他們最輕量級的模型mask_rcnn_inception_v2_coco。只需下載模型並升級到tensorflow 1.5(這很重要!)請參閱下面的示例結果:
在風箏圖像上的Mask RCNN
測試視頻
對我來說,更有趣的練習是在You tube上運行這個模型。我用keepvid從你的tube上下載了一些視頻。而且我喜歡看圖書館的電影,因為它可以操縱視頻文件。
主要步驟是:
·使用VideoFileClip函數從視頻中提取每個幀。
·fl_image函數是一個非常棒的函數,它可以接收圖像並將其替換為修改後的圖像。用它來對從視頻中提取的每個圖像進行對象檢測。
·最後將所有修改後的剪輯圖像合併到一個新的視頻中。
下一個步驟
關於這個API的進一步探索,還有一些其他的想法:
·嘗試更精確但高負荷的模型,看看他們有多大的不同。
·使用API在自定義數據集上訓練掩碼RCNN。接下來準備要做的事情。
※2018年6大BI與數據可視化工具的比較分析
※「鏈」上AI才是2018年的正確打開方式?
TAG:AI全球動態 |