




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
機器學習原理與應(yīng)用第7章計算機視覺技術(shù)本章學習目標(知識要點)了解計算機視覺發(fā)展歷程、任務(wù)及關(guān)鍵技術(shù)掌握視覺圖像表示、讀取、存儲及視頻處理的方法和技術(shù)熟悉視覺中的圖形計算、圖像二值化、圖像變換及形態(tài)處理方法;掌握LeNet、MobileNet及目標檢測等典型算法及應(yīng)用;目錄
計算機視覺簡介
計算機視覺基礎(chǔ)
計算機視覺開發(fā)平臺
典型算法
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的
人臉表情識別7.17.27.37.47.5◎計算機視覺簡介◎計算機視覺基礎(chǔ)◎計算機視覺開發(fā)平臺◎典型算法◎綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的人臉表情識別計算機視覺技術(shù)7.17.1計算機視覺簡介計算機視覺(ComputerVision,CV)是指讓計算機和系統(tǒng)能夠從圖像、視頻和其他視覺輸入中獲取有意義的信息,并根據(jù)該信息做出選擇、行動或提供策略建議等。其主要解決協(xié)助計算機“看”的問題,賦予發(fā)現(xiàn)、觀察和理解的能力,對目標進行識別、跟蹤和測量,并對圖像做進一步的處理。計算機視覺發(fā)展歷程1956年DavidHubel和TorstenWiesel?的單神經(jīng)元在貓紋狀體皮層的感受野工作。1963年LarryRoberts在《機器感知三維立體》(Machineperceptionofthree-dimensionalsolids)提出把視覺世界消減為簡單幾何形狀。1978年DavidMarr提出了從底向上的場景理解視覺框架(分為算法實現(xiàn)、算法、表達三層)1980年日本科學家福島邦彥提出具有深度結(jié)構(gòu)的神經(jīng)認知識別網(wǎng)絡(luò)(Neocognitron)7.1計算機視覺簡介1982年DavidMarr的《視覺:從計算的視角研究人的視覺信息表達與處理》1989年YannLeCun提出了卷積神經(jīng)網(wǎng)絡(luò)LeNet-5網(wǎng)絡(luò)1997年,伯克利的JitendraMalik嘗試解決視覺中的感知特征群集(perceptualgrouping)問題。2004年,PaulViola和MichaelJones提出了基于Viola-Jones檢測器的人臉識別框架2006年,計算機視覺領(lǐng)域中建立標準數(shù)據(jù)集PascalVOC項目2012年-至今2012(AlexNet)、2014(R-CNN、VGGNet)、2015(FastR-CNN、GoogleNet)、2016(FasterR-CNN、ResNet、YOLO、SSD、ResNetv2、R-FCN)、2017(DenseNet、DCN、DPN、MaskR-CNN)、2018(SENetCornetNet、FSAF、EfficientNet、YOLOV3)、2020(VIT,VisionTransformers、GPT-3)、2023(GPT-4V、Gemini)、2024(LLaMA、Qwen2-VL、DeepSeek-VL2)、2025(DeepSeekR1)7.1計算機視覺簡介計算機視覺關(guān)鍵技術(shù)常用的技術(shù)有:圖像分割、圖像增強、圖像平滑、圖像編碼和壓縮、圖像邊緣銳化等圖像分割是計算機視覺的基礎(chǔ),屬于圖像理解的重要組成部分,其本質(zhì)是對像素分類,通過像素的灰度值、顏色、空間紋理等特性,把圖像分割成具有相似的顏色或紋理特性的若干不相交的子區(qū)域,并使它們對應(yīng)不同的物體或物體的不同部分。圖像分割常用的方法有基于閾值的分割法、基于區(qū)域的分割法、基于邊緣檢測的分割方法和基于深度學習的分割法。基于深度學習的分割法有如:基于特征編碼的、VGGNet、ResNet、基于CNN的圖像分割(Region-basedConvolutionalNeuralNetwork(R-CNN)、FasterR-CNN、MaskR-CNN、MaskScoringR-CNN)、基于RNN的圖像分割(ReSeg、MDRNNs)、U-Net、基于上采樣的分割等。7.1計算機視覺簡介計算機視覺關(guān)鍵技術(shù)閾值根據(jù)目標和背景的選擇,可分為單閾值和多閾值分割兩種?;陂撝档姆椒ㄓ嬎愫唵胃咝?,但只考慮像素灰度值特征,沒有考慮空間特征,在魯棒性、噪聲適應(yīng)性方面較差。圖像增強通常采用灰度直方圖技術(shù)調(diào)整圖像的對比度,用于擴大圖像中不同物體特征之間的差別,抑制不感興趣的特征,增強圖像中的有用信息,改善圖像的識別效果。常用的算法有直方圖均衡算法、小波變換算法、偏微分方程算法、基于色彩恒常性理論的Retinex算法。圖像平滑是圖像去噪常用的方法,是將圖像中噪聲所在像素點的像素值處理為其周圍臨近像素點的值的近似值,用于去除成像過程中因設(shè)備和環(huán)境所造成的圖像失真等問題。7.1計算機視覺簡介計算機視覺關(guān)鍵技術(shù)圖像平滑處理常用方法有均值濾波(鄰域平均法),方框濾波,高斯濾波,中值濾波,雙邊濾波、NLM(Non-Localmeans)算法、小波去噪和基于深度學習的方法等。圖像編碼和壓縮是指通過圖像編碼技術(shù),實現(xiàn)減少圖像數(shù)據(jù)中的冗余信息的方法,對圖像進行更加高效的格式存儲和傳輸。圖像壓縮分為有損數(shù)據(jù)壓縮和無損數(shù)據(jù)壓縮兩種。無損數(shù)據(jù)壓縮通常有游程編碼、熵編碼法、自適應(yīng)字典算法等。有損壓縮通常有變換編碼、分形壓縮、色度抽樣、區(qū)域編碼、基于深度學習的方法等。圖像壓縮常使用峰值信噪比來衡量壓縮的圖像質(zhì)量,峰值信噪比用來表示圖象有損壓縮帶來的噪聲。7.1計算機視覺簡介計算機視覺關(guān)鍵技術(shù)圖像邊緣銳化是一種通過濾波加強圖像的邊緣對比度及灰度跳變的部分,提高地物邊緣與周圍像元之間的反差,突出圖像上地物的邊緣、輪廓,或某些線性目標要素的特征,使圖像變得清晰,又稱為邊緣增強。圖像邊緣通常具有表面法向不連續(xù)性、深度不連續(xù)性、表面顏色不連續(xù)性、亮度不連續(xù)性等特性。它分為空間域處理和頻域處理兩類。如OpenCV中Laplacian高通濾波算子、USM(UnshrpenMask)算法等。7.1計算機視覺簡介計算機視覺應(yīng)用領(lǐng)域計算機視覺中常見的挑戰(zhàn)任務(wù)有目標分類、目標識別、目標驗證、目標檢測、目標特征點檢測、目標分割、目標鑒別等,基于這些任務(wù)產(chǎn)生了廣泛的應(yīng)用。如自動駕駛、人臉識別、自動圖片識別、光學字符識別(OCR)、移動機器人視覺導(dǎo)航、醫(yī)學輔助診斷、物體三維形狀分析識別、工業(yè)機器視覺系統(tǒng)、自動化圖像分析等,已經(jīng)應(yīng)用在零售、金融、司法、軍隊、公安、邊檢、政府、航天、電力、工廠、教育、醫(yī)療保健、制造業(yè)等行業(yè)。目錄
計算機視覺簡介
計算機視覺基礎(chǔ)
計算機視覺開發(fā)平臺
典型算法
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的
人臉表情識別7.17.27.37.47.5計算機視覺基礎(chǔ)7.27.2.1圖像表示圖像表示通常圖像可以用一個二維函數(shù)f(x,y)表示,其中x,y表示二維空間平面坐標,而在(x,y)空間坐標處的幅值f稱為該點處的強度或灰度。當x,y和灰度值是有限的離散數(shù)值時,則可稱該圖像為數(shù)字圖像(DigitalImage)。數(shù)字圖像處理技術(shù)是計算機視覺的重要基礎(chǔ)。為了產(chǎn)生一幅數(shù)字圖像,我們需要把連續(xù)的感知數(shù)據(jù)轉(zhuǎn)換成數(shù)字形式,這種轉(zhuǎn)換包括兩個過程:取樣和量化。如圖7-1和圖7-2所示:圖7-1傳感器陣列獲取數(shù)字圖像的過程圖7-2采樣和量化7.2.1圖像表示圖像表示根據(jù)圖像的通道數(shù)量,可將數(shù)字圖像分為:單通道圖像(黑白圖像、灰度圖像)彩色圖像(三通道圖像,四通道圖像(含透明度))圖7-3灰度圖和彩圖7.2.1圖像表示如圖7-3所示:黑白圖像:只有黑白兩種顏色的圖像稱為黑白圖像或單色圖像,每個像素只能是黑或白,沒有中間過渡,故又稱為二值圖像?;叶葓D像:每個像素的信息由一個量化的灰度級來描述,如果每個像素的灰度值用一個字節(jié)來表示,灰度值級數(shù)就等于255級,每個像素可以是0-255之間的任何一個數(shù)?;叶葓D只有亮度信息,沒有顏色信息。彩色圖像:除了有亮度信息外,還包含有顏色信息。彩色圖像的表示與所采用的顏色空間,即彩色的表示模型有關(guān)。對于多通道圖像而言,其存儲的顏色信息的編碼方式高達上百種,常見為RGB格式。7.2.1圖像表示在RGB顏色空間中,一幅彩色數(shù)字圖像的各個像素的信息由RGB三原色通道構(gòu)成,其中各個通道R(紅色)、G(綠色)、B(藍色)是在每個像素點都由不同的灰度級來描述,三者的共同作用,決定了圖像的色彩和亮度。如圖7-4所示:圖7-4彩色圖像模型7.2.2圖像讀取、存儲圖像操作圖像讀取、顯示和存儲是基本的操作,這些操作除了OpenCV2處理之外,還可以通過Python的圖像庫,如PIL(PythonImagingLibrary)、skimage(Scikit-Image)、matplotlib.image、keras.preprocessing等1.圖像讀取從磁盤中讀取一張圖像,并將它顯示到GUI窗口中。在不使用庫操作時實現(xiàn)圖像編碼解碼、GUI圖像顯示等功能,較為比較復(fù)雜。OpenCV庫為這個功能實現(xiàn)提供了簡單操作,其操作流程如下圖7-5所示:圖7-5圖像讀存基本流程7.2.2圖像讀取、存儲1.圖像讀取基本處理步驟(代碼詳見書及資源文件):(1)讀取圖片并顯示圖片基本信息(2)讀取圖像、輸出圖像的一些基本信息,程序輸出結(jié)果詳見書(3)圖像顯示操作(4)程序執(zhí)行結(jié)果如圖7-6所示(5)圖像磁盤保存,使用函數(shù)imwrite把內(nèi)存中圖像矩陣序列化到磁盤文件中。圖7-6圖像顯示imshow7.2.2圖像讀取、存儲2.圖像存儲NumPy(NumericalPython)提供了高效存儲、數(shù)據(jù)操作、數(shù)據(jù)緩存的接口,包含數(shù)字計算函數(shù)、矩陣計算函數(shù)等在Python中圖像的操作實質(zhì)上是對數(shù)組的操作,使用OpenCV讀取的圖像,返回的是一個np.ndarray數(shù)組類型的對象。每個數(shù)組有nidm(數(shù)組的維度)、shape(數(shù)組每個維度的大?。┖蛃ize(數(shù)組的總大小)屬性,以及屬性dtype(數(shù)組的數(shù)據(jù)類型)。數(shù)組屬性間表示關(guān)系如圖7-7所示。圖7-7數(shù)字屬性7.2.3視頻捕獲及流保存1.視頻流捕獲視頻流可以分為攝像頭視頻讀入、本地視頻讀入兩種在OpenCV中捕獲攝像頭視頻流可通過CV2.VideoCapture視頻捕獲類,實現(xiàn)從視頻硬件設(shè)備獲取幀圖像。通過構(gòu)造函數(shù)可獲得VideoCapture類的實例對象,通過實例對象VideoCapture的成員方法read來讀取視頻幀。捕獲視頻流的基本流程如圖7-9所示:圖7-9視頻捕獲基本流程7.2.3視頻捕獲及流保存1.視頻流捕獲基本的視頻流捕獲示例代碼如下importcv2ascv
#獲取本地默認的攝像頭,如果你在Windows下使用USB攝像頭那么id為1,如果在Linux系統(tǒng)下使用USB攝像頭則應(yīng)填“/dev/video1”。cap=cv.VideoCapture(0)#如果檢測到攝像頭已打開ifcap.isOpened():state,frame=cap.read()#抓取下一個視頻幀狀態(tài)和圖像whilestate:#當抓取成功則進入循環(huán)state,frame=cap.read()#抓取每一幀圖像cv.imshow('video',frame)#顯示圖像幀#等待鍵盤按下,超時25ms可通過設(shè)置等待超時時間來控制視頻播放速度。k=cv.waitKey(25)&0xff#25ms內(nèi)當有鍵盤按下時返回對應(yīng)按鍵ASCII碼,超時返回-1ifk==27orchr(k)==‘q’:#當按下Esc或者q建時退出循環(huán)。break7.2.3視頻捕獲及流保存2.視頻流保存視頻是由一幀一幀的圖像連接而成,通常把一秒鐘切換圖像的次數(shù)稱為幀率(FPS),如人眼感覺流暢的視頻,通常需一秒中內(nèi)切換24幀圖像則其幀率為24FPS。通過OpenCV中的VideoWriter類API接口實現(xiàn)視頻流的保存。視頻流保存流程圖如圖7-10所示:圖7-10視頻流保存流程圖7.2.4圖形計算1.圖像按位運算圖像的基本運算有多種,如兩幅圖像可以相加、相減、相乘、相除、位運算、平方根、對數(shù)、絕對值等,還可以截取其中的一部分作為ROI(感興趣區(qū)域)。所謂按位運算,就是對(彩色圖像或灰色圖像均可)圖像像素的二進制形式的每個bit進行對應(yīng)運算。按位運算包括AND、NOT、XOR、OR運算。它們的函數(shù)原型定義如圖7-11所示:函數(shù)cv2.bitwise_and將兩幅圖像src1與src2每個像素值進行位與,并返回處理后的圖像。函數(shù)cv2.bitwise_not將輸入圖像src每個像素值按位取反,并返回處理后的圖像。圖
7-11算術(shù)運算函數(shù)原型7.2.4圖形計算2.圖像加法使用函數(shù)cv2.add()可進行圖像的加法運算,對于要相加的兩張圖需要保證圖像的shape一致。此外圖像的加法運算還可以通過Numpy實現(xiàn)。在OpenCV的加法是一種飽和操作,而Numpy中加法是一種模操作。如例所示:x=np.uint8([250])y=np.uint8([10])print(cv2.add(x,y)[[255]]#250+10=260=>255print(x+y)[[4]]#250+10=260%256=47.2.4圖形計算3.圖像通道拆分及合并有時需要對圖像的單個通道進行特殊操作,就需要把BGR拆分成三個單獨的通道,操作完單個通道后,還可將三個單獨的通道合并成一張BGR圖,通道拆分及合并操作如下b,g,r=cv2.split(img)img=cv2.merge((b,g,r))#使用python切片來完成通道分割和替換功能b=img[:,:,:1]g=img[:,:,1:2]r=img[:,:,2:3]img[:,:,2:3]=rimg[:,:,1:2]=gimg[:,:,0:1]=b7.2.5圖形值化及平滑1.圖像二值化在圖像處理中,圖像二值化是指將圖像上的灰度值按照某種方式設(shè)置為0或255,得到一張黑白二值圖像的過程。在二值化圖像當中,只存在黑色和白色二種顏色。圖像二值化可以使邊緣變得更加明顯,如圖7-12所示。在圖像處理中,二值化操作通常應(yīng)用在如掩模、圖像分割、輪廓查找等中。圖7-12數(shù)字圖像二值化7.2.5圖形值化及平滑1.圖像二值化在圖像處理中,圖像二值化是指將圖像上的灰度值按照某種方式設(shè)置為0或255,得到一張黑白二值圖像的過程。在二值化圖像當中,只存在黑色和白色二種顏色。圖像二值化可以使邊緣變得更加明顯,如圖7-12所示。在圖像處理中,二值化操作通常應(yīng)用在如掩模、圖像分割、輪廓查找等中。1)簡單閾值二值化簡單閾值二值化是指設(shè)置一個全局閾值,通過該閾值對灰度圖像素值進行歸類設(shè)置。具體做法是,像素點灰度值小于等于閾值時將該點置0(反轉(zhuǎn)置maxval),大于閾值置maxval(反轉(zhuǎn)置0)。如下生成灰度漸變圖:7.2.5圖形值化及平滑1.圖像二值化在圖像處理中,圖像二值化是指將圖像上的灰度值按照某種方式設(shè)置為0或255,得到一張黑白二值圖像的過程。在二值化圖像當中,只存在黑色和白色二種顏色。圖像二值化可以使邊緣變得更加明顯,如圖7-12所示。在圖像處理中,二值化操作通常應(yīng)用在如掩模、圖像分割、輪廓查找等中。1)簡單閾值二值化簡單閾值二值化是指設(shè)置一個全局閾值,通過該閾值對灰度圖像素值進行歸類設(shè)置。具體做法是,像素點灰度值小于等于閾值時將該點置0(反轉(zhuǎn)置maxval),大于閾值置maxval(反轉(zhuǎn)置0)。small=np.array(range(0,256),np.uint8).reshape(16,16)如下生成灰度漸變圖:7.2.5圖形值化及平滑2)全局閾值二值化使用全局閾值二值化上述漸變灰度圖,代碼如下:ret,small_thresh=cv.threshold(small,127,200,cv.THRESH_BINARY)二值化效果如圖7-15所示二值化后的像素分布情況如圖7-16所示圖7-15二值化后結(jié)果圖7-16二值化圖像素分布7.2.5圖形值化及平滑3)自適應(yīng)閾值二值化自適應(yīng)閾值二值化同簡單閾值二值化不同之處在于,簡單閾值使用一個全局閾值來二值化,而自適應(yīng)閾值使用每個塊中的平均值或加權(quán)平均值作為閾值,簡單閾值優(yōu)勢是在處理速度和某些特定場景的二值化表現(xiàn),而自適應(yīng)閾值對局部過曝場景中具有優(yōu)勢。因此在實際應(yīng)用場景中需要根據(jù)場景特點選擇合適的二值化處理函數(shù),一般是先使用簡單閾值調(diào)參,然后考慮使用自適應(yīng)閾值二值化。自適應(yīng)閾值二值化和全局閾值二值化的對比效果,如圖7-17所示,左一為原灰度圖;右二為原灰度圖使用簡單閾值二值化圖——thresh=127;左三為原灰度圖使用自適應(yīng)二值化圖——鄰域均值;右四為原灰度圖使用自適應(yīng)二值化圖——高斯加權(quán)均值。圖7-17二值化效果對比7.2.5圖形值化及平滑4)OTSU二值化OTSU是一種確定圖像二值化分割閾值的算法,又稱最大類間差法或大律算法。在OpenCV中使用標志位cv.THRESH_OTSU表示使用OTSU得到全局自適應(yīng)閾值來實現(xiàn)圖像二值化。OTSU對灰度圖進行二值化示例代碼如下:ret,th1=cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)ret就是OTSU計算出來全局自適應(yīng)閾值。測試圖片如圖7-18所示,該圖存在大量的噪聲。它的直方圖如圖7-19所示,可以看到直方圖存在兩個波峰。圖7-18測試圖圖7-19測試圖的直方圖7.2.5圖形值化及平滑4)OTSU二值化使用OTSU對測試圖二值化后的結(jié)果如圖7-20圖7-20OTSU二值化效果7.2.5圖形值化及平滑2.圖像平滑1)均值濾波均值濾波是平滑線性濾波器中的一種,具有平滑圖像過濾噪聲的作用。均值濾波的思想是使用濾波器模板w所包含像素的平均值去覆蓋中心錨點的值。濾波計算公式為:濾波計算過程如圖7-21所示,經(jīng)過均值濾波操作后中間錨點83變成了76。
圖7-21均值濾波原理7.2.5圖形值化及平滑
7.2.5圖形值化及平滑
7.2.5圖形值化及平滑2.圖像平滑2)加權(quán)均值濾波均值濾波/加權(quán)均值濾波可以實現(xiàn)如下要點:(1)能平滑圖像\模糊圖像;(2)能去除小尺寸亮點、去除噪聲;(3)可以連通一些縫隙,如字符縫隙;(4)使用函數(shù)cv.blur()、cv.boxFilter()均可實現(xiàn)均值濾波。運行結(jié)果如圖7-23和圖7-24所示,從中可以看到隨著模板尺寸增大,那些小尺寸的白色亮點就會逐漸消失。圖7-23不同核大小的均值濾波效果圖7-24不同核大小的均值濾波后二值化7.2.5圖形值化及平滑2.圖像平滑3)中值濾波中值濾波是一種基于統(tǒng)計排序的非線性濾波器。能有效抑制噪聲的非線性噪聲如椒鹽噪聲,平滑其它非脈沖噪聲,減少物體邊界細化或粗化的失真。與線性濾波器均值濾波相比,均值無法消除椒鹽噪聲,中值濾波卻可以輕松去除。中值濾波容易斷開圖像中的縫隙,如字符縫隙。均值濾波可以連通圖像中的縫隙。中值濾波原理:濾波輸出像素點g(x,y)表示濾波模板domain定義的排列集合的中值,其基本步驟如下:(1)濾波模板domain與像素點f(x,y)重合,如圖7-25所示將domain中心與83所在g(2,2)位置重合。(2)濾波器模板domain為0/1矩陣,與domain中元素1對應(yīng)的像素才參與排序;7.2.5圖形值化及平滑2.圖像平滑3)中值濾波(3)參與排序的像素點升序排序,如圖2-33所示確認參與排序的像素升序排序73,74,74,75,77,79,79,80,83,其中值為77(4)g(x,y)排序集合的中值為77,g(2,2)=77,將83替換為77圖7-25中值濾波原理7.2.5圖形值化及平滑2.圖像平滑3)中值濾波在OpenCV中使用cv2.medianBlur來進行中值濾波。下面給出中值濾波示例代碼。importcv2ascvimg=cv.imread('./mouse.jpg')#中值濾波blur=cv.medianBlur(img,5)cv.imshow('img',img)cv.imshow('blur',blur)cv.waitKey(0)cv.destroyAllWindows()
#提高理解small=img[10:20,20:30:,:1]print(small.reshape(10,10))print('*'*60)small_b=cv.medianBlur(small,3)#邊緣填充:復(fù)制原圖中最臨近的行或者列print(small_b)圖7-26中值濾波運行結(jié)果7.2.5圖形值化及平滑2.圖像平滑4)高斯濾波高斯濾波是計算鄰域內(nèi)所有像素灰度的高斯加權(quán)平均值,然后去替換中心點的像素。高斯濾波和均值濾波的主要區(qū)別在于鄰域權(quán)重值的分布,高斯濾波權(quán)重值符合正態(tài)分布;均值濾波權(quán)重不符合正態(tài)分布。二者權(quán)重分布如圖7-27所示:圖7-27高斯權(quán)重分布7.2.5圖形值化及平滑2.圖像平滑4)高斯濾波高斯濾波原理計算過程為:高斯運算結(jié)果矩陣=高斯權(quán)重矩陣*對應(yīng)像素矩陣,如圖7-28所示:對應(yīng)像素矩陣錨點為高斯運算結(jié)果矩陣求和,即上述將這9個值加起來,就是中心點的高斯濾波的值。如圖7-29所示。圖7-28高斯濾波過程圖7-29中心點83的高斯濾波結(jié)果7.2.5圖形值化及平滑2.圖像平滑4)高斯濾波邊界點默認的處理方式是邊緣拷貝如圖7-30所示:圖7-30邊界點處理7.2.5圖形值化及平滑2.圖像平滑4)高斯濾波圖7-31去除高斯型噪聲7.2.6圖像變換及形態(tài)操作
圖7-32圖像平移描述矩陣7.2.6圖像變換及形態(tài)操作1.圖像變換1)圖像平移1—原圖2—左平移默認0填充3—左平移自定義填充4—左平移鏡像填充5—左平移溢出填充7.2.6圖像變換及形態(tài)操作1.圖像變換2)圖像縮放圖像縮放是指將一副圖像放大或縮小得到新圖像。對一張圖像進行縮放操作,可以按照比例縮放,亦可指定圖像寬高進行縮放。放大圖像實際上是對圖像矩陣進行拓展,而縮小實際上是對圖像矩陣進行壓縮。OpenCV使用函數(shù)cv.resize進行圖像縮放。3)圖像旋轉(zhuǎn)旋轉(zhuǎn)是二維上的操作,是指將一塊區(qū)域的像素,以指定的中心點坐標,按照逆時針方向旋轉(zhuǎn)指定角度得到旋轉(zhuǎn)后的圖像。在OpenCV中進行圖像旋轉(zhuǎn),需使用cv.getRotationMatrix2D先構(gòu)造出旋轉(zhuǎn)描述矩陣,然后將構(gòu)造出來的旋轉(zhuǎn)描述矩陣傳遞到函數(shù)cv.warpAffine中進行幾何變換7.2.6圖像變換及形態(tài)操作1.圖像變換4)圖像仿射變換仿射變換是二維上的線性變換(乘以矩陣)再加上平移(加上一個向量),如圖7-35所示Img1先經(jīng)過旋轉(zhuǎn)(線性變換),再進行縮放(線性變換),最后進行平移(向量加)就可得到Img2。圖7-35仿射變換7.2.6圖像變換及形態(tài)操作1.圖像變換4)圖像仿射變換下面給出仿射變換示例代碼:#原圖變換的頂點
從左上角開始
逆時針方向填入pts1=np.float32([[50,50],[400,50],[50,400]])#目標圖像變換頂點
從左上角開始
逆時針方向填入pts2=np.float32([[100,100],[300,50],[100,400]])#構(gòu)建仿射變換描述矩陣M=cv.getAffineTransform(pts1,pts2)#進行仿射變換dst=cv.warpAffine(img,M,(cols,rows))圖7-36仿射變換結(jié)果7.2.6圖像變換及形態(tài)操作1.圖像變換5)圖像透視變換透視變換本質(zhì)是將圖像投影到一個新的視平面,仿射變換可理解為透視變換的一種特殊形式。仿射變換(affinetransform)與透視變換(perspectivetransform)在圖像還原、圖像局部變化處理方面有重要意義。仿射變換是2D平面變換,透視變換時3D空間變換。仿射變換需要事先知道原圖中三個頂點坐標,而透視變換需要事先知道原圖中四點坐標(任意三點不共線)。透視變換用于車牌矯正,找到車牌區(qū)域四個頂點坐標左上記為點A,右上記為點B,左下記為點C,右下記為點D?,F(xiàn)在假設(shè)原圖中四點坐標為A(88,92)、B(218,118)、C(84,125)、D(211,160)。找坐標四點坐標中x和y最大最小值記為x_min,x_max,y_min,y_max。目標圖四點映射坐標為A(x_min,y_min)、B(x_max,y_min)、C(x_min,y_max)、D(x_max,y_max)。7.2.6圖像變換及形態(tài)操作1.圖像變換5)圖像透視變換下面給出矯正示例代碼,供參考。#原圖中車牌四頂點坐標pts1=np.float32([(88,92),(218,118),(84,125),(211,160)])#矯正后車牌四頂點坐標pts2=np.float32([(88,118),(218,118),(88,160),(218,160)])#構(gòu)建透視變換描述矩陣M=cv.getPerspectiveTransform(pts1,pts2)#進行透視變換——圖像校正dst=cv.warpPerspective(img,M,(w,h))圖7-38透視變換傾斜矯正7.2.6圖像變換及形態(tài)操作2.圖像形態(tài)操作形態(tài)學操作是基于形狀的一系列圖像處理操作。通過將結(jié)構(gòu)元素作用于輸入圖像來產(chǎn)生輸出圖像。基本的形態(tài)學操作包含腐蝕與膨脹。通過形態(tài)學操作可以實現(xiàn)消除噪聲、分割獨立的圖像元素,以及連接相鄰的元素,尋找圖像中的明顯的極大值區(qū)域或極小值區(qū)域。1)腐蝕腐蝕原理:使用一個3X3的全一矩陣去腐蝕一張灰度圖,中心錨點的值就會被替換為對應(yīng)核中最小的值。如圖7-39所示:OpenCV中使用函數(shù)cv.erode來進行腐蝕操作。圖7-39腐蝕原理7.2.6圖像變換及形態(tài)操作2.圖像形態(tài)操作2)膨脹膨脹原理:使用一個3X3的全一矩陣去膨脹一張灰度圖,中心錨點的值就會被替換為對應(yīng)核中最大的值。如圖2-51所示:OpenCV中使用函數(shù)cv.dilate來進行膨脹操作。圖7-42膨脹原理7.2.6圖像變換及形態(tài)操作2.圖像形態(tài)操作3)形態(tài)學操作除了上述的基本操作之外,形態(tài)學操作還包含開運算、閉運算、形態(tài)學梯度、禮帽和黑帽。這些操作使用函數(shù)cv.morphologyEx完成。函數(shù)cv.morphologEx需要傳遞結(jié)構(gòu)化內(nèi)核可通過函數(shù)cv.getStructuringElement來獲得7.2.7圖像檢測輪廓檢測方法一類是利用傳統(tǒng)的邊緣檢測算子檢測目標輪廓另一類是從人類視覺系統(tǒng)中提取可以使用的數(shù)學模型完成目標輪廓檢測。
基于邊緣檢測的輪廓檢測方法是一種低層視覺行為,它主要定義了亮度、顏色等特征的低層突變,通過標識圖像中亮度變化明顯的點來完成邊緣檢測,因此很難形成相對完整和封閉的目標輪廓。邊緣檢測通常將圖像與微分算子卷積。比如借助于Sobel算子、Canny算子等,此方法沒有考慮視覺中層和高層信息,因此很難得出完整的、連續(xù)的輪廓邊緣,僅僅使用這類方法很難得出完整的目標輪廓,這種過程往往復(fù)雜且精度難以保證,甚至在含有大量噪聲或者紋理的情況下,無法提取輪廓。圖像輪廓是指具有相同顏色或灰度值的連續(xù)點連接在一起的曲線,輪廓查找在形狀分析和物體識別應(yīng)用十分重要。7.2.7圖像檢測1.輪廓檢測主要過程求取圖像(灰度或彩色)中物體輪廓的過程主要有四個步驟。(1)首先對輸入圖像做預(yù)處理,通用的方法是采用較小的二維高斯模板做平滑濾波處理,去除圖像噪聲,采用小尺度的模板是為了保證后續(xù)輪廓定位的準確性,因為大尺度平滑往往會導(dǎo)致平滑過渡,從而模糊邊緣,大大影響后續(xù)的邊緣檢測。(2)對平滑后的圖像做邊緣檢測處理,得到初步的邊緣響應(yīng)圖像,其中通常會涉及到亮度、顏色等可以區(qū)分物體與背景的可用梯度特征信息。(3)對邊緣響應(yīng)做進一步處理,得到更好的邊緣響應(yīng)圖像。這個過程通常會涉及到判據(jù),即對輪廓點和非輪廓點做出不同處理達到區(qū)分輪廓點和非輪廓點的效果,從而得到可以作為輪廓的邊緣圖像。(4)若是此步驟之前得到的輪廓響應(yīng)非常好時,該步驟往往是不用再考慮的。然而在實際應(yīng)用過程中,上一步驟得到的結(jié)果往往是不盡人意的。因此,此過程往往起著至關(guān)重要的作用,最后對輪廓進行精確定位處理。7.2.7圖像檢測1.輪廓檢測主要過程圖像輪廓查找常用步驟如下:(1)讀入圖像,小尺寸核圖像去噪(均值、中值、高斯)(2)圖像灰度化,圖像二值化(簡單全局閾值、自適應(yīng)閾值、OTSU大津法閾值)(3)圖像背景較為復(fù)雜還需使用(Canny、Sobel)等算子提取邊緣信息(4)使用函數(shù)cv.findContours()進行輪廓查找。7.2.7圖像檢測2.圖像輪廓近似方法圖像輪廓是指具有相同灰度值的邊界,它會儲存形狀邊界上所有點的(x,y)坐標,但是需要將所有的邊界坐標點都儲存起來嗎?參數(shù)method傳遞給函數(shù)findControus()保存邊界點,如果該參數(shù)被設(shè)置為cv2.CHAIN_APPROX_NONE,則所有邊界點的坐標都會被保存。如果參數(shù)被設(shè)置為cv2.CHAIN_APPROX_SIMPLE那么只會保留邊界點的端點,比如邊界是一條直線時只保留直線的兩個端點,邊界是一個矩形時只保留矩形的是個頂點。如果將這些邊界點畫出來,就是下面這樣了。cv2.CHAIN_APPROX_NONE,使用綠色線畫出,cv2.CHAIN_APPROX_SIMPLE,使用紅色點畫出。如圖7-48所示圖7-48輪廓近似方法7.2.7圖像檢測3.邊界矩形有兩類邊界矩形,直邊界矩形,旋轉(zhuǎn)邊界矩形。直邊界矩形(就是沒有旋轉(zhuǎn)的矩形),使用函數(shù)cv2.boundingRect()可以獲得到,因為直邊界矩形不考慮矩形旋轉(zhuǎn),所以直邊界矩形的計算出來面積不是最小。旋轉(zhuǎn)邊界矩形,這個矩形計算出來面積最小,因為他考慮了矩形的旋轉(zhuǎn)。使用函數(shù)cv2.minAreaRect()可以獲得,函數(shù)返回一個Box2D結(jié)構(gòu),其中包含旋轉(zhuǎn)矩形左上角坐標(x,y),矩形的寬高(w,h),以及旋轉(zhuǎn)角度。但是繪制一個矩形需要四個角點,可以通過函數(shù)cv2.boxPoints()將Box2D結(jié)果轉(zhuǎn)換成(x,y,w,h)。如下代碼顯示了常用的邊界矩形的計算方法,最終效果如圖7-51所示:#直邊界矩形x,y,w,h=cv2.boundingRect(contours[0])img=cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2,cv.LINE_AA)#旋轉(zhuǎn)矩形rect=cv.minAreaRect(contours[0])box=cv.boxPoints(rect)box=0(box)img=cv.drawContours(img,[box],0,(0,0,255),2,cv.LINE_AA)圖7-51邊界矩形7.2.7圖像檢測4.輪廓層次結(jié)構(gòu)輪廓查找函數(shù)cv2.findContours()中有一個輪廓提取模式的參數(shù),函數(shù)返回結(jié)果包含二個數(shù)組,第一個是輪廓,第二個是層次結(jié)構(gòu)。一個輪廓可能會在另外一個輪廓的內(nèi)部,也可能會和其他的輪廓并列。一個輪廓在另一個輪廓內(nèi)部,這種情況下稱外部輪廓為父輪廓,內(nèi)部的輪廓稱為子輪廓。按照這種輪廓分層關(guān)系,就可以確定一個輪廓和其他輪廓之間是怎樣連接的,比如它是不是某個輪廓的子輪廓或父輪廓,它是不是某個輪廓的下一個輪廓或上一個輪廓。像這種分層關(guān)系就是輪廓之間的層次關(guān)系。以圖7-52為例:圖7-52輪廓層次結(jié)構(gòu)目錄
計算機視覺簡介
計算機視覺基礎(chǔ)
計算機視覺開發(fā)平臺
典型算法
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的
人臉表情識別7.17.27.37.47.5◎
ARM嵌入式人工智能開發(fā)平臺◎嵌入式GPU人工智能開發(fā)平臺◎計算機視覺綜合開發(fā)平臺計算機視覺開發(fā)平臺7.37.3計算機視覺開發(fā)平臺計算機視覺開發(fā)平臺是為解決用戶缺乏處理海量視覺數(shù)據(jù)所需的算力和計算機視覺軟件開發(fā)資源而生,它通過提供開發(fā)和計算資源,使用戶通過應(yīng)用程序編程接口(API)連接到服務(wù),并使用它們來開發(fā)計算機視覺應(yīng)用程序。根據(jù)應(yīng)用領(lǐng)域的不同,計算機視覺開發(fā)平臺有:純軟件應(yīng)用的平臺軟硬件結(jié)合應(yīng)用的平臺(嵌入式視覺開發(fā)平臺)純軟件應(yīng)用視覺開發(fā)平臺提供的應(yīng)用服務(wù),通常有人臉人體、文字識別、圖像識別、視頻理解、圖像生成、目標檢測等。軟硬件結(jié)合的視覺開發(fā)平臺通常面向工業(yè)制造、電子半導(dǎo)體生產(chǎn)、機器人、汽車自動駕駛、無人機、安防監(jiān)控等領(lǐng)域,提供的服務(wù)有圖像識別、圖像檢測、圖像跟蹤、視覺定位、物體測量、物體分揀等應(yīng)用。7.3.1ARM嵌入式人工智能開發(fā)平臺ARM是采用精簡指令集(RISC)的一種架構(gòu),在低功耗處理器設(shè)計,尤其是面向移動領(lǐng)域的體積較小的處理器設(shè)計方面具有顯著優(yōu)勢。根據(jù)不同類型計算,基于ARM的設(shè)計分為Cortex-A(面向高性能計算)、Cortex-R(面向?qū)崟r操作處理)、Cortex-M(面向低功耗、低成本系統(tǒng),常用于IoT)和Neoverse(面向基礎(chǔ)設(shè)施服務(wù)器,有V、N和E系列)。Cortex-ACortex-MCortex-RNeoverse7.3.1ARM嵌入式人工智能開發(fā)平臺ARM計算庫是面向Cortex-ACPU和MaliGPU架構(gòu)提供優(yōu)化的底層機器學習函數(shù)集合,其主要包含:基本運行、數(shù)學和二元運算符函數(shù)、顏色處理(轉(zhuǎn)換、通道提取等)、卷積過濾器(Sobel、Gaussian等)、Canny邊緣、金字塔(如Laplacians)、SVM(支持向量機)、卷積神經(jīng)網(wǎng)絡(luò)構(gòu)造塊(激活、卷積、全連接、局部連接、歸一化、池化、Softmax)等,集成了ARM計算庫的深度學習框架有Caffe和Mxnet。ARM計算庫的github下載鏈接為:/ARM-software/ComputeLibrary.7.3.1ARM嵌入式人工智能開發(fā)平臺QeexoAutoML是由已被TDK收購的Qeexo公司開發(fā)的一個全自動端到端機器學習平臺,用戶通過它可以利用傳感器數(shù)據(jù),為高度受限的環(huán)境快速創(chuàng)建機器學習解決方案,如物聯(lián)網(wǎng)、可穿戴設(shè)備、汽車及移動終端等領(lǐng)域的應(yīng)用。支持的算法有:GBM、XGBoost、RandomForest、LogisticRegression、CNN、RNN、ANN、LocalOutlierFactor、andIsolationForest、LogisticRegression等。在QeexoAutoML中,應(yīng)用機器學習的步驟一般包含創(chuàng)建工程、選擇傳感器或目標設(shè)備、采集或上傳數(shù)據(jù)、自動機器學習和下載部署機器學習包,如圖7-55所示,在步驟4中自動機器學習的過程分為7個小步,分別為數(shù)據(jù)預(yù)處理、提取特征、選擇模型、優(yōu)化超參數(shù)、驗證模型、模型轉(zhuǎn)換以及編譯部署模型包,這些傳統(tǒng)機器學習流程中需要大量重復(fù)工作的過程都通過QeexoAutoML實現(xiàn)了自動化學習。7.3.1ARM嵌入式人工智能開發(fā)平臺圖7-55QeexoAutoML學習過程7.3.2嵌入式GPU人工智能開發(fā)平臺GPU是graphicsprocessingunit的縮寫,中文稱為圖形處理單元或視覺處理器、圖像處理芯片,是一種專門用于在個人電腦、工作站或一些移動設(shè)備上進行圖形計算處理的微處理器。當前典型的有NVIDIAGPU、AMDGPU等,嵌入式GPU人工智能開發(fā)平臺主要應(yīng)用于設(shè)備。CUDA是NVIDIA專為圖形處理單元(GPU)上的通用計算開發(fā)的并行計算平臺和編程模型,CUDA工具包中包含多個庫(如cuRAND、nvGRAPH、cuFFT等).借助CUDA使得開發(fā)者能夠利用GPU的強大性能顯著加速計算應(yīng)用。CUDA-X是NVIDIA開發(fā)的面向人工智能和高性能計算的GPU加速庫,包含了深度學習庫、圖像視頻處理庫、并行算法刻庫、數(shù)學庫、合作伙伴庫等,深度學習庫有cuDNN、TensorRT、Riva、DeepStreamSDK、DALI,其中cuDNN是面向深度神經(jīng)網(wǎng)絡(luò)的原生GPU加速庫,支持ResNet,ResNext,EfficientNet,EfficientDet,SSD等,以及Caffe2、TensorFlow、PyTorch、PaddlePaddle、mxnet、torch等深度學習框架7.3.2嵌入式GPU人工智能開發(fā)平臺此外,NVIDIAJetPackSDK還提供了面向邊緣設(shè)備的AI開發(fā)套件,硬件有NvidiaJetsonTX、NVIDIAJetsonOrinNX16GB等,軟件套件當前最新版本有JetPack5.1。其關(guān)系和應(yīng)用如圖7-56所示。而AMD的嵌入式邊緣計算開發(fā)平臺最新的有AMDEPYCEmbedded3000和7000系列。圖7-56Jetson、CUDA-X關(guān)系及應(yīng)用7.3.3計算機視覺綜合開發(fā)平臺計算機視覺綜合開發(fā)通常根據(jù)業(yè)務(wù)模式的不同,分為基于本地的開發(fā)模式和基于云端的開發(fā)模式兩種,但在實際應(yīng)用中,考慮成本和算力資源等因素,當前多以基于云端的開發(fā)模式應(yīng)用為主。國內(nèi)比較成熟的計算機視覺綜合開發(fā)平臺有:百度EasyDL、阿里云達摩院視覺智能開放平臺、騰訊AI開放平臺、曠視科技Face??、京東NeuHubAI開放平臺等國外的有:微軟Azure計算機視覺開發(fā)平臺、Facebook的FBLearnerFlow、亞馬遜的AmazonRekognition、谷歌的MLKit等。7.3.3計算機視覺綜合開發(fā)平臺雖然上述的各類計算機視覺開發(fā)平臺提供的視覺API服務(wù)各有側(cè)重和差異。它們的相同點是:1)具有基本的視覺任務(wù)功能,如OCR文字識別、人臉識別等;2)類似的云端開發(fā)流程,包含創(chuàng)建模型→準備數(shù)據(jù)→訓練數(shù)據(jù)→部署模型應(yīng)用,即數(shù)據(jù)管理→模型構(gòu)建→模型部署與應(yīng)用這幾個不同的階段;3)提供在線API和離線SDK兩種使用模式,部署模式既可以在云端部署,也可以在本地服務(wù)器或本地設(shè)備端部署。不同點是:各個平臺集成視覺應(yīng)用開發(fā)的側(cè)重點和資源豐富性差異較大,支持邊緣設(shè)備開發(fā)的較少,當前以百度EasyDL資源和應(yīng)用案例最為豐富,且支持專業(yè)教學友好,其次為阿里云達摩院視覺智能開放平臺、騰訊AI開放平臺、曠視科技Face??等平臺。目錄
計算機視覺簡介
計算機視覺基礎(chǔ)
計算機視覺開發(fā)平臺
典型算法
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的
人臉表情識別7.17.27.37.47.5◎
LeNet算法◎MobileNets算法◎目標檢測算法典型算法7.47.4典型算法對計算機視覺算法來說,一般包含五個步驟:特征感知圖像預(yù)處理特征提取特征篩選推理預(yù)測與識別除了早期的傳統(tǒng)的主成分分析法(PCA)、拉普拉斯特征圖法、局部保值映射法(LPP)、稀疏表示法、波茲曼機、神經(jīng)網(wǎng)絡(luò)降維法、MCP模型等方法之外,在基于CPU過渡到基于GPU的深度學習技術(shù)推動的過程中,出現(xiàn)的典型算法有LeNet、LSTM、深度置信網(wǎng)絡(luò)(DeepBeliefNetwork)、MobileNet、AlexNet、ResNet等。7.4.1
LeNet算法LeNet算法是一個基于反向傳播的,用來解決手寫數(shù)字圖片識別任務(wù)的卷積神經(jīng)網(wǎng)絡(luò)(CNNs)。LeNet經(jīng)歷了5個版本演化,分別LeNet1,LeNet2,..,LeNet5。CNNs架構(gòu)采用了三個具體的思想:1)局部接受域,2)約束權(quán)重,3)空間子抽樣?;诰植拷邮苡颍矸e層中的每個單元接收來自上一層的一組相鄰單元的輸入。通過這種方式,神經(jīng)元能夠提取基本的視覺特征,如邊緣或角落。然后,這些特征被隨后的卷積層合并,以檢測更高階的特征。7.4.1
LeNet算法LeNet1算法最初的LeNet1網(wǎng)絡(luò)結(jié)構(gòu)如圖7-56所示。除了輸入和輸出之外,包含了三層,分別為卷積層、池化層、全連接層。輸入是歸一化的16*16的圖片,輸出是10個單元(每單元一個類別),其網(wǎng)絡(luò)參數(shù)如圖7-57所示圖7-56LeNet1網(wǎng)絡(luò)結(jié)構(gòu)圖7-57LeNet1網(wǎng)絡(luò)參數(shù)7.4.1
LeNet算法LeNet5算法LeNet5不包含輸入層,有7層,如圖7-59所示,卷積層用Cx表示,子采樣層用Sx表示,全連接層用Fx表示,x是層號。初始輸入是32*32圖片,總共有340908個連接,60000個訓練自由參數(shù)。
圖7-58LeNet5網(wǎng)絡(luò)結(jié)構(gòu)7.4.1
LeNet算法LeNet5算法圖7-59C3與S2中前3個圖相連的卷積結(jié)構(gòu)7.4.1
LeNet算法LeNet5算法LeNet5的損失函數(shù)用MLE(MaximumLikelihoodEstimation)進行計算,表示如下:圖7-60LeNet5識別數(shù)字4的過程
7.4.1
LeNet算法LeNet5算法層序號層名輸入大小輸出大小卷積核大小輸入通道數(shù)輸出通道數(shù)步長參數(shù)數(shù)連接數(shù)1C1(CONV)32*3228*285*51611561223042S2(POOL1)28*2814*142*26621258803C3(CONV)14*1410*105*5616115161516004S4(POOL2)10*105*55*5161623220005C5(CONV)5*51*15*516120148120481206F6120*184*1
11110164101647Output(Sigmoid)84*110*1
表7-1LeNet5網(wǎng)絡(luò)參數(shù)7.4.1
LeNet算法LeNet5算法構(gòu)建及應(yīng)用采用Keras搭建LeNet5網(wǎng)絡(luò)進行學習訓練入門CNN,使用Keras搭建LeNet5可以分為模型選擇、構(gòu)建網(wǎng)絡(luò)、編譯、網(wǎng)絡(luò)訓練、預(yù)測這幾個步驟。Keras中有Sequential模型(單輸入單輸出)和Model模型(多輸入多輸出),本節(jié)選用Sequential模型,數(shù)據(jù)集選用mnist集合。#1.導(dǎo)入數(shù)據(jù)并處理#mnist工具讀取數(shù)據(jù),輸入數(shù)據(jù)維度是(num,28,28)(x_train,y_train),(x_test,y_test)=mnist.load_data()#數(shù)據(jù)重塑為tensorflow-backend形式,訓練集為60000張圖片,測試集10000張圖片x_train=x_train.reshape(x_train.shape[0],28,28,1)x_test=x_test.reshape(x_test.shape[0],28,28,1)#把標簽轉(zhuǎn)為one-hot編碼y_train=to_categorical(y_train,num_classes=10)y_test=to_categorical(y_test,num_classes=10)
#2.構(gòu)建網(wǎng)絡(luò)#選擇順序模型model=Sequential()#padding值為valid的計算情況,見上面#給模型添加卷積層、池化層、全連接層、壓縮層,使用softmax函數(shù)分類7.4.1
LeNet算法model.add(Conv2D(input_shape=(28,28,1),filters=6,kernel_size=(5,5),padding='valid',activation='tanh'))model.add(MaxPool2D(pool_size=(2,2),strides=2))model.add(Conv2D(input_shape=(14,14,6),filters=16,kernel_size=(5,5),padding='valid',activation='tanh'))model.add(MaxPool2D(pool_size=(2,2),strides=2))model.add(Flatten())model.add(Dense(120,activation='tanh'))model.add(Dense(84,activation='tanh'))model.add(Dense(10,activation='softmax'))#顯示網(wǎng)絡(luò)主要信息model.summary()3.編譯模型#定義lossfunction、優(yōu)化器、訓練過程中計算準確率pile(loss='categorical_crossentropy',optimizer=SGD(lr=0.01),metrics=['accuracy'])4.訓練模型history=model.fit(x_train,y_train,batch_size=128,epochs=30,validation_data=(x_test,y_test))print(history.history.keys())5.預(yù)測評價score=model.evaluate(x_test,y_test,verbose=0)print('Testloss:',score[0])print('Testaccuracy:',score[1])
7.4.2
MobileNets算法
7.4.2
MobileNets算法1.MobileNetV1圖7-61標準卷積操作過濾圖7-62深度卷積過濾
圖7-66標準卷積與深度可分離卷積7.4.2
MobileNets算法2.MobileNetV2MoibleNetV1算法在深度卷積訓練過程中存在著ReLU運算在高維度(15-30)空間中捕獲保存信息的能力強(信息丟失少),而在低維度(2-3)空間中捕獲保存信息能力差(信息丟失多)的問題,換句話說,也就是深度神經(jīng)網(wǎng)絡(luò)僅有處理輸出通道中非零部分的線性分類的能力,即ReLU的非線性轉(zhuǎn)換把所有x≤0都處理為0,會導(dǎo)致信息丟失。針對此情況,MobileNetV2引入了帶有殘差的瓶頸深度可分離卷積(bottleneckdepth-separableconvolutionwithresiduals),1)如圖所示,在卷積塊中插入線性瓶頸(Linearbottleneck)層來捕獲低維度空間信息,即把最后輸出連接的非線性轉(zhuǎn)換ReLU替換為線性激活函數(shù),進行線性操作,減少信息損失。2)設(shè)計反向殘差(Invertedresiduals),如圖所示,在輸入之后先連接線性瓶頸層,接著通過逐點卷積實現(xiàn)升維,然后在高維度信息空間通過非線性轉(zhuǎn)換ReLU6提取特征,最后再通過逐點卷積進行降維。7.4.2
MobileNets算法2.MobileNetV2圖7-65帶有線性瓶頸的深度分離卷積圖7-68反向殘差模塊7.4.2
MobileNets算法2.MobileNetV2MoibleNetV2的卷積塊結(jié)構(gòu)和MoibleNetV1的卷積塊結(jié)構(gòu)對比如下圖7-69所示,區(qū)別在于。
MoibleNetV2在輸入之后有增加的1×1的逐點卷積和非線性轉(zhuǎn)換ReLU6。
MoibleNetV1中逐點卷積之后的ReLU6在MoibleNetV2中換成了線性操作。MoibleNetV2中線性瓶頸層之間有直接短連接,在步長為1時,上一個輸入和下一個輸入之間除了有卷積塊輸入之外,還有短連接輸入,但在步長為2時,則由于輸入特征圖大小和輸出特征圖大小不一致,則沒有短連接輸入。圖7-69MobileNetV1和MobileNetV2的結(jié)構(gòu)7.4.2
MobileNets算法3.MobileNetV3MobileNetV3模型根據(jù)適用資源大小的高低不同,有MobileNetV3-Large和MobileNetV3-Small兩個版本類型,它采用了模型結(jié)構(gòu)搜索的思路,其改進主要如下。1)綜合MobileNetV1深度可分離卷積、MobileNetV1的反向殘差和線性瓶頸。2)引入增加SE模塊(Squeeze-and-Excite)和平臺感知的神經(jīng)架構(gòu)搜索(platform-AwareNAS)。3)重新設(shè)計了耗時模塊MobileNetV2網(wǎng)絡(luò)端后部的最后幾層,并引入新的激活函數(shù)h-swish替換了ReLU6。MobileNetV3的SE模塊7.4.2
MobileNets算法3.MobileNetV34.MobileNetV3構(gòu)建及應(yīng)用(詳見書253頁及代碼資源包)MobileNetV2網(wǎng)絡(luò)端后部和MobileNetV3網(wǎng)絡(luò)端后部設(shè)計比較7.4.3
目標檢測算法目標檢測任務(wù)的目標是檢測出圖像中所有實例的所屬的預(yù)定義類別,并用矩形框標出實例在圖像中的初步位置,它是目標分類任務(wù)的一個延伸,即不僅對目標進行分類,還需找到目標在圖像中的位置。當前目標檢測算法的發(fā)展仍面臨著一些挑戰(zhàn)性問題,主要有:類別內(nèi)目標變化多樣,識別檢測不易,如遮擋、姿態(tài)、光照、視角、縮放、旋轉(zhuǎn)、模糊等對目標外觀的影響。類別數(shù)量可用種類過少,數(shù)據(jù)不平衡,缺乏高質(zhì)量的標注數(shù)據(jù)。模型計算效率,尤其是大模型需要大量的計算資源,受限于移動邊緣等設(shè)備。1.目標檢測算法分類傳統(tǒng)目標檢測和基于深度學習技術(shù)的目標檢測兩種,基于深度學習的目標檢測又分為兩階段目標檢測、一階段目標檢測。7.4.3
目標檢測算法1.目標檢測算法分類傳統(tǒng)目標檢測和基于深度學習技術(shù)的目標檢測兩種,基于深度學習的目標檢測又分為兩階段目標檢測、一階段目標檢測。圖7-70目標檢測方法發(fā)展歷程7.4.3
目標檢測算法1.目標檢測算法分類傳統(tǒng)的目標檢測典型算法有:VJ檢測器(ViolaJonesDetectors)、HOG檢測器、可變形組件模型DPM(DeformablePart-basedModel)等。VJ檢測器繼承了傳統(tǒng)檢測方法中的滑動窗口,通過積分圖、特征選擇和檢測級聯(lián)三種技術(shù)結(jié)合的方式,實現(xiàn)實時人臉檢測。方向梯度直方圖檢測器是尺度不變特征變換SIFT(scale-invariantfeaturetransform)算法的改進,通過設(shè)計HOG描述符,在圖像局部區(qū)域中添加特定方向梯度的方式創(chuàng)建單元塊及使用歸一化重疊塊的方式,提取特征,對行人進行監(jiān)測。DPM模型可以看作方向梯度直方圖檢測器的延伸,其包含訓練和推理,訓練過程可看做目標分解部分的學習,推理過程是對檢測的不同部分進行組合。7.4.3
目標檢測算法2.基于深度學習的目標檢測算法基于深度學習的目標檢測算法主要有:二個階段目標檢測方法單個階段目標檢測方法它們的相同點是兩類都是基于CNN結(jié)構(gòu)而發(fā)展的方法。不同點是二個階段是按照從粗到細的粒度進行階段過程檢測處理,粗粒度的階段重點在于檢測目標,提升召回能力,細粒度的階段是在粗的階段識別基礎(chǔ)上,提升改進位置檢測,而單個階段目標檢測則是溶于一個階段過程完成檢測,目標檢測器結(jié)構(gòu)簡單,速度快。二個階段目標檢測方法中典型的有R-CNN、SPP-Net、FastRCNN、FasterRCNN、FPN(FeaturePyramidNetworks)、R-FCN等,7.4.3
目標檢測算法2.基于深度學習的目標檢測算法它們內(nèi)部結(jié)構(gòu)及差異對比如圖7-71所示,從圖可以看出,一般在目標檢測器中都會包含一個用于從輸入圖像中提取特征的核心結(jié)構(gòu)組件,這些核心結(jié)構(gòu)組件常用的有AlexNet、VGG、GoogleNet/Inception、ResNets、ResNeXt、CSPNet、EfficientNet等。圖7-71二階段目標檢測方法內(nèi)部結(jié)構(gòu)差異對比7.4.3
目標檢測算法2.基于深度學習的目標檢測算法單個階段目標檢測算法有YOLO(YouOnlyLookOnce)、SSD(SingleShotMultiBoxDetector)、RetinaNet、CenterNet、EfficientDet等。它們的內(nèi)部結(jié)構(gòu)及其差異對比如圖7-72所示。與上述二個階段目標檢測將檢測問題作為分類問題不同是,單個階段目標檢測算法如YOLO是將檢測問題作為回歸問題處理,直接預(yù)測圖像像素作為目標及邊框?qū)傩?。此外,單個階段目標檢測算法中各個算法中的核心結(jié)構(gòu)組件也各不相同,如YOLO采用GoogleNet,SSD采用VGG-16等圖7-72一階段目標檢測方法內(nèi)部結(jié)構(gòu)差異對比7.4.3
目標檢測算法3.目標檢測算法數(shù)據(jù)集及評價常用于目標檢測任務(wù)的數(shù)據(jù)集有PASCALVOC2007/2012、ILSVRC2014/2017、MS-COCO2015/2017、Objects365-2019、OID-2020,它們的統(tǒng)計信息如表7-3所示表7-3典型目標檢測數(shù)據(jù)集及統(tǒng)計
目標檢測算法的性能評價指標有準確率(Precision)、召回率(Recall)、平均正確率AP(AveragePrecision)、全類平均正確率(mAP)、每個窗口的誤檢率(FPPW)、每個圖片的誤檢率(FPPI)等。目錄
計算機視覺簡介
計算機視覺基礎(chǔ)
計算機視覺開發(fā)平臺
典型算法
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的
人臉表情識別7.17.27.37.47.5綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的人臉表情識別7.47.5
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的人臉表情識別臉部表情是人類表達情感的最直接方式之一,當前對人的臉部表情所表示的情感分了6類,分別為高興(happy)、沮喪(sad)、憤怒(angry)、害怕(fear)、surprise(驚訝)、disgust(厭惡)、neural(中立)。本案例通過基于深度神經(jīng)網(wǎng)絡(luò)CNN模型實時在線識別人的臉部表情變化,判別人的情緒是屬于這6類情緒中哪一個類別,模型訓練使用的數(shù)據(jù)集為FER-2013情感數(shù)據(jù)集和IMDB數(shù)據(jù)集。本節(jié)基于深度學習框架TensorFlow和Python語言實現(xiàn)了基于深度神經(jīng)網(wǎng)絡(luò)的人臉表情識別,實現(xiàn)主要分為四個部分:模型結(jié)構(gòu)搭建、模型參數(shù)訓練、保存訓練結(jié)果模型、調(diào)用已訓練保存的模型實時在線進行人臉表情識別。其模型參數(shù)訓練架構(gòu)如圖7-73所示,主要代碼如下所示:7.5
綜合案例:基于深度神經(jīng)網(wǎng)絡(luò)的人臉表情識別主要代碼見書p265:1.定義創(chuàng)建模型網(wǎng)絡(luò)根據(jù)模型結(jié)構(gòu)初始化深度學習網(wǎng)絡(luò)算法相關(guān)參數(shù),包括卷積層、批歸一化(BatchNormalization)、激活函數(shù)(ReLU)、全局池化(GlobalAveragePooling)等2.訓練網(wǎng)絡(luò)模型訓練深度學習網(wǎng)絡(luò)算法模型,包括定義訓練參數(shù)、訓練數(shù)據(jù)生成、訓練模型等。3.運行人臉表情識別模型調(diào)用上述已訓練好保存的網(wǎng)絡(luò)模型進行人臉表情識別,包括設(shè)置參數(shù)、模型加載、獲取實時視頻流、人臉表情識別預(yù)測等信息。4.運行結(jié)果運行結(jié)果顯示,在運行人臉表情識別模型過程中,模型通過識別攝像頭獲取的實時視頻流圖像,穩(wěn)定識別、預(yù)測人臉表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 液壓與氣動技術(shù) 第2版 課件 項目一 液壓與氣動技術(shù)的認知
- 員工聘用合同范本 醫(yī)院
- 合同范本違約
- 低價出售汽修設(shè)備合同范本
- 商品定金合同范例范例
- 初中生活應(yīng)對策略
- 危廢第三方代理合同范例
- 土地賣合同范例
- 卷布訂貨合同范本
- 廚衛(wèi)合同范例
- GB/T 32399-2024信息技術(shù)云計算參考架構(gòu)
- 蘇教版二年級數(shù)學下冊單元測試題及答案全套1
- 河北張家口中國化工集團盛華化工公司“11.28”重大爆燃事故調(diào)查報告
- 《知識產(chǎn)權(quán)法教程(第八版) 》 課件 王遷 第1-9章 總論、著作權(quán)法律制度概述-專利法律制度概述
- 07SG111-1 建筑結(jié)構(gòu)加固施工圖設(shè)計表示方法
- 屋頂分布式光伏發(fā)電EPC項目 投標方案(技術(shù)方案)
- 網(wǎng)約車停運損失費起訴狀模板
- 中國急性缺血性卒中診治指南(2023)解讀
- A型肉毒素治療知情同意書 注射知情同意書
- 混凝土采購項目整體供貨方案
- 血液透析導(dǎo)管溶栓及護理
評論
0/150
提交評論