卷積神經(jīng)網(wǎng)絡在圖像識別領域無限風光予借,通過一張圖片,算法可以知道圖片上的物體是什么匪燕,著實令人震驚蕾羊,但是很多人和我一樣,對于其背后的原理帽驯,都非常好奇龟再,卷積神經(jīng)網(wǎng)絡是如何進行圖像識別的呢?
如果你的英文主夠好的話尼变,可以閱讀這篇論文:
Visualizing and Understanding Convolutional Networks
貓應該長成什么樣子
看過女神李飛飛的ImageNet演講的人利凑,都對于下面兩張圖片印象深刻。
原文請閱讀:
ImageNet締造者:讓冰冷的機器讀懂照片背后的故事
(從薛定諤開始嫌术,貓就一直被各種科學家拿出來說事情哀澈,當然汪星人也時不時出鏡)
人類是如何識別貓咪的?借用知乎的一個回答:
現(xiàn)在假設要做一個圖像的分類問題度气,比如辨別一個圖像里是否有一只貓割按,我們可以先判斷是否有貓的頭,貓的尾巴磷籍,貓的身子等等适荣,如果這些特征都具備现柠,那么我就判定這應該是一只貓。當然弛矛,如果圖像是下面這樣一只老實本分的貓咪够吩,則一切都好辦了。
但是喵星人不但品種不同丈氓,顏色繁多周循,各種銷魂的動作也層出不窮,所以万俗,機器識別貓還是很困難的湾笛。
這樣,我們必須要讓機器知道该编,貓迄本,到底應該長成什么樣子。
想象中的圖形識別原理
第一次考慮怎么處理這個問題课竣,一個很自然的想法浮想在腦海里面:
將所有貓咪的圖片放在一起嘉赎,提取出貓咪的共同特征,做成一個識別貓的模型于樟。然后對于每張圖片公条,使用模型,看一下是貓的概率為多少迂曲。但是如果真的這樣做的話靶橱,可能每種物體都必須要有一個專門的模型了,這樣可能是不行的路捧,計算量可能也是一個問題关霸。特別對于扭曲的貓,這樣子的例子非常難處理杰扫,我們不太可能窮舉出所有貓的正常和非正常形態(tài)队寇。(毛色,眼神章姓,是否有物體和貓進行交互)
當然佳遣,可以考慮,將貓進行分解凡伊,就如知乎網(wǎng)友所說零渐,貓頭,貓尾巴系忙,貓爪子诵盼,獨立進行識別。這樣不管貓怎么扭曲,都無所謂了拦耐。當然耕腾,如果你是資深貓奴,你可以很高興的說出貓的組成特征杀糯,但是,這樣本質上還是加入了太多的領域專家的干涉苍苞。如果要識別大型粒子加速器固翰,這個是不是要請物理學家參與呢?所以羹呵,機器應該完全屏蔽領域知識才可以做到泛用骂际。
CNN學到了什么?
特征(Representation)冈欢。把原始圖像看做一個維度是像素×通道的向量歉铝,經(jīng)過各種復雜的CNN結構,其實只不過成了另一個向量凑耻。這個向量所在的空間也許有更好的線性可分性太示,也許是相似樣本的“距離”更近,原始的數(shù)據(jù)經(jīng)過變換到了這里之后香浩,就是特征类缤。
圖像處理矩陣
雖然不是科班出身,但是以前或多或少看過一些圖像處理的書籍邻吭。
一般的圖像處理都是通過矩陣操作完成的餐弱。
- 位置和形狀 : 例如圖像的拉伸,縮放囱晴,旋轉(當然可以是各種效果的組合)膏蚓。
- 顏色: 灰度調整,透明度畸写,濾鏡
具體的顏色矩陣文章:
C++圖像處理 -- 顏色矩陣變換
其實我認為卷積核這個概念驮瞧,應該是從圖像處理矩陣這個概念來的。通過不同的圖像處理矩陣艺糜,可以突出圖像的某些特征剧董,屏蔽掉某些細節(jié)。
處理后的圖片真慢,屏蔽了顏色毅臊,突出了輪廓特征。(貓的輪廓特征保留下來了黑界,顏色特征暫時消失了)
不同卷積核得到的不同的feature map
當然管嬉,實際處理的時候皂林,可能使用的卷積核可能更加復雜。不過蚯撩,如果真的看一下卷積核的工作方式础倍,一般來說,卷積用來進行特征的提取胎挎,而不是進行圖像的預處理的(或者說沟启,是將圖像針對特征進行壓縮的一個過程)。
主流圖像識別
上面所說的都大半是猜測犹菇,無論如何也應該看一下真實的算法到底是怎么樣的德迹。圖像識別上最有名氣的算法大概就是Inception模型。整個算法的架構大概是這樣的揭芍,深度也是嘆為觀止胳搞。(當前ResNet神經(jīng)網(wǎng)絡已經(jīng)152層了,計算量相當相當相當可怕)
原始圖像經(jīng)過了深深的流水線之后称杨,最后在Softmax層進行分類肌毅。這個過程中到底發(fā)生了什么事情,圖像在Softmax層變成了什么列另,這個可能是所有人都關心的問題芽腾。本文也想通過長期的研究,能或多或少搞清楚里面的奧秘页衙。這個過程應該是極其艱苦的摊滔,非常困難的。但是對于機器學習的思考卻非常有幫助店乐。