Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

重磅乾貨,第一時間送達

開發環境

軟體版本資訊:

硬體:

如何安裝tensorflow object detection API框架,看這裡:

資料集處理與生成

首先需要下載資料集,下載地址為:

總計7581張影象,基於Pascal VOC2012完成標註。分為兩個類別,分別是安全帽與人(hat與person),json格式如下:

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

資料集下載之後,並不能被tensorflow object detection API框架中的指令碼轉換為tfrecord,主要是有幾個XML跟JPEG影象格式錯誤,本人經過一番磨難之後把它們全部修正了。修正之後的資料執行下面兩個指令碼即可生成訓練集與驗證集的tfrecord資料,命令列如下:

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

這裡

需要注意

的是create_pascal_tf_record。py 指令碼的165行把

修改為:

原因是這裡的資料集沒有做分類train/val。所以需要修改一下,修改完成之後儲存。執行上述的命令列,就可以正確生成tfrecord,否則會遇到錯誤。

模型訓練

基於faster_rcnn_inception_v2_coco物件檢測模型實現遷移學習,首先需要配置遷移學習的config檔案,對應的配置檔案可以從:

中發現,發現檔案:

之後,修改配置檔案的中相關部分,關於如何修改,修改什麼,可以看這裡:

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

修完完成之後,在D盤下新建好幾個目錄之後,執行下面的命令列引數:

就會開始訓練,總計訓練40000 step。訓練過程中可以透過tensorboard檢視訓練結果:

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

模型匯出

完成了40000 step訓練之後,就可以看到對應的檢查點檔案,藉助tensorflow object detection API框架提供的模型匯出指令碼,可以把檢查點檔案匯出為凍結圖格式的PB檔案。相關的命令列引數如下:

得到pb檔案之後,使用OpenCV4。x中的tf_text_graph_faster_rcnn。py指令碼,轉換生成graph。pbtxt配置檔案。最終得到:

如何匯出PB模型到OpenCV DNN支援看這裡:

使用OpenCV DNN呼叫模型

在OpenCV DNN中直接呼叫訓練出來的模型完成自定義物件檢測,這裡需要特別說明一下的,因為在訓練階段我們選擇了模型支援600~1024保持比率的影象輸入。所以在推理預測階段,我們可以直接使用輸入影象的真實大小,模型的輸出格式依然是

1x1xNx7

,按照格式解析即可得到預測框與對應的類別。最終的程式碼實現如下:

一些測試影象的執行結果如下:

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

Tensorflow + OpenCV4 安全帽檢測模型訓練與推理

可以看到第二張途中有誤識別情況發生!可見模型還可以繼續訓練!

避坑指南:

1。 下載的公開資料集,記得用opencv重新讀取一遍,然後resave為jpg格式,這個會避免在生成tfrecord時候的影象格式資料錯誤。

ValueError: Image format not JPEG

2。 公開資料集中xml檔案的filename有跟真實影象檔名稱不一致的情況,要程式處理一下。不然會遇到

Windows fatal exception: access violation error

3。 使用非最大抑制之後,

SystemError: returned NULL without setting an error,

解決:

boxes 必須是int型別,confidences必須是浮點數型別

https://github。com/njvisionpower/Safety-Helmet-Wearing-Dataset

https://github。com/opencv/opencv/wiki/Deep-Learning-in-OpenCV

https://github。com/tensorflow/models/tree/master/research/object_detection

下載1:OpenCV-Contrib擴充套件模組中文版教程

下載2:Python視覺實戰專案52講

下載3:OpenCV實戰專案20講

交流群