天天看點

計算機視覺專業術語總結:建構計算機視覺的知識體系

前言:

在計算機視覺中存在很多的專業術語,如先驗知識,語義資訊,embedding,head,neck等。這些術語的解釋無法直接在網上搜到,也沒有在哪一篇論文中定義它們的概念和意義,是以,對于第一次聽到這些術語的讀者來說會非常的困惑。

此外,對于還沒有建立計算機視覺知識體系的讀者來說,也很難了解特征空間,fine-tuning、預訓練、池化等方面的内容。

本文介紹了很多讀者在其它地方不可能了解的内容,通過這些内容相信讀者能更深層次地了解計算機視覺,建立起基本的計算機視覺知識體系。

backbone、head、neck和fine-tune

以一個圖像分類的卷積神經網絡為例,網絡分成兩部分,前部分是由卷積層、歸一化層、激活層、池化層堆疊的,輸入圖像在經過若幹層卷積、歸一化層、激活層和池化層的堆疊後進入全連接配接層,經過幾次全連接配接後輸出每個類别的機率值。

在這裡,前面卷積層、歸一化層、激活層和池化層的堆疊部分屬于backbone。意思是神經網絡的軀幹部分,這部分也稱為特征提取網絡。

後面的全連接配接層的堆疊屬于head。意思是神經網絡的頭部,實作模型任務的預測,稱為predictor head,這部分網絡也稱為分類網絡。

計算機視覺專業術語總結:建構計算機視覺的知識體系

再以目标檢測中的YOLO_V4中的圖為例。

如上圖所示,在backbone後,常建構特征金字塔,在特征金字塔部分做一些處理,如多尺度融合,再将特征金字塔的輸出進行預測。是以,特征金字塔這部分放在backbone和head之間,稱為neck(脖子),這裡的Dense Prediction即為head。

關于backbone即常見的經典網絡,如VGG,ResNet,MobileNet,ShuffleNet,DenseNet等,當某個模型提到backbone使用的是VGG,即表示使用的是VGG的backbone部分,而不包括VGG的head。

這裡解釋一下為何是這樣。神經網絡有多種解釋,其中一種解釋如下,神經網絡被認為是在提取特征,計算機視覺的傳統方法就是人為地設定某些特征,再進行分類。如HOG特征,LBP特征,在提取完特征後,使用分類器對這些特征進行分類,如SVM分類器。

這裡的backbone部分則認為是一個特征提取網絡,而head部分則被認為是分類網絡,是以特征提取的部分可以共享,它們的本質都是在提取圖檔的特征,而分類網絡則對應到具體的任務,如分類貓狗,分類網絡需要從提取的特征中分成貓狗兩類。

這段話同時也解釋了fine-tune的原理,使用一個預訓練好的backbone,針對你自己的任務,自己搭建相應的分類網絡,在訓練時當機backbone的參數,隻訓練分類網絡的參數。這是因為預訓練好的backbone已經具備很好的特征提取能力,是以對于你自己的圖像,網絡隻需要學習如何将提取後的特征按你定義的類别進行分類。

Preprocess和Postprocess

Preprocess為預處理,圖像在送入神經網絡之前,需要進行一定的處理。

通常的處理是使用opencv中的resize将所有圖像縮放到同一尺寸,并根據資料集的标注設定網絡的label。此外,如果有必要的話,還會進行資料增強,如調整圖像飽和度,鏡像,加噪聲,随機掩碼等方式。

預處理的必要性:大部分神經網絡在backbone後将資料進行flatten(即将四維的張量變成二維)的操作,再進行全連接配接,此時全連接配接層輸入的神經元個數即為flatten後的長度,若輸入的圖像的尺寸不一樣,則全連接配接層輸入的神經元個數無法一緻,會報錯。此外,對于沒有全連接配接層,其它類似的處理部分(除少數外),也會要求backbone後的輸出大小一緻。

Postprocess指的是對網絡預測的結果進行後處理,對于普通的分類網絡不需要後處理,但對于目标檢測、語義分割這樣的任務,需要對網絡的輸出進行處理,将預測的結果通過圖像進行可視化。

例如目标檢測中的YOLO,其輸出一個7x7x30的張量,輸出98個預測框,但實際一張圖檔沒這麼的目标,則需要進行NMS這樣的處理來去除一些不合理的預測框,且我們無法直接看待這些預測框是否準确,就需要将其在原圖像上顯示出來,以直覺感受預測的效果如何。

先驗知識

在《論文創新的常見思路總結》中我提到,關于特定的類的檢測,我們可以針對這個類别添加很多先驗知識,在《資料增強方法總結》中我提到,資料增強的本質是人為地引入人視覺上的先驗知識。在《CNN可視化技術總結(一)特征圖可視化》中我提到,所謂改進網絡都是人的主觀改進,這裡人的主觀即先驗知識。

這裡的先驗知識指的是人對于如何識别一張圖像或如何識别一個類而關注的内容,引入先驗知識是指設計一些東西讓網絡也關注這些内容。

例如特征金字塔中的多尺度融合,人認為大目标應該在低分辨率檢測、小目标在高分辨率檢測,由此網絡在特征金字塔的不同層預測不同大小的目标。人又認為如果大目标在低分辨率檢測,小目标在高分辨率檢測,則在低分辨率時,小目标還存在,在這裡被當成了背景,同理在高分辨率時大目标被當成了背景,這樣不合理,又提出了ASFF處理方式,提升了5-10個百分點。

例如人在關注一個事物時,會自動忽略眼睛看到的其它東西,由此提出了注意力機制。

例如即便隻有上半身,人還是能認出自己熟悉的人,由此提出随機遮擋等資料增強方式,讓網絡在有遮擋的情況下也能正确識别。

例如人是如何識别打籃球這一行為的,人根據籃球、投籃手勢、身體跳躍、籃球運動等一系列的組合識别,是以如何讓網絡更好地關注這些特征提出了Non-Local。

計算機視覺專業術語總結:建構計算機視覺的知識體系

embedding

在transformer中出現了embedding,在自編碼器中也出現了embedding,還有很多地方也有提到,如何了解embedding?

這裡涉及到神經網絡的另一種解釋。神經網絡被認為是将圖像從高維的像素空間映射到低維的嵌入空間,即embedding,也可稱為特征空間。這裡的特征空間用embedding(向量的形式)來表示。

在編碼器中,網絡将圖像映射成embedding,即高維圖像通過非線性函數的多次映射,可以用低維embedding來表示,在解碼器中,網絡将低維embedding映射回圖像。

是以,embedding可以認為是某些特征的濃縮表示形式。

以行人重識别為例,論文認為即便是在不同拍攝角度下,隻要是同一個人,神經網絡輸出的embedding在某種距離度量方式下就是相近的,而不同的人在某種距離方式下就是很遠的,是以可以通過某種距離度量方式判斷兩個embedding的距離是否在門檻值範圍内來判斷是否為同一個人。

feature map

字面意思:特征圖。

根據前面的解釋,神經網絡是在将圖像從高維像素空間映射到低維的特征空間,這個映射是通過一層一層卷積和激活來進行的,卷積具備提取特征的能力。

例如在數字圖像進行中,我們是通過sobel算子來檢測輪廓,而sobel算子可以認為是3x3的卷積的其中一種情況,在這種情況下,它就可以提取圖像的輪廓,那在其它情況下就可以提取其它的特征,是以卷積的過程就是在提取特征的過程,經過卷積提取特征和激活函數的映射後的輸出稱為feature maps。

池化

接着上面的解釋來介紹一下池化。

在一張圖像中存在很多噪聲和備援資訊,噪聲是由相機拍攝過程中由于傳感器電路、材料等硬體因素或傳輸過程中産生的,備援資訊是指跟具體任務無關的内容。

當我們以整張圖像輸入時,需要将這些噪聲、備援資訊去除。我們認為這些備援資訊和噪聲不是特征,在神經網絡中的卷積和映射過程中,會産生比較低的響應值,是以我們可以通過最大池化選擇最大的響應值進入下一層,因為我們認為隻有特征才會在卷積過程中産生大的特征值,也稱為響應值。

同樣以sobel為例,當對一個像素值基本相同的背景進行卷積時,卷積的輸出幾乎為0,而對一個輪廓邊緣進行sobel卷積,則會輸出較大的值。

是以神經網絡通過多次最大池化,去除了噪聲和備援資訊。這也就是為什麼神經網絡的backbone部分基本全是最大池化,而不是平均池化,因為平均池化會将這些備援資訊和噪聲繼續傳到下一層。

關于池化更詳細的技術總結,請閱讀《池化技術總結》文章。

語義資訊

數字圖像是由像素值組成的,它們本是一堆數字的組合,但就是這樣的組合形成了一幅幅圖像,如貓、狗、籃球、米老鼠、眼睛、鼻子等。是以,語義資訊指的是圖像的内容,即鼻子,眼睛這樣的圖像。

總結

本文介紹了很多讀者在其它地方不可能了解的内容,通過這些内容相信讀者能更深層次地了解計算機視覺,建立起基本的計算機視覺知識體系。

繼續閱讀