人工智能YOLO-V2-圖像識別實驗報告_第1頁
人工智能YOLO-V2-圖像識別實驗報告_第2頁
人工智能YOLO-V2-圖像識別實驗報告_第3頁
人工智能YOLO-V2-圖像識別實驗報告_第4頁
人工智能YOLO-V2-圖像識別實驗報告_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上第一章前言部分1.1課程項目背景與意義1.1.1課程項目背景視覺是各個應(yīng)用領(lǐng)域,如制造業(yè)、檢驗、文檔分析、醫(yī)療診斷,和軍事等領(lǐng)域中各種智能/自主系統(tǒng)中不可分割的一部分。由于它的重要性,一些先進(jìn)國家,例如美國把對計算機(jī)視覺的研究列為對經(jīng)濟(jì)和科學(xué)有廣泛影響的科學(xué)和工程中的重大基本問題,即所謂的重大挑戰(zhàn)。計算機(jī)視覺的挑戰(zhàn)是要為計算機(jī)和機(jī)器人開發(fā)具有與人類水平相當(dāng)?shù)囊曈X能力。機(jī)器視覺需要圖象信號,紋理和顏色建模,幾何處理和推理,以及物體建模。一個有能力的視覺系統(tǒng)應(yīng)該把所有這些處理都緊密地集成在一起。作為一門學(xué)科,計算機(jī)視覺開始于60年代初,但在計算機(jī)視覺的基本研究中的許多重要

2、進(jìn)展是在80年代取得的。計算機(jī)視覺與人類視覺密切相關(guān),對人類視覺有一個正確的認(rèn)識將對計算機(jī)視覺的研究非常有益。計算機(jī)視覺是一門研究如何使機(jī)器“看”的科學(xué),更進(jìn)一步的說,就是是指用攝影機(jī)和電腦代替人眼對目標(biāo)進(jìn)行識別、跟蹤和測量等機(jī)器視覺,并進(jìn)一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。作為一個科學(xué)學(xué)科,計算機(jī)視覺研究相關(guān)的理論和技術(shù),試圖建立能夠從圖像或者多維數(shù)據(jù)中獲取信息的人工智能系統(tǒng)。這里所 指的信息指Shannon定義的,可以用來幫助做一個“決定”的信息。因為感知可以看作是從感官信號中提 取信息,所以計算機(jī)視覺也可以看作是研究如何使人工系統(tǒng)從圖像或多維數(shù)據(jù)中“感知”

3、的科學(xué)。科學(xué)技術(shù)的發(fā)展是推動人類社會進(jìn)步的主要原因之一,未來社會進(jìn)一步地朝著科技化、信息化、智能化的方向前進(jìn)。在信息大爆炸的今天,充分利用這些信息將有助于社會的現(xiàn)代化建設(shè),這其中圖像信息是目前人們生活中最常見的信息。利用這些圖像信息的一種重要方法就是圖像目標(biāo)定位識別技術(shù)。不管是視頻監(jiān)控領(lǐng)域還是虛擬現(xiàn)實技術(shù)等都對圖像的識別有著極大的需求。一般的圖像目標(biāo)定位識別系統(tǒng)包括圖像分割、目標(biāo)關(guān)鍵特征提取、目標(biāo)類別分類三個步驟。深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究。含多隱層的多層感知器就是一種深度學(xué)習(xí)結(jié)構(gòu)。深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。深度學(xué)習(xí)的概

4、念由Hinton等人于2006年提出。基于深度置信網(wǎng)絡(luò)提出非監(jiān)督貪心逐層訓(xùn)練算法,為解決深層結(jié)構(gòu)相關(guān)的優(yōu)化難題帶來希望,隨后提出多層自動編碼器深層結(jié)構(gòu)。此外Lecun等人提出的卷積神經(jīng)網(wǎng)絡(luò)是第一個真正多層結(jié)構(gòu)學(xué)習(xí)算法,它利用空間相對關(guān)系減少參數(shù)數(shù)目以提高訓(xùn)練性能。深度學(xué)習(xí)是機(jī)器學(xué)習(xí)中的一個新的研究領(lǐng)域,通過深度學(xué)習(xí)的方法構(gòu)建深度網(wǎng)絡(luò)來抽取特征是目前目標(biāo)和行為識別中得到關(guān)注的研究方向,引起更多計算機(jī)視覺領(lǐng)域研究者對深度學(xué)習(xí)進(jìn)行探索和討論,并推動了目標(biāo)和行為識別的研究,推動了深度學(xué)習(xí)及其在目標(biāo)和行為識別中的新進(jìn)展。基于這個發(fā)展趨勢,我們小組選擇了基于回歸方法的深度學(xué)習(xí)目標(biāo)識別算法YOLO的研究。1

5、.1.2課程項目研究的意義眾所周知,當(dāng)前是信息時代,信息的獲得、加工、處理以及應(yīng)用都有了飛躍發(fā)展。人們認(rèn)識世界的重要知識來源就是圖像信息,在很多場合,圖像所傳送的信息比其他形式的信息更豐富、真切和具體。人眼與大腦的協(xié)作使得人們可以獲取、處理以及理解視覺信息,人類利用視覺感知外界環(huán)境信息的效率很高。事實上,據(jù)一些國外學(xué)者所做的統(tǒng)計,人類所獲得外界信息有80%左右是來自眼睛攝取的圖像。由此可見,視覺作為人類獲取外界信息的主要載體,計算機(jī)要實現(xiàn)智能化,就必須能夠處理圖像信息。尤其是近年來,以圖形、圖像、視頻等大容量為特征的圖像數(shù)據(jù)處理廣泛應(yīng)用于醫(yī)學(xué)、交通、工業(yè)自動化等領(lǐng)域。深度學(xué)習(xí)是機(jī)器學(xué)習(xí)中一種基

6、于對數(shù)據(jù)進(jìn)行表征學(xué)習(xí)的方法。觀測值(例如一幅圖像)可以使用多種方式來表示,如每個像素強(qiáng)度值的向量,或者更抽象地表示成一系列邊、特定形狀的區(qū)域等。而使用某些特定的表示方法更容易從實例中學(xué)習(xí)任務(wù)(例如,人臉識別或面部表情識別)。深度學(xué)習(xí)的好處是用非監(jiān)督式或半監(jiān)督式的特征學(xué)習(xí)和分層特征提取高效算法來替代手工獲取特征。深度學(xué)習(xí)是機(jī)器學(xué)習(xí)研究中的一個新的領(lǐng)域,其動機(jī)在于建立、模擬人腦進(jìn)行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模仿人腦的機(jī)制來解釋數(shù)據(jù),例如圖像,聲音和文本。目標(biāo)檢測對于人來說是再簡單不過的任務(wù),但是對于計算機(jī)來說,它看到的是一些值為0255的數(shù)組,因而很難直接得到圖像中有人或者貓這種高層語義概念,也不清楚

7、目標(biāo)出現(xiàn)在圖像中哪個區(qū)域。圖像中的目標(biāo)可能出現(xiàn)在任何位置,目標(biāo)的形態(tài)可能存在各種各樣的變化,圖像的背景千差萬別,這些因素導(dǎo)致目標(biāo)檢測并不是一個容易解決的任務(wù)。這次課程項目,正是基于視覺、深度學(xué)習(xí)、目標(biāo)識別而進(jìn)行的,是一個熱度很高的話題。基于深度學(xué)習(xí)的目標(biāo)識別研究具有重大的意義,深度學(xué)習(xí)的目標(biāo)識別算法對于未來能夠使用目標(biāo)檢測和圖像識別的手段運(yùn)用于物聯(lián)網(wǎng)、智能設(shè)備、生物制藥經(jīng)濟(jì)調(diào)控等多領(lǐng)域有很大的作用。1.2國內(nèi)外研究現(xiàn)狀機(jī)器學(xué)習(xí)是一門專門研究計算機(jī)怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)使之不斷改善自身的性能的學(xué)科。機(jī)器能否像人類一樣能具有學(xué)習(xí)能力呢?1959年

8、美國的塞繆爾(Samuel)設(shè)計了一個下棋程序,這個程序具有學(xué)習(xí)能力,它可以在不斷的對弈中改善自己的棋藝。4年后,這個程序戰(zhàn)勝了設(shè)計者本人。又過了3年,這個程序戰(zhàn)勝了美國一個保持8年之久的常勝不敗的冠軍。這個程序向人們展示了機(jī)器學(xué)習(xí)的能力,提出了許多令人深思的社會問題與哲學(xué)問題。深度學(xué)習(xí)最近幾年發(fā)展速度十分快,因此同時也推動了目標(biāo)識別技術(shù)的發(fā)展,技術(shù)的革新總是相互影響的。目標(biāo)檢測是圖像處理和計算機(jī)視覺的一個重要分支,在理論和實踐上都有重大意義。近年來,隨著物聯(lián)網(wǎng)的高速發(fā)展與智能終端的廣泛普及,目標(biāo)檢測技術(shù)成了機(jī)器視覺領(lǐng)域的研究熱點,被國內(nèi)外學(xué)者廣泛關(guān)注。目標(biāo)檢測的研究主要包括了基于視頻圖像的目

9、標(biāo)檢測和基于靜態(tài)圖片的目標(biāo)檢測。本文主要討論基于靜態(tài)圖片的目標(biāo)檢測算法,即在靜態(tài)圖片中檢測并定位所設(shè)定種類的目標(biāo)。基于靜態(tài)圖片的目標(biāo)檢測的難點主要在于圖片中的目標(biāo)會因光照、視角以及目標(biāo)內(nèi)部等變化而產(chǎn)生變化。針對以上的難點,國內(nèi)外學(xué)者進(jìn)行了很多嘗試。目前提出的方法主要分為基于形狀輪廓的目標(biāo)檢測算法和基于目標(biāo)特征的檢測方法。計算機(jī)視覺是指用計算機(jī)實現(xiàn)人的視覺功能,它的研究目標(biāo)就是使計算機(jī)具有用過一幅或多幅圖像認(rèn)知周圍環(huán)境的能力(包括對客觀世界三維環(huán)境的感知、識別與理解)。運(yùn)動目標(biāo)檢測作為計算機(jī)視覺技術(shù)的一個分支,就是對視場內(nèi)的運(yùn)動目標(biāo),如人或交通工具,進(jìn)行實時的觀測,并將其分類,然后分析他們的行為

10、。目前,國際上許多高校和研究所,如麻省理工學(xué)學(xué)院、牛津大學(xué)等都專門設(shè)立了針對運(yùn)動目標(biāo)檢測的研究組或者研究實驗室。美英等國家已經(jīng)研究了大量的相關(guān)項目。一些著名公司和研究機(jī)構(gòu),如IBM、Microsoft、麻省理工學(xué)院等近幾年來投入了大量的人力物力來進(jìn)行智能監(jiān)控系統(tǒng)的研究,部分成果已經(jīng)轉(zhuǎn)化為產(chǎn)品投入了市場。目前在國內(nèi)的研究機(jī)構(gòu)中,中國科學(xué)院北京自動化研究所下屬的模式識別國家重點實驗室視覺監(jiān)控研究處于領(lǐng)先地位。他們在交通場景視覺監(jiān)控、人的運(yùn)動視覺監(jiān)控和行為模式識別方面進(jìn)行了深入研究。另外他們也總結(jié)了英國雷丁大學(xué)VIEWS的車輛交通監(jiān)控原型系統(tǒng)的研究經(jīng)驗,在之前的理論研究的基礎(chǔ)上,自行設(shè)計并初步實現(xiàn)了

11、一個擁有完全自主知識產(chǎn)權(quán)的交通監(jiān)控原型系統(tǒng)vstart(Visual surveillance star)。國內(nèi)其他高校如上海交通大學(xué)、北京航空航天大學(xué)也對這方面進(jìn)行了研究。盡管這樣,目前在運(yùn)動目標(biāo)檢測和視覺監(jiān)控這方面仍然存在著許多不足:目前國內(nèi)市場上所見到的大部分智能監(jiān)控產(chǎn)品來源于國外,性能和可靠性不夠,并且維護(hù)和安裝問題需要外方全方位參加,給國家安全帶來了巨大的隱患。目標(biāo)之間互遮擋和人體自遮擋問題,尤其是在擁擠狀態(tài)下,多人的檢測更是難處理。1.3本論文結(jié)構(gòu)本文是基于回歸方法的深度學(xué)習(xí)目標(biāo)識別算法YOLO的研究。第一章:前言。主要介紹課程項目背景與意義、國內(nèi)外研究的現(xiàn)狀,以及本論文的結(jié)構(gòu)。第

12、二章:使用工具介紹及安裝。包括CentOS系統(tǒng)、OpenCV工具、CUDA開發(fā)環(huán)境、環(huán)境的搭建。第三章:YOLO算法簡介。包括YOLO方法特點、核心思想和實現(xiàn)方法、以及YOLO的創(chuàng)新。第四章:訓(xùn)練數(shù)據(jù)采集與制作。包括訓(xùn)練數(shù)據(jù)的采集、訓(xùn)練數(shù)據(jù)的制作。第五章:訓(xùn)練配置、訓(xùn)練及測試訓(xùn)練效果。包括具體的訓(xùn)練配置、訓(xùn)練過程和測試訓(xùn)練效果。第六章:總結(jié)。包含對本次課程項目實踐過程的感想與收獲,以及對未來的展望。第二章使用工具介紹及安裝2.1 CentOS系統(tǒng)CentOS(Community ENTerprise Operating System)是Linux發(fā)行版之一,它是來自于Red Hat Enter

13、prise Linux依照開放源代碼規(guī)定釋出的源代碼所編譯而成。由于出自同樣的源代碼,因此有些要求高度穩(wěn)定性的服務(wù)器以CentOS替代商業(yè)版的Red Hat Enterprise Linux使用。兩者的不同,在于CentOS并不包含封閉源代碼軟件。CentOS,我們有很多人叫它社區(qū)企業(yè)操作系統(tǒng),不管怎么叫它,它都是linux的一個發(fā)行版本。CentOS并不是全新的linux發(fā)行版,在RedHat家族中有企業(yè)版的產(chǎn)品,它是Red Hat Enterprise Linux,CentOS是RHEL的克隆版本,RHEL是很多企業(yè)采用的linux發(fā)行版本,需要向RedHat付費(fèi)才可以使用,并能得到付過費(fèi)

14、用的服務(wù)和技術(shù)支持和版本升級。這個CentOS可以像REHL一樣的構(gòu)筑linux系統(tǒng)環(huán)境,但不需要向RedHat付任何的費(fèi)用,同樣也得不到任何有償技術(shù)支持和升級服務(wù)。CentOS有很多特點:CentOS就是對Red Hat AS進(jìn)行改進(jìn)后發(fā)布的,各種操作、使用和RED HAT沒有區(qū)別;CentOS完全免費(fèi),不存在RED HAT AS4需要序列號的問題;CentOS獨(dú)有的yum命令支持在線升級,可以即時更新系統(tǒng),不像RED HAT那樣需要花錢購買支持服務(wù);CentOS修正了許多RED HAT AS的BUG。基于開源的特性,Linux環(huán)境被很多技術(shù)人員和公司使用。Linux以它的高效性和靈活性著稱

15、,Linux模塊化的設(shè)計結(jié)構(gòu),使得它既能在價格昂貴的工作站上運(yùn)行,也能夠在廉價的PC機(jī)上實現(xiàn)全部的Unix特性,具有多任務(wù)、多用戶的能力。我們這次的課程項目“基于深度學(xué)習(xí)的目標(biāo)識別研究”也是在Linux環(huán)境下完成的,因此本次項目實現(xiàn)使用的是CentOS 7.0系統(tǒng)。2.2 OpenCV工具OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于(開源)發(fā)行的跨平臺計算機(jī)視覺庫,可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級而且高效,由一系列 C 函數(shù)和少量 C+ 類構(gòu)成,同時提供了Python、Ruby、MAT

16、LAB等語言的接口,實現(xiàn)了圖像處理和計算機(jī)視覺方面的很多通用算法。OpenCV致力于真實世界的實時應(yīng)用,通過優(yōu)化的C代碼的編寫對其執(zhí)行速度帶來了可觀的提升,并且可以通過購買Intel的IPP高性能多媒體函數(shù)庫得到更快的處理速度。OpenCV是一個用于圖像處理、分析、機(jī)器視覺方面的開源函數(shù)庫。無論是做科學(xué)研究,還是商業(yè)應(yīng)用,OpenCV都是一個理想的工具庫。因為,對于這兩者,它完全是免費(fèi)的。該庫采用C及C+語言編寫,該庫的所有代碼都經(jīng)過優(yōu)化,計算效率很高,因為,它更專注于設(shè)計成為一種用于實時系統(tǒng)的開源庫。OpenCV采用C語言進(jìn)行優(yōu)化,而且,在多核機(jī)器上面,其運(yùn)行速度會更快。它的一個目標(biāo)是提供友

17、好的機(jī)器視覺接口函數(shù),從而使得復(fù)雜的機(jī)器視覺產(chǎn)品可以加速面世。該庫包含了橫跨工業(yè)產(chǎn)品檢測、醫(yī)學(xué)圖像處理、安防、用戶界面、攝像頭標(biāo)定、三維成像、機(jī)器視覺等領(lǐng)域的超過500個接口函數(shù)。 同時,由于計算機(jī)視覺與機(jī)器學(xué)習(xí)密不可分,該庫也包含了比較常用的一些機(jī)器學(xué)習(xí)算法。圖像識別、機(jī)器視覺在安防領(lǐng)域有所應(yīng)用。并且在航拍圖片、街道圖片中,也要依賴于機(jī)器視覺的攝像頭標(biāo)定、圖像融合等技術(shù)。近年來,在入侵檢測、特定目標(biāo)跟蹤、目標(biāo)檢測、人臉檢測、人臉識別、人臉跟蹤等領(lǐng)域,OpenCV的應(yīng)用及其廣泛,而這些,僅僅是其應(yīng)用的冰山一角。一個典型的計算機(jī)視覺算法,應(yīng)該包含以下一些步驟:(1) 數(shù)據(jù)獲取(對OpenCV來說

18、,就是圖片);(2) 預(yù)處理;(3) 特征提取;(4)特征選擇;(5)分類器設(shè)計與訓(xùn)練;(6)分類判別;而OpenCV工具對這六個部分,分別提供了API。2.3 CUDA開發(fā)環(huán)境隨著顯卡的發(fā)展,GPU越來越強(qiáng)大,而且GPU為顯示圖像做了優(yōu)化。在計算上已經(jīng)超越了通用的CPU。如此強(qiáng)大的芯片如果只是作為顯卡就太浪費(fèi)了,因此NVidia推出CUDA運(yùn)算平臺,CUDA即Compute Unified Device Architecture,是NVidia利用GPU平臺進(jìn)行通用并行計算的一種架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計算問題,它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計算引擎。開發(fā)

19、人員可以利用C語言、OpenCL、Fortran、c+等為CUDA架構(gòu)編寫程序。(1) CUDA體系架構(gòu) CUDA體系架構(gòu)由兩部分組成,分別是流處理器陣列(SPA)和存儲器系統(tǒng)。 流處理陣列(SPA)的結(jié)構(gòu)又分為兩層:TPC(線程處理器群)和SM(流多處理器)。GPU的巨大計算能力來自于SPA中的大量計算單元。 存儲器系統(tǒng)由幾個部分組成:存儲器控制器(MMC)、固定功能的光柵操作單元(ROP)以及二級紋理操作。(2) CUDA執(zhí)行模型 將CPU作為主機(jī)(Host),而GPU作為協(xié)處理器(Coprocessor)或者設(shè)備(Device),從而讓GPU來運(yùn)行一些能夠被高度線程化的程序。 在這個模型

20、中,CPU與GPU協(xié)同工作,CPU負(fù)責(zé)進(jìn)行邏輯性強(qiáng)的事務(wù)處理和串行計算,GPU則專注于執(zhí)行高度線程化的并行處理任務(wù)。 一個完整的CUDA程序是由一系列的設(shè)備端kernel函數(shù)并行步驟和主機(jī)端的串行處理步驟共同組成的。 CUDA執(zhí)行模型如下圖:Grid(網(wǎng)格)運(yùn)行在SPA上;Block(線程塊)運(yùn)行在SM上;Thread(線程)運(yùn)行在SP上。Kernel不是一個完整的程序,而只是其中的一個關(guān)鍵并行計算步驟。Kernel以一個網(wǎng)格(Grid)的形式執(zhí)行,每個網(wǎng)格由若干個線程塊(block)組成,每一個線程塊又由若干個線程(thread)組成。在 CUDA 的架構(gòu)下,一個程序分為兩個部份:Host

21、端和 Device 端。Host 端是指在 CPU 上執(zhí)行的部份,而 Device 端則是在顯示芯片(GPU)上執(zhí)行的部份。Device 端的程序又稱為 "kernel"。通常 Host 端程序會將數(shù)據(jù)準(zhǔn)備好后,復(fù)制到顯卡的內(nèi)存中,再由顯示芯片執(zhí)行 Device 端程序,完成后再由 Host 端程序?qū)⒔Y(jié)果從顯卡的內(nèi)存中取回。由于 CPU 存取顯卡內(nèi)存時只能透過 PCI Express 接口,因此速度較慢,因此不能經(jīng)常進(jìn)行這類動作,以免降低效率。 由于顯示芯片大量并行計算的特性,它處理一些問題的方式和一般 CPU 是不同的。主要的特點包括:(1)內(nèi)存存取 latency (等

22、待時間)的問題:CPU 通常使用 cache 來減少存取主內(nèi)存的次數(shù),以避免內(nèi)存 latency 影響到執(zhí)行效率。顯示芯片則多半沒有 cache(或很小),而利用并行化執(zhí)行的方式來隱藏內(nèi)存的 latency(即當(dāng)?shù)谝粋€ thread 需要等待內(nèi)存讀取結(jié)果時,則開始執(zhí)行第二個thread,依此類推)。 (2)分支指令的問題:CPU 通常利用分支預(yù)測等方式來減少分支指令造成的流水線。顯示芯片則多半使用類似處理內(nèi)存 latency 的方式。不過,通常顯示芯片處理分支的效率會比較差。 因此,最適合利用 CUDA 處理的問題,是可以大量并行化的問題,才能有效隱藏內(nèi)存的 latency,并有效利用顯示芯片

23、上的大量執(zhí)行單元。使用 CUDA 時,同時有上千個 thread 在執(zhí)行是很正常的。因此,如果不能大量并行化的問題,使用 CUDA 就沒辦法達(dá)到最好的效率了。在這個過程中,CPU擔(dān)任的工作為控制 GPU執(zhí)行,調(diào)度分配任務(wù),并能做一些簡單的計算,而大量需要并行計算的工作都交給 GPU 實現(xiàn)。另外需要注意的是,由于 CPU 存取顯存時只能通過 PCI-Express 接口,速度較慢,因此不能經(jīng)常進(jìn)行,以免降低效率。通常可以在程序開始時將數(shù)據(jù)復(fù)制進(jìn)GPU顯存,然后在 GPU內(nèi)進(jìn)行計算,直到獲得需要的數(shù)據(jù),再將其復(fù)制到系統(tǒng)內(nèi)存中。2.4 環(huán)境的搭建1、 項目源代碼下載與安裝1.使用git把項目源代碼下

24、載到本地git clone 2.進(jìn)入項目目錄,編譯cd darknetmake2、 項目目錄結(jié)構(gòu)編譯完成后,項目主要文件如下:darknet 項目目錄cfg 配置文件存放目錄data 數(shù)據(jù)存放目錄examples C語言測試用例include darknet頭文件python Python測試用例scripts 訓(xùn)練中用到的輔助腳本src 項目源代碼darknet 編譯后產(chǎn)生的darknet可執(zhí)行文件 config.php 模塊配置文件 common.php 模塊函數(shù)文件3、 測試對象識別1. 下載官方提供的訓(xùn)練好的權(quán)重數(shù)據(jù)wget 2.測試識別對象:./darknet detect cfg/

25、yolo.cfg yolo.weights data/dog.jpg在上述命令中,detect表示調(diào)用darknet的對象識別功能,cfg/yolo.cfg是配置文件,包含各層網(wǎng)絡(luò)的參數(shù)、要識別的物體種類數(shù)等,yolo.weights是上一步下載的權(quán)重數(shù)據(jù),data/dog.jpg是要進(jìn)行對象識別的照片,照片內(nèi)容如下圖:執(zhí)行命令:上圖顯示檢測過程在0.35秒內(nèi)完成,這是安裝完顯卡驅(qū)動后運(yùn)行的結(jié)果,在安裝顯卡驅(qū)動前,使用CPU進(jìn)行圖像檢測,花費(fèi)時間大約為8秒。命令執(zhí)行完成后,將會把識別結(jié)果生成到predictions.jpg,打開圖片如下圖所示:4、 訓(xùn)練環(huán)境安裝1.使用YUM安裝OpenCVs

26、udo yum install opencv2.安裝顯卡驅(qū)動及其開發(fā)工具包CUDA,安裝CUDA必須要有一個Nvidia的顯卡,本機(jī)的顯卡是GTX 860M。CUDA下載網(wǎng)址為:官方還提供了CUDA安裝過程所需的pdf文檔,仔細(xì)閱讀并按照其步驟安裝即可。此次安裝使用runfile安裝。首先檢測本機(jī)是否有Nvidia顯卡,執(zhí)行以下命令: lspci | grep -i nvidia有任何輸出說明本機(jī)有Nvidia顯卡,本機(jī)輸出結(jié)果如下:01:00.0 3D controller: NVIDIA Corporation GM107M GeForce GTX 860M (rev a2)接下來查看系統(tǒng)

27、內(nèi)核版本:uname -m && cat /etc/*release該命令會顯示系統(tǒng)架構(gòu)以及內(nèi)核版本信息,本機(jī)主要的輸出信息如下:x86_64 CentOS Linux release 7.3.1611 (Core) 確認(rèn)編譯器gcc已經(jīng)安裝,該命令會打印gcc的版本,如果提示找不到命令則說明沒有安裝gcc:gcc -version安裝Kernel-header和kernel-devel,這兩個包的版本需要和本機(jī)的內(nèi)核版本一致,安裝命令如下:sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname

28、 -r)開始安裝cuda,本次實驗使用的是runfile安裝。Nouveau是一個開源的3D驅(qū)動,安裝Nvidia驅(qū)動之前需要先將其關(guān)閉。首先要把Nouveau加入黑名單,創(chuàng)建/etc/modprobe.d/blacklist-nouveau.conf 文件并寫入以下內(nèi)容:blacklist nouveauoptions nouveau modeset=0重新生成內(nèi)核initramfs: sudo dracut -force重新啟動計算機(jī),在進(jìn)入登錄界面時,不要登錄,按下ALT+F2進(jìn)入命令提示符模式,使用root用戶登錄,然后使用 init 3 命令進(jìn)入多用戶模式開始安裝Naidia驅(qū)動。執(zhí)

29、行以下命令開始安裝CUDA:./cuda_8.0.61_375.26_linux-run安裝過程會提示是否安裝CUDA工具箱、CUDA例子等,此次試驗中選擇安裝。最后將cuda加入到環(huán)境變量中、重啟,即完成安裝。將cude加入到環(huán)境變量: export PATH=/usr/local/cuda-8.0/bin$PATH:+:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64 $LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH3.安裝完成OpenCV和CUDA后,需要修改YOLO的Makefile文件并重新編譯。打開M

30、akefile文件,將OPENCV=0改為OPENCV=1,將GPU=0改為GPU=1,并執(zhí)行make命令重新編譯。第3章 YOLO算法原理3.1 YOLO算法簡介基于深度學(xué)習(xí)方法的一個特點就是實現(xiàn)端到端的檢測。相對于其它目標(biāo)檢測與識別方法(比如Fast R-CNN)將目標(biāo)識別任務(wù)分類目標(biāo)區(qū)域預(yù)測和類別預(yù)測等多個流程,YOLO將目標(biāo)區(qū)域預(yù)測和目標(biāo)類別預(yù)測整合于單個神經(jīng)網(wǎng)絡(luò)模型中,實現(xiàn)在準(zhǔn)確率較高的情況下快速目標(biāo)檢測與識別,更加適合現(xiàn)場應(yīng)用環(huán)境。YOLO為一種新的目標(biāo)檢測方法,該方法的特點是實現(xiàn)快速檢測的同時還達(dá)到較高的準(zhǔn)確率。作者將目標(biāo)檢測任務(wù)看作目標(biāo)區(qū)域預(yù)測和類別預(yù)測的回歸問題。該方法采用單

31、個神經(jīng)網(wǎng)絡(luò)直接預(yù)測物品邊界和類別概率,實現(xiàn)端到端的物品檢測。同時,該方法檢測速非常快,基礎(chǔ)版可以達(dá)到45幀/s的實時檢測;FastYOLO可以達(dá)到155幀/s。與當(dāng)前最好系統(tǒng)相比,YOLO目標(biāo)區(qū)域定位誤差更大,但是背景預(yù)測的假陽性優(yōu)于當(dāng)前最好的方法。人類視覺系統(tǒng)快速且精準(zhǔn),只需看一眼即可識別圖像中物品及其位置。傳統(tǒng)目標(biāo)檢測系統(tǒng)采用deformable parts models (DPM)方法,通過滑動框方法提出目標(biāo)區(qū)域,然后采用分類器來實現(xiàn)識別。近期的R-CNN類方法采用region proposal methods,首先生成潛在的bounding boxes,然后采用分類器識別這些bound

32、ing boxes區(qū)域。最后通過post-processing來去除重復(fù)bounding boxes來進(jìn)行優(yōu)化。這類方法流程復(fù)雜,存在速度慢和訓(xùn)練困難的問題。而YOLO方法將目標(biāo)檢測問題轉(zhuǎn)換為直接從圖像中提取bounding boxes和類別概率的單個回歸問題,只需一眼即可檢測目標(biāo)類別和位置。3.2 YOLO方法特點 YOLO采用單個卷積神經(jīng)網(wǎng)絡(luò)來預(yù)測多個bounding boxes和類別概率,如圖所示:本方法相對于傳統(tǒng)方法有如下優(yōu)點:(1) 速度非常快。YOLO預(yù)測流程簡單,速度很快。基礎(chǔ)版在Titan X GPU上可以達(dá)到45幀/s;快速版可以達(dá)到150幀/s。因此,YOLO可以實現(xiàn)實時檢

33、測。(2) YOLO采用全圖信息來進(jìn)行預(yù)測。與滑動窗口方法和region proposal-based方法不同,YOLO在訓(xùn)練和預(yù)測過程中可以利用全圖信息。Fast R-CNN檢測方法會錯誤的將背景中的斑塊檢測為目標(biāo),原因在于Fast R-CNN在檢測中無法看到全局圖像。相對于Fast R-CNN,YOLO背景預(yù)測錯誤率低一半。(3) YOLO可以學(xué)習(xí)到目標(biāo)的概括信息,具有一定普適性。采用自然圖片訓(xùn)練YOLO,采用藝術(shù)圖像來預(yù)測。YOLO比其它目標(biāo)檢測方法(DPM和R-CNN)準(zhǔn)確率高很多。本方法有如下缺點:(1) YOLO對相互靠的很近的物體,還有很小的群體 檢測效果不好,這是因為一個網(wǎng)格中

34、只預(yù)測了兩個框,并且只屬于一類。(2) 對測試圖像中,同一類物體出現(xiàn)的新的不常見的長寬比和其他情況是。泛化能力偏弱。(3) 由于損失函數(shù)的問題,定位誤差是影響檢測效果的主要原因。尤其是大小物體的處理上,還有待加強(qiáng)。3.3 YOLO的核心思想和實現(xiàn)方法1. YOLO的核心思想 YOLO的核心思想就是利用整張圖作為網(wǎng)絡(luò)的輸入,直接在輸出層回歸bounding box的位置和bounding box所屬的類別。2. YOLO的實現(xiàn)方法YOLO的實現(xiàn)過程圖解和方法如下:(1) 將一幅圖像分成SxS個網(wǎng)格(grid cell),如果某個目標(biāo)的中心落在這個網(wǎng)格中,則這個網(wǎng)格就負(fù)責(zé)預(yù)測這個目標(biāo)。(2) 每個

35、網(wǎng)格要預(yù)測B個bounding box,每個bounding box除了要回歸自身的位置之外,還要附帶預(yù)測一個confidence值,這個confidence代表了所預(yù)測的box中含有目標(biāo)的置信度和這個box預(yù)測的有多準(zhǔn)兩重信息,其值是這樣計算的: (其中如果有目標(biāo)落在一個grid cell里,第一項取1,否則取0。 第二項是預(yù)測的bounding box和實際的groundtruth之間的IOU值)。(3) 每個bounding box要預(yù)測(x, y, w, h)和confidence共5個值,每個網(wǎng)格還要預(yù)測一個類別信息,記為C類。則SxS個網(wǎng)格,每個網(wǎng)格要預(yù)測B個bounding bo

36、x,還要預(yù)測C個categories。輸出就是S x S x (5*B+C)的一個tensor。(注意:class信息是針對每個網(wǎng)格的,confidence信息是針對每個bounding box的)。舉例說明: 在PASCAL VOC中,圖像輸入為448x448,取S=7,B=2,一共有20個類別(C=20)。則輸出就是7x7x30的一個tensor。 整個網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示: (4) 在測試的時候,每個網(wǎng)格預(yù)測的class信息和bounding box預(yù)測的confidence信息相乘,就得到每個bounding box的class-specific confidence score: 等式

37、左邊第一項就是每個網(wǎng)格預(yù)測的類別信息,第二三項就是每個bounding box預(yù)測的confidence。這個乘積即encode了預(yù)測的box屬于某一類的概率,也有該box準(zhǔn)確度的信息。(5) 得到每個box的class-specific confidence score以后,設(shè)置閾值,濾掉得分低的boxes,對保留的boxes進(jìn)行NMS處理,就得到最終的檢測結(jié)果。3.4 YOLO的實現(xiàn)細(xì)節(jié) 1. 預(yù)訓(xùn)練:使用imageNet預(yù)訓(xùn)練,網(wǎng)絡(luò)結(jié)構(gòu)是前20層網(wǎng)絡(luò)加上一個平均池化層和一個全連接層。2. 預(yù)測:由于預(yù)測需要更加精細(xì)的像素,所以把輸入擴(kuò)展成448*448,并且增加了四個卷積層和兩個全連接層

38、。在最后一層預(yù)測中,需要預(yù)測概率和bounding box,這里把bounding box的預(yù)測歸一化成0到1。3. 激活函數(shù):最后一層的激活函數(shù)使用線性激活函數(shù),而其他層使用leaky ReLU的激活函數(shù):4. 誤差傳播:誤差的計算采用簡單的平方和誤差函數(shù)。但是,從網(wǎng)絡(luò)結(jié)構(gòu)可以知道,預(yù)測概率的維數(shù)比預(yù)測bounding box的維數(shù)要高,而且,在圖片中大多的格子是沒有物體的,這會使得它們的confidence趨于0。它們的貢獻(xiàn)過大,會使得網(wǎng)絡(luò)無法收斂。我們采用的一個辦法就是加權(quán),賦予不同的權(quán)值,對于預(yù)測bounding box的,而對于沒有目標(biāo)物體的格子的誤差賦予權(quán)值。同時,對于大的box的

39、小誤差肯定要比小box的小誤差影響更小,于是,采用對w,h,x,y取平方根的做法,因為平方根函數(shù)的圖像隨著x的增大會變得平緩。此外,一個網(wǎng)格可能會預(yù)測多個box,希望每個box負(fù)責(zé)專門的目標(biāo)物體的預(yù)測。方法是,對于一個物體的truth box,看哪個bounding box的IOU更大,就讓它負(fù)責(zé)這個box。公式為:其中對應(yīng)格子i如果有物體,那相應(yīng)的bounding box j負(fù)責(zé)這個物體的預(yù)測。表示格子i中是否有物體。5. 訓(xùn)練方法:使用隨機(jī)梯度下降法,以及dropout的方法。3.4 YOLO的創(chuàng)新YOLO將物體檢測作為回歸問題求解。基于一個單獨(dú)的端到端網(wǎng)絡(luò),完成從原始圖像的輸入到物體位置

40、和類別的輸出。從網(wǎng)絡(luò)設(shè)計上,YOLO與RCNN、Fast RCNN及Faster RCNN的區(qū)別如下:(1) YOLO訓(xùn)練和檢測均是在一個單獨(dú)網(wǎng)絡(luò)中進(jìn)行。YOLO沒有顯示地求取region proposal的過程。而RCNN/Fast RCNN采用分離的模塊(獨(dú)立于網(wǎng)絡(luò)之外的selective search方法)求取候選框(可能會包含物體的矩形區(qū)域),訓(xùn)練過程因此也是分成多個模塊進(jìn)行。Faster RCNN使用RPN(region proposal network)卷積網(wǎng)絡(luò)替代RCNN/Fast RNN的selective search模塊,將RPN集成到Fast RCNN檢測網(wǎng)絡(luò)中,得到一個

41、統(tǒng)一的檢測網(wǎng)絡(luò)。盡管RPN與Fast RCNN共享卷積層,但是在模型訓(xùn)練過程中,需要反復(fù)訓(xùn)練RPN網(wǎng)絡(luò)和Fast RCNN網(wǎng)絡(luò)。(2) YOLO將物體檢測作為一個回歸問題進(jìn)行求解,輸入圖像經(jīng)過一次inference,便能得到圖像中所有物體的位置和其所屬類別及相應(yīng)的置信概率。而RCNN/Fast RCNN/Faster RCNNA將檢測結(jié)果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(回歸問題)。第4章 訓(xùn)練數(shù)據(jù)采集與制作4.1訓(xùn)練數(shù)據(jù)的采集準(zhǔn)備需要訓(xùn)練的圖片:本次實驗訓(xùn)練的是水果的識別,種類一共5種,分別是WaterMelon、StrawBerry、Orange、P

42、ineapple、Apple,每種水果圖片約30-40張,總共有171張圖片。圖片全部從百度圖片中下載,圖片分辨率一般在400*300像素左右。 將圖片按照按照5位數(shù)字從00000遞增開始命名,并將其全部放到一個文件夾中。4.2 訓(xùn)練數(shù)據(jù)的制作1. 下載并編譯安裝LabelImg,使用這個軟件給171張水果圖片標(biāo)記對象位置和名稱。2. 標(biāo)記完成后,LabelImg將會生成一個記錄了對象名稱和位置的xml文件,每張圖片對應(yīng)一個xml文件,xml文件內(nèi)容如下。3.按照VOC數(shù)據(jù)集的格式創(chuàng)建一下文件夾結(jié)構(gòu)。darknet 項目目錄cfg 配置文件存放目錄.src 項目源代碼VOCdevkit VOC

43、數(shù)據(jù)集目錄 VOC2017 數(shù)據(jù)標(biāo)記年份 Annitations 存放xml標(biāo)記文件 00000.xml xml標(biāo)記文件 00001.xml xml標(biāo)記文件 . 00171.xml xml標(biāo)記文件 ImageSets 圖片相關(guān)信息 Main文件位置信息 train.txt保存了全部圖片位置的文件 JPEGImages 需要訓(xùn)練的圖片 00000.jpg 水果圖片 00001.jpg 水果圖片 . 00171.jpg 水果圖片 labels labels文件 00000.txt labels文件 00001.txt labels文件 . 00170.txt labels文件4.YOLO不能識別x

44、ml文件,需要將其轉(zhuǎn)化成其識別的格式。使用項目自帶的voc_label.py腳本可以將xml格式轉(zhuǎn)換成YOLO所需的label文件。打開voc_label.py,修改數(shù)據(jù)集年份,要識別的對象種類名稱,以及xml文件存放位置等信息。文件內(nèi)容如下圖所示。該腳本同時會生成上面目錄結(jié)構(gòu)中的train.txt文件。修改完成后運(yùn)行,將會生成上面目錄結(jié)構(gòu)所示的labels文件。生成label文件后,打開其中一個,內(nèi)容如下所示。其中第一項“0”代表的是水果的編號,“0”代表草莓,“1”代表西瓜等,后面4項分別是標(biāo)記的對象在圖片中的位置的比例。第5章 訓(xùn)練配置、訓(xùn)練及測試訓(xùn)練效果5.1訓(xùn)練配置第四章是準(zhǔn)備訓(xùn)練數(shù)

45、據(jù)的全部過程,接下來要修改配置文件。創(chuàng)建cfg/s文件,該文件包含了5種水果的名稱,每行一個。順序需與前面python腳本中配置的一致,文件內(nèi)容如下。strawberrywatermelonappleorangepineapple創(chuàng)建cfg/myd.data,該文件包含了要識別的對象的種類個數(shù)、train.txt文件位置,上述s文件位置,以及生成的訓(xùn)練權(quán)重文件位置。該文件內(nèi)容如下:classes = 5train = /home/myd/new/darknet/VOCdevkit/VOC2017/ImageSets/Main/train.txtnames = /

46、home/myd/new/darknet/cfg/sbackup = backup_myd復(fù)制一份cfg/yolo.cfg文件,命名為yolo-myd.cfg,并編輯這個文件,主要修改文件末尾region層中classes為5.即要識別的水果種類個數(shù),修改region層上一層convolution層,把其中的filters值修改成50,根據(jù)網(wǎng)上教程,計算公式為(classes+ coords+ 1)* (NUM), 此次試驗中具體數(shù)據(jù)為 (5+4+1)*5=50。5.2訓(xùn)練過程執(zhí)行以下命令開始訓(xùn)練:./darknet detector train ./cfg/myd.data

47、cfg/yolo-myd.cfg 執(zhí)行命令后的輸出如下:mydlocalhost darknet$ ./darknet detector train ./cfg/myd.data ./cfg/yolo-myd.cfg yolo-mydlayer     filters    size              input        &

48、#160;       output    0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32    1 max          2 x 2 / 2   416 x 416 x  32   ->   208

49、 x 208 x  32    2 conv     64  3 x 3 / 1   208 x 208 x  32   ->   208 x 208 x  64    3 max          2 x 2 / 2   208 x 208 x  64   ->   104 x 104 x  64  &#

50、160; 4 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128    5 conv     64  1 x 1 / 1   104 x 104 x 128   ->   104 x 104 x  64    6 conv    128  3 x 3 / 1   104 x 104

51、 x  64   ->   104 x 104 x 128    7 max          2 x 2 / 2   104 x 104 x 128   ->    52 x  52 x 128    8 conv    256  3 x 3 / 1    52 x  52 x 128   -> 

52、  52 x  52 x 256    9 conv    128  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 128   10 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256 

53、0; 11 max          2 x 2 / 2    52 x  52 x 256   ->    26 x  26 x 256   12 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512   13 conv&

54、#160;   256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256   14 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512   15 conv    256  1 x 1 / 1

55、0;   26 x  26 x 512   ->    26 x  26 x 256   16 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512   17 max          2 x 2 / 2    2

56、6 x  26 x 512   ->    13 x  13 x 512   18 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024   19 conv    512  1 x 1 / 1    13 x  13 x1024   ->  

57、60; 13 x  13 x 512   20 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024   21 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512   22 co

58、nv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024   23 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024   24 conv   1024  3 x 3 / 1    13

59、 x  13 x1024   ->    13 x  13 x1024   25 route  16   26 conv     64  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x  64   27 reorg       &#

60、160;      / 2    26 x  26 x  64   ->    13 x  13 x 256   28 route  27 24   29 conv   1024  3 x 3 / 1    13 x  13 x1280   ->    13 x  13 x1024   30 conv

61、60;    50  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x  50   31 detectionLearning Rate: 0.01, Momentum: 0.9, Decay: 0.0005Resizing.訓(xùn)練過程中會打印訓(xùn)練進(jìn)度的信息,如下所示:Loaded: 0. secondsRegion Avg IOU: 0., Class: 0., Obj: 0., No Obj: 0., Av

62、g Recall: 0.,  count: 2Region Avg IOU: 0., Class: 0., Obj: 0., No Obj: 0., Avg Recall: 0.,  count: 11: 186., 186. avg, 0. rate, 0. seconds, 2 imagesLoaded: 0. secondsRegion Avg IOU: 0., Class: 0., Obj: 0., No Obj: 0., Avg Recall: 0.,  count: 5Region Avg IOU: 0., Cl

63、ass: 0., Obj: 0., No Obj: 0., Avg Recall: 0.,  count: 12: 216., 189. avg, 0. rate, 0. seconds, 4 imagesLoaded: 0. secondsRegion Avg IOU: 0., Class: 0., Obj: 0., No Obj: 0., Avg Recall: 0.,  count: 2Region Avg IOU: 0., Class: 0., Obj: 0., No Obj: 0., Avg Recall: 0.,  count: 13: 279., 198.

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論