ETH官方钱包

前往
大廳
主題 達(dá)人專欄

[星爆AI] 自訂義Data Mapper與Loader,使用Detectron2訓(xùn)練物件偵測(cè)AI

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

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


一樣在個(gè)人網(wǎng)站上觀看程式碼會(huì)比較方便喔。



什麼是Detectron2

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

Rcnn家族

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

RCNN (2013) [2]

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

Faster RCNN (2015)[3]

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

Mask RCNN [4]

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

製作Label

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

點(diǎn)選標(biāo)籤直接在畫面上拖拉即可。

選擇CoCo格式輸出,可得到一個(gè)json檔與對(duì)應(yīng)名稱的圖片。

讀取資料

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

取得資料可使用:

[範(fàn)例] 隨機(jī)採(cǎi)樣並標(biāo)註Ground Truth

結(jié)果:
 

DatasetCatalog 與 register_coco_instances差別[5]

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

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


查看內(nèi)碼可發(fā)現(xiàn)register_coco_instances內(nèi)部也是使用DatasetCatalog註冊(cè)資料。

複寫資料Mapper

由於找不太到單獨(dú)修改目前pipeline的DataLoader的方法,因此另一個(gè)的方法是創(chuàng)建預(yù)設(shè)的Trainer,並複寫它的loader方法。[7]

訓(xùn)練模型

設(shè)定config

建立Trainer
訓(xùn)練

使用模型

訓(xùn)練後可得到一個(gè)權(quán)重檔 (本範(fàn)例命名為"model_final.pth"),將它套用在predictor的config上。

輸入預(yù)測(cè)圖片

結(jié)果:
 

評(píng)估

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

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

補(bǔ)充: Mask rcnn vs Yolo v7

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


補(bǔ)充2:

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


參考或延伸資料
  1. 【Lecture】物件偵測(cè)模型介紹: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. [深度學(xué)習(xí)從入門到女裝]detectron2源碼閱讀-Trainer_detectron2 resume_煉丹師的博客-CSDN博客
  8. (10) Mean Average Precision (mAP) Explained and PyTorch Implementation - YouTube
  9. Python中使用YOLOv7進(jìn)行實(shí)例分割以及Detectron2的使用 - 桑鳥網(wǎng) (sangniao.com)


後記:
  1. 最近有一個(gè)月忙到忘了檢查社群軟體,謝謝七七贊助了10本 >///<  我會(huì)繼續(xù)多看多分享的(′▽`???)
  2. 下一篇應(yīng)該是講Shader的吧(?


送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應(yīng)

樂小呈
看不懂 QQ,等 Shader
2023-03-02 05:44:39
%%鼠 拒收病婿
Ok~~ 雖然要等一陣子www
2023-03-03 01:31:58
??求出處學(xué)術(shù)用??
太星爆了吧
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辨識(shí)都是星爆
2023-03-02 21:47:58
%%鼠 拒收病婿
星爆是最好的範(fàn)例(?
2023-03-03 01:33:14
燃魂鬥士
2015是指動(dòng)畫?還是星爆梗開始盛行時(shí)?如果是指動(dòng)畫的就不是了,動(dòng)畫最初是2012年7月8日開播的。
2023-03-03 13:03:24
%%鼠 拒收病婿
釣出真的星爆博士了[e17] 當(dāng)初看場(chǎng)外那篇星爆系論文好像沒提及,我想應(yīng)該是前者。 抱歉考慮不周[e15]
2023-03-03 14:52:27
燃魂鬥士
沒,我只是資深動(dòng)畫迷,我真的星爆博士的話場(chǎng)外就有發(fā)一堆星爆文,或是好幾篇GP到爆的星爆文 [e29]
2023-03-03 20:21:21
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作