實時操作系統(tǒng)應(yīng)用技術(shù) 課件 第6、7章 RTOS下程序設(shè)計方法、嵌入式人工智能:EORS_第1頁
實時操作系統(tǒng)應(yīng)用技術(shù) 課件 第6、7章 RTOS下程序設(shè)計方法、嵌入式人工智能:EORS_第2頁
實時操作系統(tǒng)應(yīng)用技術(shù) 課件 第6、7章 RTOS下程序設(shè)計方法、嵌入式人工智能:EORS_第3頁
實時操作系統(tǒng)應(yīng)用技術(shù) 課件 第6、7章 RTOS下程序設(shè)計方法、嵌入式人工智能:EORS_第4頁
實時操作系統(tǒng)應(yīng)用技術(shù) 課件 第6、7章 RTOS下程序設(shè)計方法、嵌入式人工智能:EORS_第5頁
已閱讀5頁,還剩78頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

RTOS本章導(dǎo)引:本章討論RTOS下程序設(shè)計下的若干問題,包括穩(wěn)定性問題,中斷服務(wù)程序(ISR)設(shè)計問題,線程劃分與優(yōu)先級安排問題,并發(fā)與資源共享問題,以及優(yōu)先級反轉(zhuǎn)問題等,并針對各問題討論了相應(yīng)的解決方案。第6章RTOS下程序設(shè)計方法6.1程序穩(wěn)定性問題RTOS第6章RTOS下程序設(shè)計方法6.2ISR設(shè)計、線程劃分及優(yōu)先級安排問題6.3利用信號量解決并發(fā)與資源共享的問題6.4優(yōu)先級反轉(zhuǎn)問題6.5本章小結(jié)第1頁共31頁RTOS6.1.1穩(wěn)定性的基本要求程序穩(wěn)定性問題是程序設(shè)計的核心問題,但實驗室中的嵌入式產(chǎn)品在經(jīng)過調(diào)試、測試、安裝,并最終投放到實際應(yīng)用中后,由于受到干擾往往還會出現(xiàn)很多故障和不穩(wěn)定的現(xiàn)象。穩(wěn)定性的基本要求有:保證CPU運行的穩(wěn)定、保證通信的穩(wěn)定、保證物理信號輸入的穩(wěn)定、保證物理信號輸出的穩(wěn)定等。6.1程序穩(wěn)定性問題第2頁共31頁RTOS看門狗定時器(WDOG)實際上是一個自動計數(shù)器,其通過是否能在適當(dāng)?shù)臅r間點將計數(shù)置零來判斷程序是否正常工作。在程序異常時,強制將系統(tǒng)復(fù)位。看門狗的應(yīng)用是為了保證系統(tǒng)運行的穩(wěn)定,但對于程序開發(fā)階段,看門狗的啟用可能會干擾對BUG的定位。6.1.2看門狗與定期復(fù)位的應(yīng)用注:WDOG實例演示(..\03-Software\CH06-Design-method\Wdog)第3頁共31頁RTOS在終端芯片中,有時會出現(xiàn)主程序正常執(zhí)行只有一個或少許功能運行異常的情況,這時由于喂狗操作仍然定期進(jìn)行,程序并不會為排除異常主動實現(xiàn)復(fù)位重啟。定期復(fù)位方法就是每隔指定時間主動進(jìn)行一次終端程序復(fù)位重啟操作。對于實時性要求不那么高的系統(tǒng)來說,主動重啟不會對整個系統(tǒng)的功能造成破壞,而且可以避免出現(xiàn)看門狗無法監(jiān)控的程序異常,保證系統(tǒng)功能正常運行。芯片重啟的方法:軟件復(fù)位函數(shù)、重新上電、拉低復(fù)位引腳等。第4頁共31頁RTOS6.1.3臨界區(qū)的處理臨界資源主要分硬件和軟件兩種,硬件如打印機、串行通信接口等,軟件如消息緩沖隊列、變量等,訪問臨界資源的代碼稱為臨界區(qū)(CriticalSection)。臨界區(qū)也稱為代碼臨界段,指處理時不可分割的代碼。為確保臨界段代碼的正常執(zhí)行,在NOS下,在進(jìn)入臨界段之前要關(guān)中斷,且臨界段代碼執(zhí)行完后應(yīng)立即開中斷;而在RTOS下,通常利用信號量或互斥量來保證進(jìn)程對臨界資源的互斥訪問。第5頁共31頁RTOS6.2ISR設(shè)計、線程劃分及優(yōu)先級安排問題(重點)中斷服務(wù)程序ISR程序設(shè)計的基本要求是:短、小、精、悍。RTOS使用ISR來處理硬件中斷和異常。用戶ISR并不是一個線程,而是一個能快速響應(yīng)硬件中斷和異常的高速短例程。不同操作系統(tǒng)針對ISR跟線程之間的優(yōu)先關(guān)系問題會采用不同的處理方式。如在MQX中線程能屏蔽優(yōu)先級比它低兩級的硬件中斷;而在RT-Thread中線程優(yōu)先級與中斷優(yōu)先級不作關(guān)聯(lián)。6.2.1ISR設(shè)計的基本問題第6頁共31頁RTOS6.2.2線程劃分的基本原則對于線程的劃分標(biāo)準(zhǔn)有多種,沒有哪一種標(biāo)準(zhǔn)是最好的,只能選取最適合操作系統(tǒng)的一種,下面給出線程劃分的幾個簡明原則。第一,功能集中原則。第二,時間緊迫原則。第三,周期執(zhí)行原則。第7頁共31頁RTOS6.2.3線程優(yōu)先級安排問題大多數(shù)RTOS操作系統(tǒng)均支持優(yōu)先級的搶占,當(dāng)某個高優(yōu)先級的線程處于就緒狀態(tài)時,就可以馬上獲得CPU資源得以運行,所以線程優(yōu)先級的安排非常重要。具體來說,線程優(yōu)先級的安排要點可以總結(jié)如下幾點:第一,初始自啟動線程優(yōu)先級最高。第二,緊迫性線程優(yōu)先級安排。第三,同優(yōu)先級線程的安排。第四,有執(zhí)行順序要求的安排。第五,低優(yōu)先級的安排。第8頁共31頁RTOS6.3利用信號量解決并發(fā)與資源共享的問題6.3.1并發(fā)與資源共享的問題1.銀行取錢問題銀行取錢可以分為以下四個步驟:第一,用戶輸入賬戶密碼,系統(tǒng)判斷賬戶密碼是否匹配;第二,用戶輸入取款金額;第三,系統(tǒng)判斷賬戶余額是否大于取款金額;第四,如果賬戶余額大于取款金額,則取錢成功,如果余額小于取款金額,則取款失敗。第9頁共31頁RTOS2.并發(fā)的問題現(xiàn)代操作系統(tǒng)是一個并發(fā)的系統(tǒng),并發(fā)性是它的重要特征,操作系統(tǒng)的并發(fā)性指它具有處理和調(diào)度多個程序同時執(zhí)行的能力。例如:多個I/O設(shè)備同時在輸入輸出;內(nèi)存中同時有多個系統(tǒng)和用戶程序被啟動交替、穿插地執(zhí)行等。并發(fā)性雖然能有效改善系統(tǒng)資源的利用率,但也會引發(fā)一系列的問題,例如上述銀行取錢的問題,由于A和B兩個線程并發(fā)的執(zhí)行,若不加“約束”,就會對結(jié)果造成很大的影響。第10頁共31頁RTOS3.共享緩沖區(qū)的問題緩沖區(qū)(buffer)是內(nèi)存空間中用來緩沖輸入或輸出數(shù)據(jù)的部分。緩沖區(qū)的引入解決了高速設(shè)備與低速設(shè)備之間處理速度不匹配的問題。共享緩沖區(qū)有效的解決了高速與低速設(shè)備之間速度不匹配的問題,但也帶來了數(shù)據(jù)安全性等一些問題,例如同時讀寫文件的情況,由于文件是多個線程所共享的,若同時對文件進(jìn)行讀寫,會出現(xiàn)數(shù)據(jù)讀寫不全或數(shù)據(jù)缺失等問題。對于上述的問題,利用信號量中的生產(chǎn)者-消費者模型,就可以很好的解決。第11頁共31頁RTOS6.3.2

應(yīng)用實例(重點)1.模型的描述生產(chǎn)者-消費者的模型便是信號量的經(jīng)典用法之一,該模型能很好的解決多線程并發(fā)以及共享緩沖區(qū)引發(fā)的一系列的問題。1)建立一個生產(chǎn)者線程,N個消費者線程(N>1);2)生產(chǎn)者和消費者共用一個緩沖區(qū),只能互斥訪問緩沖區(qū),并且緩沖區(qū)最多只能存放Max個資源。3)生產(chǎn)者線程向緩沖區(qū)中寫入1個資源,當(dāng)存儲空間滿時,生產(chǎn)者不能向緩沖區(qū)寫入資源,生產(chǎn)者線程阻塞。4)消費者線程從緩沖區(qū)獲取1個資源,當(dāng)緩沖區(qū)中為空時,消費者不能從緩沖中獲取資源,消費者線程阻塞。注:生產(chǎn)者消費者模型實例演示(..\03-Software\CH06-Design-method\Semaphore)第12頁共31頁RTOS2.編程過程-生產(chǎn)者線程生產(chǎn)者線程在進(jìn)入緩沖區(qū)之前,先等待空閑空間的信號量(即g_SPFree信號量),保證緩沖區(qū)中有空閑空間存放資源。若有該信號量,再等待緩沖區(qū)互斥量(即g_Mutex),以保證某一時刻最多只能有一個線程進(jìn)入緩沖區(qū)。當(dāng)上述的條件都滿足時,生產(chǎn)者進(jìn)入緩沖區(qū),將一個自定義的結(jié)構(gòu)體數(shù)據(jù)放入隊列中。生產(chǎn)者線程完成此線程以后,先釋放緩沖區(qū)資源數(shù)的信號量(即g_SPSource信號量),以便“告知”消費者線程此時緩沖區(qū)有可供使用的資源,再釋放緩沖區(qū)互斥量,能夠讓別的進(jìn)程進(jìn)入緩沖區(qū)。第13頁共31頁RTOS2.編程過程-消費者線程消費者線程在進(jìn)入緩沖區(qū)之前,首先等待緩沖區(qū)資源數(shù)的信號量(即g_SPSource信號量),保證緩沖區(qū)中有可供使用的資源。若有該信號量,再等待緩沖區(qū)互斥量(即g_Mutex信號量),保證某一時刻最多只能有一個線程使用緩沖區(qū)。當(dāng)上述的條件都滿足時,消費者可進(jìn)入緩沖區(qū),從隊列中的一個數(shù)據(jù)出隊。消費者線程完成線程以后,先釋放空閑空間的信號量(即g_SPFree信號量),以便“告知”生產(chǎn)者線程此時緩沖區(qū)中有空閑空間存放資源,再釋放緩沖區(qū)的信號量,能夠讓別的進(jìn)程進(jìn)入緩沖區(qū)。注:生產(chǎn)者消費者模型實例演示(..\03-Software\CH06-Design-method\Semaphore)第14頁共31頁RTOS3.程序執(zhí)行流程分析與運行結(jié)果每當(dāng)生產(chǎn)者線程想要生產(chǎn)一個資源時,會經(jīng)過以下流程:申請一個空閑空間信號量→申請進(jìn)入緩沖區(qū)→進(jìn)入緩沖區(qū)→生產(chǎn)一個資源(數(shù)據(jù)進(jìn)隊列)→釋放一個緩沖區(qū)資源的信號量→離開緩沖區(qū)(釋放緩沖區(qū)資源)。每當(dāng)消費者線程想要消費一個資源時,會經(jīng)過以下流程:申請一個緩沖區(qū)資源的信號量→申請進(jìn)入緩沖區(qū)→進(jìn)入緩沖區(qū)→消耗一個資源(數(shù)據(jù)出隊列)→釋放一個空閑空間信號量→離開緩沖區(qū)(釋放緩沖區(qū)資源)。注:生產(chǎn)者消費者模型實例演示(..\03-Software\CH06-Design-method\Semaphore)第15頁共31頁RTOS注:生產(chǎn)者消費者模型實例演示(..\03-Software\CH06-Design-method\Semaphore)第16頁共31頁程序開始運行后,通過串口輸出某一個線程(可能是消費者線程或者生產(chǎn)者線程)在某一時刻的運行情況,結(jié)果如圖所示。RTOS優(yōu)先級反轉(zhuǎn)問題是一個在操作系統(tǒng)下編程可能出現(xiàn)的錯誤,若運用不當(dāng)可能引起嚴(yán)重問題,本節(jié)首先給出出現(xiàn)優(yōu)先級反轉(zhuǎn)問題出現(xiàn)歷史實例,再給出優(yōu)先級反轉(zhuǎn)問題的一般描述,并利用程序進(jìn)行演示,以直觀地描述出現(xiàn)優(yōu)先級反轉(zhuǎn)的場景;隨后給出使用RT-Thread互斥量避免優(yōu)先級反轉(zhuǎn)問題的編程方法,第10章將對互斥量原理進(jìn)行剖析。6.4優(yōu)先級反轉(zhuǎn)問題(難點)第17頁共31頁RTOS1.優(yōu)先級反轉(zhuǎn)問題實例——火星探路者問題“火星探路者”于1997年07月04日在火星表面著陸。在開始的幾天內(nèi)工作穩(wěn)定,并傳回大量數(shù)據(jù),但是幾天后,“探路者”開始出現(xiàn)系統(tǒng)復(fù)位、數(shù)據(jù)丟失的現(xiàn)象。經(jīng)過研究發(fā)現(xiàn)是發(fā)生了優(yōu)先級反轉(zhuǎn)問題。其中有如下兩個線程需要互斥訪問共享資源“信息總線”:6.4.1優(yōu)先級反轉(zhuǎn)問題的出現(xiàn)第18頁共31頁RTOST1:總線管理線程,高優(yōu)先級(這里用T1表示),負(fù)責(zé)在總線上放入或者取出各種數(shù)據(jù),頻繁進(jìn)行總線數(shù)據(jù)I/O,它被設(shè)計為最重要的線程,并且要保證能夠每隔一定的時間就可以操作總線。對總線的異步訪問是通過互斥信號量來保證的。T6:數(shù)據(jù)收集線程,優(yōu)先級低(這里用T6表示),它運行頻度不高,只向總線寫數(shù)據(jù),并通過互斥信號量將數(shù)據(jù)發(fā)布到“信息總線”。如果數(shù)據(jù)收集線程T6持有信號量期間,總線管理線程T1就緒,并且也申請獲取信號量,則總線管理線程T1阻塞,直到數(shù)據(jù)收集線程T6釋放信號量。第19頁共31頁RTOS這樣看起來會工作很好,當(dāng)數(shù)據(jù)收集線程很快完成后,高優(yōu)先級的總線管理線程會很快得到運行。但是,另有一個需要較長時間運行的通信線程(這里用T3表示),其優(yōu)先級比T6高,比T1低,在很少情況下,如果通信線程被中斷程序激活,并且剛好在總線管理線程(T1)等待數(shù)據(jù)收集線程(T6)完成期間就緒,這樣T3將被系統(tǒng)調(diào)度,從而比它低優(yōu)先級的數(shù)據(jù)收集線程T6得不到運行,因而使最高優(yōu)先級的總線管理線程(T1)也無法運行,一直被阻塞在那里。在經(jīng)歷一定的時間后,看門狗觀測到“總線”沒有活動,將其解釋為嚴(yán)重錯誤,并使系統(tǒng)復(fù)位。第20頁共31頁RTOS2.優(yōu)先級反轉(zhuǎn)問題的一般性描述可從一般意義上描述優(yōu)先級反轉(zhuǎn)問題。當(dāng)線程以獨占方式使用共享資源時,可能出現(xiàn)低優(yōu)先級線程先于高優(yōu)先級線程被運行的現(xiàn)象,這就是線程優(yōu)先級反轉(zhuǎn)問題,可進(jìn)行如下一般性描述。假設(shè)有三個線程Ta、Tb、Tc,其優(yōu)先級分別記為Pa、Pb、Pc,且有Pa>Pb>Pc,Ta和Tc需要使用一個共享資源S,Tb并不使用S。注:優(yōu)先級反轉(zhuǎn)問題實例演示(..\03-Software\CH06-Design-method\PrioReverseProblem)第21頁共31頁RTOS又假設(shè)用互斥型信號量x(x=0,1)標(biāo)識對S的獨占訪問,初始時x=1。表6-1給出了一個運行時序。設(shè)t0時刻,Tc開始運行并獲取信號量(即x由1變?yōu)?)使用S。t1時刻,Ta被調(diào)度運行(因為Pa>Pc,可以搶占Tc)。運行到t2時刻,Ta訪問S,但由于Tc未釋放S(即x=0,只有Tc釋放S,使得x=1,Ta才能使用S),所以Ta變?yōu)樽枞麘B(tài)。直到x=1時,Ta才能變回就緒態(tài),被重新調(diào)度運行。若t3時刻,Tb搶占Tc獲得運行,這樣就出現(xiàn)了Tb雖然優(yōu)先級比Ta低,但比Ta先運行的不合理情況,這就是優(yōu)先級反轉(zhuǎn)問題。注:優(yōu)先級反轉(zhuǎn)問題實例演示(..\03-Software\CH06-Design-method\PrioReverseProblem)第22頁共31頁RTOS第23頁共31頁RTOS注:優(yōu)先級反轉(zhuǎn)問題實例演示(..\03-Software\CH06-Design-method\PrioReverseProblem)第24頁共31頁圖給出了演示結(jié)果,從中可以直觀地了解優(yōu)先級反轉(zhuǎn)問題。RTOS上述分析可以看出,要解決優(yōu)先級反轉(zhuǎn)問題可以在Tc獲取共享資源S期間,將其優(yōu)先級臨時提高到Pa,使Tb不能搶占Tc,這就是所謂的優(yōu)先級繼承。一般表述為:設(shè)有兩個線程Ta、Tc,其優(yōu)先級分別記為Pa、Pc,且有Pa>Pc,Ta和Tc需要使用一個共享資源S。優(yōu)先級繼承是指當(dāng)Tc鎖定一個同步量使用S期間,若Ta申請訪問S,則將Pc臨時提高到Pa,直到其釋放同步量后,再恢復(fù)到原有的優(yōu)先級Pc,這樣優(yōu)先級介于Pa與Pc之間的線程就不會在Tc鎖定S時搶占Tc,避免了優(yōu)先級反轉(zhuǎn)問題。6.4.2RT-Thread中避免產(chǎn)生優(yōu)先級反轉(zhuǎn)問題的方法第25頁共31頁RTOSRT-Thread中的互斥量就具有此功能,因此使用互斥量作為同步量即可解決上述例子中的優(yōu)先級反轉(zhuǎn)問題。此處給出使用互斥量的優(yōu)先級繼承方法解決優(yōu)先級反轉(zhuǎn)問題的例程,設(shè)置三個線程線程taskA、taskB、taskC,優(yōu)先級分別為Pa、Pb、Pc,且Pa>Pb>Pc。程序具體的一次運行過程如表6-2所示。注:使用互斥量的優(yōu)先級繼承方法實例演示(..\03-Software\CH06-Design-method\PrioReverseSolve)第26頁共31頁RTOS第27頁共31頁RTOS注:使用互斥量的優(yōu)先級繼承方法實例演示(..\03-Software\CH06-Design-method\PrioReverseSolve)第28頁共31頁程序運行結(jié)果:RTOS運行流程分析(重點):taskC首先到來,獲得CPU使用權(quán)開始運行,點亮小燈并鎖定互斥量。5秒后,taskA到來,由于Pa>Pc,所以搶占taskC獲得CPU使用權(quán)并熄滅小燈。但是當(dāng)taskA運行至請求鎖定互斥量時,發(fā)現(xiàn)taskC此時已鎖定互斥量,因此RT-Thread會臨時提升taskC的優(yōu)先級至與taskA相同(即Pa),使得taskC重新獲得CPU使用權(quán),使taskA等待taskC解鎖互斥量。而緊隨著taskA到來的taskB,由于taskC優(yōu)先級的提升,也進(jìn)入等待狀態(tài)。第29頁共31頁RTOStaskC執(zhí)行完畢后解鎖互斥量并點亮小燈,taskA獲得CPU使用權(quán)繼續(xù)運行,鎖定互斥量。taskA運行完畢后釋放CPU使用權(quán)并熄滅小燈,taskB獲得CPU使用權(quán)后開始運行。在taskA等待taskC釋放互斥量期間,由于臨時提升了taskC的優(yōu)先級,因此當(dāng)taskB到來時不會搶占taskC的CPU使用權(quán)導(dǎo)致taskA的等待時間更長。成功解決了優(yōu)先級比taskA低的taskB先于taskA運行的優(yōu)先級反轉(zhuǎn)現(xiàn)象。第30頁共31頁RTOS本章討論RTOS下程序設(shè)計相關(guān)問題,包括穩(wěn)定性問題,ISR設(shè)計、線程劃分及優(yōu)先級安排問題,利用信號量解決并發(fā)與資源共享的問題,以及優(yōu)先級反轉(zhuǎn)問題等。穩(wěn)定性是軟件的基石,嵌入式軟件設(shè)計要努力做到保證CPU運行的穩(wěn)定、保證通信的穩(wěn)定、保證物理信號輸入的穩(wěn)定、保證物理信號輸出的穩(wěn)定等。看門狗技術(shù)、定時復(fù)位技術(shù)、臨界區(qū)處理技術(shù)等都是增強軟件運行穩(wěn)定性的有效手段。中斷服務(wù)例程的基本要求是:短、小、精、悍。對于線程的劃分,可以按照功能集中原則、時間緊迫原則、周期執(zhí)行原則等進(jìn)行劃分。關(guān)于線程優(yōu)先級安排問題,可參照以下幾點要求:自啟動線程優(yōu)先級最高;緊迫性線程優(yōu)先級安其緊迫性排列;沒有特殊優(yōu)先執(zhí)行要求的多個線程,可設(shè)置為同一優(yōu)先級;有執(zhí)行順序的線程,根據(jù)其執(zhí)行順序排列優(yōu)先級;數(shù)據(jù)處理耗時長的線程優(yōu)先級較低;可以一直處于就緒狀態(tài)的線程優(yōu)先級最低。在學(xué)習(xí)過程中,應(yīng)該充分掌握利用信號量解決并發(fā)與資源共享問題的方法與技巧,并深入理解優(yōu)先級反轉(zhuǎn)問題,能夠在實際應(yīng)用中合理運用優(yōu)先級繼承方法解決優(yōu)先級反轉(zhuǎn)問題。6.5本章小結(jié)第31頁共31頁RTOS第7章嵌入式人工智能:EORS本章導(dǎo)引:與應(yīng)用于社會普適場景的大模型人工智能相比,應(yīng)用于工業(yè)場景、邊緣設(shè)備與物聯(lián)網(wǎng)等領(lǐng)域的人工智能則屬于小模型人工智能,它對小范圍特定知識進(jìn)行學(xué)習(xí),成為解決某一特定問題的“專家”,與大多數(shù)人的學(xué)習(xí)經(jīng)歷十分相似。嵌入式人工智能大多屬于小模型人工智能。面向特定范圍的物體認(rèn)知系統(tǒng)是小模型人工智能的一個實例。本節(jié)給出物體認(rèn)知系統(tǒng)概述、硬件組成、硬件測試導(dǎo)引,讀者可以通過物體認(rèn)知系統(tǒng),對嵌入式人工智能有一個直觀的了解。7.1AHL-EORS簡介RTOS第7章嵌入式人工智能:EORS7.2AHL-EORS基本應(yīng)用方法7.3AHL-EORS的數(shù)據(jù)采集工程與推理工程簡明解析7.4初步理解AHL-EORS的基本原理7.5本章小結(jié)RTOS1.人類智能與人工智能(重點)

人們通過眼睛采集圖像,通過示教獲得其圖像代表什么,經(jīng)過多次反復(fù)學(xué)習(xí),認(rèn)識周圍世界。這在人工智能的語境下,叫做“標(biāo)記、訓(xùn)練與推理”。

從眼睛認(rèn)識世界的角度來看,對應(yīng)于現(xiàn)實世界,標(biāo)記,就是說這個東西是什么?訓(xùn)練,就是有一定量的反復(fù)學(xué)習(xí),在人的頭腦中形成記憶藍(lán)圖;推理,就是一看那個具體對象,就知道是什么。7.1.1AHL-EORS概述第34頁共51頁RTOS2.物體認(rèn)知系統(tǒng)

基于圖像識別的嵌入式物體認(rèn)知系統(tǒng)(EmbeddedObjectRecognitionSystem,EORS)是利用嵌入式計算機通過攝像頭采集物體圖像,利用圖像識別相關(guān)算法進(jìn)行訓(xùn)練、標(biāo)記,訓(xùn)練完成后,可進(jìn)行推理完成對圖像的識別。蘇州大學(xué)嵌入式人工智能與物聯(lián)網(wǎng)試驗室利用D1-H微控制器,結(jié)合RT-Thread設(shè)計了一套原理清晰、價格低廉、簡單實用的基于圖像識別的嵌入式物體認(rèn)知系統(tǒng),命名為AHL-EORS,可作為人工智能的快速入門系統(tǒng)。7.1.1AHL-EORS概述第35頁共51頁RTOS7.1.2硬件清單序號名稱數(shù)量功能描述1GRC主機1(1)內(nèi)含嵌入式微型計算機(型號:D1-H)、5V轉(zhuǎn)3.3V電源等(2)2.8寸(240*320)彩色LCD(3)接口底板:含外設(shè)接口UART、A/D、PWM、SPI、I2C等2TTL-C線1Type-C接口與PC機的USB口相連,提供程序下載。3攝像頭1獲取圖像。攝像頭模塊:OV7670,30W像素,自帶容量為384K字節(jié)的FIFO芯片(AL422B),可存儲2幀QVGA(320240)的圖像數(shù)據(jù),方便獲取圖像數(shù)據(jù)。AHL-EORS硬件清單第36頁共51頁RTOS7.1.3硬件測試引導(dǎo)

產(chǎn)品出廠時已經(jīng)將測試工程下載到MCU芯片中,可以進(jìn)行0~9十個數(shù)字識別,測試步驟如下:

步驟一:通電。使用盒內(nèi)雙頭一致USB線給設(shè)備供。電壓為5V,可選擇計算機、充電寶等的USB口(注意供電要足)。

步驟二:測試。上電后,正常情況下,LCD彩色屏幕會顯示出圖像,可識別盒子內(nèi)“一頁紙硬件測試方法”上的0~9數(shù)字,顯示各自識別概率以及系統(tǒng)運行狀態(tài)等參數(shù)。如右圖所示。第37頁共51頁RTOS

本節(jié)以識別0-9十個數(shù)字為例介紹AHL-EORS基本應(yīng)用方法,讀者通過本節(jié)樣例熟悉并掌握完整的AHL-EORS圖像數(shù)據(jù)集采集、模型訓(xùn)練及部署、終端識別這一EORS的基本工作過程,對EORS系統(tǒng)有一個初步的認(rèn)識。7.2AHL-EORS基本應(yīng)用方法(重點)第38頁共51頁RTOS7.2.1數(shù)據(jù)采集

數(shù)據(jù)采集是進(jìn)行圖像識別程序的基本過程,EORS的數(shù)據(jù)采集是由AHL-EORS-CX軟件完成的,讀者首先需要安裝“..\03-Software\CH07-EAI-EORS-D1-H\”文件夾下的“AHL-EORS-CX”軟件。

1.對終端的操作

進(jìn)行數(shù)據(jù)采集與標(biāo)記首先需要下載AHL-EORS-CX配套的終端數(shù)據(jù)采集軟件。

1)下載編譯腳本。在蘇州大學(xué)嵌入式學(xué)習(xí)社區(qū)→金葫蘆專區(qū)→AHL-GEC-IDE欄目,下載riscv64-elf-mingw.rar,解壓到D盤;

2)AHL-D1-H編譯環(huán)境設(shè)置。在AHL-GEC-IDE中,工具→環(huán)境變量設(shè)置,設(shè)置D1-H芯片程序編譯的環(huán)境變量,重新啟動計算機后生效;

3)下載“03-Software\CH07-EAI-EORS-D1-H\Gray\Gray-DataSend”中機器碼到AHL-D1-H中。第39頁共51頁RTOS7.2.1數(shù)據(jù)采集

2.PC方的操作

1)打開數(shù)據(jù)采集軟件。雙擊桌面

圖標(biāo)打開“AHL-EORS-CX”程序,界面如圖所示。

第40頁共51頁RTOS7.2.1數(shù)據(jù)采集

2)進(jìn)入采集界面。點擊“通用采集軟件”按鈕,進(jìn)入采集界面,如圖所示。

第41頁共51頁RTOS7.2.1數(shù)據(jù)采集

3)打開采集端口。首先選擇串口,點擊“打開串口”按鈕,打開成功后再狀態(tài)欄會提示打開成功,如提示打開錯誤可選擇其他串口進(jìn)行打開。

4)設(shè)置保存路徑。點擊“選擇保存路徑”按鈕,出現(xiàn)選擇文件路徑界面,選擇我們要保存文件的具體位置,此時存放數(shù)據(jù)集的文件名為“ModelTrainx年x月x日x時x分x秒.txt”。

第42頁共51頁RTOS7.2.1數(shù)據(jù)采集

5)進(jìn)行圖像采集。點擊“開始采集”按鈕進(jìn)行采集,圖像采集后會在顯示區(qū)域顯示,如果對二值化圖片不滿意可以修改閾值獲得最佳效果,閾值是對原圖片進(jìn)行二值化計算的開關(guān)量,默認(rèn)采用大津二值化算法計算閾值,在使用時不建議修改。采集1張完整的圖像數(shù)據(jù)后,系統(tǒng)會顯示采集到的這張圖像,如圖所示。

第43頁共51頁RTOS7.2.1數(shù)據(jù)采集6)保存圖像。若顯示的圖像清晰且無其他干擾,滿足采集要求,點擊“確認(rèn)保存”按鈕,將本張圖像添加到數(shù)據(jù)集中;否則點擊“采集下一張”,丟棄本張數(shù)據(jù)。

7)完成一類圖片的采集后(建議每類圖像采集圖片張數(shù)不少于10張)。點擊“停止采集”按鈕,完成一類圖片采集。8)重復(fù)步驟4-步驟7,直到完成所有類別的圖像采集。

9)采集完成所有的該圖像數(shù)據(jù)集之后,將所有的txt文本文件按照類別合并,存放在對應(yīng)的txt格式文件中。最后將文件名改為對應(yīng)的類別名,如“0.txt”、“1.txt”和“2.txt”等。第44頁共51頁RTOS7.2.2模型訓(xùn)練與生成推理工程

模型訓(xùn)練步驟如下:

1)雙擊桌面

圖標(biāo)打開“AHL-EORS-CX”程序,如圖所示。再次點擊模型訓(xùn)練選項中的“NCP”按鈕打開過程較為緩慢,打開時長大于10秒,具體時間與個人計算機性能相關(guān),請耐心等待不要多次點擊。

第45頁共51頁RTOS7.2.2模型訓(xùn)練與生成推理工程

2)在彈出的類型模型界面中選擇物體種類和圖像類型,本樣例數(shù)據(jù)集為0-9十個數(shù)字的灰度圖像,物體種類數(shù)量為10,選擇灰度圖像,設(shè)置結(jié)果如圖所示,點擊“確定”按鈕進(jìn)入訓(xùn)練界面。

第46頁共51頁RTOS7.2.2模型訓(xùn)練與生成推理工程

3)進(jìn)入訓(xùn)練模型界面,首先是讀取數(shù)據(jù)集,可以先使用本書配套的數(shù)據(jù)集,存放在“..\03-Software\CH07-EAI-EORS-D1-H\Numbers”文件夾下,點擊對應(yīng)每個類別的數(shù)據(jù)集后的“選擇文件”按鈕,選擇對應(yīng)的數(shù)據(jù)集文件;選擇模型生成路徑;訓(xùn)練輪數(shù)、學(xué)習(xí)率、測試集比率、tail、alpha采用默認(rèn)值;最后點擊“開始訓(xùn)練”按鈕,系統(tǒng)便開始訓(xùn)練模型,如圖所示。

第47頁共51頁RTOS7.2.2模型訓(xùn)練與生成推理工程

生成推理工程:

在得到滿意的模型準(zhǔn)確率之后,點擊選取工程路徑后的“選擇文件夾”按鈕,選擇指定的AHL-EORS推理工程,這里所指的推理工程是指在嵌入式系統(tǒng)運行的推理工程,本書配套推理工程位于“..\03-Software\CH07-EAI-EORS-D1-H\EORS_NCP_Nums_Predict”目錄下(建議先拷貝一份成為自己的工程),選擇完畢后點擊“生成構(gòu)件”按鈕將更新工程推理模型參數(shù)構(gòu)件,即對本次訓(xùn)練得到的網(wǎng)絡(luò)模型進(jìn)行了部署。第48頁共51頁RTOS7.2.3進(jìn)行推理

首先要將訓(xùn)練好的模型和推理程序下載到嵌入系統(tǒng)中(這一步通常稱之為部署)。

將有推理程序的嵌入式系統(tǒng)連接到電腦上就可以對數(shù)字進(jìn)行識別,注意識別時數(shù)字需要與嵌入式系統(tǒng)保持平行。識別結(jié)果會在嵌入式系統(tǒng)顯示屏上進(jìn)行顯示,如圖所示,其中Result表示識別結(jié)果,Accuracy表示準(zhǔn)確率。第49頁共51頁RTOS

AHL-EORS的開發(fā)涉及到PC端程序開發(fā)和嵌入式系統(tǒng)程序開發(fā),本書只討論嵌入式系統(tǒng)開發(fā)過程,PC端我們給出打包完成的可執(zhí)行文件,配合嵌入式系統(tǒng)完成數(shù)據(jù)采集、模型訓(xùn)練和部署、圖像識別。7.3AHL-EORS數(shù)據(jù)采集工程與推理工程簡析(重點)第50頁共51頁RTOS終端的數(shù)據(jù)采集主要通過圖像采集線程、圖像發(fā)送線程及一個定時器中斷實現(xiàn):

1)主線程app_init負(fù)責(zé)串口、攝像頭及LCD顯示屏等外設(shè)的初始化,并創(chuàng)建用戶線程thd_gray_get和thd_gray_send;

2)thd_gray_get為圖像采集線程,負(fù)責(zé)采集圖像;

3)thd_gray_send為圖像發(fā)送線程,負(fù)責(zé)傳輸圖像到上位機;

具體代碼可參見“..\03-Software\CH07-EAI-EORS-D1-H\EORS-DataSend”文件夾。7.3.1AHL-EORS的數(shù)據(jù)采集工程簡明解析第51頁共51頁RTOS

1.主線程app_init

聲明和運行線程,在includes.h文件中聲明全局圖像指針,數(shù)據(jù)采集線程以及數(shù)據(jù)發(fā)送線程函數(shù)。7.3.1AHL-EORS的數(shù)據(jù)采集工程簡明解析第52頁共51頁RTOS在threadauto_appinit.c文件中創(chuàng)建數(shù)據(jù)采集和發(fā)送線程并啟動它們。第53頁共51頁RTOS2.?dāng)?shù)據(jù)采集線程thread_gray_get第54頁共51頁RTOS3.發(fā)送數(shù)據(jù)線程thread_gray_send第55頁共51頁RTOS

4.運行流程

主線程創(chuàng)建并啟動數(shù)據(jù)采集線程后,通過信號量機制循環(huán)調(diào)用thread_gray_get線程以及thread_gray_send線程,在thread_picget線程中采集圖像信息,并在thread_gray_send線程中進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)采集需要配合本書配套的數(shù)據(jù)采集軟件才能完成數(shù)據(jù)采集,運行界面如圖所示。第56頁共51頁RTOS

圖像推理過程由主線程app_init、圖像推理線程thd_reson、圖像獲取線程thread_picget、識別結(jié)果應(yīng)用thread_use四個線程

1)主線程app_init負(fù)責(zé)串口、攝像頭及LCD顯示屏等外設(shè)的初始化,并創(chuàng)建用戶線程thd_pic_get、thd_reason和thd_use;

2)圖像推理線程thd_reson,通過LCD顯示圖像和推理結(jié)果。

具體代碼可參見“..\03-Software\CH07-EAI-EORS-D1-H\EORS_NCP_Nums_Predict”文件夾。7.3.2AHL-EORS的推理工程簡明解析第57頁共51頁RTOS1.主線程app_init

聲明和運行線程,在includes.h文件中聲明圖像獲取、推理和應(yīng)用線程函數(shù)。第58頁共51頁RTOS

1.主線程app_init

在threadauto_appinit.c文件中創(chuàng)建圖像推理線程并啟動運行。第59頁共51頁RTOS2.圖像獲取線程thread_picget第60頁共51頁RTOS3.圖像推理線程thread_reason第61頁共51頁RTOS4.識別結(jié)果應(yīng)用thread_use第62頁共51頁RTOS

5.運行流程和結(jié)果

主線程創(chuàng)建并啟動推理線程后,thread_picget線程開始執(zhí)行獲取圖像,thread_reason線程模型進(jìn)行推理,最后輸出推理結(jié)果,如圖7-10所示,是推理識別數(shù)字“0”的正確現(xiàn)象。第63頁共51頁RTOS

AHL-EORS系統(tǒng)所使用的圖像分類算法是基于深度學(xué)習(xí)算法的一種。常用的深度學(xué)習(xí)網(wǎng)絡(luò)模型主要有如深度置信網(wǎng)絡(luò)(DeepBeliefNetwork,DBN)、層疊自動去噪編碼機(StackedDeoisingAutoencoders,SDA)、卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)都已經(jīng)應(yīng)用在日常生活與工業(yè)生產(chǎn)的各個場景,如無人駕駛、自然語言處理、人臉識別。其中,卷積神經(jīng)網(wǎng)絡(luò)由于具有權(quán)值共享特征,對圖像數(shù)據(jù)的處理效率更高,因此本系統(tǒng)選用的NCP線性神經(jīng)網(wǎng)絡(luò)模型運用到了卷積神經(jīng)網(wǎng)絡(luò)。7.4初步理解AHL-EORS的基本原理(難點)第64頁共51頁RTOS7.4.1卷積神經(jīng)網(wǎng)的技術(shù)特點

傳統(tǒng)的人工神經(jīng)網(wǎng)絡(luò)中相鄰的兩層網(wǎng)絡(luò)的每個神經(jīng)元節(jié)點之間都是通過全連接的方式互相連接的,在處理圖像等數(shù)據(jù)量較大類型的數(shù)據(jù)輸入時,往往會消耗更多的計算與存儲資源,并且過多的參數(shù)也會造成模型的過擬合,并不符合人類的認(rèn)知特性,人類往往是通過比較物體中固有的特征與其他物體的不同來進(jìn)行物體分類,并非學(xué)習(xí)物體的所有特征。第65頁共51頁RTOS

卷積神經(jīng)網(wǎng)絡(luò)所具有的局部感知、權(quán)值共享、池化操作等眾多優(yōu)良特性便解決了這一問題。卷積網(wǎng)絡(luò)通過卷積核與圖像進(jìn)行卷積的方式實現(xiàn)了不同神經(jīng)元之間的權(quán)值共享,降低了網(wǎng)絡(luò)參數(shù)數(shù)量的同時也降低了網(wǎng)絡(luò)計算量。池化操作的引入也使得卷積神經(jīng)網(wǎng)絡(luò)具有了一定的平移不變性以及變換不變性,提升了網(wǎng)絡(luò)的泛化能力。因此卷積神經(jīng)網(wǎng)絡(luò)具備了更強大的魯棒性與容錯能力,對大量信息特征的處理性能高于一般的全連接神經(jīng)網(wǎng)絡(luò),所以將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用在對圖像分類的應(yīng)用中是非常合適的。7.4.1卷積神經(jīng)網(wǎng)的技術(shù)特點第66頁共51頁RTOS7.4.2卷積神經(jīng)網(wǎng)絡(luò)原理(了解)

從數(shù)學(xué)角度,最基本的卷積神經(jīng)網(wǎng)絡(luò)包含卷積、激活與池化三個組成部分,如下圖所示。如果將CNN應(yīng)用于圖像分類,則輸出結(jié)果是輸入圖像的高級特征的集合。第67頁共51頁RTOS1.卷積從數(shù)學(xué)角度來說,卷積是通過兩個函數(shù)h和g生成第三個函數(shù)的一種數(shù)學(xué)算子,表示函數(shù)h與g經(jīng)過翻轉(zhuǎn)和平移的重疊部分函數(shù)值乘積對重疊長度的積分。

“卷”,指的是函數(shù)的翻轉(zhuǎn),從g(t)變成g(-t)這個過程。

“積”,即平移求積分,連續(xù)情況下指的是對兩個函數(shù)的乘積求積分,離散情況下就是加權(quán)求和。第68頁共51頁RTOS

第69頁共51頁RTOS

卷積核在對整個圖像滑動進(jìn)行卷積處理時,每經(jīng)過一個圖像區(qū)域得到的值越高,則該區(qū)域與卷積核檢測的特定特征相關(guān)度越高。而想要得到需求的圖像特征,如何選用合適的卷積核是個十分關(guān)鍵的問題。一方面是根據(jù)需要選擇特定的卷積核,不同的卷積核可以實現(xiàn)不同的檢測效果。通過在訓(xùn)練過程中不斷更新每一個卷積核的參數(shù)來調(diào)整卷積核的所有參數(shù),使得提取的圖像特征更接近我們需求。第70頁共51頁RTOS

第71頁共51頁RTOS

第72頁共51頁RTOS

3.池化

池化操作通常在卷積操作之后,是降采樣的一種形式,通過降低輸入特征圖層分辨率的方式獲得具有空間不變性的圖像特征。池化使用矩形窗體在輸入圖像上進(jìn)行滑動掃描,并且通過取滑動窗口中的所有成員中最大、平均或其他的操作,來獲得最終的輸出值。池化層對每一個輸入的特征圖像都會進(jìn)行縮減操作,進(jìn)而減少后續(xù)的模型計算

溫馨提示

  • 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

提交評論