1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 5695字,需瀏覽 12分鐘

         ·

        2021-03-22 10:20


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

        重磅干貨,第一時間送達(dá)

        本文轉(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ù)進(jìn)行預(yù)測。如果您不熟悉神經(jīng)網(wǎng)絡(luò),那么這篇有關(guān)使用Python進(jìn)行深度學(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ò)進(jìn)行傳遞的,以更好地理解。

        比較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ò)需要對狗進(jìn)行分類時,它都應(yīng)該識別所有特征-眼睛,耳朵,舌頭,腿等。使用過濾器和核,這些特征被分解并在網(wǎng)絡(luò)的局部層中識別出來。

        計算機如何看圖像?

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

        在分析像素值之后,計算機會慢慢開始了解圖像是灰度還是彩色。它知道差異,因為灰度圖像只有一個通道,因為每個像素代表一種顏色的強度。零表示黑色,255表示白色,黑色和白色的其他變化形式,即介于兩者之間的灰色。另一方面,彩色圖像具有三個通道-紅色,綠色和藍(lán)色。它們代表三種顏色(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í),然后逐步進(jìn)行到整體來完成此任務(wù)。因此,網(wǎng)絡(luò)必須首先知道圖像中的所有原始部分,例如邊緣,輪廓和其他低層特征。一旦檢測到這些,計算機便可以處理更復(fù)雜的功能。簡而言之,必須先提取低級功能,然后再提取中級功能,然后再提取高級功能。濾波器提供了一種提取信息的方法。

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

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

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



        這是應(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)重使用上述濾波器進(jì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擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、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í)進(jìn)階。

        交流群


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


        瀏覽 50
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            女生玩男生鸡鸡 | 啊91av在线 | 美女视频黄a视频全免费不卡 | 男人日女人嗯嗯嗯嗯免费网站 | 午夜激情视频在线观看 | 30岁的寡妇两个大乳子 | 免费黄色在线观看 | 狍与女人做爰在线视频 | 蜜桃狠狠色伊人亚洲综合 | h高潮嗯啊娇喘抽搐np公车古代 |