使用opencv部署yolact例項分割

2021-10-25 16:53:17 字數 2135 閱讀 3066

yolact,全稱為:you only look at coefficients,從標題可以看出這個模型的名稱有些致敬yolo的意思。yolact是2023年iccv會議**,它是在現有的一階段(one-stage)目標檢測模型裡新增掩模分支。而經典的mask-rcnn是兩階段例項分割模型是在faster-rcnn(兩階段目標檢測模型)新增掩模分支,但是在yolact裡沒有feature roi pooling這個步驟。因而,yolact是乙個單階段例項分割模型。

位址是:

關於 yolact,目前中文網際網路上的資料多數是對原始**的翻譯總結。簡單講一下yolact的網路結構,如下圖所示

左下角是550*550大小的輸入,輸入預處理後進入backbone(圖中藍色區域)生成c1~c5這5種尺度特徵圖,然後進入fpn(圖中橙色區域)生成p3~p7這5種尺度特徵圖,這些都是很常見的操作。接下來是並行操作:

(1). p3~p7送入到prediction head分支生成各候選框的類別confidence、 location 和 prototype mask 的 coefficient;

(2). p3送入到protonet 生成 k 個 prototype mask。在**中 k = 32。prototype mask 和 coefficients 的數量相等。

然後是後處理操作,得到最右邊的帶有檢測框和mask染色的。下面我將結合編寫的程式**,對這個模型的後處理模組進行講解。執行python程式,設斷點檢視網路輸出,如下圖所示

可以看到有4個輸出,分別是loc_data, conf_preds, mask_data, proto_data。其中conf_preds表示候選框(也可以稱作proposal)的類別置信度,可以看到它的形狀是(19248,81)。81表示類別數,背景算作乙個類,加上coco資料集有80類,一共就是81類,這個很好理解。19248的意義,對於初學者,在這裡很有必要解釋一下。前面講到,在進入backbone後會生成5種尺度特徵圖,在**裡定義了這5種尺度特徵圖的高寬分別是(69,69), (35,35), (18,18), (9,9), (5,5), 並且給特徵圖上的每個畫素點分配三種尺寸的anchor,分別是(sk, sk), (sk/ sqrt(2), sk* sqrt(2)),(sk* sqrt(2), sk/ sqrt(2)),其中sk表示basesize,5種尺度特徵圖分別對應的basesize是24,48,96,192,384。

一共有5種尺度特徵圖,在特徵圖上的每個畫素點會生成3種候選框。因此,最後會生成69693+35353+18183+993+553=19248(你可以在計算器裡輸入驗證一下)個候選框。到這時你可以發現,雖然從名稱上看yolact是致敬yolo的,但是使用的是ssd的網路結構做目標檢測的。

搞清楚了conf_preds的維度的意義後,就可以知道:

在弄明白了這4個輸出的意義後,接下來的事情就順理成章的展開。首先求conf_preds裡的每個候選框在80類裡最大類別置信度,得到所屬的類別和置信度,然後根據過濾掉低於置信度閾值的候選框,使用nms過濾掉重疊的候選框,經過這兩次過濾後剩下的候選框就是最終的目標檢測框。這時候可以使用opencv函式在原圖上畫出目標檢測框和所屬類別以及置信度,接著就是計算這些目標檢測框的例項掩膜。**截圖如下

還可以這麼理解

如下圖所示,左邊的圖是使用opencv做yolact例項分割的視覺化結果。右邊的圖是yolact官方**(的視覺化結果。

openCV使用隨記

cv2.videocapture cv2.calcopticalflowfarneback cv2.calcopticalflowfarneback prev,next,flow,pyr scale,levels,winsize,iterations,poly n,poly sigma,flags ...

使用opencv畫框

在平常使用影象處理中的時候,例如檢測追蹤的時候,我們經常需要用到畫圖函式,例如手動標定乙個目標,呼叫滑鼠時間,然後進行追蹤,或者檢測完乙個目標,畫上矩形或者其他形狀,然後進行追蹤,這些都是做影象處理的基礎。接下來我將對幾個常見的函式進行講解,並給出幾個平常追蹤的例子。使用opencv 中cv2.li...

opencv 簡單使用

cv2 的簡單使用 imshow 第乙個引數為視窗名 第二個引數為讀取到的 img 值 imshow 無法顯示影象 暫未解決 cv2.namedwindow showimage cv2.imshow image img cv2.waitkey 0 cv2.destroyallwindows tp i...