天天看點

自動幫你完成物體檢測标注?這個工具你必須了解一下

作者:機器視覺知識推薦官

任何從事對象檢測工作的人都知道标注過程是最難的部分。這并不是因為它像訓練模型一樣複雜,而是因為這個過程非常繁瑣且耗時。我之前遇到過處理包含數千張圖像或數百張圖像的資料集以及每張圖像數十個對象的挑戰。在這兩種情況下,我唯一的選擇是浪費時間建立标簽或使用大量人力資源來這樣做。考慮到這個煩人的瓶頸,有人建立了一個簡單(但有效)的自動注釋工具來簡化這個過程。雖然它不能完全取代手動注釋過程,但它會幫助我們節省大量時間。基于此,本文介紹了該工具的工作原理以及如何使用它來簡化我們的下一個對象檢測項目!

如何使用它

自動标注工具基于半監督架構的思想,其中使用少量标注資料訓練的模型用于為資料集的其餘部分生成新标簽。就這麼簡單,該庫使用初始和簡化的對象檢測模型來生成帶有圖像注釋的 XML 檔案(考慮到PASCAL VOC 格式)。這個過程可以用下圖來說明:

自動幫你完成物體檢測标注?這個工具你必須了解一下

不幸的是,作為半監督解決方案,無法避免手動标注,但我們隻需要标注少量資料。

很難确定要手動标注的圖像數量,因為這取決于問題的複雜性。例如,如果我們想檢測狗和貓并在資料集中有 2000 張圖像,那麼可能 200 張圖像就足夠了(每類 100 張)。另一方面,如果我們有幾十個難以檢測的類或對象,我們應該需要更多的手動标注才能看到半監督方法的好處。

另一方面,至少花一些時間手動标注圖像有一些有趣的優勢。首先,我們将仔細檢視資料,這可以幫助我們發現問題(例如,對象彼此太近,或照明條件與我們想象的不同)并确定模型限制。除此之外,資料集的簡化版本通常用于超參數調整和神經架構搜尋,是以這可能是嘗試找到最适合我們的問題的模型配置的好時機。

也就是說,一旦我們标注了一些圖像并訓練了一個初始模型,我們就可以使用自動注釋工具來加速我們資料集的其餘部分的這個過程!

運作标注工具

這個項目是完全開源的,可以在GitHub上找到。該代碼是用 Python 編寫的,目前它隻支援 TensorFlow 模型(據說 Pytorch 支援很快就會到來)。

GitHub連結:https://github.com/AlvaroCavalcante/auto_annotate

我們可以使用 pip 安裝該庫,如下所示:

pip install auto-annotate
           

建議使用 Python虛拟環境以避免與我們的 TensorFlow 版本出現任何相容性問題。安裝後,我們可以從指令行或直接在 Python 代碼中使用該庫。對于兩者,我們将擁有相同的參數集:

  • saved_model_path:包含初始模型的saved_model檔案夾的路徑。
  • label_map_path:label_map.pbtxt 檔案的路徑。
  • imgs_path:帶有要标記的資料集圖像的檔案夾的路徑。
  • xml_path(可選):儲存生成的 XML 檔案的路徑。預設行為是儲存在資料集圖像的同一檔案夾中。
  • threshold:接受模型檢測的置信門檻值。預設值為 0.5。

指令行

使用該庫的更簡單方法是從指令行調用它。為此,在我們的終端中,使用我們自己的參數執行以下指令:

python -m auto_annotate --label_map_path /example/label_map.pbtxt \ 

--saved_model_path /example/saved_model \ 

--imgs_path /example/dataset_images \ 

--xml_path /example/dataset_labels \ 

--threshold 0.65
           

Python代碼

如果我們出于某種原因想直接在我們的 python 代碼中使用該庫,我們可以簡單地執行以下操作:

from auto_annotate import AutoAnnotate




ann_tool = AutoAnnotate(

saved_model_path = '/example/saved_model',

label_map_path = '/example/label_map.pbtxt',

images_path = '/example/dataset_images',

xml_path = '/example/dataset_labels',

detection_threshold = 0.65)




ann_tool.generate_annotations()           

如果一切正常,我們将看到資料集注釋的進度條。在執行期間,我們可以使用LabelImg 之類的注釋工具打開圖像和自動生成的标簽,以驗證它們是否按預期生成。

操作後:檢視标簽

正如我們已經知道的那樣,每個機器學習模型都會出錯,在這個标記過程中也沒有什麼不同。如果我們使用此工具生成的全新标簽重新訓練我們的初始模型,我們将假設監督很弱,因為我們會在标簽/注釋中發現一些噪音。

弱監督有其自身的問題,如果可能,我們希望避免這種情況。也就是說,建議在自動注釋過程之後檢視标簽,以查找并修複錯誤的預測。我們再次面臨手動過程,但審查和改進某些标簽的品質比從零開始繪制邊界框要快得多。

此外,生成預測的品質将取決于初始模型的準确性和置信度門檻值。如果置信度門檻值很高(接近 1),模型将生成更少的錯誤預測(誤報),并且我們必須為丢失的對象繪制框(誤報)。

另一方面,接近 0 的門檻值會産生更多不正确的預測,但我們隻需要擦除并修複傾斜的邊界框。最佳置信度值将是根據我們的問題和模型性能進行調整的參數。

項目擴充:MLOps 用例

在自動注釋我的整個資料集并訓練了一個很棒的模型之後,我剛剛完成了我的項目,對吧?好吧,也許不是……

機器學習工程和模型産品化是當今非常重要的領域,因為我們知道生産中的模型需要監控和改進,這對于深度學習模型(如對象檢測器)也沒有什麼不同。

當我們釋出基于圖像的項目時,使用者可能會發送在訓練資料集中不常見的圖像。例如,考慮貓和狗檢測器:我們的資料集中可能沒有很多海灘上的狗圖像,但我們可能會在暑假期間收到很多狗!

也就是說,該項目的一個很好的用例是建立一個自動注釋管道,以不斷從生産中使用者發送的圖像生成新标簽。然後,我們可以将新圖像和生成的注釋內建到自動訓練管道中,以每月重新訓練我們的對象檢測模型。

使用這種方法,我們将保證我們的模型将始終根據使用者行為進行更新并表現良好。此外,随着我們的模型變得更加健壯,注釋新圖像所需的手動驗證将更少。

結論和最後的想法

随着深度學習在新的最先進的架構和更多的計算機能力方面不斷進步,資料仍然是人工智能的巨大瓶頸。

要訓練一個足以投入生産的目标檢測模型,需要大量帶注釋的資料,而這很容易成為項目中最昂貴的部分。

鑒于這一事實,自動注釋工具在這個過程中可以是一個很好的幫手,因為它通過推斷圖像中對象的位置和類别來加速人工任務。

在其他選項中,本文介紹的自動注釋工具具有免費、開源和易于使用的優點。雖然手動部分仍然是必要的,但到目前為止,這個庫已經幫助了我很多不同的項目,我認為它也可以幫助其他人!

來源:小白學視覺

本文僅做學術分享,如有侵權,請聯系删文。

繼續閱讀