前往
大廳
主題 達人專欄

[星爆AI] 自訂義Data Mapper與Loader,使用Detectron2訓練物件偵測AI

%%鼠 拒收病婿 | 2023-03-02 00:59:21 | 巴幣 5140 | 人氣 1453

前言
刀劍神域是2015年開始風靡至今的人氣動畫。有趣的是在該年有數名網友在論壇上爭論該作品的優劣,進而聚集眾多看熱鬧的網友將刀劍神域中的角色做成梗圖以諷刺不接受批評的粉絲,至今與刀劍神域相關的改圖統稱為「星爆圖」(以主角著名招式得名),由於其具有一定程度的幽默,因此已成為8年級生間的網路文化。
本專題的最終目的是自動識別並從圖片中裁剪出不同星爆元素的ROI(Range of interest),以便後續建立訓練資料集。   (以上來自我的期末報告)


一樣在個人網站上觀看程式碼會比較方便喔



什麼是Detectron2

Detctron2是由FB開發的物件偵測框架,主要繼承於Mask Rcnn,並提供多種網路架構與pretrained model供使用。Detctron2 架構由Head與Backbone組成,Backbone負責提取圖片特徵,Head則負責判斷與輸出。例如在它的model zoo中可以看到 R50-FPN模型,表backbone使用ResNet 50、head為FPN模型。

Rcnn家族

R代表Region(區域),主要概念是將圖片切成好幾個區塊,再分別對區塊做CNN。

RCNN (2013) [2]

將圖片切成約2~3千個小Region,對各個Region做CNN後使用SVM做分類。

Faster RCNN (2015)[3]

與其將每個區塊當成獨立的影像作處理,Faster RCNN使用錨點(Anchor)的概念,讓各個區塊用來定位自己在原圖上的位置,方便我們將特徵投影在同一個影像上一次做處理,大大改善了RCNN的處理速度。
來源:Fast R-CNN:ディープラーニングによる一般物体検出手法 | NegativeMindException

Mask RCNN [4]

Mask Rcnn簡單來說是Faster Rcnn後再做個基於像素的分類。Faster Rcnn輸出 lable與bounding box參數;Mask Rcnn輸出label, bounding box與 mask。
另外需注意是由於Faster Rcnn有做Region pooling等操作,特徵的位置可能會跑掉,因此Mask Rcnn需處理RoI align的問題。
 

製作Label

在訓練模型之前得製作標記資料。我使用的標籤軟體是Label Studio,功能齊全,安裝也算簡單。
新建專案後在Add Label names打上label,以本專案為例,取名規則為:
  • sw_dp :逐案者
  • sw_hge: 闡釋者
  • sw_ns: 夜空之劍
  • kt_face: 桐人臉.....

點選標籤直接在畫面上拖拉即可。

選擇CoCo格式輸出,可得到一個json檔與對應名稱的圖片。

讀取資料

Detectron2的資料集使用"註冊"的概念,"name"作為資料集的key,不可重複。

取得資料可使用:

[範例] 隨機採樣並標註Ground Truth

結果:
 

DatasetCatalog 與 register_coco_instances差別[5]

由於detectron2在幫我們讀進資料的時候會自動將image id當成該圖片的父資料夾路徑,因此要碼再寫個腳本處理圖片位置,要碼自訂義讀取資料的mapper。  (有研究精神的我們一定選擇後者(?))

要自訂義mapper得先了解資料集註冊的流程。在官方文件中看到它使用DatasetCatalog 進行註冊。


查看內碼可發現register_coco_instances內部也是使用DatasetCatalog註冊資料。

複寫資料Mapper

由於找不太到單獨修改目前pipeline的DataLoader的方法,因此另一個的方法是創建預設的Trainer,並複寫它的loader方法。[7]

訓練模型

設定config

建立Trainer
訓練

使用模型

訓練後可得到一個權重檔 (本範例命名為"model_final.pth"),將它套用在predictor的config上。

輸入預測圖片

結果:
 

評估

Mean Average Precision (mAP) 是常用來評估模型好壞的指標。在直接計算AP之前,需要先了解Precision和Recall兩個指標。
 
簡單來說:
  • recall = TP / (所有的bbox)
  • precision = TP / (對的+錯的)
recall和precision專注的點不同,recall注重於"偵測到",對錯則是其次,而precision專注於"偵測對",數量則是其次。例如海關寧願偵測次數多,也不希望放過漏網之魚;而車牌偵測則希望準確率高,以免罰錯人。
recall和precision能形成一個PR curve,而ap是該curve的面積。map則是多個class的ap做平均。
所幸detectron2已經幫我們做好評估了:

輸出:
'AP': 0.0052924136435937895, 'AP50': 0.02606676673006585,
*AP50表IOU閥值50%
成績算是超級爛,不過我資料集太少(70筆),就勉強當作學習吧XD
 

補充: Mask rcnn vs Yolo v7

YOLO已經被證明全面超越了基於R-CNN的模型。 YOLOv7資源庫與Detectron2相容,並符合它的API和可視化工具,使其更容易運行快速、準確的實例分割,而無需學習新的API。 實際上,你可以換掉Mask R-CNN的主幹,用YOLOv7代替它。[9]


補充2:

與Yolo v1的表現 (左yolo v1 ;右 detectron2)。  資料集與訓練時間差不多,detectron2效果明顯好許多。


參考或延伸資料
  1. 【Lecture】物件偵測模型介紹:RCNN 家族
  2. [1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation (arxiv.org)
  3. [1504.08083] Fast R-CNN (arxiv.org)
  4. [1703.06870] Mask R-CNN (arxiv.org)
  5. Detectron2-data-dataset - 知乎 (zhihu.com)
  6. Use Custom Datasets — detectron2 0.6 documentation
  7. [深度学习从入门到女装]detectron2源码阅读-Trainer_detectron2 resume_炼丹师的博客-CSDN博客
  8. (10) Mean Average Precision (mAP) Explained and PyTorch Implementation - YouTube
  9. Python中使用YOLOv7进行实例分割以及Detectron2的使用 - 桑鸟网 (sangniao.com)


後記:
  1. 最近有一個月忙到忘了檢查社群軟體,謝謝七七贊助了10本 >///<  我會繼續多看多分享的(´▽`ʃ♡ƪ)
  2. 下一篇應該是講Shader的吧(?


送禮物贊助創作者 !
0
留言

創作回應

樂小呈
看不懂 QQ,等 Shader
2023-03-02 05:44:39
%%鼠 拒收病婿
Ok~~ 雖然要等一陣子www
2023-03-03 01:31:58
⊰⊱求出處學術用⊰⊱
太星爆了吧
2023-03-02 06:46:00
%%鼠 拒收病婿
https://media.tenor.com/f-ap0QcDUPMAAAAC/starburst-%E6%98%9F%E7%88%86.gif
2023-03-03 01:32:26
蝦米coco
不愧是星爆大師,連AI辨識都是星爆
2023-03-02 21:47:58
%%鼠 拒收病婿
星爆是最好的範例(?
2023-03-03 01:33:14
燃魂鬥士
2015是指動畫?還是星爆梗開始盛行時?如果是指動畫的就不是了,動畫最初是2012年7月8日開播的。
2023-03-03 13:03:24
%%鼠 拒收病婿
釣出真的星爆博士了[e17] 當初看場外那篇星爆系論文好像沒提及,我想應該是前者。 抱歉考慮不周[e15]
2023-03-03 14:52:27
燃魂鬥士
沒,我只是資深動畫迷,我真的星爆博士的話場外就有發一堆星爆文,或是好幾篇GP到爆的星爆文 [e29]
2023-03-03 20:21:21
追蹤 創作集

作者相關創作

更多創作