Use Custom Dataloaders

github鏈接

現有的數據讀取器是怎麼工作的呢?

Detectron2包含一個建好的數據讀取管道,很容易明白其工作原理,也方便自己重寫一個數據讀取器。

Detectron2提供兩個函數,build_detection_{train,test}_loader從給定的config文件中創建數據讀取器,下面是它的原理:

  • 輸入數據集名稱,如"coco_2017_train",以一個輕量級的,標準的統一接口將數據讀取爲list[dict]。此時數據實際上還沒有開始被模型使用,圖片還沒有讀到內存中,隨機的數據增強也沒做。可以從之前的dataset教程中查看數據集的相關使用。

  • list中的每個字典對象都是mapper函數映射而來。

    • 用戶可以通過指定build_detection_{train,test}_loader中的mapper參數來標準化mapping函數,,默認的mapper是DatasetMapper。
    • 輸出格式沒有限制,只要能被數據消費者使用,這裏的消費者一般指模型。
    • mapper的作用是將每一個輕量、標準的數據表示方式轉化成模型可以識別的格式,比如,讀取圖像,隨機做增強。默認mapper的輸出解釋如下:
  • mapper的輸出是batch形式,通常是一個list。

  • 一個batch的數據是數據讀取器的輸出,典型的,是model.forward()的輸入。

寫數據讀取器

在現有數據讀取器上實現一個新的mapper通常是我們需要的。

如果你想做些不一樣的,比如用自己的數據或者不同的batch邏輯,可以自己寫數據讀取器。數據讀取器是一個簡單的迭代器,只要組織成模型需要的輸入形式,可以使用任何你喜歡的工具。

使用一般的數據讀取器

如果用的是DefaultTrainer,可以重寫build_{train,test}__loader方法來使用自己的數據讀取器。參見densepose的例子。

如果自己寫訓練邏輯,可以簡單的使用自己的數據讀取器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章