使用合成數據集來做目標檢測:目標檢測的介紹

語言: CN / TW / HK

導讀

本文討論使用生成資料集來做目標檢測的一些基礎概念。

今天,我們開始一系列專門討論一個特定的機器學習問題,這個問題通常由合成數據來補充:物體檢測。在這個系列的第一篇文章中,我們將討論什麼是目標檢測,以及資料從哪裡來,以及如何讓你的網路來檢測物體的邊界框下面。

圖片

問題設定:什麼是物體檢測

如果你有過計算機視覺方面的經驗,或者聽過許多關於現代深度學習的神奇之處的介紹,你可能知道影象分類問題:如何區分貓和狗?

圖片

儘管這只是一個二元分類(一個回答是/否的問題),但這已經是一個非常複雜的問題了。真實世界的影象“生活”在一個非常高維的空間中,以數百萬計的特徵為數量級:例如,從數學上講,一張一百萬畫素的彩色照片是一個超過三百萬數字的向量!因此,影象分類的重點不在於實際學習決策面(分離類),而在於特徵提取:我們如何將這個巨大的空間投射到更易於管理的東西上,而分割平面可以相對簡單?

這正是深度學習取得如此成功的原因:它不依賴於人們以前用於計算機視覺的手工功能SIFT,而是從零開始學習自己的特徵。分類器本身仍然非常簡單和經典:幾乎所有用於分類的深度神經網路都帶有一個softmax層,即基本的邏輯迴歸。關鍵是如何將影象空間轉換為邏輯迴歸足夠的表示,而這正是網路的其他部分的切入點。如果你看一些早期文章你可以找到例子,人們學習深度神經網路提取特徵,然後應用其他分類器,如支援向量機:

圖片

但到目前為止,這是很少見的:一旦我們有足夠的資料來訓練最先進的特徵提取器,在最後進行簡單的邏輯迴歸就容易得多,也足夠了。在過去的十年裡,人們已經開發了大量的影象特徵提取器:AlexNet, VGG, Inception, ResNet, DenseNet, EfficientNet……

要把它們全部解釋清楚,光靠一篇部落格文章是遠遠不夠的,但常見的思路是,你有一個特徵提取主幹,後面跟著一個簡單的分類層,然後你在一個大型影象分類資料集中從頭到尾地訓練整個東西,通常是ImageNet,這是一個巨大的人工標記和管理的資料集,有超過1400萬張圖片,標記了近22000個類別,以語義層次組織:

圖片

一旦你完成了這些,網路已經學會了為真實世界的攝影影象提取資訊豐富的、有用的特徵,所以即使你的類不是來自ImageNet,它也通常是一個調整以適應這個新資訊的問題。當然,你仍然需要新的資料,但通常不是數以百萬計的影象。當然,除非這是一個完全新穎的影象領域,如x射線或顯微鏡,在那裡ImageNet不會有太大幫助。

但視覺並不是這樣工作的。當我環顧四周,我在腦海中看到的不僅僅是單一的標籤。我在我的視野中區分不同目標:現在我看到了鍵盤,我自己的手,一個監視器,一個咖啡杯,一個網路攝像頭等等,基本上是在同一時間。我能夠從一個單一的靜止影象中同樣區分所有這些物體。

這意味著我們需要從分類開始繼續下去、分類時為整個影象分配一個標籤(你可以分配多個multilabel分類模型,但是他們仍然是整個影象打標籤),其他問題,需要更細粒度的分析影象中的目標。人們通常會區分幾種不同的問題:

  • 分類,就像我們上面討論的那樣。
  • 分類 + 定位,你假設影象中只有一箇中心目標,你需要去定位這個目標,畫一個包圍框出來。
  • 物體檢測,我們今天的主題,需要在一張影象中找到多個目標,並框出來。
  • 最後,分割是更加複雜的問題,你需要找到物體的實際輪廓,即,基本上把影象上的每一個畫素劃分為一個物體或背景,分割也有幾種不同的方式(語義分割、邊界分割和例項分割)。

用貓和狗解釋如下:

圖片

從數學上講,這意味著網路的輸出不再僅僅是一個類標籤。它現在是幾個不同的類標籤,每個都有相關聯的矩形。矩形由四個數字定義(兩個相對角的座標,或一個角的座標,寬度和高度),所以現在每個輸出在數學上是四個數字和一個類標籤。

圖片

從機器學習的角度來看,在我們開始思考如何解決問題之前,我們需要找到資料。基本的ImageNet資料集沒有什麼用:它是一個分類資料集,所以它有像“Cat”這樣的標籤,但是它沒有邊界框!手動標註現在是一個更困難的問題:你必須為每個目標提供一個邊界框,而不僅僅是點選正確的類標籤,而且在一張照片上可能有許多目標。

下面是一個用於通用目標檢測問題的標註的例子。

圖片

你可以想象,為目標檢測而手動標註一幅影象需要整整幾分鐘,而不是像用於分類那樣需要幾秒鐘。那麼像這樣的大型資料集從何而來呢?

目標檢測資料集:真實

讓我們首先看看我們有什麼樣的使用真實目標和人工標註的目標檢測資料集。首先,讓我們快速回顧最流行的資料集。

ImageNet資料集作為ImageNet大規模視覺識別挑戰(ILSVRC)的關鍵部分而受到歡迎,這是2010年至2017年舉辦的一系列比賽。ILSVRC系列見證了一些卷積神經網路中最有趣的進展:AlexNet、VGG、GoogLeNet、ResNet和其他著名的架構都在這裡首次亮相。

一個不太為人所知的事實是ILSVRC也一直有一個物體檢測競賽,而ILSVRC系列實際上是與另一個著名的競賽合作發展起來的,2005年至2012年舉辦的PASCAL Visual Object Classes (VOC) Challenge。這些挑戰也從一開始就體現了目標檢測,這就是第一個著名的資料集的由來,通常被稱為PASCAL VOC資料集。以下是“飛機”和“自行車”類別的一些示例圖片:

圖片

圖片

按照今天的標準,PASCAL VOC是相當小的:20個類,只有11530張圖片,27450個目標標註,這意味著PASCAL VOC每幅圖片只有不到2.5個目標。目標通常是相當大的和突出的照片,所以PASCAL VOC是一個“容易”的資料集。儘管如此,在很長一段時間裡,它仍然是最大的手動標註的目標檢測資料集之一,並在數百篇關於目標檢測的論文中預設使用。

在規模和複雜性方面的下一步是Microsoft Common Objects in Context (Microsoft COCO)資料集。到目前為止,它已經超過200K帶有150萬個目標例項的標記影象,它不僅提供了邊界框,而且還提供了(相當粗糙的)分割輪廓。以下是一些示例圖片:

圖片

正如你所看到的,現在的目標更加多樣化,它們可以有非常不同的大小。這實際上是一個物體檢測的大問題:很難讓一個單一的網路同時檢測大大小小的物體,這也是為什麼MS COCO被證明是一個比PASCAL VOC更難的資料集的主要原因。資料集仍然是非常相關的,在目標檢測,例項分割和其他賽道每年舉行比賽。

我想談論的最後一個通用目標檢測資料集是目前最大的可用資料集:谷歌的Open Images Dataset。到目前為止,他們到了Open Images V6,它有大約190萬張圖片和1600萬個邊界框600個目標類。這相當於每幅影象有8.4個邊界框,所以場景相當複雜,物體的數量也更加均勻分佈:

圖片

這些例子看起來有趣、多樣,有時非常複雜:

圖片

圖片

實際上,Open Images之所以成為可能,是因為目標檢測本身的進步。如上所述,手工繪製邊界框非常耗時。幸運的是,在某種程度上,現有的目標檢測器變得非常好,以至於我們可以將邊界框委託給機器學習模型,而只用人類來驗證結果。也就是說,你可以將模型設定為一個相對較低的靈敏度閾值,這樣你就不會錯過任何重要的資訊,但結果可能會有很多誤報。然後請人工標註確認正確的邊界框並拒絕誤報。

據我所知,這一正規化的轉變發生在2016年前後Papadopoulos等人的一篇論文之後。它更易於管理,這就是Open Images成為可能的原因,但是對於人類標註者來說,它仍然有很多工作要做,所以只有像谷歌這樣的巨人才能提供如此規模的目標檢測資料集。

當然,還有更多的物件檢測資料集,通常用於更專門的應用程式:這三個是覆蓋通用目標檢測的主要資料集。但等等,這是一個關於合成數據的部落格,我們還沒有說過一個字!讓我們解決這個問題。

目標檢測資料集:為什麼要合成數據?

有了像Open Images這樣的資料集,主要的問題就變成了:我們到底為什麼需要合成數據來進行目標檢測?Open Images看起來幾乎和ImageNet一樣大,我們還沒有聽說過很多關於影象分類的合成數據。

對於目標檢測,答案在於細節和具體的用例。是的,Open Images很大,但它並不能覆蓋你可能需要的所有內容。舉個恰當的例子:假設你正在為一輛自動駕駛汽車構建一個計算機視覺系統。當然,Open Images有“Car”類別,但你需要更多的細節:不同交通情況下的不同型別的汽車、路燈、各種型別的行人、交通標誌等等。如果你所需要的只是一個影象分類問題,那麼你可以為新類建立自己的資料集,每個類包含幾千張影象,手工為其貼上標籤,併為新類調整網路。在目標檢測,特別是分割中,它就不那麼容易工作了。

考慮一下最新和最大的自動駕駛真實資料集:Caesar et al.的nuScenes,順便說一下,這篇論文已經被CVPR 2020接受了。他們建立了一個包含6個攝像機、5個雷達和1個鐳射雷達的完整資料集,並使用3D邊界框(這是我們走向3D場景理解的新標準)和人類場景描述進行了充分標註。以下是資料的一個樣本:

圖片

所有這些都是在視訊中完成的!nuScenes資料集包含1000個場景,每20秒以2Hz的頻率進行關鍵幀取樣,所以總共有40000張非常相似的40張標註影象(來自同一個場景)。給這類資料貼上標籤已經是一項龐大而昂貴的工作。

將其與名為ProcSy的自動駕駛合成數據集進行比較。它的特點是畫素完美的分割(使用合成數據,沒有區別,你可以像要求分割邊界框一樣簡單),使用CityEngine構建深度地圖的城市場景與交通,然後用虛幻引擎渲染。它看起來像這樣(帶有分割、深度和遮擋圖):

圖片

在論文中,比較了不同分割模型在惡劣天氣條件和其他可能使問題複雜化的因素下的效能。為此,他們只需要11000幀的小資料樣本,這就是你可以從上面的網站下載的(順便說一下,壓縮檔案就有30Gb)。他們報告說,這個資料集是從135萬可用的道路場景中隨機抽取的。但最重要的部分是資料集是程式生成的,所以實際上它是一個潛在的無限資料流,你可以改變地圖、交通型別、天氣狀況等等。

這是合成數據的主要特點:一旦你預先投資建立(或者更準確地說,尋找和調整)你感興趣的目標的3D模型,你就可以擁有儘可能多的資料。如果你做了額外的投資,你甚至可以轉向全尺寸互動式3D世界,但這又是另一個故事了。

英文原文:https://synthesis.ai/2020/08/05/object-detection-with-synthetic-data-i-introduction-to-object-detection/