如何通過深度學習,完成計算機視覺中的所有工作?

如何通過深度學習,完成計算機視覺中的所有工作?
如何通過深度學習,完成計算機視覺中的所有工作?

Mask-RCNN做對象檢測和實例分割

作者 | George Seif

譯者 | 天道酬勤,責編 | Carol

出品 | AI科技大本營(ID:rgznai100)

Mask-RCNN做對象檢測和實例分割:


https://miro.medium.com/max/1200/1*
s9raSe9mLeSSuxE3API-ZA.gif你想做計算機視覺嗎?如今,深度學習是必經之路。大規模數據集以及深層卷積神經網絡(CNN)的表徵能力可提供超準確和強大的模型。但目前仍然只有一個挑戰:如何設計模型?像計算機視覺這樣廣泛而複雜的領域,解決方案並不總是清晰明瞭的。計算機視覺中的許多標準任務都需要特別考慮:分類、檢測、分割、姿態估計、增強和恢復以及動作識別。儘管最先進的網絡呈現出共同的模式,但它們都需要自己獨特的設計。那麼,我們如何為所有這些不同的任務建立模型呢?

作者在這裡向你展示如何通過深度學習完成計算機視覺中的所有工作!

如何通過深度學習,完成計算機視覺中的所有工作?

分類

計算機視覺中最出名的就是分類。圖像分類網絡從一個固定大小的輸入開始。輸入圖像可以有任意數量的通道,但對於RGB圖像通常為3。在設計網絡時,分辨率在技術上可以是任意大小,只要足夠大到能夠支持在整個網絡中將要進行的向下採樣量即可。

例如,如果你對網絡內的4個像素進行向下採樣,則你的輸入大小至少應為4²= 16 x 16像素。隨著深入網絡,當我們嘗試壓縮所有信息並降至一維矢量表示形式時,空間分辨率將降低。為了確保網絡始終有能力將其提取的所有信息進行處理,我們根據深度的比例增加特徵圖的數量,來適應空間分辨率的降低。也就是說,我們在向下採樣過程中損失了空間信息,為了適應這種損失,我們擴展了特徵圖來增加我們的語義信息。在選擇了一定數量的向下採樣後,特徵圖被矢量化並輸入到一系列完全連接的圖層中。最後一層的輸出與數據集中的類一樣多。

如何通過深度學習,完成計算機視覺中的所有工作?
如何通過深度學習,完成計算機視覺中的所有工作?

目標檢測目標檢測器分為兩種:一級和二級。他們兩個都以錨框開始。這些是默認的邊界框。我們的檢測器將預測這些框與地面真相之間的差異,而不是直接預測這些框。

在二級檢測器中,我們自然有兩個網絡:框提議網絡和分類網絡。框提議網絡在認為很有可能存在物體的情況下為邊界框提供座標。再次,這些是相對於錨框。然後,分類網絡獲取每個邊界框中的潛在對象進行分類。

在一級檢測器中,提議和分類器網絡融合為一個單一階段。網絡直接預測邊界框座標和該框內的類。由於兩個階段融合在一起,所以一級檢測器往往比二級檢測器更快。但是由於兩個任務的分離,二級檢測器具有更高的精度。

如何通過深度學習,完成計算機視覺中的所有工作?

快速RCNN二級目標檢測架構

如何通過深度學習,完成計算機視覺中的所有工作?

SSD一級目標檢測架構

如何通過深度學習,完成計算機視覺中的所有工作?

分割

分割是計算機視覺中較獨特的任務之一,因為網絡既需要學習低級信息,也需要學習高級信息。低級信息可按像素精確分割圖像中的每個區域和對象,而高級信息可直接對這些像素進行分類。這導致網絡被設計為將來自較早層和高分辨率(低層空間信息)的信息與較深層和低分辨率(高層語義信息)相結合。

如下所示,我們首先通過標準分類網絡運行圖像。然後,我們從網絡的每個階段提取特徵,從而使用從低到高的範圍內的信息。每個信息級別在依次組合之前都是獨立處理的。當這些信息組合在一起時,我們對特徵圖進行向上採樣,最終得到完整的圖像分辨率。

https://towardsdatascience.com/semantic-segmentation-with-deep-learning-a-guide-and-code-e52fc8958823

如何通過深度學習,完成計算機視覺中的所有工作?

GCN細分架構

如何通過深度學習,完成計算機視覺中的所有工作?

姿態估計

姿態估計模型需要完成兩個任務:(1)檢測圖像中每個身體部位的關鍵點;(2)找出如何正確連接這些關鍵點。這分以下三個階段完成:

  1. 使用標準分類網絡從圖像中提取特徵。

  2. 給定這些特徵,就可以訓練一個子網絡來預測一組2D熱圖。每個熱圖都與一個特定的關鍵點相關聯,幷包含每個圖像像素關於是否可能存在關鍵點的置信值。

  3. 再次給出分類網絡的特徵,我們訓練一個子網絡來預測一組2D向量場,其中每個向量場都與關鍵點之間的關聯度進行編碼。然後,具有較高關聯性的關鍵點被稱為已連接。

用這種方法訓練子網絡的模型,可以聯合優化關鍵點的檢測並將它們連接在一起。

如何通過深度學習,完成計算機視覺中的所有工作?

OpenPose姿態估計架構

如何通過深度學習,完成計算機視覺中的所有工作?

增強和恢復增強和恢復網絡是它們自己獨特的野獸。我們不會對此進行任何向下採樣,因為我們真正關心的是高像素/空間精度。向下採樣會真正抹殺這些信息,因為它將減少我們為空間精度而擁有的像素數。相反,所有處理都是在全圖像分辨率下完成的。 我們開始以全分辨率將想要增強/恢復的圖像傳遞到我們的網絡,而無需進行任何修改。網絡僅由許多卷積和激活函數組成。這些塊通常是受啟發的,並且有時直接複製那些最初為圖像分類而開發的塊,例如殘差塊、密集塊、擠壓激勵塊等。最後一層沒有激活函數,即使是sigmoid或softmax也沒有,因為我們想直接預測圖像像素,不需要任何概率或分數。

這就是所有這些類型的網絡。在圖像的全分辨率上進行了大量的處理,來達到較高的空間精度,使用了與其他任務相同的卷積。

如何通過深度學習,完成計算機視覺中的所有工作?

EDSR超分辨率架構

如何通過深度學習,完成計算機視覺中的所有工作?

動作識別動作識別是少數幾個需要視頻數據才能正常運行的應用程序之一。要對一個動作進行分類,我們需要了解隨著時間推移,場景中發生的變化, 這自然導致我們需要視頻。我們的網絡必須經過訓練來學習時空信息,即時空變化。最完美的網絡是3D-CNN。 顧名思義,3D-CNN是使用3D卷積的卷積網絡。它們與常規CNN的不同之處在於,卷積是在3維上應用的:寬度、高度和時間。

因此,每個輸出像素都是根據其周圍像素以及相同位置的前一幀和後一幀中的像素進行計算來預測的。

如何通過深度學習,完成計算機視覺中的所有工作?

直接大量傳遞圖像

視頻幀可以通過幾種方式傳遞:

  1. 直接在大批量中,例如第一個圖。由於我們正在傳遞一系列幀,因此空間和時間信息都是可用的。

如何通過深度學習,完成計算機視覺中的所有工作?

單幀+光流(左) 視頻+光流(右)

  1. 我們還可以在一個流中傳遞單個圖像幀(數據的空間信息),並從視頻中傳遞其相應的光流表示形式(數據的時間信息)。我們將使用常規2D CNN從這兩者中提取特徵,然後再將其組合起來傳遞給我們的3D CNN,後者將兩種類型的信息進行合併。

  2. 將幀序列傳遞給一個3D CNN,並將視頻的光流表示傳遞給另一個3D CNN。這兩個數據流都具有可用的空間和時間信息。鑑於我們正在對視頻的兩種不同表示(均包含我們的所有信息)進行特定處理,因此這是最慢的選擇,但也可能是最準確的選擇。

所有這些網絡都輸出視頻的動作分類。原文:
https://towardsdatascience.com/how-to-do-everything-in-computer-vision-2b442c469928

如何通過深度學習,完成計算機視覺中的所有工作?如何通過深度學習,完成計算機視覺中的所有工作?
  • 那個分分鐘處理10億節點圖計算的Plato,現在怎麼樣了?

  • 看似毫不相干,哲學與機器學習竟有如此大的交集

  • 黑客用上機器學習你慌不慌?這 7 種竊取數據的新手段快來認識一下

  • “谷歌殺手”發明者,科學天才 Wolfram

  • 數據庫激盪40年,深入解析PostgreSQL、NewSQL演進歷程

  • 5分鐘!就能學會以太坊 JSON API 基礎知識


分享到:


相關文章: