基于Keras框架下的貓臉特效算法設計_第1頁
基于Keras框架下的貓臉特效算法設計_第2頁
基于Keras框架下的貓臉特效算法設計_第3頁
基于Keras框架下的貓臉特效算法設計_第4頁
基于Keras框架下的貓臉特效算法設計_第5頁
免費預覽已結束,剩余52頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、廣東東軟學院本科畢業設計(論文) 基于Keras框架下的貓臉特效算法設計 Design of cat face effect algorithm based on Keras 中文摘要隨著計算機、數碼影像及網絡技術的發展, 特別是近年來智能手機的普及和移動通信技術的發展,人們可以簡單快捷地獲取、存儲和傳輸數碼照片, 同時人們對于照片的美觀度也有了更高的要求,,尤其是人臉圖像照片,越來越多的人開始重視自己的娛樂空間,就像最近很火的抖音短視頻和火山小視頻等等,其可以通過對小視頻的美化,從而增加娛樂的成分,例如人像美化,動物美化等等。另外一點是自從神經網絡火起來的時候,越來越多的循環神經網絡,卷積神

2、經網絡等等模型出現,例如現階段很火的目標檢測算法Yolo,SSD,R-CNN,圖像識別算法MobileNet,ResNet,GoogleNet等等,本文實現的是一種目標檢測算法和圖像識別算法結合,實現視頻的實時美化。關鍵字:深度學習 圖像識別 目標檢測 視頻美化AbstractWith the development of computer, digital video and network technology, especially in recent years, the popularity of smartphones and the development of mobile c

3、ommunication technology, people can simple fast acquisition, storage, and transmission of digital photos, at the same time for photos of beautiful people also have higher requirements, and especially the face image photos, more and more people begin to pay attention to your own entertainment space,

4、as recently very fire trill short video and volcanic small video, and so on, which can be through to the small video beautification, thereby increasing entertainment elements, such as portrait beautification, animal beautification, and so on.Fire up another point is since the neural network, a growi

5、ng number of neural network, convolution neural network model and so on, such as a fire at the present stage target detection algorithm Yolo, SSD, R - CNN, MobileNet image recognition algorithm, ResNet, GoogleNet, etc., this paper implemented a target detection algorithm is combined with image recog

6、nition algorithm, to realize real time video beautification.Key words: DeepLearning ImageRecognition TargetDetection VideoBeautification目錄第一章 緒論11.1 研究背景與意義11.2 研究現狀及分析11.2.1 臉部檢測現狀11.2.2 基于深度學習的人臉識別21.2.3 人臉識別的未來發展3第二章 卷積神經網絡介紹42.1 卷積神經網絡介紹42.2 目標檢測模型介紹52.2.1 R-CNN家族介紹52.2.2 YOLO系列介紹62.3 圖像識別模型92.3

7、.1 MobileNet92.3.2 ResNet122.3.3 NasNet142.3.4 Inception-ResNet15第三章 系統環境搭建183.1 安裝CUDA和CUDNN183.2 Keras簡介183.3 Tensroflow介紹193.4 安裝Tensorflow-gpu和Keras20第四章 詳細設計與實現214.1 數據集介紹214.2 圖像識別具體實現234.2.1 MobileNetV2234.2.2 NasNetMobile254.2.3 ResNet50274.2.4 Inception-ResNet314.2.5 圖像識別模型對比334.3 目標檢測具體實現3

8、54.4.1 YOLOV3354.4.2 Faster R-CNN374.4.3 目標檢測各模型對比394.4 組合模型與裝飾貓臉424.4.1 組合模型424.4.2 裝飾貓臉43第五章 總結與不足485.1 總結485.2 不足49參考文獻50致謝51第一章 緒論1.1 研究背景與意義隨著計算機崛起,20世紀末研究人員逐漸開始提出神經網絡這一說法,但是由于當時計算機硬件和機器學習比較成熟的狀態下,神經網絡在當時沒有給重視起來,21世紀是一個大數據的時代,計算機計算能力越來越強,導致深度學習火了起來,各種神經網絡模型的誕生,人類利用神經網絡做了非常多東西,例如:圖像識別,目標檢測,語義分析,

9、OCR,語音轉文本,智能對話系統等等,這些全部得益于神經網絡和計算機的運算能力的支持。生活中很多例子都體現出人臉識別或者人臉特征點檢測,例如最普遍的手機人臉識別開鎖,手機的人臉識別技術一般都是使用特征臉法或局部二值模式,再例如抖音上的特效工具,最近比較火的人臉追蹤,視頻美妝等等,其都是需要人臉檢測技術為基底,因此可以看出,人臉檢測是一項非常重要的技術,所以非常有必要對其進行研究。本文選取一個方向來進行研究,就是目標檢測和關鍵特征點的預測,這里以較為普遍的人臉特征點進行敘述,以映射到其他動物臉的特征點。最后我們還可以通過這些關鍵點對目標進行一些美化。1.2 研究現狀及分析1.2.1 臉部檢測現狀

10、人臉檢測一般可以分為人臉位置定位,人臉關鍵點回歸等等,對于人臉位置定位,我們一般輸入一張圖片,輸出的就是人臉的中心坐標和寬高,對于人臉關鍵點回歸的話,我們一般輸入一張圖片,輸出的就是人臉關鍵點的xy坐標,人臉檢測的話可以分為傳統圖像檢測算法和基于深度學習的圖像識別算法,下面介紹一下人臉檢測的常用檢測算法。人臉檢測常用的檢測算法有以下的四種:(1)基于知識的人臉檢測算法:基于知識的方法取決于人臉的規則集,并且基于人類知識來檢測面部。前-臉部的鼻子,眼睛和嘴巴必須在一定距離和位置之間。這些方法的最大問題是難以建立適當的規則集。如果規則太籠統或太詳細,可能會有很多誤報。僅此方法是不足的,并且無法在多

11、個圖像中找到許多臉。(2)基于人臉特征的人臉檢測算法:基于特征的方法是通過提取人臉的結構特征來定位人臉。首先將其訓練為分類器,然后將其用于區分面部和非面部區域。這個想法是要克服我們本能的面部知識的局限性。這種方法分為幾個步驟,甚至人臉的很多,它們的成功率都達到94。(3)基于模板匹配的人臉特征算法:模板匹配方法使用預定義或著參數化的面部模板,通過模板和輸入圖像之間的相關性來定位或檢測面部。人臉可以分為眼睛,臉部輪廓,鼻子和嘴巴。而且,僅通過使用邊緣檢測方法就可以通過邊緣建立面部模型。這種方法易于實現,但不足以進行人臉檢測。但是,已經提出了變形模板來解決這些問題。(4)基于外觀的人臉特征算法:基

12、于外觀的方法依賴于一組委托訓練的面部圖像來找出面部模型?;谕庥^的方法比其他性能方法要好。通常,基于外觀的方法依賴于統計分析和機器學習中的技術來找到面部圖像的相關特征。此方法還用于面部識別的特征提取中。1.2.2 基于深度學習的人臉識別上述我們討論了人臉檢測算法的現狀,而且簡單介紹了各種方法,本文是研究基于深度學習的識別方法,我們來討論一下傳統的人臉識別方法有什么缺點。首先,傳統人臉識別算法需要人工提取特征,一般來說人工提取的特征對于計算機來說都算是淺層特征,而且人為很難提取甚至無法從原始圖像中提取更加深層更加有意義的特征。傳統人臉識別算法很難在沒有人的干預情況下從原始圖像中提取有用的特征,因

13、此傳統的人臉檢測算法已經呈現出其不足與乏力。上面所討論的缺點,幾乎都包含著“人為”這個關鍵詞,為什么神經網絡在目前這個階段給廣泛采用,是因為他是一個end to end模型,也就是不需要人為去處理,讓神經網絡通過反向傳播算法進行學習,一步一步減少誤差,例如人臉檢測可以使用YOLOV3等目標檢測算法進行檢測11。其實神經網絡都需要“人為”地干預,那就是神經網絡的參數值,卷積層的層數,以及一些防止過擬合的措施,但是總體來說,加上現在是大數據的時代,所以基于神經網絡的算法比傳統的人臉檢測算法顯得更加有優勢。1.2.3 人臉識別的未來發展無論是基于深度學習的方法或者是傳統人臉識別檢測的方法,其都是屬于

14、2D檢測方法,近期,我國的三維測量技術近年來發展形勢比較好,3D的人臉識別算法對2D的投影缺陷做了一些補充,對于傳統的難點,包括人臉的遮擋、旋轉、相似度等等都有一些應對,所以3D人臉識別可能是人臉識別技術未來一個比較重要的發展路線。2近期來都有一些能破解人臉識別的相關事情發生,有一些團隊專門研究如何破解人臉識別,這也說明了現階段的人臉識別存在一定的危險性,這對于門禁和金融系統方面有一些阻礙,所以未來的發展也可能是對人臉檢測的安全性進行一個提升。第二章 卷積神經網絡介紹2.1 卷積神經網絡介紹卷積神經網絡是一類人工神經網絡,卷積操作涉及將輸入數據(特征圖)與卷積相結合內核(過濾器)以形成變換后的

15、特征圖。卷積層(卷積層)中的過濾器基于學習的參數進行修改,以提取針對特定任務的最有用信息。卷積網絡會根據任務自動調整以找到最佳功能。當遇到一般物體識別任務時,CNN會過濾有關物體形狀的信息,但在遇到鳥類識別任務時會提取鳥類的顏色。這是基于CNN的理解,即不同類別的物體具有不同的形狀,但是不同類型的鳥類的顏色比形狀更可能不同。卷積神經網絡的應用包括各種圖像(圖像識別,圖像分類,視頻標簽,文本分析)和語音(語音識別,自然語言處理,文本分類)處理系統,以及最先進的AI系統,例如機器人,虛擬助手和自動駕駛汽車。CNN將三維的輸入體積轉換為輸出體積。隱藏層是卷積層,池化層,規范化層和完全連接的層的組合。

16、CNN使用多個轉換層來過濾輸入量以達到更高的抽象水平。CNN通過使用有限的平移和旋轉不變性的池化層來提高其對異常放置物體的檢測能力。池化還可以通過減少內存消耗來使用更多卷積層。歸一化層用于通過將層中的所有輸入移向均值零和方差1來對本地輸入區域進行歸一化。也可以使用其他正則化技術,例如批處理歸一化(在整個激活過程中對整個激活進行歸一化)或輟學(在訓練過程中忽略隨機選擇的神經元)。全連接層的神經元在功能上與卷積層(計算點積)相似,但不同之處在于它們與上一層中的所有激活相關。卷積神經網絡究竟如何工作呢?我們需要向算法展示數以百萬計的圖片,然后卷積神經網絡通過觀察數以百萬計的圖片,找到我們感興趣區域的

17、位置,然后通過數值之間的關系,不斷調整filter的參數,從而使得其有特征提取的能力。2.2 目標檢測模型介紹2.2.1 R-CNN家族介紹圖2-1.RCNN目標檢測過程R-CNN系列總共有3個版本,一個是R-CNN,另一個是Fast R-CNN,最后一個是Faster R-CNN,首先介紹一下R-CNN,R-CNN使用了selective search的方法來得到候選區域,然后通過卷積神經網絡進行提取特征,然后得到的特征會送去一個支持向量機進行分類,每一個類別對應著一個支持向量機,R-CNN還有一個邊框回歸模型,讓候選區域更加準確。隨著深度學習的推進,R-CNN的缺點也逐漸浮現出來,例如,利

18、用selective search算法得到將近2000個物體框,這2000個物體標注框都需要經過cnn和svm的處理,計算量非常非常大,還有cnn得出來的數據還需要存在硬盤,然后再從硬盤讀取進去svm分類,還有為了應對全連接層的固定輸入,必須將卷積層出來的feature map進行裁剪或者變換,導致圖像的扭曲,因此從而引申出R-CNN的進化版-Fast R-CNN10。圖2-2.Fast R-CNN目標檢測過程Fast R-CNN主要是引入了ROI Pooling層,這樣就不需要把所有的候選區域,能大大節約時間。Fast R-CNN存在一定的瓶頸,需要選擇性搜索,搜索出所有的候選框,隨著時間的

19、推進,Faster R-CNN9出現了。圖2-3.Faster R-CNN結構圖Faster R-CNN主要是利用卷積層得到候選區域,不需要選擇性搜索了,這樣可以節省很大一部分時間。2.2.2 YOLO系列介紹上一節介紹了R-CNN系列,R-CNN雖然有著比較高的準確率,但是即使發展到Faster R-CNN系列,因為R-CNN系列的算法都是two-stage的方法,先提取proposal,然后再進行分類和回歸,所以導致檢測一張圖片也要7fps,因此提出了一種single-stage的方法來加快檢測的速度,也就是YOLO8,其可以使用神經網絡直接輸出bounding box的位置和對應所屬的類

20、別。對于R-CNN系列,他們不會考慮到背景的影響,但是對于YOLOV3來說,他在卷積的時候會考慮到背景,所以YOLOV3有會考慮上下文的意思。YOLO的提出讓解決目標檢測多了一個思路,就是利用回歸來解決目標檢測問題,首先YOLO的結構比較簡單,是一個end to end的模型,其直接使用卷積神經網絡就可以把圖像中的物體全部檢測出來。所以相對于其他模型來說,YOLO的檢測速度是相對比較快的。圖2-4.各類目標檢測比較YOLO的檢測思想不同于R-CNN系列的思想,它將目標檢測作為回歸任務來解決,下面來看看YOLO的整體結構和預測結構:圖2-5.YOLO結構圖圖2-6.YOLO預測結構對于現階段來說

21、,使用最多的是YOLOV3,圖2-7就是YOLOV3框架圖。圖2-7.YOLOV3框架YOLOV3主要的改進有:調整了網絡結構,使用了DarkNet-53的卷積結構來提取圖像特征,DarkNet-53結構借鑒了ResNet中的Residual結構,YOLOV3利用了多尺度進行對象檢測。2.3 圖像識別模型2.3.1 MobileNetMobileNet7總共有3個版本,我們來一一介紹,首先MobileNetV1最具特色的就是深度可分離卷積(Depthwise Separable Convolution, DSC),DSC包括兩個部分:depthwise convolution(DWC) + p

22、ointwise convolution(PWC)。DWC對輸入的通道進行濾波操作,其可以不增加通道數,PWC用于將PWC不同的通道進行連接,其可以增加通道數。通過這種分解的方式,可以明顯的減少計算量。圖2-7. 深度可分離卷積結構7究竟深度可分離卷積是怎么減少參數量呢?圖2-7中的(a)圖是標準卷積的過程,那我們假設輸入特征圖,卷積核的尺寸為,那么輸出特征圖尺寸為,那么對于標準卷積來說參數量為,圖2-7中的(b)圖是深度卷積,圖2-7中的(c)圖是逐點卷積,深度可分離卷積的參數量是標準卷積的參數量的減少意味著計算量的減少,這就是深度可分離卷積。圖2-8.MobileNetV2深度可分離卷積結

23、構MobileNetV2版本中,引入了殘差結構,先升維再降維,增強了梯度的傳播,顯著減少了推理期間所需的內存占用,去掉Narrow Layer后的Relu,保留特征的多樣性,增強網絡的表達能力。圖2-9.V1和V2版本對比MobileNetV2的網絡結構如下:圖2-10.mobilenetv2結構圖72.3.2 ResNetResNet4的提出主要是解決兩大問題,一個是由于深度逐漸增加的模型退化問題,一個是梯度消失或者爆炸的問題。對于退化問題來說,ResNet是這樣去解決的,如果深層網絡的后面那些層是恒等變換,那么模型就會退化成一個淺層網絡,那么當前要解決的就是學習恒等映射的問題了,但是直接讓

24、一些層去擬合一個潛在的恒等映射函數,比較困難,這就是深層神經網絡難以訓練的原因。但是,如果利用殘差思想,把網絡設計為,我們可以轉換為一個殘差函數,只需要,就構成一個恒等映射。引用了殘差結構會使網絡變成一個自適應網絡,當網絡不需要那么深的時候,恒等映射自然就會多一點,反之少一點。對于梯度消失問題,ResNet是這樣去解決的,針對一個殘差結構對輸入x求導就會知道,由于跨層鏈接的存在,總梯度在對的導數基礎上還會加1。人們發現當模型層數增加到某種程度后,模型的效果不再提升反而下降,也可以說模型發生了退化的情況。因此提出了ResNet,ResNet是一個深度殘差神經網絡,其與普通的卷積神經網絡是有一些區

25、別,區別就在于ResNet具有殘差網絡結構,下圖就是殘差網絡塊。圖2-11.ResNet殘差結構普通的殘差結構是這樣的:,第個殘差結構的輸入,是第個殘差結構里面的權重,代表的是這個殘差結構里面有多少層參數。代表的是殘差函數,代表的是激活函數relu,函數被設置為一個恒等映射:(作者指出,當這個不是恒等變換的時候會增加維度和減少feature map的大小)。如果也是一個恒等映射的話,我們可以寫成這個形式,因為,所以可以寫成,這個深層特征可以表示為淺層特征和許多個殘差和,表明模型在任意兩層之間存在殘差,還有就是跟普通的卷積神經網絡不一樣,對于普通的卷積神經網絡來說,特征是一系列的矩陣乘積。我們來

26、對進行一個簡單的修改使其不再是恒等映射,也可以寫成,簡單一點可以表示為,其中表示包括計算,求導后即為,那么對于一個深度網絡來說(L is large),對于任意,如果,那么會非常大,會導致梯度爆炸,對于任意,如果,那么就會非常小,這個情況就會導致梯度消失。實驗證明,對于會出現優化困難的問題。如果我們把這種簡單的縮放替換成一個更加復雜的操作(例如gating,1x1卷積),對于上面的反向傳播公式的第一項就變成,作者通過實驗表明,這種情況同樣會阻礙反向傳播傳遞。2.3.3 NasNet在CVPR 2017 Google Brain的作品中,google利用強化學習得到的一個網絡結構NasNet6,

27、其不管在精度上還是在速度上都超越了現存的手工模型,其通過自動優化,排列組合搜索出來的模型結構,而且在實驗驗證中,搜索到的模型即使在圖像縮放等條件下,也能持續表現出優于MobileNetV2。主要結構如下圖:圖2-12.NasNet強化學習過程其利用強化學習來搜索個深度卷積神經網絡,優化的目標主要有兩個,一個就是識別的準確率和CPU運算延遲,論文里提到,對于超參數沒有太仔細去搜索,全靠結構設計和搜索算法。圖2-13.NasNet與MobileNetV2對比計算機搜索出來的結果NasNet的五種層的結構中,有兩種分別于MobileNetV1和MobileNetV2中的層相同,這一部分說明了Mobi

28、leNet的人工設計確實厲害,強化學習搜索出來的也搜索到類似的結構。總體來說NasNet是通過大量的計算資源,通過搜索出來,這也是未來一種新的發展方向,畢竟利用計算機去搜索很大可能會比人工設計好得多。2.3.4 Inception-ResNetInception-ResNet5又稱InceptionV4,論文作者試圖把Inception和ResNet相結合,以便獲得Residual帶來的好處,雖然ResNet網絡作者認為訓練深度比較大的網絡時候需要使用殘差連接,但是Inception-ResNet的作者卻認為,即使很深的網絡不適用殘差連接,訓練也不是很難,但是使用Residual能讓網絡訓練的

29、速度大大提升,上面已經介紹過ResNet,這個為Inception和ResNet的融合,這里就先介紹一下Inception的結構。圖2-14.Inception結構首先圖2-14這一個結構是Inception的原始結構,可以看出,他通過不同的卷積層和池化層進行concat操作得到下一層的輸入,但是由于采用較大的卷積核計算復雜度比較高,因此只能限制特征的channel數量,所以GoogleNet采用了的卷積核進行1*1的channel優化。圖2-15.經過改進的Inception結構圖2-16.Inception-ResNet的Inception結構那么Inception作用最主要是增加網絡的寬

30、度,增加了網絡對尺度的適應性,因為不同的支路感受野都是不一樣的,所以可以說有多尺度的信息在里面,引入1*1的卷積層主要是為了減少參數量和計算量。第三章 系統環境搭建3.1 安裝CUDA和CUDNNCUDA平臺旨在與C,C +和Fortran等編程語言一起使用。與以前的Direct3D和OpenGL之類的需要高級圖形編程技能的API相比,這種可訪問性使并行編程專家更容易使用GPU資源。CUDA驅動的GPU還支持諸如OpenACC和OpenCL之類的編程框架;此類代碼編譯為CUDA。Nvidia首次引入CUDA時,該名稱是Compute Unified Device Architecture的縮寫

31、,但是Nvidia隨后放棄了首字母縮寫的常用用法。CUDA和CUDNN的安裝,本人是通過anaconda來安裝,因為conda的便利性,只要你在conda的命令行中安裝conda install tensorflow-gpu,它就會自動幫你安裝了cuda和cudnn。圖3-1.cuda和cudnn版本號但是需要注意一點,就是顯卡的驅動需要跟上,如果顯卡的驅動與cuda的版本對不上的話,運行代碼的時候會報錯。3.2 Keras簡介Keras是一個用Python編寫的開源神經網絡庫。它能夠在TensorFlow,Microsoft Cognitive Toolkit,R,Theano或PlaidM

32、L之上運行。Keras的創建是為了用戶友好,模塊化,易于擴展以及與Python一起使用。該API是“為人類而不是為機器設計的”,并且“遵循了減少認知負擔的最佳實踐。”使用Keras的最大原因來自其指導原則,主要是關于用戶友好的原則。除了易于學習和易于建模之外,Keras還具有以下優勢:廣泛采用,支持廣泛的生產部署選項,與至少五個后端引擎(TensorFlow,CNTK,Theano,MXNet和PlaidML)集成,以及對多個GPU和分布式培訓的強大支持。另外,Keras得到了Google,Microsoft,Amazon,Apple,Nvidia,Uber等公司的支持。3.3 Tensrof

33、low介紹Tensorflow框架包含著三個模塊,分別是Client、Master、Worker,他們之間的邏輯關系如圖所示圖3-2 Tensorflow框架TensorFlow通過Python語言為程序員提供了所有這些功能。Python易于學習和使用,并提供了表達高級抽象如何耦合在一起的便捷方法。TensorFlow中的節點和張量是Python對象,而TensorFlow應用程序本身就是Python應用程序。但是,實際的數學運算不是在Python中執行的。通過TensorFlow可用的轉換庫被編寫為高性能C +二進制文件。Python只是在各個部分之間進行通信,并提供高級編程抽象以將它們連接

34、在一起。TensorFlow應用程序可以在大多數方便的目標上運行:本地計算機,云中的集群,iOS和Android設備,CPU或GPU。如果您使用Google自己的云,則可以在Google的自定義TensorFlow處理單元(TPU)芯片上運行TensorFlow,以進一步加速。不過,由TensorFlow創建的結果模型可以部署在大多數將用于預測的設備上。3.4 安裝Tensorflow-gpu和Keras本實驗環境使用的是Keras為主,但是Tensorflow也需要安裝,因為Keras的后臺需要使用Tensorflow,Tensorflow-gpu的安裝,上面也有提到,只要你使用的是anan

35、conda環境,安裝就變得非常簡單,只需要在conda的命令行中輸入conda install tensorlfow-gpu,conda就會自動幫你安裝,因為keras使用的是tensorflow的后臺,所以只要你的tensorflow是gpu版本,你使用keras運行的時候,自動就是使用gpu計算。第四章 詳細設計與實現4.1 數據集介紹本文采用的是kaggle上的Cat Dataset,這個CAT數據集包括9000多張貓的圖像。每張圖片都有貓頭的注釋,9個點,2個點是眼睛,1個點是嘴巴,6個點是耳朵。如圖4-1所示,這里展示了16張圖片,利用了紅點來標注在圖片上。圖4-1.貓數據集首先用于

36、特征點檢測的數據集就是這個Cat Dataset,數據的標注已經在數據集中,但是用于目標檢測的話,需要自己手動標注貓臉,用到的是一個叫labelImg的軟件,界面如圖4-2。圖4-2.labelImg工具利用這個labelImg的軟件和kaggle上的Cat Dataset,我選取了2000張左右貓臉,利用labelImg進行標注,如圖4-3。圖4-3.labelImg標注格式之后寫一個python腳本把path和bndbox轉換成yolov3需要的格式就可以了。4.2 圖像識別具體實現4.2.1 MobileNetV2對于MobileNetV2,我訓練了兩個版本,如圖4-4和圖4-5,對于這

37、兩個結構,其都是采用MobileNetV2中的所有卷積層,全連接層需要自己添加,例如圖4-4中在MobileNetV2后面添加了三層全連接層,而圖4-5中在每一層全連接層添加了Dropout層。優化器都是采用Adam,學習率為0.0001。而對于MobileNetV2中的卷積層都是使用Keras自帶的預訓練權重。圖4-4.MobileNetV2_V1圖4-5.MobileNetV2_V2圖4-6.MobileNetV2效果圖可以看出,對于MobileNetV2_V2版本來說,效果不是很好,眼睛和嘴巴偏差有點大,對于MobileNet_V1版本來說,效果還算可以,但是眼睛和嘴巴也是有一點偏差。4

38、.2.2 NasNetMobile對于NasNetMobile,我訓練了三個版本,分別是圖4-7,圖4-8,圖4-9,也是采用NasNetMobile中的所有卷積層,然后再添加全連接層。圖4-7.NasNetMobile_V1圖4-8.NasNetMobile_V2圖4-9.NasNetMobile_V3圖4-10.NasNetMobile效果圖對于NasNetMobile來說,總體效果都是不錯的。4.2.3 ResNet50因為ResNet網絡有很多個版本,這次選用的是ResNet50,50代表是層數。本次我使用ResNet50訓練了總共8個版本,如圖4-11到圖4-18,訓練這8個版本的原

39、因是為了觀察添加的全連接層對最終結果的影響。圖4-11.ResNet50_V1圖4-12.ResNet50_V2圖4-13.ResNet50_V3圖4-14.ResNet50_V4圖4-15.ResNet50_V5圖4-16.ResNet50_V6圖4-17.ResNet50_V7圖4-18.ResNet50_V8圖4-19.ResNet50效果圖1圖4-19展示了這8個模型對應的效果圖,可以看出除了第7個還有第8個模型之外,其他效果都不錯。4.2.4 Inception-ResNet對于Inception-ResNet的話,我只訓練了兩個模型,如圖4-20和圖4-21。圖4-20.Incep

40、tionResNet_V1圖4-21.InceptionResNet_V2圖4-22.InceptionResNet效果圖整體來說效果都不錯,畢竟整合了Inception和ResNet的結構。4.2.5 圖像識別模型對比這一節我們來討論一下圖像識別各模型之間的對比。首先我們先對比一下各個模型之間的參數量,也就是模型的大小,表4-1給出了各個模型中需要訓練的參數,不需要訓練的參數和總共的參數。ModelTrainable paramsNon-Trainable paramsTotal paramsResNet50_V124,063,76253,12024,116,882ResNet50_V224

41、,651,66653,12024,704,78ResNet50_V324,651,66653,12024,704,786ResNet50_V423,571,47453,12023,624,594ResNet50_V523,799,18653,12023,852,306ResNet50_V626,168,85055,16826,224,018ResNet50_V726,166,80253,12026,219,922ResNet50_V826,166,80253,12026,219,922MobileNetV2_V12,397,26634,1122,431,378MobileNetV2_V22,3

42、97,26634,1122,431,378NasNetMobile_V14,252,00436,7384,288,742NasNetMobile_V24, 377,70036,7384,414,438NasNetMobile_V34,538,78836,7384,575,526InceptionResNet_V154,482,35460,54454,542,898InceptionResNet_V254,303,85860,54454,364,402表4-1.各模型參數對比從表中可以看出,InceptionResNet中的參數量是最多的,最少是MobileNetV2,雖說MobileNetV2

43、在眼睛和嘴巴的預測上有些偏差,但是其參數量是InceptionResNet的0.019倍,參數量基本也決定其預測的速度,能看出MobileNetV2在深度可分離卷積的使用下,提升了速度,但是犧牲的精度在可接受范圍。NasNetMobile的參數量雖然是MobileNetV2的兩倍,但是由于MobileNetV2的參數量本身不多,可以看出NasNetMobile這個由強化訓練搜索得出的模型也是非常成功的。單看上面的效果圖來說,NasNetMobile有著與InceptionResNet相同的效果,即便它們參數量有很大差別,也表現出,對于這個數據集來說,像NasNetMobile這種參數量的模型也

44、可以表現出不錯的效果。接下來我們分析一下各個模型在訓練過程中的最佳val_loss的情況。表4-2給出了各個模型對應的Best_Val_loss,除了有個別模型,基本都能達到一個比較好的效果。ModelBest Val_lossResNet50_V142.101ResNet50_V240.270ResNet50_V370.439ResNet50_V447.794ResNet50_V544.524ResNet50_V647.465ResNet50_V755.398ResNet50_V869.712MobileNetV2_V148.625MobileNetV2_V2111.302NasNetMob

45、ile_V139.597NasNetMobile_V233.140NasNetMobile_V342.598InceptionResNet_V128.542InceptionResNet_V232.675表4-2.各個模型的Best_Val_loss圖4-23給出了各個模型所對應的loss圖,可以看出有些模型存在loss很低,但是val_loss將不下去的情況,這種情況基本每個模型都有,只不過有些模型比較明顯,目前來說找不到什么有效的解決方法,嘗試過一些解決過擬合的方法,但是效果比之前還要差。對于圖像識別來說,采用NasNetMobile是一個不錯的選擇,它的參數量比較少,而且準確度也在一個可

46、接受的范圍內,雖然InceptionResNet的效果不錯,但是參數量太多,會導致其預測的時間大大增加,不利于實時檢測。4.3 目標檢測具體實現4.4.1 YOLOV3對于訓練YOLOV3,我們有幾個點需要注意,首先是YOLOV3的訓練數據的格式,圖4-25給出了部分訓練數據的格式,前面是圖片的絕對路徑,后面是對應貓臉框的左上角xy坐標和右下角的xy坐標,第五位數指的是類別。第二個點,YOLOV3需要知道數據的anchors大小,所以需要使用k-means聚類算法,得到九個anchors框的大小,然后再對YOLOV3的配置文件進行修改,圖4-26給出了YOLOV3配置文件對應修改的位置,fil

47、ters修改成(5 + classes) * 3,classes對應的就是類別數,anchors修改成對應k-means聚類得出的anchors寬高。最后一點就是由于YOLOV3結構比較大,所以需要的顯存也是非常大的,盡量把batch_size調小,以免顯存不足導致無法訓練。圖4-26給出了YOLOV3的訓練代碼。圖4-24.YOLOV3訓練數據格式圖4-25.YOLOV3配置文件圖4-26.YOLOV3訓練代碼圖4-27給出了YOLOV3的目標檢測效果圖,對于第四張圖片來說,有些貓臉還是沒有給檢測出來。圖4-27.YOLOV3效果圖4.4.2 Faster R-CNN對于Faster R-C

48、NN,因為其是先在圖片中提取特征,這一個卷積層有兩個模型可以選擇,一個是VGGNet,一個是ResNet,圖4-28給出了可選擇的模型,本次實驗我們選擇的是ResNet50來提取圖像特征,訓練的時候ResNet50是采用了預訓練權重,這樣可以減少訓練時間,讓模型可以更快收斂。圖4-29給出了Faster R-CNN對應的訓練格式,與YOLOV3訓練格式相差無幾。我們定義好訓練次數和輸入權重路徑以及輸出權重路徑等等就可以開始訓練。圖4-28.Faster R-CNN卷積模型選擇代碼圖4-29.Faster R-CNN訓練數據格式圖4-30.Faster R-CNN效果圖圖4-30表示的是Fast

49、er R-CNN的目標檢測圖,可以看出,第三張圖片后兩只貓是沒有被檢測出來的,第四張圖比YOLOV3檢測得效果稍微差了一點。4.4.3 目標檢測各模型對比這一節我們來討論一下目標檢測模型之間的效果對比,首先我們來比較一下參數量。表4-31給出了各目標檢測模型對應的參數量,可以看出YOLOV3的參數量是Faster R-CNN的3倍。ModelTrainable paramsNon-trainable paramsTotal paramsYOLOV361,253,73452,60861,576,342Faster R-CNN28,235,955106,24028,342,195表4-31.目標檢

50、測各模型參數量圖4-32給出了各個目標檢測模型的loss圖,但是我們不能夠以loss數值來判斷兩個模型之間的對比關系,因為YOLOV3與Faster R-CNN的loss計算機制是不一樣的,但是總體來說,兩個模型都能收斂,因為計算資源有限,所以訓練次數不夠多,這也是一個缺陷。圖4-32.目標檢測模型loss圖總體來說,雖然YOLOV3的參數量比Faster R-CNN多,但是目標檢測的效果對之后圖像識別影響非常大,比如模型檢測不到貓的存在,導致圖像識別模型就算再好都沒用,所以目標檢測模型我會選擇YOLOV3進行檢測。4.4 組合模型與裝飾貓臉4.4.1 組合模型圖像識別模型我們采用的是NasN

51、etMobile,而目標識別模型我們采用的是Faster R-CNN模型。圖4-33給出了組合模型的代碼,其實就是先用YOLOV3獲取圖像中的貓臉位置,再將貓臉位置輸入到圖像識別的模型中,然后再把得到的點記錄下來,這樣就完成一個組合模型的過程了,圖4-34展示了組合模型的效果圖,從圖中可以看出,組合模型后的效果還是非常不錯的。圖4-33.組合模型代碼圖4-34.組合模型效果4.4.2 裝飾貓臉現在我們擁有圖片中每一只貓的特征點,我們可以利用這些特征點幫貓進行一些裝飾,例如圖4-35給出用于裝飾的部件,這些可以配合特征點來進行裝飾。圖4-35.用于裝飾貓臉的部件接下來我們逐個分析一下,如何將部件

52、和特征點進行裝飾。(1) 眼睛裝飾(眼鏡)對于眼睛的裝飾,我們能利用的特征點就是左右眼坐標的位置,設左眼的x坐標為,y坐標為,右眼的x坐標為,y坐標為,眼鏡中心點為,眼鏡對于x軸偏移的角度為,眼鏡的寬高為。角度的話我們可以利用左眼和右眼的直線斜率,利用atan函數轉換為弧度,再用degrees函數將弧度轉換為角度。對于眼鏡中心點的位置,我們可以取左右眼直線的中點。為眼鏡圖片本身的尺寸,我們把眼鏡的寬度可以定義為左右眼的距離的兩倍,然后高度就可以根據新眼鏡的寬度與原來眼鏡的寬度比例進行縮放。(2) 頭頂裝飾(帽子,皇冠)對于頭頂的裝飾,我們可以利用左耳右邊的特征點和右耳左邊的特征點進行固定帽子的

53、位置。我們設左耳右邊的特征點坐標為,右耳左邊的特征點坐標為,帽子中心坐標為,帽子的寬高為,帽子對于x軸偏移的角度為。角度的計算跟眼鏡一樣,也是利用斜率轉弧度再轉角度。帽子的坐標也是跟眼鏡坐標一樣計算,取其直線的中點作為帽子的中心坐標。為帽子對應的原始寬度和高度,這里帽子的寬度為兩點距離的1.5倍較為合適,高度比例根據寬度的比例去調整就可以了。(3) 圖像操作首先我們用于裝飾的部件圖片需要是png格式,png格式的圖像一般是RGBA通道,A通道可以讓我們提取整個部件的輪廓。圖4-36給出了原圖像和a通道,圖4-35左側為a通道,我們知道黑色對應的是0,白色對應的是255,因此我們可以利用pyth

54、on的opencv庫cv2.bitwise_and()函數把貓圖中對應放皇冠的位置全部轉換為255,然后再把皇冠的圖像縮放到對應的大小,然后再用一個全是255數值的圖片(尺寸與皇冠圖像一樣)進行與操作,再用這一張圖片與貓那張圖片再進行一次與操作即可。圖4-36.a通道與原圖像對比最后通過以上的操作,圖4-37就是最終的效果圖。圖4-37.裝飾貓臉效果圖圖4-23.各模型訓練loss圖對于圖像識別來說,采用NasNetMobile是一個不錯的選擇,它的參數量比較少,而且準確度也在一個可接受的范圍內,雖然InceptionResNet的效果不錯,但是參數量太多,會導致其預測的時間大大增加,不利于實

55、時檢測。第五章 總結與不足5.1 總結本文基于keras來搭建目標檢測模型和圖像識別模型進行貓臉的特征點預測,對于目標檢測的模型來說,YOLOV3的效果是優于Faster R-CNN,雖然Faster R-CNN的參數量比YOLOV3少,但是YOLOV3的檢測速度比Faster R-CNN快,這也表示了one stage模型比two stage模型速度要快。對于圖像識別模型來說,總體效果都不錯,對于InceptionResNet和NasNetMobile模型來說較為出色,由于NasNetMobile的參數量比InceptionResNet少很多,速度自然也快了不少,這也說明了強化學習的厲害之處

56、,因此圖像識別模型選擇了NasNetMobile。本文的主要工作有一下內容:(1) 選取合適的貓臉特征點數據集,最終采取了kaggle上的Cat Dataset,其包含了大約9000張圖片,訓練之前需要對圖像進行一些預處理,之后通過訓練的效果最終選擇了NasNetMobile,雖然有點過擬合的現象,嘗試過添加一些防止過擬合的措施沒有太大的作用,甚至還沒過擬合的模型好。(2) 目標檢測模型訓練了Faster R-CNN, YOLOV3,圖像識別模型訓練了ResNet50,NasNetMobile,MobileNetV2,InceptionResNet。(3) 對于目標檢測的話,需要人工通過label

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論