作者|Ivan Ralašić
編譯|VK
來源|Analytics Vidhya

Tensorflow目標檢測API(TF OD API)剛剛變得更好。最近,Google發布了tf od api的新版本,它現在支持Tensorflow 2.x,這是一個我們一直在等待的巨大改進!
簡介
最近目標檢測(OD)的改進是由工業界廣泛采用該技術所推動的。汽車制造商使用目標檢測來幫助車輛自主駕駛道路,醫生使用它改進診斷過程,農民使用它來檢測各種農作物疾病……還有許多其他的使用案例(尚未發現),OD可以提供巨大的價值。
Tensorflow是一個深度學習框架,為自然語言處理(NLP)、語音合成、語義分割和目標檢測等領域的許多最先進(SOTA)模型提供了支持。tf od api是一個開放源碼的目標檢測模型集合,它被深度學習愛好者和該領域的不同專家使用。
現在,當我們討論了基本術語之后,讓我們看看新的tf od api提供了什么!
新TF OD API
新的TF2 OD API引入了Eager執行,使得對象檢測模型的調試更加容易;它還包括TF2 Model Zoo支持的新的SOTA模型。對於Tensorflow 1.x的好消息是新的OD API是向后兼容的,所以如果你喜歡,你仍然可以使用TF1,盡管強烈建議切換到TF2 !
除了SSD (MobileNet/ResNet),Faster R-CNN (ResNet/Inception ResNet),和Mask R-CNN模型在TF1 Model Zoo,TF2 Model Zoo引入了新的SOTA模型,如CenterNet, ExtremeNet,和EfficientDet。
TF2 OD API Model Zoo 中的模型是在COCO 2017數據集上預訓練的,如果你對數據集中已經包含的類別感興趣或在新的數據集中進行訓練時可以用預訓練模型初始化你的模型。預訓練模型對於開箱即用的推斷很有用。
使用TF OD API模型而不是自己實現SOTA模型可以讓你有更多的時間關注數據,這是實現OD模型高性能的另一個關鍵因素。然而,即使你決定自己構建模型,TF OD API模型也提供了一個很好的性能基准測試!
根據你的要求,你可以從一長串不同型號中進行選擇(速度與精度):
| Model name | Speed (ms) | COCO mAP | Outputs |
|---|---|---|---|
| CenterNet HourGlass104 512x512 | 70 | 41.9 | Boxes |
| CenterNet HourGlass104 Keypoints 512x512 | 76 | 40.0/61.4 | Boxes/Keypoints |
| CenterNet HourGlass104 1024x1024 | 197 | 44.5 | Boxes |
| CenterNet HourGlass104 Keypoints 1024x1024 | 211 | 42.8/64.5 | Boxes/Keypoints |
| CenterNet Resnet50 V1 FPN 512x512 | 27 | 31.2 | Boxes |
| CenterNet Resnet50 V1 FPN Keypoints 512x512 | 30 | 29.3/50.7 | Boxes/Keypoints |
| CenterNet Resnet101 V1 FPN 512x512 | 34 | 34.2 | Boxes |
| CenterNet Resnet50 V2 512x512 | 27 | 29.5 | Boxes |
| CenterNet Resnet50 V2 Keypoints 512x512 | 30 | 27.6/48.2 | Boxes/Keypoints |
| EfficientDet D0 512x512 | 39 | 33.6 | Boxes |
| EfficientDet D1 640x640 | 54 | 38.4 | Boxes |
| EfficientDet D2 768x768 | 67 | 41.8 | Boxes |
| EfficientDet D3 896x896 | 95 | 45.4 | Boxes |
| EfficientDet D4 1024x1024 | 133 | 48.5 | Boxes |
| EfficientDet D5 1280x1280 | 222 | 49.7 | Boxes |
| EfficientDet D6 1280x1280 | 268 | 50.5 | Boxes |
| EfficientDet D7 1536x1536 | 325 | 51.2 | Boxes |
| SSD MobileNet v2 320x320 | 19 | 20.2 | Boxes |
| SSD MobileNet V1 FPN 640x640 | 48 | 29.1 | Boxes |
| SSD MobileNet V2 FPNLite 320x320 | 22 | 22.2 | Boxes |
| SSD MobileNet V2 FPNLite 640x640 | 39 | 28.2 | Boxes |
| SSD ResNet50 V1 FPN 640x640 (RetinaNet50) | 46 | 34.3 | Boxes |
| SSD ResNet50 V1 FPN 1024x1024 (RetinaNet50) | 87 | 38.3 | Boxes |
| SSD ResNet101 V1 FPN 640x640 (RetinaNet101) | 57 | 35.6 | Boxes |
| SSD ResNet101 V1 FPN 1024x1024 (RetinaNet101) | 104 | 39.5 | Boxes |
| SSD ResNet152 V1 FPN 640x640 (RetinaNet152) | 80 | 35.4 | Boxes |
| SSD ResNet152 V1 FPN 1024x1024 (RetinaNet152) | 111 | 39.6 | Boxes |
| Faster R-CNN ResNet50 V1 640x640 | 53 | 29.3 | Boxes |
| Faster R-CNN ResNet50 V1 1024x1024 | 65 | 31.0 | Boxes |
| Faster R-CNN ResNet50 V1 800x1333 | 65 | 31.6 | Boxes |
| Faster R-CNN ResNet101 V1 640x640 | 55 | 31.8 | Boxes |
| Faster R-CNN ResNet101 V1 1024x1024 | 72 | 37.1 | Boxes |
| Faster R-CNN ResNet101 V1 800x1333 | 77 | 36.6 | Boxes |
| Faster R-CNN ResNet152 V1 640x640 | 64 | 32.4 | Boxes |
| Faster R-CNN ResNet152 V1 1024x1024 | 85 | 37.6 | Boxes |
| Faster R-CNN ResNet152 V1 800x1333 | 101 | 37.4 | Boxes |
| Faster R-CNN Inception ResNet V2 640x640 | 206 | 37.7 | Boxes |
| Faster R-CNN Inception ResNet V2 1024x1024 | 236 | 38.7 | Boxes |
| Mask R-CNN Inception ResNet V2 1024x1024 | 301 | 39.0/34.6 | Boxes/Masks |
| ExtremeNet | -- | -- | Boxes |
在上表中,你可以看到表中只給出了平均COCO mAP 度量。盡管對於模型的性能來說,這是一個相當好的方向,但是如果你對模型在不同大小或不同類型的對象上的執行情況感興趣,那么附加的統計信息可能非常有用。例如,如果你對開發高級驅動輔助系統(ADAS)感興趣,那么你並不真正關心檢測器檢測香蕉的能力是否不好!
在這篇博客中,我們將重點解釋如何對TF2 Model Zoo中現成的、經過預訓練的EfficientDet檢查點進行詳細評估。
EfficientDets OD模型
EfficientDet是一種與RetinaNet模型非常相似的單次探測器,有幾個改進:EfficientNet backbone、weighted bi-directional feature pyramid network (BiFPN)和復合縮放方法。
BiFPN是非常流行的FPN的改進版本。該算法在反復應用自頂向下和自下而上的多尺度特征融合的同時,學習表示不同輸入特征重要性的權重。

資料來源:https://arxiv.org/pdf/1911.09070.pdf
為了提高目標檢測模型的准確性,通常的方法是增加輸入圖像的大小或使用更大的骨干網。復合縮放不是在單一維度或有限的縮放維度上操作,而是聯合縮放中樞、特征網絡和盒/類預測網絡的分辨率/深度/寬度。
具有不同縮放因子的EfficientDet模型包含在tf OD API Model Zoo中,縮放因子用模型名稱中的{X}表示,而輸入圖像分辨率表示為{RES}X{RES}EfficientDet D{X}{RES}X{RES}。

復合縮放配置效率設置。資料來源:https://arxiv.org/pdf/1911.09070.pdf

EfficientDet體系結構以EfficientNet為骨干網,BiFPN為特征網絡,共享類/盒預測網絡。資料來源:https://arxiv.org/pdf/1911.09070.pdf
預訓練的EfficientDet評估
我們希望進行詳細的精度比較,以研究復合縮放配置對網絡本身性能的影響。
基於這個原因,我們創建了一個google colab Notebook,其中我們解釋了如何對模型進行評估,以及如何有效地比較評估結果。我們對詳細的評估統計數據感興趣,包括每個類和不同對象大小的統計信息。
不幸的是,tf od api不支持這種現成的統計信息。這就是為什么我們創建了TF OD repo的一個分支,並更新了相關的腳本,以按照本issue中給出的說明引入此功能:https://github.com/tensorflow/models/issues/4778#issuecomment-430262110
Notebook中,我們提供了有關如何設置Tensorflow 2和TF2 OD API的說明。我們還包括一些腳本,這些腳本可以方便地下載EfficientDet檢查點,以及其他腳本,幫助你獲取COCO 2017 Val數據集並創建tf record文件,這些文件在評估階段由TF OD API使用。
最后,我們修改pipeline.config用於EfficientDet檢查點,為8個EfficientDet檢查點的順序評估做好准備。tfodapi使用它們來配置訓練和評估過程。訓練管道的模式可以object_detection/protos/pipeline.proto 找到。在較高級別上,配置文件分為5個部分:
-
Modell_config。這定義了將要訓練的模型類型(即元體系結構、特征提取器…)。
-
train_config,它決定應該使用哪些參數來訓練模型參數(即,SGD參數、輸入預處理和特征提取程序初始化值…)。
-
eval_config,它確定將報告哪些度量以供評估。
-
train_input_config,它定義了模型應該在哪個數據集上訓練。
-
eval_input_config,它定義將對哪個數據集評估模型。通常這應該不同於訓練輸入數據集。
model {
(... Add model config here...)
}
train_config : {
(... Add train_config here...)
}
train_input_reader: {
(... Add train_input configuration here...)
}
eval_config: {
}
eval_input_reader: {
(... Add eval_input configuration here...)
}
我們只對配置文件的eval_config和eval_input_config部分感興趣。請仔細查看google colab中的這個單元格,以了解有關如何設置eval參數的更多詳細信息。
在TF OD API中沒有現成啟用的另外兩個標志是:include_metrics_per_category和all_metrics_per_category。在應用Colab Notebook中給出的補丁后,當設置為true時,這兩個將啟用我們感興趣的詳細統計信息(每個類別和大小)!
Allegro Trains-高效實驗管理
為了能夠有效地比較模型評估,我們使用了一個開源的實驗管理工具allegro trains。很容易將其集成到代碼中,並且可以實現開箱即用的不同功能。它可以作為Tensorboard的替代品,用於可視化實驗結果。

OD API中的主腳本是object_detection/model_main_tf2.py。它同時處理訓練和評估階段。我們創建了一個小腳本,在循環中調用model_main_tf.py來計算所有EfficientDet檢查點。
為了將Allegro Trains實驗管理集成到評估腳本中,我們必須添加2(+1)行代碼。在model_main_tf2.py腳本中,我們添加了以下行:
from trains import Task
task = Task.init(project_name="NAME_OF_THE_PROJECT", task_name="NAME_OF_THE_TASK")
# 可選-記錄pipeline.config進入訓練儀表板
task.connect_configuration(FLAGS.pipeline_config_path)
在訓練時會自動為你記錄很多事情。你可以在這里找到一個全面的特征列表:https://allegro.ai/docs/concepts_arch/concepts_arch/
比較不同的EfficientDet模型
在此鏈接中,你可以找到對包含在TF2 OD API中的8個EfficientDet模型的評估結果。我們將這些實驗命名為efficientdet_d{X}_coco17_tpu-32,其中{x}表示efficientdet模型的復合比例因子。如果你運行Colab Notebook,你會得到同樣的結果,你的實驗會顯示在demo Trains服務器上:https://demoapp.trains.allegro.ai/。
在本節中,我們將向你展示如何有效地比較不同的模型,並在評估數據集中驗證它們的性能。我們使用COCO 2017 Val數據集,因為它是用於評估TF OD API中目標檢測模型的標准數據集。

我們對COCO目標檢測模型評估度量感興趣。按這里查看實驗結果。這個頁面包含我們感興趣的所有指標的圖表:https://demoapp.trains.allegro.ai/projects/8d752f81080b46cb9bf6ebcaf35bc8d2/experiments/950e39d811aa413d81aa0f2c8cbf0e5a/info-output/metrics/scalar?columns=selected&columns=type&columns=name&columns=tags&columns=status&columns=project.name&columns=users&columns=started&columns=last_update&columns=last_iteration&order=-name
我們可以先看看DetectionBoxes_Precision圖,它包含數據集中所有類別的平均精度度量。mAP度量值的值與TF2 Model Zoo中的表中報告的mAP度量值相對應。

多虧了我們應用pycocotools的補丁,我們還可以獲得每個類別的mAP度量。由於COCO數據集中有90個類別,我們想知道每個類別對平均精度的貢獻。通過這種方式,我們可以更精確地了解評估模型的性能。
例如,你可能對模型如何僅對特定類別中的小對象執行操作感興趣。從匯總的統計數據來看,不可能獲得這樣的結論,而建議的補丁程序可以做到這一點!

我們還使用Allegro Trains的能力來比較多個實驗。實驗對比表明了模型之間的所有差異。我們首先可以得到相關統計數據的詳細標量和圖表比較。在我們的示例中,我們將比較efficientdetd0、D1和D2模型的性能。顯然,復合標度對模型的性能有積極的影響。
擁有每個類別的統計信息的另一個好處是,你可以分析復合比例因子對特定類別興趣的准確性的影響。例如,如果你對監控視頻中的公交車感興趣,可以分析顯示公交車類別的mAP性能與EfficientDet模型的復合比例因子的關系圖。這有助於決定使用哪種模型,以及性能和計算復雜性之間的最佳位置!

你還可以比較其中一個有趣的東西是模型配置文件pipeline.config. 你可以看到EfficientDet模型之間的基本區別在於輸入圖像的尺寸和濾波器的數量/深度,如前所述。

下一個圖包含3個EfficientDet模型的mAP值。提高輸入圖像分辨率以及增加模型中濾波器的數量有明顯的好處。D0模型的mAP為33.55%,D2模型的mAP為41.79%。你還可以嘗試執行每個類的比較、其他EfficientDet模型的比較,或者你認為對你的應用程序感興趣的任何東西。

如何使用TF-OD-API來提高建築工地的安全性?
Forsight是一個早期的創業公司,我們的任務是把建築工地變成工人的安全環境。Forsight利用計算機視覺和機器學習,處理實時閉路電視畫面,幫助安全工程師監控個人防護設備(PPE)的正確使用,確保現場安全。
我們的施工現場監控管道建立在TF OD API之上,其功能包括PPE檢測和監控、社會距離跟蹤、虛擬土工圍欄監控、禁止停車區監控和火災探測。在Forsight,我們還使用Trains來記錄我們的實驗,在團隊成員之間分享,並記錄所有的事情,以便我們能夠重現。

隨着COVID-19流感大流行的持續,世界各地的建築項目都在積極尋找方法,在保證工人安全的前提下,重新啟動或維持項目。計算機視覺和機器學習可以幫助建築經理確保他們的建築工地是安全的。我們建立了一個實時監控管道,跟蹤員工之間的距離。

除了COVID帶來的新的、無形的威脅外,所有建築工人每天都面臨一些古老的危險,尤其是“致命的四個”:墜落、被物體擊中、夾在中間或夾在中間以及觸電的危險。確保工人穿戴個人防護用品對建築工地的整體安全至關重要。tfodapi是構建一個自治的PPE監控管道的一個很好的起點。我們的下一個博客將討論如何使用新的tfodapi訓練一個基本的頭盔探測器。

建築工地的某些區域比其他地方更危險。創建虛擬的土工圍欄區域並使用閉路電視攝像頭監控這些區域,為施工經理增加了巨大的價值,因為他們可以專注於其他任務,同時也能意識到現場發生的任何土工圍欄違規事件。此外,地理圍欄可以很容易地擴展到監控機器和重型設備的訪問。

結論
在本博客中,我們討論了使用新的TF2 OD API的好處。我們展示了如何有效地評估預訓練的OD模型,這些模型可以在tf OD API Model Zoo中找到。我們還展示了如何使用Allegro Trains作為有效的實驗管理解決方案,實現強大的洞察力和統計數據。最后,我們展示了目標檢測在構建環境中的一些實際應用。
在博客中提供有關使用此博客API的第一個博客的建議。在下一篇博客中,我們將展示如何訓練一個定制的目標檢測器,使你能夠檢測到穿戴PPE的工人。請跟隨我們獲取更多的實踐教程!
[1] “Speed/accuracy trade-offs for modern convolutional object detectors.”
Huang J, Rathod V, Sun C, Zhu M, Korattikara A, Fathi A, Fischer I, Wojna Z,
Song Y, Guadarrama S, Murphy K, CVPR 2017
[2] TensorFlow Object Detection API, https://github.com/tensorflow/models/tree/master/research/object_detection
[3] “EfficientDet: Scalable and Efficient Object Detection” Mingxing Tan, Ruoming Pang, Quoc V. Le, https://arxiv.org/abs/1911.09070
[4] “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks” Mingxing Tan and Quoc V. Le, 2019, https://arxiv.org/abs/1905.11946
原文鏈接:https://towardsdatascience.com/new-tf2-object-detection-api-5c6ea8362a8c
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
