前往
大廳
主題 達人專欄

[ AI ] 了解AI模型Post Process,實作Polygon的 Non Maximum Suppression

%%鼠 拒收病婿 | 2023-06-01 22:57:58 | 巴幣 4340 | 人氣 598

前言

說到AI專題,像我之前的經驗只是套模型、跑輸出,頂多看了網路上的教學了解原理,就以為自己準備好了。殊不知這等級只是AI學門皮毛上的毛細胞而已。有太多細節是我們在套模時不會去想到的,這陣子跟著lab的課題實際操練了一輪後,才豁然開朗。AI的運作並不是完全的黑盒子,有更多部分是我們人為設計的處理,將AI的輸出去蕪存菁,最終才顯示出我們預期的答案。

之所以挑選Non Maximum Suppression (NMS)作為這次筆記主題,主要是因為它讓我印象深刻,之前一直都以為Object detection模型跑完就只會輸出一個bounding box作為答案。而實際上模型是一次輸出好幾百個、幾千個答案,我們需要設計一個後處理(Post process)管線去剃除掉多餘的答案。  再來,由於專題是使用polygon在做處理,而pytorch涵式庫好像只提供bbox格式的nms方法,所以我實作了一個Polygon用的nms。

程式碼在個人網站上觀看效果比較好喔~


Post Process流程

模型的輸出結果如下圖左邊,其中充斥著許多雜訊,我們需要透過一連串的過濾,最終顯示如圖右邊那樣。
 
一個簡單的post process動作如下圖,需移除標記為背景的物件、太小的box、分數太低的box,最後做個nms將box合併。
 

Non Maximum Suppression (NMS)

nms的目的是將重疊的box做合併。合併的規則是先計算重疊box的區域面積比(iou),當多個box重疊面積超過閥值,則保留分數較高的那個box。
 
圖:Selecting the Right Bounding Box Using Non-Max Suppression (with implementation) (analyticsvidhya.com)
 

處理概念

已知模型輸出的是n個polygon資料,為了方便我們比較iou,可以先展開n*n的矩陣去裝各個polygon對應的iou。

有了iou matrix之後,用where函數找出大於閥值的值的index。 因為目標matrix是二維的,where返回的是一個含有兩個陣列的tuple,分別代表縱軸跟橫軸的index。我們將它重新組合成一個n*2維的陣列,第一欄代表row的index、第二欄代表column的index。

使用:

美觀大方的程式就出來了。

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

創作回應

偷偷做不會被發現
2023-06-02 05:33:26
%%鼠 拒收病婿
還在學基本QQ
2023-06-03 01:17:26
七七
看數學就暈
2023-06-02 10:33:09
%%鼠 拒收病婿
矩陣轉來轉去XD 容易頭暈
2023-06-03 01:18:05
在意你就輸了
佬...
2023-06-02 14:20:58
%%鼠 拒收病婿
並沒有[e3]
2023-06-03 01:18:15
嘟嘟好臘腸的size
到哪裡都可以看到狗腳踏車和車子的圖XD
2023-06-02 15:08:51
%%鼠 拒收病婿
太經典了w
2023-06-03 01:18:22
樂小呈
已經是另一個世界ㄌ [e32]
2023-06-02 17:49:16
%%鼠 拒收病婿
要踏進新世界ㄇ~
2023-06-03 01:18:41
追蹤 創作集

作者相關創作

更多創作