王偉民 程進(jìn) 鄒小平 樸林華
北京信息科技大學(xué)北京市傳感器重點(diǎn)實(shí)驗(yàn)室,北京 100101
隨著社會的發(fā)展,越來越多的人熱衷于寵物飼養(yǎng),于是許多的寵物飼養(yǎng)家庭、寵物主題餐廳、寵物主題公園等應(yīng)運(yùn)而生。然而,對于飼養(yǎng)寵物的上班族而言,由于時(shí)間和位置等條件的限制,對寵物投喂不是非常便利。因此,針對寵物投喂問題,越來越多的寵物智能投食裝置相繼出現(xiàn),比如:張安東等人[1]設(shè)計(jì)了一種基于單片機(jī)技術(shù)的智能喂食系統(tǒng);邵淑穎等人[2]設(shè)計(jì)了一種基于ITOP4412開發(fā)板的智能家寵投食器;卞港等人[3]設(shè)計(jì)了一種基于STM32和ZigBee的寵物智能喂養(yǎng)系統(tǒng)。雖然這些投食裝置設(shè)計(jì)的目的都是想要實(shí)現(xiàn)無需人工的智能化投食,但是投食對象固定單一,對于貓狗混養(yǎng)的場所,則無法根據(jù)具體的寵物類別選擇投喂對應(yīng)的食物類型。因此,對于貓狗混養(yǎng)的家庭,若僅僅使用一臺上述提到的投食裝置,可能會出現(xiàn)“貓飽狗餓”或者“狗飽貓餓”的問題。同時(shí),大多數(shù)寵物自動(dòng)投食裝置都設(shè)置了定時(shí)投食,這就可能會造成另外一個(gè)問題:每次定時(shí)投食后,不能保證寵物都會來進(jìn)食,這樣的情況如若重復(fù)多次,則會因投食過剩而導(dǎo)致食物溢出食槽,造成食物的浪費(fèi)以及家庭環(huán)境衛(wèi)生問題。
針對上述問題,本文研究了一種新型寵物投食裝置——基于貓狗識別的寵物自動(dòng)投食器。圖1所示分別為該裝置的模型圖與實(shí)物圖。裝置的設(shè)計(jì)采用程序與硬件相結(jié)合的方式。不同于其他基于單片機(jī)的智能寵物投食系統(tǒng)[4],該裝置是以樹莓派(Raspberry Pi,RPi)作為核心硬件,借助機(jī)器識別技術(shù)以及其他硬件控制程序去實(shí)現(xiàn)寵物分類投喂。近年來,機(jī)器學(xué)習(xí)技術(shù)快速發(fā)展,通過機(jī)器學(xué)習(xí)不僅可以快速準(zhǔn)確地識別圖像,而且可以準(zhǔn)確地識別各種聲紋[5]。本文研究的裝置主要借助機(jī)器學(xué)習(xí)內(nèi)容下的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)去進(jìn)行貓狗圖像識別。
裝置內(nèi)、外結(jié)構(gòu)如圖2所示,其核心硬件是樹莓派,主要負(fù)責(zé)數(shù)據(jù)處理與機(jī)器控制。整個(gè)裝置的硬件根據(jù)功能可劃分為識別模塊、檢測模塊、執(zhí)行模塊,其中:識別模塊包含樹莓派與攝像頭;檢測模塊包含紅外生物接近檢測開關(guān);執(zhí)行模塊包含兩個(gè)舵機(jī)、繼電器開關(guān)、電磁閥。
整體系統(tǒng)程序由識別程序與硬件控制程序組成,其中,識別程序主要是卷積神經(jīng)網(wǎng)絡(luò)程序,具體編寫過程如下:
1.2.1 獲取訓(xùn)練集
裝置采用的貓狗訓(xùn)練數(shù)據(jù)集來自Cat vs Dogs Kaggle競賽的網(wǎng)站[6],訓(xùn)練數(shù)據(jù)集共有25,000張帶有標(biāo)簽的圖片,其大小、分辨率不同,圖片中貓和狗的形狀、所處位置、體表顏色也各不一樣,其中貓狗圖片各占一半,分別放在各自的文件夾中,訓(xùn)練數(shù)據(jù)集部分圖片如圖3所示。
1.2.2 構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)模型
構(gòu)建的完整的卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)如圖4所示。通常,貓或狗的圖像里包含許多特征,例如耳朵、眼睛、鼻子等,這些特征中既有相同的部分,又有不同的部分,而卷積神經(jīng)網(wǎng)絡(luò)正是通過掃描這些特征來識別圖像中的目標(biāo)對象。同時(shí),所有特征與所屬圖像都具有一定的關(guān)系,例如,所有特征都要小于所屬圖像,而且相同的特征往往會出現(xiàn)在圖像的不同區(qū)域,最后縮放所屬圖像不會影響其特征。卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建過程就是利用特征與所屬圖像的關(guān)系,對目標(biāo)圖像進(jìn)行重復(fù)、多次的卷積與最大池化,然后圖像被攤平后連接到全連接層網(wǎng)絡(luò);而全連接層是先從局部特征的圖像片段進(jìn)行分類、搜尋和對比,由小局部特征圖像到大局部特征圖像逐漸演進(jìn),最后找到整個(gè)貓的圖像,如對貓頭、貓尾巴、貓腿等進(jìn)行分類,紅色圓形表示這個(gè)特征被找到的神經(jīng)元已經(jīng)激活,當(dāng)尋找到合適的特征圖像時(shí),再往前走一層,對子特征圖像分類,如貓頭有眼睛、耳朵等這些特征進(jìn)行分類,直到發(fā)現(xiàn)最符合要求的圖像,把這些找到的特征組合在一起,最后確定為貓。上述的卷積過程是在掃描圖像中用于識別的特征,最大池化過程就是在縮小圖像,減小特征的參數(shù)[7]。因此,卷積神經(jīng)網(wǎng)絡(luò)主要的設(shè)計(jì)思想是最大化的利用特征與圖像的關(guān)系。
1.2.3 訓(xùn)練模型
訓(xùn)練的過程主要是將獲取的數(shù)據(jù)集圖像導(dǎo)入已經(jīng)構(gòu)建好的卷積神經(jīng)網(wǎng)絡(luò);然后通過設(shè)置一定訓(xùn)練步數(shù)進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練;最后使得訓(xùn)練過程損失值達(dá)到最小,同時(shí)提高訓(xùn)練精度。因此,訓(xùn)練的目的就是為了得到最佳的參數(shù)來滿足損失值與訓(xùn)練精度的要求。
1.2.4 測試與完善
當(dāng)完成卷積神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練任務(wù)后,接下來對模型進(jìn)行識別測試。為了更好地切合實(shí)際場景,測試時(shí),準(zhǔn)備一些清晰度、大小、背景顏色各不相同的貓狗圖像作為測試集進(jìn)行測試,圖5所示是測試過程中采用的部分測試集圖片。具體測試過程如下:首先,下載多張貓或狗的圖片,用電子屏將圖片靠近寵物自動(dòng)投食器;接下來,生物接近檢測開關(guān)會觸發(fā)攝像頭開啟,由攝像頭捕捉圖片,捕捉的測試圖片被存儲于樹莓派中;然后,樹莓派會運(yùn)行上述已搭建完畢的卷積神經(jīng)網(wǎng)絡(luò)程序進(jìn)行圖像識別;最后,根據(jù)識別結(jié)果進(jìn)行投喂貓糧或者狗糧。在整個(gè)測試過程中,總共測試了60張貓、狗圖像的照片,其中有56張照片被準(zhǔn)確識別,最后由測試得到的識別率為93%。綜上,基于卷積神經(jīng)網(wǎng)絡(luò)的貓狗識別自動(dòng)投食器具備較高的識別率。由于考慮到貓狗同時(shí)出現(xiàn)的情況,所以生物檢測開關(guān)設(shè)置的距離盡量保證攝像頭每次只出現(xiàn)一只寵物,做到“見貓喂貓糧,見狗喂狗糧”?;诰矸e神經(jīng)網(wǎng)絡(luò)的貓狗識別自動(dòng)投食器目前也存在一些不足,例如,如果投食對象只是經(jīng)過投食器,并未打算攝食,這時(shí)投食器進(jìn)行投喂的話難免會造成食物的浪費(fèi)。針對上述情況,可以考慮為投食器增加食物自動(dòng)回收槽,使其具備食物回收的功能。目前,這款裝置并未真正投入市場,尚處于完善階段,有很大的提升空間。
除了圖像識別程序以外,系統(tǒng)還包括硬件的控制程序(舵機(jī)正反轉(zhuǎn)程序、攝像頭開啟與拍照程序、繼電器開關(guān)程序等)。
裝置利用卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行圖像處理與識別,最終便可以得到一個(gè)識別結(jié)果,然后根據(jù)識別結(jié)果,利用樹莓派控制各部分硬件去協(xié)調(diào)完成寵物投食工作,具體過程如下:
(1)紅外生物接近檢測開關(guān)檢測寵物是否靠近投食器,若沒有生物靠近,該裝置便不會執(zhí)行投喂工作;
(2)當(dāng)有生物靠近時(shí),檢測開關(guān)向樹莓派發(fā)送信號,然后樹莓派會執(zhí)行攝像頭模塊相關(guān)程序,從而控制攝像頭打開,接下來攝像頭會預(yù)熱10 s,用于完成貓狗圖像的拍攝獲取與圖像保存[8];
(3)完成圖像捕獲任務(wù)后,執(zhí)行卷積神經(jīng)網(wǎng)絡(luò)程序,進(jìn)行圖像處理與識別,具體過程包括圖像位置的讀取以及神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型的提取;
(4)完成目標(biāo)圖像的識別任務(wù)后,樹莓派會根據(jù)識別結(jié)果去執(zhí)行舵機(jī)程序,即控制①號舵機(jī)與②號舵機(jī)運(yùn)轉(zhuǎn)去進(jìn)行寵物干糧的投放,若識別對象是貓,則①號舵機(jī)正轉(zhuǎn)打開裝有貓糧的漏斗型容器(圖6)進(jìn)行投食,投食時(shí)間為5 s,然后舵機(jī)進(jìn)行反轉(zhuǎn),關(guān)閉貓糧容器;若識別對象是狗,則②號舵機(jī)正轉(zhuǎn)去打開裝有狗糧的漏斗型容器,投食時(shí)間為10 s,舵機(jī)進(jìn)行反轉(zhuǎn),關(guān)閉狗糧容器;
(5)完成干糧的投放任務(wù)后,樹莓派執(zhí)行繼電器開啟程序,繼電器被打開,從而電磁閥會被開啟,這時(shí)水桶的水便會順著導(dǎo)管流進(jìn)水槽,60 s后,樹莓派執(zhí)行繼電器關(guān)閉程序,電磁閥被關(guān)閉,投食任務(wù)完成。
整個(gè)裝置的系統(tǒng)工作框圖如圖7所示。
寵物是人類親密的朋友,越來越多的寵物飼養(yǎng)家庭熱衷于貓狗混養(yǎng),同時(shí),寵物店、寵物主題餐廳、寵物主題公園也越來越多。因此,針對貓狗混養(yǎng)的情況,設(shè)計(jì)研發(fā)了基于貓狗識別的寵物自動(dòng)投食器。與市面上其他投食產(chǎn)品不同,該裝置增添了貓狗識別的功能,同時(shí),利用紅外生物接近開關(guān)檢測代替定時(shí)投喂設(shè)置,使投食更加合理化。隨著社會的發(fā)展,寵物飼養(yǎng)的熱度也會越來越高,基于卷積神經(jīng)網(wǎng)絡(luò)的貓狗識別自動(dòng)投食器也將受到廣泛的歡迎。