1. 程式人生 > 其它 >【教程】使用TensorFlow物件檢測介面標註資料集

【教程】使用TensorFlow物件檢測介面標註資料集

當為機器學習物件檢測和識別模型構建資料集時,為資料集中的所有影象生成標註非常耗時。而這些標註是訓練和測試模型所必需的,並且標註必須是準確的。因此,資料集中的所有影象都需要人為監督。不過,這並不意味著機器學習模型不能提供幫助。

在僅包含60個影象的小資料集上訓練之後,檢測賽車

因為,檢查和糾正大多數標註都正確的影象通常比所有的標註都由人完成省時。在處理包含數千個影象的資料集時,即使每個影象節省幾秒鐘,也可以最終節省數小時的工作時間。

本文的目的是要證明,對於不需要高精度的物體識別和檢測任務,小的資料集和“開箱即用”的模型就可以提供不錯的結果。

以影象中的賽車檢測為例,本文將通過以下步驟進行指導:

1. 在小資料集中標註影象。

2. 從這個資料集中訓練一個簡單的模型。

3. 使用這個簡單的模型來預測新資料集影象的標註。

程式碼和資料請訪問下方連結。本文假設你已經安裝了TensorFlow Object Detection API。

GitHub:https://github.com/AndrewCarterUK/tf-example-object-detection-api-race-cars

標註影象

PASCAL VOC檔案格式是用於影象標註的格式。這是Image Net使用的XML檔案格式。而LabelImg程式可以用來生成和修改這種格式的標註。

範例庫中的資料目錄顯示了使用此方法生成的標註(如下連結)。這種標記的對映檔案需要手動建立,因為它不是由LabelImg產生。

https://github.com/AndrewCarterUK/tf-example-object-detection-api-race-cars/tree/master/data

訓練模型

該TensorFlow目標檢測介面提供了關於調整和利用現有模型的自定義資料集的詳細文件。

訓練模型的基本過程是:

1. 將PASCAL VOC原始資料集轉換為TFRecord檔案。範例庫提供了一個可用於執行此操作的Python指令碼。

2. 建立一個物件檢測管道。該專案提供有關如何執行此操作的官方文件,並且在程式碼庫中有一個示例。儲存庫中的示例基於ssd_mobilenet_v1_coco檢查點,需要更多檢查點可從官方文件下載。

3. 訓練模型。可以在本地或在Google雲平臺上完成。取得這篇文章中的結果大約迭代1萬次。

4. 將最後一個檢查點匯出到推理圖(inference graph)。

這個過程的最終結果將是一個名為frozen_inference_graph.pb的檔案。它可以用來預測標註的模型。

預測標註

可以使用pascal- vocwriter庫生成在PASCAL VOC檔案格式的標註。它有個非常好用的介面,下面的程式碼展示了向影象新增“cat”標註的示例:

from pascal_voc_writerimport Writer

writer= Writer('path/to/img.jpg',800,400)
writer.addObject('cat',100,100,200,200)
writer.save('path/to/img.xml')

範例庫中的annotate.py檔案使用這個庫來調整官方文件中的推理示例,以建立PASCAL VOC標註檔案而不是進行影象視覺化。

可以根據資料集和操作符的需要優化生成註釋的閾值。合適的閾值應該在錯誤率與錯過率之間找到平衡點。如果刪除錯誤標註對於操作員而言比標註遺漏容易,那麼應該使用較低的閾值。

下面是來自簡易模型的三個預測。儘管資料集非常小,訓練次數也不多,但模型依然做出了不錯的預測,可以節省標註這些影象的時間。

在這個例子中,兩個標註正確,一個錯過。在最遠的車中建議標註的可能性數值稍有下降。

這些影象需要很長時間手動標註。模型在縮減大部分工作量方面做了不錯的貢獻。對於一些模糊的汽車來說,它也在努力辨認,但是這些模糊的汽車人類也很難辨別。

兩輛車都被識別出來,但是紅的那個邊界框太寬了。