前言:
在計算機視覺中存在很多的專業(yè)術(shù)語,如先驗知識,語義信息,embedding,head,neck等。這些術(shù)語的解釋無法直接在網(wǎng)上搜到,也沒有在哪一篇論文中定義它們的概念和意義,因此,對于第一次聽到這些術(shù)語的讀者來說會非常的困惑。
此外,對于還沒有建立計算機視覺知識體系的讀者來說,也很難理解特征空間,fine-tuning、預(yù)訓(xùn)練、池化等方面的內(nèi)容。 本文介紹了很多讀者在其它地方不可能了解的內(nèi)容,通過這些內(nèi)容相信讀者能更深層次地理解計算機視覺,建立起基本的計算機視覺知識體系。
backbone、head、neck和fine-tune
以一個圖像分類的卷積神經(jīng)網(wǎng)絡(luò)為例,網(wǎng)絡(luò)分成兩部分,前部分是由卷積層、歸一化層、激活層、池化層堆疊的,輸入圖像在經(jīng)過若干層卷積、歸一化層、激活層和池化層的堆疊后進入全連接層,經(jīng)過幾次全連接后輸出每個類別的概率值。 在這里,前面卷積層、歸一化層、激活層和池化層的堆疊部分屬于backbone。意思是神經(jīng)網(wǎng)絡(luò)的軀干部分,這部分也稱為特征提取網(wǎng)絡(luò)。 后面的全連接層的堆疊屬于head。意思是神經(jīng)網(wǎng)絡(luò)的頭部,實現(xiàn)模型任務(wù)的預(yù)測,稱為predictor head,這部分網(wǎng)絡(luò)也稱為分類網(wǎng)絡(luò)。
再以目標(biāo)檢測中的YOLO_V4中的圖為例。 如上圖所示,在backbone后,常構(gòu)建特征金字塔,在特征金字塔部分做一些處理,如多尺度融合,再將特征金字塔的輸出進行預(yù)測。因此,特征金字塔這部分放在backbone和head之間,稱為neck(脖子),這里的Dense Prediction即為head。 關(guān)于backbone即常見的經(jīng)典網(wǎng)絡(luò),如VGG,ResNet,MobileNet,ShuffleNet,DenseNet等,當(dāng)某個模型提到backbone使用的是VGG,即表示使用的是VGG的backbone部分,而不包括VGG的head。 這里解釋一下為何是這樣。神經(jīng)網(wǎng)絡(luò)有多種解釋,其中一種解釋如下,神經(jīng)網(wǎng)絡(luò)被認(rèn)為是在提取特征,計算機視覺的傳統(tǒng)方法就是人為地設(shè)定某些特征,再進行分類。如HOG特征,LBP特征,在提取完特征后,使用分類器對這些特征進行分類,如SVM分類器。 這里的backbone部分則認(rèn)為是一個特征提取網(wǎng)絡(luò),而head部分則被認(rèn)為是分類網(wǎng)絡(luò),因此特征提取的部分可以共享,它們的本質(zhì)都是在提取圖片的特征,而分類網(wǎng)絡(luò)則對應(yīng)到具體的任務(wù),如分類貓狗,分類網(wǎng)絡(luò)需要從提取的特征中分成貓狗兩類。 這段話同時也解釋了fine-tune的原理,使用一個預(yù)訓(xùn)練好的backbone,針對你自己的任務(wù),自己搭建相應(yīng)的分類網(wǎng)絡(luò),在訓(xùn)練時凍結(jié)backbone的參數(shù),只訓(xùn)練分類網(wǎng)絡(luò)的參數(shù)。這是因為預(yù)訓(xùn)練好的backbone已經(jīng)具備很好的特征提取能力,因此對于你自己的圖像,網(wǎng)絡(luò)只需要學(xué)習(xí)如何將提取后的特征按你定義的類別進行分類。
Preprocess和Postprocess
Preprocess為預(yù)處理,圖像在送入神經(jīng)網(wǎng)絡(luò)之前,需要進行一定的處理。 通常的處理是使用opencv中的resize將所有圖像縮放到同一尺寸,并根據(jù)數(shù)據(jù)集的標(biāo)注設(shè)置網(wǎng)絡(luò)的label。此外,如果有必要的話,還會進行數(shù)據(jù)增強,如調(diào)整圖像飽和度,鏡像,加噪聲,隨機掩碼等方式。 預(yù)處理的必要性:大部分神經(jīng)網(wǎng)絡(luò)在backbone后將數(shù)據(jù)進行flatten(即將四維的張量變成二維)的操作,再進行全連接,此時全連接層輸入的神經(jīng)元個數(shù)即為flatten后的長度,若輸入的圖像的尺寸不一樣,則全連接層輸入的神經(jīng)元個數(shù)無法一致,會報錯。此外,對于沒有全連接層,其它類似的處理部分(除少數(shù)外),也會要求backbone后的輸出大小一致。 Postprocess指的是對網(wǎng)絡(luò)預(yù)測的結(jié)果進行后處理,對于普通的分類網(wǎng)絡(luò)不需要后處理,但對于目標(biāo)檢測、語義分割這樣的任務(wù),需要對網(wǎng)絡(luò)的輸出進行處理,將預(yù)測的結(jié)果通過圖像進行可視化。 例如目標(biāo)檢測中的YOLO,其輸出一個7x7x30的張量,輸出98個預(yù)測框,但實際一張圖片沒這么的目標(biāo),則需要進行NMS這樣的處理來去除一些不合理的預(yù)測框,且我們無法直接看待這些預(yù)測框是否準(zhǔn)確,就需要將其在原圖像上顯示出來,以直觀感受預(yù)測的效果如何。
先驗知識
在《論文創(chuàng)新的常見思路總結(jié)》中我提到,關(guān)于特定的類的檢測,我們可以針對這個類別添加很多先驗知識,在《數(shù)據(jù)增強方法總結(jié)》中我提到,數(shù)據(jù)增強的本質(zhì)是人為地引入人視覺上的先驗知識。在《CNN可視化技術(shù)總結(jié)(一)特征圖可視化》中我提到,所謂改進網(wǎng)絡(luò)都是人的主觀改進,這里人的主觀即先驗知識。 這里的先驗知識指的是人對于如何識別一張圖像或如何識別一個類而關(guān)注的內(nèi)容,引入先驗知識是指設(shè)計一些東西讓網(wǎng)絡(luò)也關(guān)注這些內(nèi)容。 例如特征金字塔中的多尺度融合,人認(rèn)為大目標(biāo)應(yīng)該在低分辨率檢測、小目標(biāo)在高分辨率檢測,由此網(wǎng)絡(luò)在特征金字塔的不同層預(yù)測不同大小的目標(biāo)。人又認(rèn)為如果大目標(biāo)在低分辨率檢測,小目標(biāo)在高分辨率檢測,則在低分辨率時,小目標(biāo)還存在,在這里被當(dāng)成了背景,同理在高分辨率時大目標(biāo)被當(dāng)成了背景,這樣不合理,又提出了ASFF處理方式,提升了5-10個百分點。
例如人在關(guān)注一個事物時,會自動忽略眼睛看到的其它東西,由此提出了注意力機制。 例如即便只有上半身,人還是能認(rèn)出自己熟悉的人,由此提出隨機遮擋等數(shù)據(jù)增強方式,讓網(wǎng)絡(luò)在有遮擋的情況下也能正確識別。 例如人是如何識別打籃球這一行為的,人根據(jù)籃球、投籃手勢、身體跳躍、籃球運動等一系列的組合識別,因此如何讓網(wǎng)絡(luò)更好地關(guān)注這些特征提出了Non-Local。
embedding
在transformer中出現(xiàn)了embedding,在自編碼器中也出現(xiàn)了embedding,還有很多地方也有提到,如何理解embedding? 這里涉及到神經(jīng)網(wǎng)絡(luò)的另一種解釋。神經(jīng)網(wǎng)絡(luò)被認(rèn)為是將圖像從高維的像素空間映射到低維的嵌入空間,即embedding,也可稱為特征空間。這里的特征空間用embedding(向量的形式)來表示。 在編碼器中,網(wǎng)絡(luò)將圖像映射成embedding,即高維圖像通過非線性函數(shù)的多次映射,可以用低維embedding來表示,在解碼器中,網(wǎng)絡(luò)將低維embedding映射回圖像。 因此,embedding可以認(rèn)為是某些特征的濃縮表示形式。 以行人重識別為例,論文認(rèn)為即便是在不同拍攝角度下,只要是同一個人,神經(jīng)網(wǎng)絡(luò)輸出的embedding在某種距離度量方式下就是相近的,而不同的人在某種距離方式下就是很遠的,因此可以通過某種距離度量方式判斷兩個embedding的距離是否在閾值范圍內(nèi)來判斷是否為同一個人。
feature map
字面意思:特征圖。 根據(jù)前面的解釋,神經(jīng)網(wǎng)絡(luò)是在將圖像從高維像素空間映射到低維的特征空間,這個映射是通過一層一層卷積和激活來進行的,卷積具備提取特征的能力。 例如在數(shù)字圖像處理中,我們是通過sobel算子來檢測輪廓,而sobel算子可以認(rèn)為是3x3的卷積的其中一種情況,在這種情況下,它就可以提取圖像的輪廓,那在其它情況下就可以提取其它的特征,因此卷積的過程就是在提取特征的過程,經(jīng)過卷積提取特征和激活函數(shù)的映射后的輸出稱為feature maps。
池化
接著上面的解釋來介紹一下池化。 在一張圖像中存在很多噪聲和冗余信息,噪聲是由相機拍攝過程中由于傳感器電路、材料等硬件因素或傳輸過程中產(chǎn)生的,冗余信息是指跟具體任務(wù)無關(guān)的內(nèi)容。 當(dāng)我們以整張圖像輸入時,需要將這些噪聲、冗余信息去除。我們認(rèn)為這些冗余信息和噪聲不是特征,在神經(jīng)網(wǎng)絡(luò)中的卷積和映射過程中,會產(chǎn)生比較低的響應(yīng)值,因此我們可以通過最大池化選擇最大的響應(yīng)值進入下一層,因為我們認(rèn)為只有特征才會在卷積過程中產(chǎn)生大的特征值,也稱為響應(yīng)值。 同樣以sobel為例,當(dāng)對一個像素值基本相同的背景進行卷積時,卷積的輸出幾乎為0,而對一個輪廓邊緣進行sobel卷積,則會輸出較大的值。 因此神經(jīng)網(wǎng)絡(luò)通過多次最大池化,去除了噪聲和冗余信息。這也就是為什么神經(jīng)網(wǎng)絡(luò)的backbone部分基本全是最大池化,而不是平均池化,因為平均池化會將這些冗余信息和噪聲繼續(xù)傳到下一層。 關(guān)于池化更詳細(xì)的技術(shù)總結(jié),請閱讀《池化技術(shù)總結(jié)》文章。
語義信息
數(shù)字圖像是由像素值組成的,它們本是一堆數(shù)字的組合,但就是這樣的組合形成了一幅幅圖像,如貓、狗、籃球、米老鼠、眼睛、鼻子等。因此,語義信息指的是圖像的內(nèi)容,即鼻子,眼睛這樣的圖像。
總結(jié)
本文介紹了很多讀者在其它地方不可能了解的內(nèi)容,通過這些內(nèi)容相信讀者能更深層次地理解計算機視覺,建立起基本的計算機視覺知識體系。
責(zé)任編輯:lq6
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100777 -
計算機視覺
+關(guān)注
關(guān)注
8文章
1698瀏覽量
45994
發(fā)布評論請先 登錄
相關(guān)推薦
評論