作者|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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/189511.html
標籤:其他
