使用Transformer模型進(jìn)行計(jì)算機(jī)視覺任務(wù)的端對(duì)端對(duì)象檢測(cè)
Transformer模型是google團(tuán)隊(duì)在2017在論文attention is all you need中提出的一個(gè)用于NLP領(lǐng)域的模型,但是隨著VIT模型與Swin Transformer模型的發(fā)布,把Transformer模型成功應(yīng)用到計(jì)算機(jī)視覺任務(wù)中。
上期圖文,我們使用hugging face的transformers模型進(jìn)行了VIT模型的對(duì)象分類任務(wù)。本期我們?cè)俅畏窒硪粋€(gè)成功把Transformer模型應(yīng)用到計(jì)算機(jī)對(duì)象檢測(cè)任務(wù)模型。此模型是Facebook發(fā)布的基于Transformer模型的端對(duì)端對(duì)象檢測(cè)任務(wù)模型-- DETR(detect Transformer模型)。

DETR模型首先使用CNN卷積神經(jīng)網(wǎng)絡(luò)搜集圖片的核心特征點(diǎn),然后把這些特征點(diǎn)整合起來,通過embedding方法,把特征圖片轉(zhuǎn)換到特征向量空間。然后根據(jù)標(biāo)準(zhǔn)Transformer模型的編碼器與解碼器進(jìn)行注意力機(jī)制的計(jì)算,最后把計(jì)算后的數(shù)據(jù)進(jìn)行圖片對(duì)象的分類,并根據(jù)檢測(cè)到的位置信息,提供對(duì)象box區(qū)域,方便我們畫圖。

傳統(tǒng)的對(duì)象檢測(cè)算法,如 Faster R-CNN,通過過濾大量粗略對(duì)象區(qū)域來預(yù)測(cè)對(duì)象邊界框,這些區(qū)域通常是 CNN 特征圖片區(qū)域。每個(gè)選定的區(qū)域都用于細(xì)化操作,包括在區(qū)域定義的位置裁剪 CNN 特征,獨(dú)立對(duì)每個(gè)區(qū)域進(jìn)行分類,并細(xì)化其位置。最后,應(yīng)用非最大抑制步驟來刪除重復(fù)框。而DETR 通過利用標(biāo)準(zhǔn)的Transformer架構(gòu)來執(zhí)行傳統(tǒng)上特定于對(duì)象檢測(cè)的操作,從而簡(jiǎn)化了檢測(cè)管道,優(yōu)化了算法步驟,提高了檢測(cè)效率。

Transformers 的自注意力機(jī)制允許DETR模型對(duì)圖像以及預(yù)測(cè)的特定對(duì)象執(zhí)行全局推理。

例如,模型可能會(huì)查看圖像的其他區(qū)域,以幫助對(duì)邊界框中的對(duì)象做出檢測(cè)。它還可以根據(jù)圖像中對(duì)象之間的關(guān)系或相關(guān)性進(jìn)行預(yù)測(cè)。例如,如果DETR預(yù)測(cè)圖像中有一個(gè)人站在沙灘上,它就會(huì)知道部分被遮擋的物體更有可能是沖浪板。相比之下,其他檢測(cè)模型只能獨(dú)立的預(yù)測(cè)每個(gè)對(duì)象,每個(gè)對(duì)象之間并沒有相關(guān)性。
代碼實(shí)戰(zhàn)DETR模型
既然是Facebook發(fā)布的模型,那么其首當(dāng)其沖的便是使用pytorch框架來實(shí)現(xiàn),且pytorch模型的TorchHub已經(jīng)集成了此模型,我們可以直接使用TorchHub模型來實(shí)現(xiàn)本期代碼,當(dāng)然若想了解DETR模型的框架,當(dāng)然最好是源代碼來實(shí)現(xiàn),這個(gè)我們后期進(jìn)行分享。

首先我們需要導(dǎo)入需要的第三方庫,這里主要是torch框架以及其他庫。
DETR模型訓(xùn)練在COCO數(shù)據(jù)集上,這里我們列舉一下COCO數(shù)據(jù)集的對(duì)象分類,并定義一個(gè)colors顏色列表,方便我們進(jìn)行不同顏色的備注。
然后我們定義幾個(gè)函數(shù),方便顯示我們經(jīng)過模型檢測(cè)后的box,主要是為了我們后期進(jìn)行box的畫圖,模型對(duì)象檢測(cè)后的標(biāo)簽與模型檢測(cè)置信度。
有了以上的函數(shù),我們就可以把圖片放入我們的DETR模型進(jìn)行對(duì)象檢測(cè)了。
首先我們使用torch.hub.load函數(shù)來加載DETR模型的預(yù)訓(xùn)練模型,并傳遞一張圖片。當(dāng)然這里可以直接傳遞圖片的URL地址,也可以直接從本地打開一張需要檢測(cè)的模型。
加載圖片后,我們需要把圖片轉(zhuǎn)換到torch變量,然后把圖片數(shù)據(jù)傳遞到model模型來進(jìn)行對(duì)象檢測(cè)的預(yù)測(cè),結(jié)果保持在output中,然后我們使用soft Max函數(shù)來挑選概率最大的對(duì)象檢測(cè)數(shù)據(jù),并挑選出置信度大于0.8(預(yù)設(shè)值)的對(duì)象標(biāo)簽與置信度。
得到檢測(cè)結(jié)果后,最后我們使用plot_results函數(shù)來可視化檢測(cè)到的對(duì)象。

DETR模型對(duì)象檢測(cè)
上期圖文教程,YOLO-NAS對(duì)象檢測(cè)算法再一次顛覆YOLO系列算法——已超越Y(jié)OLOv8,我們使用YOLO的最新模型進(jìn)行了同一張圖片的對(duì)象檢測(cè),我們可以使用以上代碼與YOLO- NAS模型來進(jìn)行對(duì)象檢測(cè)的對(duì)比。

YOLO_NAS模型對(duì)象檢測(cè)
從對(duì)象檢測(cè)的速度與精度來講,基于transformer注意力機(jī)制算法的DETR模型同樣可以使用在對(duì)象檢測(cè)任務(wù)中,讓transformer模型進(jìn)行模型大一統(tǒng)更近了一步。