<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Pytorch 理解卷積網(wǎng)絡(luò)

          共 5695字,需瀏覽 12分鐘

           ·

          2021-03-22 10:20


          點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時間送達

          本文轉(zhuǎn)自:人工智能與算法學(xué)習(xí)

          在當(dāng)今時代,機器在理解和識別圖像中的特征和目標(biāo)方面已經(jīng)成功實現(xiàn)了99%的精度。我們每天都會看到這種情況-智能手機可以識別相機中的面部;使用Google圖片搜索特定照片的能力;從條形碼或書籍中掃描文本。借助卷積神經(jīng)網(wǎng)絡(luò)(CNN),這一切都是可能的,卷積神經(jīng)網(wǎng)絡(luò)是一種特定類型的神經(jīng)網(wǎng)絡(luò),也稱為卷積網(wǎng)絡(luò)。

          如果您是一名深度學(xué)習(xí)愛好者,那么您可能已經(jīng)聽說過卷積神經(jīng)網(wǎng)絡(luò),也許您甚至自己開發(fā)了一些圖像分類器。像Tensorflow和PyTorch這樣的現(xiàn)代深度學(xué)習(xí)框架使向機器學(xué)習(xí)圖像變得容易,但是,仍然存在一些問題:數(shù)據(jù)如何通過神經(jīng)網(wǎng)絡(luò)的人工層傳遞?計算機如何從中學(xué)習(xí)?更好地解釋卷積神經(jīng)網(wǎng)絡(luò)的一種方法是使用PyTorch。因此,讓我們通過可視化每個圖層的圖像來深入研究CNN。

          卷積神經(jīng)網(wǎng)絡(luò)的解釋

          什么是卷積神經(jīng)網(wǎng)絡(luò)?

          卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種特殊類型的神經(jīng)網(wǎng)絡(luò),在圖像上表現(xiàn)特別出色。卷積神經(jīng)網(wǎng)絡(luò)由Yan LeCun在1998年提出,可以識別給定輸入圖像中存在的數(shù)字。

          在開始使用卷積神經(jīng)網(wǎng)絡(luò)之前,了解神經(jīng)網(wǎng)絡(luò)的工作原理很重要。神經(jīng)網(wǎng)絡(luò)模仿人腦如何解決復(fù)雜的問題并在給定的數(shù)據(jù)集中找到模式。在過去的幾年中,神經(jīng)網(wǎng)絡(luò)席卷了許多機器學(xué)習(xí)和計算機視覺算法。

          神經(jīng)網(wǎng)絡(luò)的基本模型由組織在不同層中的神經(jīng)元組成。每個神經(jīng)網(wǎng)絡(luò)都有一個輸入層和一個輸出層,并根據(jù)問題的復(fù)雜性增加了許多隱藏層。一旦數(shù)據(jù)通過這些層,神經(jīng)元就會學(xué)習(xí)并識別模式。神經(jīng)網(wǎng)絡(luò)的這種表示稱為模型。訓(xùn)練完模型后,我們要求網(wǎng)絡(luò)根據(jù)測試數(shù)據(jù)進行預(yù)測。如果您不熟悉神經(jīng)網(wǎng)絡(luò),那么這篇有關(guān)使用Python進行深度學(xué)習(xí)的文章就是一個很好的起點。

          另一方面,CNN是一種特殊的神經(jīng)網(wǎng)絡(luò),在圖像上表現(xiàn)特別出色。卷積神經(jīng)網(wǎng)絡(luò)由Yan LeCun在1998年提出,可以識別給定輸入圖像中存在的數(shù)字。使用CNN的其他應(yīng)用程序包括語音識別,圖像分割和文本處理。在卷積神經(jīng)網(wǎng)絡(luò)之前,多層感知器(MLP)用于構(gòu)建圖像分類器。

          圖像分類是指從多波段光柵圖像中提取信息類別的任務(wù)。多層感知器需要更多的時間和空間來在圖片中查找信息,因為每個輸入功能都需要與下一層的每個神經(jīng)元相連。CNN通過使用稱為本地連接的概念取代了MLP,該概念涉及將每個神經(jīng)元僅連接到輸入體積的本地區(qū)域。通過允許網(wǎng)絡(luò)的不同部分專門處理高級功能(如紋理或重復(fù)圖案),可以最大程度地減少參數(shù)數(shù)量。感到困惑?別擔(dān)心。讓我們比較一下圖像如何通過多層感知器和卷積神經(jīng)網(wǎng)絡(luò)進行傳遞的,以更好地理解。

          比較MLPS和CNNS

          考慮到MNIST數(shù)據(jù)集,由于輸入圖像的大小為28x28 = 784,多層感知器輸入層的總數(shù)將為784。 網(wǎng)絡(luò)應(yīng)該能夠預(yù)測給定輸入圖像中的數(shù)量,這意味著輸出可能屬于以下范圍中的任何一個,范圍從0到9(1、2、3、4、5、6、7、8、9 )。 在輸出層中,我們返回類別分?jǐn)?shù),例如,如果給定的輸入是具有數(shù)字“ 3”的圖像,則在輸出層中,對應(yīng)的神經(jīng)元“ 3”比其他神經(jīng)元具有更高的類別分?jǐn)?shù)。 我們需要包含多少個隱藏層,每個層中應(yīng)該包含多少個神經(jīng)元?這是一個編碼MLP的示例:


          上面的代碼段是使用稱為Keras的框架實現(xiàn)的(暫時忽略語法)。它告訴我們在第一個隱藏層中有512個神經(jīng)元,它們連接到形狀為784的輸入層。該隱藏層之后是一個隨機失活層,該層克服了過擬合的問題。0.2表示在第一個隱藏層之后不考慮神經(jīng)元的可能性為20%。再次,我們在第二個隱藏層中添加了與第一個隱藏層中相同數(shù)量的神經(jīng)元(512),然后添加了另一個隨機失活。最后,我們用包含10個類的輸出層結(jié)束這組層。具有最高值的此類將是模型預(yù)測結(jié)果。

          這是定義所有層之后的網(wǎng)絡(luò)多層外觀。這種多層感知器的一個缺點是全連接的以供網(wǎng)絡(luò)學(xué)習(xí),這需要更多的時間和空間。MLP僅接受向量作為輸入。

          卷積層不使用全連接層,而是使用稀疏連接層,也就是說,它們接受矩陣作為輸入,這比MLP更具優(yōu)勢。輸入特征連接到本地編碼節(jié)點。在MLP中,每個節(jié)點負(fù)責(zé)獲得對整個畫面的理解。在CNN中,我們將圖像分解為區(qū)域(像素的局部區(qū)域)。每個隱藏節(jié)點都必須輸出層報告,在輸出層,輸出層將接收到的數(shù)據(jù)組合起來以找到模式。下圖顯示了各層如何本地連接。

          在我們了解CNN如何在圖片中找到信息之前,我們需要了解如何提取特征。卷積神經(jīng)網(wǎng)絡(luò)使用不同的圖層,每一層將保存圖像中的特征。例如,考慮一張狗的照片。每當(dāng)網(wǎng)絡(luò)需要對狗進行分類時,它都應(yīng)該識別所有特征-眼睛,耳朵,舌頭,腿等。使用過濾器和核,這些特征被分解并在網(wǎng)絡(luò)的局部層中識別出來。

          計算機如何看圖像?

          與人類通過用眼睛了解圖像的計算機不同,計算機使用一組介于0到255之間的像素值來了解圖片。計算機查看這些像素值并理解它們。乍一看,它不知道物體或顏色,只識別像素值,這就是圖像用于計算機的全部。

          在分析像素值之后,計算機會慢慢開始了解圖像是灰度還是彩色。它知道差異,因為灰度圖像只有一個通道,因為每個像素代表一種顏色的強度。零表示黑色,255表示白色,黑色和白色的其他變化形式,即介于兩者之間的灰色。另一方面,彩色圖像具有三個通道-紅色,綠色和藍色。它們代表三種顏色(3D矩陣)的強度,并且當(dāng)值同時變化時,它會產(chǎn)生大量的顏色!確定顏色屬性后,計算機會識別圖像中對象的曲線和輪廓。

          可以使用PyTorch在卷積神經(jīng)網(wǎng)絡(luò)中探索此過程,以加載數(shù)據(jù)集并將濾波器應(yīng)用于圖像。下面是代碼片段。(在GitHub上可找到此代碼)

            

          現(xiàn)在,讓我們看看如何將單個圖像輸入神經(jīng)網(wǎng)絡(luò)。

          (在GitHub上可找到此代碼)

          img = np.squeeze(images[7])fig = plt.figure(figsize = (12,12)) ax = fig.add_subplot(111)ax.imshow(img, cmap='gray')width, height = img.shapethresh = img.max()/2.5for x in range(width):    for y in range(height):        val = round(img[x][y],2) if img[x][y] !=0 else 0        ax.annotate(str(val), xy=(y,x),            color='white' if img[x][y]<thresh else 'black')

           

          這就是將數(shù)字“ 3”分解為像素的方式。從一組手寫數(shù)字中,隨機選擇“ 3”,其中顯示像素值。在這里,ToTensor()歸一化實際像素值(0–255)并將其限制為0到1。為什么?因為,這使得以后的部分中的計算更加容易,無論是在解釋圖像還是找到圖像中存在的通用模式。

          建立自己的濾波器

          在卷積神經(jīng)網(wǎng)絡(luò)中,圖像中的像素信息被過濾。為什么我們完全需要濾波器?就像孩子一樣,計算機需要經(jīng)歷了解圖像的學(xué)習(xí)過程。值得慶幸的是,這不需要幾年的時間!計算機通過從頭開始學(xué)習(xí),然后逐步進行到整體來完成此任務(wù)。因此,網(wǎng)絡(luò)必須首先知道圖像中的所有原始部分,例如邊緣,輪廓和其他低層特征。一旦檢測到這些,計算機便可以處理更復(fù)雜的功能。簡而言之,必須先提取低級功能,然后再提取中級功能,然后再提取高級功能。濾波器提供了一種提取信息的方法。

          可以使用特定的濾波器提取低級特征,該濾波器也是類似于圖像的一組像素值??梢岳斫鉃檫B接CNN中各層的權(quán)重。將這些權(quán)重或濾波器與輸入相乘,得出中間圖像,中間圖像表示計算機對圖像的部分理解。然后,這些副產(chǎn)品再與更多的濾波器相乘以擴展視圖。該過程以及對功能的檢測一直持續(xù)到計算機了解其外觀為止。

          您可以根據(jù)自己的需要使用很多濾波器。您可能需要模糊,銳化,加深,進行邊緣檢測等-都是濾波器。

          讓我們看一些代碼片段,以了解濾波器的功能。



          這是應(yīng)用濾波器后圖像的外觀。在這種情況下,我們使用了Sobel 濾波器 。

          完整的卷積神經(jīng)網(wǎng)絡(luò)(CNNS)

          我們已經(jīng)知道濾波器是如何從圖像中提出特征了,但是為了完成整個卷積神經(jīng)網(wǎng)絡(luò)我們需要理解用來設(shè)計CNN的各層。卷積神經(jīng)網(wǎng)絡(luò)中的各層分別叫做:

          1.卷積層

          2.池化層

          3.全連接層

          使用這3層,可以構(gòu)造類似這樣的圖像分類器:

          CNN各層的作用

          現(xiàn)在讓我們一起來看看各層是用來干什么的

          卷積層——卷積層(CONV)使用過濾器執(zhí)行卷積操作,同時掃描輸入圖像的尺寸。它的超參數(shù)包括濾波器尺寸,通常設(shè)置為2x2,3x3,4x4,5x5(但并不僅限于這些尺寸),步長(S)。輸出結(jié)果(O)被稱為特征圖或激活圖,包含了輸入層和濾波器計算出的所有特性。下圖描述了應(yīng)用卷積時產(chǎn)生的特征圖:

          卷積操作

          池化層——池化層(POOL)用于特征的降采樣,通常在卷積層之后應(yīng)用 。常見的兩種池化操作為最大池化和平均池化,分別求取特征的最大值和平均值。下圖描述了池化的基本原理:

          最大池化

          平均池化

          全連接層——全連接層(FC)作用于一個扁平的輸入,其中每個輸入都連接到所有的神經(jīng)元 。全連接層通常用于網(wǎng)絡(luò)的末端,將隱藏層連接到輸出層,這有助于優(yōu)化類分?jǐn)?shù)。 

          全連接層

          在Pytorch可視化CNN

          我們對CNN的函數(shù)有了更好的了解,現(xiàn)在讓我們使用Facebook的PyTorch框架來實現(xiàn)它。

          步驟1:加載輸入圖像。我們將使用Numpy和OpenCV。(在GitHub上可找到代碼)

            

            

          步驟2:可視化濾波器,以更好地了解我們將使用的濾波器。(在GitHub上可找到代碼)

          步驟3:定義卷積神經(jīng)網(wǎng)絡(luò)。該CNN具有卷積層和最大池化層,并且權(quán)重使用上述濾波器進行初始化:(在GitHub上可找到代碼)

          步驟4:可視化濾波器??焖贋g覽一下正在使用的濾波器。(在GitHub上可找到代碼)

          def viz_layer(layer, n_filters= 4):    fig = plt.figure(figsize=(20, 20))    
          for i in range(n_filters): ax = fig.add_subplot(1, n_filters, i+1) ax.imshow(np.squeeze(layer[0,i].data.numpy()), cmap='gray') ax.set_title('Output %s' % str(i+1))fig = plt.figure(figsize=(12, 6))fig.subplots_adjust(left=0, right=1.5, bottom=0.8, top=1, hspace=0.05, wspace=0.05)for i in range(4): ax = fig.add_subplot(1, 4, i+1, xticks=[], yticks=[]) ax.imshow(filters[i], cmap='gray') ax.set_title('Filter %s' % str(i+1))
          gray_img_tensor = torch.from_numpy(gray_img).unsqueeze(0).unsqueeze(1)

          濾波器:

          步驟5:跨層濾波器輸出。 在CONV和POOL層中輸出的圖像如下所示。

          viz_layer(activated_layer)viz_layer(pooled_layer)
          卷積層
          池化層
          參考:CS230 CNNs(https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-convolutional-neural-networks).


          可以在這里查看代碼:https://github.com/vihar/visualising-cnns

          via https://medium.com/better-programming/three-ways-to-use-the-walrus-operator-in-python-d5550f3a7dd

          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品无码性爱视频 | 日韩成人精品 | 人人操人人看人人干 | 国产操屄直播 | 黄色视频网站亚洲 |