“卷積”的形象理解
共 4216字,需瀏覽 9分鐘
·
2024-07-27 11:06
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
在泛函分析中,卷積、旋積或摺積(英語:Convolution)是通過兩個(gè)函數(shù)f和g 生成第三個(gè)函數(shù)的一種數(shù)學(xué)算子,表征函數(shù)f與g經(jīng)過翻轉(zhuǎn)和平移的重疊部分函數(shù)值乘積對(duì)重疊長度的積分。
卷積是分析數(shù)學(xué)中一種重要的運(yùn)算。簡單定義:設(shè)f(χ),g(χ)是R上的兩個(gè)可積函數(shù),作積分:
可以證明,關(guān)于幾乎所有的實(shí)數(shù)x,上述積分是存在的。并且把卷積記做h(x)=(f*g)(x)
這樣生硬的公式,長時(shí)間不用可能就要忘了。記下來用幾種形象的比喻來理解一下卷積到底在“卷”什么。
一、第一層理解
有一個(gè)人特別喜歡吃東西,一日三餐吃的特別多,總之1天24小時(shí)不斷在吃東西,橫坐標(biāo)表示時(shí)間,縱坐標(biāo)表示進(jìn)食量。
吃進(jìn)去就得消化,因此隨著時(shí)間的延長,食物也在不斷地被消化。
有了輸入和輸出這二者隨時(shí)間變化的關(guān)系,接下來看一個(gè)具體的問題:下午2點(diǎn),這個(gè)人的肚子里還剩多少食物?在這個(gè)過程吃和消化在不停的變化,計(jì)算起來應(yīng)該還挺麻煩的。
想想剛剛的卷積公式,用f函數(shù)表示進(jìn)食,用g函數(shù)表示消化, 如果不考慮消化問題,計(jì)算肚子里還剩多少食物,其實(shí)就是對(duì)f(t)這個(gè)函數(shù)求積分進(jìn)行了,計(jì)算曲線下的面積。
顯然還要再考慮消化,加入考慮12點(diǎn)的時(shí)候吃了一碗米飯,到14點(diǎn)還能剩多少呢?
由于g函數(shù)表示食物還剩下的比例,因此用12點(diǎn)吃下去的食物,乘以2小時(shí)候消化完剩余食物的比例,就能得到還在肚子里的食物量。這還只是一個(gè)點(diǎn)的情況,再增加一個(gè)點(diǎn),上午10點(diǎn)吃了一個(gè)面包,到下午2點(diǎn)還能剩多少?
一次類推,如果能把每個(gè)時(shí)間點(diǎn)的進(jìn)食量都和消化函數(shù)g乘一下,就能得到每個(gè)點(diǎn)進(jìn)食后再下午14點(diǎn)肚子里還剩多少食物。
有個(gè)這個(gè)數(shù)據(jù),再把所有的點(diǎn)的剩余量再加一下,就能得到最終再14點(diǎn)肚子里剩余的食物總量。
如果用數(shù)學(xué)公式表達(dá):
積分后的結(jié)果表示t時(shí)刻,肚子里還剩下多少食物。這里需要注意的是兩個(gè)函數(shù)中的自變量相加只剩下時(shí)間t,這其實(shí)也算是卷積的一個(gè)標(biāo)志。那么這樣一堆變量反映到圖像中表示什么含義呢?
總結(jié)一下:一個(gè)系統(tǒng),輸入不穩(wěn)定的,輸出是不穩(wěn)定的,這樣就能夠用卷積求存量。
此外,還有一個(gè)問題,卷積?哪里能夠體現(xiàn)處“卷”?
其實(shí)呢卷積的本質(zhì)就是翻轉(zhuǎn),相乘,相加的這么一個(gè)過程。
二、第二層理解
對(duì)于圖像的卷積操作來說,只要能夠找到函數(shù)f和g。從圖像的卷積操作來說,就是去尋找一個(gè)卷積核去從圖像上找到相關(guān)的響應(yīng),以下圖為例,拿一個(gè)3x3大小的窗口在圖像上從左到右,從上到下滑動(dòng),每次都是逐點(diǎn)相乘,最終相加的過程。
這個(gè)可以把圖像認(rèn)為是函數(shù)f,卷積核是函數(shù)g,因?yàn)閳D像中卷積核是穩(wěn)定的,就是那9個(gè)數(shù),而卷積核每次在圖像上滑動(dòng)過程中,圖像對(duì)應(yīng)的窗口時(shí)變動(dòng)的,是不穩(wěn)定的。
由于第一層理解中的具體問題還是個(gè)一維問題,而對(duì)于圖像的卷積操作是一個(gè)二維問題,而且也不再是求系統(tǒng)存量這么回事了。
那么換個(gè)角度理解, 在t時(shí)刻發(fā)生了颶風(fēng),而產(chǎn)生的原因就是在此之前時(shí)刻,有蝴蝶煽動(dòng)了翅膀,在x時(shí)刻蝴蝶煽動(dòng)翅膀?qū)時(shí)刻發(fā)生颶風(fēng)產(chǎn)生影響。
但是這個(gè)影響是會(huì)隨著時(shí)間的變化而變化的,也就是函數(shù)g,它的影響力是隨著時(shí)間不斷衰減的。
其實(shí),這樣去看卷積的話也就是說看x時(shí)刻對(duì)于t時(shí)刻產(chǎn)生的影響,然后把t之間時(shí)刻都計(jì)算一遍再相加,就能計(jì)算所有t時(shí)刻之前對(duì)于當(dāng)前t時(shí)刻的影響有多大了。
也就是說在某一時(shí)刻發(fā)生了一件事,但是它會(huì)受到之前發(fā)生的很多事的影響。比如x時(shí)刻蝴蝶煽動(dòng)了翅膀?qū)τ趖時(shí)刻的影響還需要看從x到t經(jīng)歷的時(shí)間。
再回頭看圖像的卷積操作,是不是就可以理解為很多像素點(diǎn)對(duì)某一個(gè)像素點(diǎn)是如何產(chǎn)生影響的?也就說卷積核其實(shí)就是如何對(duì)當(dāng)前像素點(diǎn)產(chǎn)生影響的,卷積核的大小其實(shí)就是在控制影響范圍的大小,有可能這也是空洞卷積想法的來源。
有關(guān)圖像的二維卷積的計(jì)算公式:
可以發(fā)現(xiàn),這兩個(gè)圖并不是一一對(duì)應(yīng)關(guān)系,那么對(duì)圖像或者卷積核做一個(gè)翻轉(zhuǎn)操作,這是不是又回來了,翻轉(zhuǎn),相乘,相加。
也就是說卷積核旋轉(zhuǎn)180度才是真正的卷積,但是對(duì)于圖像卷積操作來說就是省去了翻轉(zhuǎn)這一操作,但這并不影響圖像操作。
三、第三層理解
如果想要理解上面這兩張圖是否為同一個(gè)東西的時(shí)候,對(duì)于人眼來說很容易就能認(rèn)出來,但是對(duì)于計(jì)算機(jī)比較的話,只有0和1的理解確實(shí)還挺難的,但是對(duì)于一些局部特征來說,很是很像的。
所以,用計(jì)算機(jī)進(jìn)行圖像識(shí)別的關(guān)鍵在于挑出圖像的局部特征出來,然后根據(jù)局部特征進(jìn)行對(duì)比來識(shí)別。那么如何進(jìn)行局部特征提取呢?
所以就有一大批人來設(shè)計(jì)各種各樣的濾波算子,從而能夠得到各種特征提取方法,比如各種邊緣檢測(cè),角點(diǎn)檢測(cè)等等。
其實(shí)對(duì)于濾波算子來說,其實(shí)就是對(duì)周圍像素點(diǎn)的試探,卷積核就是試探的模板,不care的點(diǎn)就設(shè)置為0。所以這么理解卷積核就是對(duì)周圍像素的點(diǎn)的主動(dòng)試探和選擇,通過它把周圍有用的特征保留下來。
回到X圖像的識(shí)別問題上來:Features match pieces of the iamge
通過這些特征匹配的模板去圖像上找到相應(yīng)的特征響應(yīng),從而達(dá)到圖像分類和識(shí)別的問題。
但是,人為的設(shè)計(jì)這些卷積核是很難做到遍歷且有效的,那么就有了現(xiàn)在流行的深度學(xué)習(xí)完成端到端的訓(xùn)練,從而得到這些卷積核。
這樣雖然可以省去人為的特征設(shè)計(jì),但是也會(huì)帶來很多問題,比如自動(dòng)尋找得到的卷積核無法去理解為什么要提取這樣的特征響應(yīng),比如在優(yōu)化過程中如何保證最優(yōu)解等等,都是深度學(xué)習(xí)需要解決的問題。
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。
下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。
下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
