自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

零基礎(chǔ)也能搞懂卷積神經(jīng)網(wǎng)絡(luò)原理!超詳細(xì)!

人工智能
相信對(duì)AI興趣濃厚的小伙伴們,一定對(duì)卷積神經(jīng)網(wǎng)絡(luò)并不陌生, 今天我們將從零開始走進(jìn)卷積神經(jīng)網(wǎng)絡(luò)的世界!

相信和筆者一樣愛技術(shù)對(duì)AI興趣濃厚的小伙伴們,一定對(duì)卷積神經(jīng)網(wǎng)絡(luò)并不陌生, 也一定曾經(jīng)對(duì)如此“高級(jí)”的名字困惑良久。筆者今天將從零開始走進(jìn)卷積神經(jīng)網(wǎng)絡(luò)的世界~與大家分享!

在深入了解卷積神經(jīng)網(wǎng)絡(luò)之前,我們先看看圖像的原理。

圖像原理

圖像在計(jì)算機(jī)中是通過數(shù)字(0-255)來表示的,每個(gè)數(shù)字代表圖像中一個(gè)像素的亮度或顏色信息。其中:

  • 黑白圖像:每個(gè)像素只有一個(gè)值,這個(gè)值在0(黑色)到255(白色)之間變化。

  • 彩色圖像:每個(gè)像素包含三個(gè)值,最常見的是RGB(Red-Green-Blue)模型,即紅色、綠色和藍(lán)色光以不同強(qiáng)度組合起來產(chǎn)生各種顏色。每個(gè)顏色通道都有256級(jí)亮度,從0~255,因此每種顏色可以用一個(gè)8位的二進(jìn)制數(shù)來表述,例如(255,0,0)表示紅色,(0,255,0)表示綠色,(0,0,255)表示藍(lán)色,其他組合則對(duì)應(yīng)各種顏色。計(jì)算機(jī)中,彩色圖像的數(shù)據(jù)結(jié)構(gòu)通常是一個(gè)三維數(shù)組或張量,形狀為(寬度,高度,深度),其中深度就是通道的數(shù)量,對(duì)于RGB圖像來說,深度是3。這意味著,對(duì)于每個(gè)像素位置,有三個(gè)數(shù)值分別代表紅綠藍(lán)三個(gè)通道的亮度。例如,一個(gè)100*100像素的RGB圖像將占用100x100x3個(gè)字節(jié)的內(nèi)存。

「這里“8位的二進(jìn)制數(shù)”怎么理解呢?」

在RGB顏色模型中,每個(gè)顏色通道(紅、綠、藍(lán))可以有256個(gè)不同的亮度級(jí)別,每個(gè)通道用8位二進(jìn)制表示。8位二進(jìn)制數(shù)的最大值是11111111,轉(zhuǎn)化成十進(jìn)制就是255;最小值是00000000,轉(zhuǎn)化成十進(jìn)制就是0。

何為卷積神經(jīng)網(wǎng)絡(luò)CNN?

說起CNN,必然會(huì)首先想到的是CV吧,而邊緣檢測(cè)可謂是CV中家喻戶曉的一種應(yīng)用場(chǎng)景。以原始圖片尺寸為10x10為例,如下圖所示,其左半部分是像素值較大,是明亮區(qū)域;右半部分像素值較小,為深度區(qū)域。中間的分界線即就是要檢測(cè)的邊緣。

「那么怎么檢測(cè)邊緣呢?」 此時(shí)濾波器filter(也叫kernel)出場(chǎng)了,如下圖所示,kernel尺寸為3x3。

濾波器filter滑過輸入圖片,在每個(gè)區(qū)域處稍做停留,對(duì)應(yīng)元素相乘再相加計(jì)算,之后再向其它區(qū)域滑動(dòng)繼續(xù)計(jì)算,直到滑動(dòng)至原圖片的最后一個(gè)區(qū)域?yàn)橹?。這個(gè)過程即為「卷積?!?/p>

由上圖可以看出,輸出結(jié)果的中間顏色淺,兩邊顏色深,說明原圖的邊界已反應(yīng)出來?!敢虼丝梢钥偨Y(jié)出,邊緣檢測(cè)就是通過輸入圖片與相應(yīng)濾波器進(jìn)行卷積運(yùn)算得以識(shí)別?!?/p>

另外,這里的滑動(dòng)還涉及到一個(gè)基本概念,「步長(zhǎng)stride」,上述示例中,是以stride為1說明,每次滑動(dòng)一格,共停留了8x8個(gè)區(qū)域,所以最終輸出結(jié)果是8x8矩陣。

「那么,究竟什么是卷積神經(jīng)網(wǎng)絡(luò)呢?」

經(jīng)過上面邊緣檢測(cè)這一具體的目標(biāo)檢測(cè)場(chǎng)景的分析,我們也就不難理解,CNN(Convolutional neural network)就是通過各種各樣的濾波器filter不斷提取圖片特征,從局部到整體,進(jìn)而識(shí)別目標(biāo)。

而在神經(jīng)網(wǎng)絡(luò)中,這些filter中的每個(gè)數(shù)字,就是參數(shù),可通過大量數(shù)據(jù)訓(xùn)練得到(即深度學(xué)習(xí)的過程)。

CNN中的基本概念

1.卷積(Convolution)

(1) 卷積計(jì)算

卷積是數(shù)學(xué)分析中的一種積分變換的方法,而在圖像處理中則采用的是卷積的離散形式。在卷積神經(jīng)網(wǎng)絡(luò)CNN中,卷積層的實(shí)現(xiàn)方式本質(zhì)即為數(shù)學(xué)中定義的互相關(guān)計(jì)算(cross-correlation)。具體計(jì)算過程如下圖所示。

其中:

圖(a):左邊的圖大小是3×3,表示輸入數(shù)據(jù)是一個(gè)維度為3×3的二維數(shù)組;中間的圖大小是2×2,表示一個(gè)維度為 2×2的二維數(shù)組,也即為「卷積核」。卷積核的左上角與輸入數(shù)據(jù)的左上角(0,0)對(duì)齊,并依次將二者對(duì)應(yīng)位置數(shù)據(jù)相乘,再相加,即可獲得卷積輸出的第一個(gè)結(jié)果25。

依次類推,圖(b)、(c)、(d)分別為卷積輸出的第二、三、四個(gè)輸出結(jié)果。

(2) 圖片卷積運(yùn)算

那么圖片卷積運(yùn)算,具體是怎么回事呢?如下圖所示即為彩色圖像卷積過程。

對(duì)于彩色圖像的通道1(Red)、通道2(Green)、通道3(Blue),分別使用Kernel1、Kernel2、Kernel3。每個(gè)卷積核在對(duì)應(yīng)的單色圖像上滑動(dòng),對(duì)每個(gè)位置上的小塊區(qū)域(Kernel大小)內(nèi)的像素值與卷積核的相應(yīng)元素進(jìn)行逐點(diǎn)乘法運(yùn)算,然后將這些乘積相加得到一個(gè)值。再將每個(gè)通道得到的數(shù)值相加,并加上總體的偏置Bias,即可得到對(duì)應(yīng)特征圖(feature map)中的一個(gè)值。

立體效果如下圖所示:

2.Padding

如上所述邊緣檢測(cè)的例子中,可以看到,原圖片尺寸是10x10,經(jīng)過filter之后是8x8。如果再做一次卷積運(yùn)算就是6x6...這樣的話會(huì)有兩個(gè)缺點(diǎn):

  • 每次做卷積操作,輸出圖片尺寸縮小
  • 角落或邊緣區(qū)域的像素點(diǎn)在輸出中采用較少,因此容易丟掉圖像邊緣位置的許多信息。

如下圖中左上角紅色陰影只被一個(gè)輸出觸碰到,而中間的像素點(diǎn)(紫色方框標(biāo)記)會(huì)有許多3x3的區(qū)域與之重疊。所以,角落或邊緣區(qū)域的像素點(diǎn)在輸出中采用較少,容易丟掉圖像邊緣位置的許多信息。

為了解決這一問題,我們通常采用Padding的方法,在卷積操作之前,先給原圖片邊緣填充一層像素, 例如,將10x10的圖像即可填充為12x12的大小,卷積之后的圖片尺寸為8x8,和原始圖片一樣大,這樣便使得原圖的邊緣區(qū)域像素點(diǎn)也可以多次被采用。

選擇填充多少像素,通常有兩種選擇:

  • Same卷積:即如上所述,填充再卷積之后的圖片大小與原圖片一致。
  • Valid卷積:不進(jìn)行填充操作,直接卷積。

3.stride

stride的概念在引言中有提到過,表示過濾器filter在原圖片中水平方向和豎直方向每次滑動(dòng)的長(zhǎng)度,也叫步進(jìn)長(zhǎng)度。

假設(shè)s表示stride長(zhǎng)度,p表示padding長(zhǎng)度,原圖片尺寸是nxn,過濾器filter尺寸是fxf,則卷積后的圖片尺寸為:

4.池化

池化的本質(zhì)就是降維。

卷積網(wǎng)絡(luò)中池化層的作用:降低特征圖的參數(shù)量、提升計(jì)算速度、增加感受野,也即為一種降采樣操作。

物體檢測(cè)中常用的池化:最大值池化(Max Pooling)與平均值池化(Average Pooling)。

(1) Max pooling

即在濾波器filter滑動(dòng)區(qū)域內(nèi)取最大值,而無需卷積運(yùn)算。數(shù)字大意味著可能探測(cè)到了某些特定的特征,忽略了其它值,降低了噪聲影響,提高了模型健壯性?!覆⑶?,Max pooling需要的超參數(shù)僅為濾波器尺寸f和stride長(zhǎng)度s,無需要訓(xùn)練其它參數(shù),計(jì)算量較小。」

(2) Average pooling

即在濾波器filter滑動(dòng)區(qū)域內(nèi)求平均值。

5.Shape

在處理多維數(shù)據(jù),尤其是圖像數(shù)據(jù)時(shí),Tensorflow和Pytorch數(shù)據(jù)Shape有所區(qū)分。

  • TensorFlow:(batch_size, height, width, in_channels)
  • Pytorch:(batch_size, in_channels, height, width)

其中:

  • batch_size:批量處理的樣本數(shù)量。
  • in_channels:輸入圖像的通道數(shù),對(duì)于彩色圖像通常是3(紅、綠、藍(lán))。
  • height和width分別是圖像的高度和寬度。

如上圖所示:

  • 輸入圖片Shape:[height, width, channels],即[8,8,3],表示一個(gè)8x8的圖像,有3個(gè)通道(R、G、B)。
  • 卷積核Shape:[kernel_height, kernel_width, in_channels, out_channels],即[3,3,3,5],表示一個(gè)3x3的卷積核,有3個(gè)通道(R、G、B),輸出通道數(shù)是5。
  • 輸出圖片Shape:[height, width, out_channels],即[6,6,5],表示一個(gè)6x6的輸出圖片,有5個(gè)通道(R、G、B)。
    out_height = (height - kernel_height + 1) / stride
    out_width = (width - kernel_width + 1) / stride

對(duì)于8x8的圖像和3x3的卷積核,輸出尺寸將是 (8 - 3 + 1) / 1 = 6,因此輸出形狀是 [6, 6, 5],表示一個(gè)6x6的特征圖,有5個(gè)輸出通道。

卷積核的輸入通道數(shù)(in_channels)由輸入圖像的通道數(shù)決定,比如:一個(gè)RGB格式的圖片,其輸入通道數(shù)為3。

而輸出矩陣的通道數(shù)(out_channels)是由卷積核的輸出通道數(shù)所決定,即卷積核有多少個(gè)不同的濾波器(filter)。在這個(gè)例子中,卷積核有5個(gè)濾波器,所以輸出有5個(gè)通道。

6.激活函數(shù)

并不是所有的映射關(guān)系都可以用線性關(guān)系準(zhǔn)確表達(dá)。因此需要激活函數(shù)表示非線性映射。

激活函數(shù)也就是非線性映射。神經(jīng)網(wǎng)絡(luò)如果僅僅是由線性運(yùn)算堆疊,是無法形成復(fù)雜的表達(dá)空間的,也就很難提取高語義信息,因此需要加入非線性映射關(guān)系。

(1) Sigmoid函數(shù)

Sigmoid函數(shù)將特征壓縮到了(0,1)區(qū)間,0端是抑制狀態(tài),1端是激活狀態(tài),中間部分梯度最大。

(2) Relu函數(shù)

修正線性單元(Rectified Linear Unit, ReLU)。通常用于緩解梯度消失現(xiàn)象。

在小于0的部分,值與梯度為0,大于0導(dǎo)數(shù)為1,避免了Sigmoid函數(shù)中梯度接近于0導(dǎo)致的梯度消失問題。

(3) Softmax函數(shù)

多物體類別較為常用的分類器是Softmax函數(shù)。

在具體的分類任務(wù)中,Softmax函數(shù)的輸入往往是多個(gè)類別的得分,輸出則是每一個(gè)類別對(duì)應(yīng)的概率,所有類別的概率取值都在0~1之間,且和為1。

Softmax函數(shù)公式如下:

其中,Vi表示第i個(gè)類別的得分,C代表分類的類別總數(shù),輸出Si為第i個(gè)類別的概率。

CNN整體結(jié)構(gòu)

卷積神經(jīng)網(wǎng)絡(luò)CNN由輸入層、卷積層、Relu、池化層和全連接層、輸出層組成。

如下圖所示是一個(gè)卷積網(wǎng)絡(luò)示例,卷積層是卷積網(wǎng)絡(luò)的第一層,其后跟著其它卷積層或池化層,最后一層是全連接層。越往后的層識(shí)別圖像越大的部分,較早的層通常專注于簡(jiǎn)單的特征(例如顏色和邊緣等)。隨著圖像數(shù)據(jù)在CNN中各層中前進(jìn),它開始識(shí)別物體的較大元素或形狀,直到最終識(shí)別出預(yù)期的物體。

其中:

  • 輸入層:接收原始圖像數(shù)據(jù),作為網(wǎng)絡(luò)的輸入。
  • 卷積層:由濾波器filters和激活函數(shù)構(gòu)成,屬于CNN的核心層,主要作用是提取樣本特征。它由輸入數(shù)據(jù)、filter(或卷積核)和特征圖組成。若輸入數(shù)據(jù)是RGB圖像,則意味著輸入將具有三個(gè)維度——高度、寬度和深度。filter的本質(zhì)是一個(gè)二維權(quán)重矩陣,它將在圖像的感受野中移動(dòng),檢查特征是否存在。卷積的運(yùn)算過程如上所述。卷積層一般要設(shè)置的超參數(shù)包括過濾器filters的數(shù)量、步長(zhǎng)stride以及Padding的方式(valid or same)以及激活函數(shù)等。
  • 池化層:本質(zhì)即就是下采樣(Downsampling),利用圖像局部相關(guān)性原理,對(duì)圖像進(jìn)行子抽樣,在保留有用信息的前提下減小數(shù)據(jù)處理量,具有一定的防止模型過擬合作用。
  • 全連接層:該層的每一個(gè)結(jié)點(diǎn)與上一層的所有結(jié)點(diǎn)相連,用于將前邊提取到的特征綜合在一起。通常,全連接層的參數(shù)是最多的。
  • 輸出層:根據(jù)全連接層的信息得到概率最大的結(jié)果。

CNN的優(yōu)勢(shì)

與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)相比CNN具有局部連接、權(quán)值共享等優(yōu)點(diǎn),使其學(xué)習(xí)的參數(shù)量大幅降低,且網(wǎng)絡(luò)的收斂速度也更快。

  • 局部連接:特征圖的每個(gè)輸出值不需要連接到輸入圖像中的每個(gè)像素值,而只需要連接到應(yīng)用過濾器filter的感受野,因此卷積層通常被稱為“部分連接層”,這種特性也即是局部連接。
  • 權(quán)值共享:當(dāng)卷積核在圖像上移動(dòng)時(shí),其權(quán)值是不變的。即為權(quán)值共享。
責(zé)任編輯:趙寧寧 來源: 小喵學(xué)AI
相關(guān)推薦

2024-10-05 23:00:35

2024-09-20 07:36:12

2024-10-28 00:38:10

2024-11-15 13:20:02

2025-02-21 08:29:07

2018-01-09 10:05:55

神經(jīng)網(wǎng)絡(luò)ClojureCortex

2020-03-25 09:48:10

AI芯片神經(jīng)網(wǎng)絡(luò)

2021-03-11 11:50:07

kafka服務(wù)器Java

2020-05-06 10:29:45

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)TensorFlow

2017-05-04 18:30:34

大數(shù)據(jù)卷積神經(jīng)網(wǎng)絡(luò)

2022-04-07 09:01:52

神經(jīng)網(wǎng)絡(luò)人工智能

2014-10-08 10:42:08

萌碼編程

2020-08-14 10:20:49

神經(jīng)網(wǎng)絡(luò)人工智能池化層

2019-11-19 08:00:00

神經(jīng)網(wǎng)絡(luò)AI人工智能

2022-10-11 23:35:28

神經(jīng)網(wǎng)絡(luò)VGGNetAlexNet

2017-11-29 13:55:55

神經(jīng)網(wǎng)絡(luò)循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

2019-01-05 08:40:17

VGG神經(jīng)網(wǎng)絡(luò)

2018-04-08 11:20:43

深度學(xué)習(xí)

2022-03-15 09:31:17

ESLint工作原理前端

2024-10-17 13:05:35

神經(jīng)網(wǎng)絡(luò)算法機(jī)器學(xué)習(xí)深度學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)