背景故事
2018 年,當時我在工廠實習,我開始研究目標檢測技術,因為我需要解決視覺檢測問題。 這個問題需要在來自工業相機的影象流中檢測許多不同的物體目標。
為了應對這一挑戰,我首先嚐試將分類與滑窗法結合使用。 自然,該系統非常緩慢且不適合生產。
在此之後,我開始研究執行目標檢測的端到端深度學習模型。偶然間,我發現了一篇來自Gooogle研究的著名論文,題為:Speed/accuracy trade-offs for modern convolutional object detectors.
這篇論文對我產生了很大的影響,也是我對使用深度學習的對目標檢測領域所需要的經驗介紹。
目標檢測是一項古老的任務,深度學習給它帶來了什麼?
現在,目標檢測是計算機視覺領域中相對古老的任務。在深度學習成為主流之前,許多研究人員和工程師都在研究這個問題。 他們主要使用經典的影象處理技術,可能經常使用滑窗法。 那麼深度學習對目標檢測的附加價值是什麼?
實際上,深度學習從根本上改變了我們處理目標檢測的方式。隨著 YOLO 和 R-CNN 系列的引入,目標檢測的效能顯著提高。大多數用於影象相關任務的神經網路使用卷積層。這些神經網路稱為 CNN(卷積神經網路)。 這些 CNN 實際上自然而有效地執行了一種滑窗法。 這是神經網路如何學習影象表徵的一部分。
目標檢測技術的研究現狀
在我寫這篇文章的時候,談論最多的目標檢測模型是 YOLOR(You Only Learn One Representation)。設計該模型架構的研究人員正在尋找整合“隱性知識”的方法。這種隱性知識應該代表神經網路中的潛意識。作者想要構建一個架構,模仿我們人類在現實生活中解決目標檢測任務的方式。這種架構可能是未來工作的基礎,它集成了這種隱式知識的概念,不僅用於目標檢測,還用於各種計算機視覺任務。
還有另一種架構可以成為許多未來工作的基礎,那就是 DETR 架構。 DETR 代表檢測變壓器。
Transformer 是一種新型的神經層,它們正在與卷積層競爭多種計算機視覺任務。
Transformers 已經在 NLP(自然語言處理)任務中取得了不錯的成績,並且正在穩步進入計算機視覺任務。
目標檢測技術的行業現狀
在過去的幾年裡,我一直擔任機器學習工程師,專注於計算機視覺應用。透過在該領域工作以及對需要機器學習和計算機視覺知識的職位進行多次面試,我實際上注意到了行業中目標檢測的一些趨勢。
如果你在該行業工作,那麼肯定知道,對於同一任務,一項任務最重要的指標可能與研究中使用的指標大不相同!
在目標檢測任務的情況下,同樣適用。據我所知,在工業設定中實施目標檢測模型時,有 2 個指標是最重要的:速度和穩健性。並非總是兩者兼而有之,但總是至少存在兩者之一。
由於這些原因,YOLO(v3,v4,v5)和Faster-RCNN在業界得到了廣泛的應用。通常,當速度是第一要務時,則使用 YOLO,當魯棒性是第一要務時,則使用 Faster-RCNN。
我個人均使用過 YOLOv3、SSD 和 Faster-RCNN。
儘管許多在該行業工作的人直接使用 YOLO——我猜是因為它比較有名——但我不認為它是一種萬能的解決方案。
在推理速度方面,YOLO 和 SSD 都顯示出巨大的潛力。但在某些情況下,它們可能仍然會失敗,尤其是在行業實踐中。
我記得有一次嘗試使用帶有 InceptionV2 後端的 SSD 來執行困難的目標檢測任務。這是一專案視檢查任務,我們需要檢測大型發動機(飛機或直升機,我不記得了)內部的機械部件。無論我如何調整我的神經網路的引數,我都無法減少損失,它一直在振盪。
我之前使用過相同的架構,使用相同的主幹,來執行其他一些目標檢測任務,效果很好。因此,當我完成這項絕對更具挑戰性的任務時,SSD 失敗了。因為引擎看起來非常龐大,而且因為有這麼多零件連線在一起,而且其中許多零件看起來非常相似。即使是人眼,也很難發現我們想要檢測的特定機械部件!由此可見,註釋我們的資料集有多困難。
此時,我記得我認為這只是深度學習的極限。但在完全放棄之前,我決定嘗試不同的架構,並儘量避免使用 YOLO 和 SSD 等單級檢測器。
我選擇了 Faster-RCNN,因為它是一個兩階段的物件檢測模型。結果,這個模型效果非常好!損失函式的收斂比保齡球還平滑。因此切記:下次在處理目標檢測任務時,請在下定決心之前嘗試幾種不同的架構!
需要雲計算以提高目標檢測任務的效能
在訓練深度學習模型,尤其是大型模型時,需要一些非常好的裝置。在訓練方面,GPU 可能是深度學習機器最重要的方面。很多公司購買這些裝置,但也有不少公司選擇雲計算服務。
Google Cloud Platform (GCP)、Amazon Web Services (AWS) 和 Microsoft Azure 是一些廣泛使用的雲計算服務。
對於目標檢測和大型模型(如 Faster-RCNN),這些雲計算解決方案可能正是你正在尋找的訓練模型的方法。但是應該怎麼選擇呢?
對於許多公司來說,他們已經在上述雲提供商之一上建立了雲基礎設施,因此他們可能只想繼續使用同一提供商來保持標準化。
當然,還有多種方法可以訓練你的目標檢測模型,稍後我將詳細介紹一些開源工具。但是,如果你正在使用 Tensorflow(1 或 2),那麼你使用的是 Tensorflow 目標檢測 API。那麼我建議你 Google Cloud 是比較好的選擇。
由於 Tensorflow 是Google 的產品,而且目標檢測 API 也屬於Google ,Google Cloud團隊讓在 GCP 上訓練模型變得非常容易。
具體來說,用於訓練目標檢測模型,有兩個:AI Platform 和 Vertex AI。
用於執行目標檢測任務的深度學習開源工具
使用深度學習進行目標檢測,主要有三種廣泛使用的工具:
- Tensorflow Object Detection API
- Detectron2
- MMDetection
如果是 Tensorflow 開發人員,那麼 Tensorflow 目標檢測 API 最適合你。 如果是 PyTorch 開發人員,那麼 Detectron2 和 MMDetection 更適合你。
如果開發者更關心選擇的多樣性,那麼 MMDetection 是最佳選擇,因為它擁有大量目標檢測深度學習模型。
總結
總而言之,以下是本文的要點:
- 目標檢測在計算機視覺中是一項相對較舊的任務,但深度學習已經大幅提升了目標檢測任務的效能。
- 當涉及到用於目標檢測的深度學習時,研究中推動的指標可能不一定與行業中推動的指標相同。
- 雲計算可以成為深度學習模型訓練效能的主要助推器,請明智地選擇雲服務提供商。
- 使用深度學習進行目標檢測有多種開源工具,主要的三個是:Tensorflow Object Detection API、Detectron2 和 MMDetection。
目標檢測技術的安防場景示例:
TSINGSEE青犀影片基於多年影片領域的技術經驗積累,在人工智慧技術+影片領域,也不斷研發,將AI檢測、智慧識別技術融合到各個影片應用場景中,如:安防監控、影片中的人臉檢測、人流量統計、危險行為(攀高、摔倒、推搡等)檢測識別等。典型的示例如EasyCVR影片融合雲服務,具有AI人臉識別、車牌識別、語音對講、雲臺控制、聲光告警、監控影片分析與資料彙總的能力。