周 原
(閩江師范高等專科學(xué)校 數(shù)字信息工程學(xué)院,福州 350018)
隨著人們消費(fèi)能力的日益增強(qiáng)和生活節(jié)奏的不斷加快,消費(fèi)物品種類和數(shù)量呈急劇上升趨勢(shì),產(chǎn)生了越來越多的生活垃圾和工業(yè)垃圾,城市生活的垃圾量、清理量不斷加大,給城市垃圾的管理和處置帶來了巨大的壓力[1]。垃圾分類在助力環(huán)保、資源回收以及降低人工分揀成本等方面起到了重要作用。但是垃圾分類的落地并不理想,錯(cuò)誤投放垃圾,導(dǎo)致垃圾分類的難度增大,人力分揀垃圾成本高,影響了垃圾分類的全面推廣。
隨著計(jì)算機(jī)視覺和深度學(xué)習(xí)的發(fā)展,計(jì)算機(jī)系統(tǒng)已經(jīng)能夠高質(zhì)量地對(duì)物體進(jìn)行正確識(shí)別。將計(jì)算機(jī)視覺中目標(biāo)檢測(cè)技術(shù)應(yīng)用于垃圾分類領(lǐng)域能夠極大地解決垃圾分類成本高的問題。從垃圾生產(chǎn)端來看,垃圾分類系統(tǒng)能夠幫助識(shí)別垃圾種類,指導(dǎo)垃圾的正確投放。從處理垃圾的工廠端來看,自動(dòng)化垃圾識(shí)別分類能提高自動(dòng)化水平,降低人工分揀成本。智能垃圾分類助力減少垃圾對(duì)環(huán)境的污染,將垃圾變廢為寶。由此可見,智能垃圾分類的應(yīng)用普及是必然趨勢(shì)。
目前,智能垃圾分類的應(yīng)用集成了計(jì)算機(jī)視覺、深度學(xué)習(xí)和機(jī)器人技術(shù)等。來自加拿大的分類垃圾桶Oscar,通過人工智能攝像頭和顯示屏,幫助識(shí)別不同垃圾應(yīng)該投入哪個(gè)對(duì)應(yīng)垃圾桶里。垃圾分揀系統(tǒng)Zen Robotics Recycler(ZRR)機(jī)器人以平均每小時(shí)3000件的速度全自動(dòng)分離各種垃圾,可以識(shí)別紙板、金屬、木材、石膏、石塊、混凝土等20余種可回收垃圾。FANUC分揀機(jī)器人Waste Robot能夠?qū)ξ锲返幕瘜W(xué)成分以及形狀進(jìn)行實(shí)時(shí)掃描和分析,利用視覺分析系統(tǒng)對(duì)物品進(jìn)行跟蹤和判斷,驅(qū)動(dòng)機(jī)械臂實(shí)時(shí)抓取物品進(jìn)行分類。
基于深度學(xué)習(xí)和計(jì)算機(jī)視覺技術(shù),將人工智能中的物體檢測(cè)應(yīng)用于垃圾分類領(lǐng)域,設(shè)計(jì)并實(shí)現(xiàn)基于云邊端協(xié)同的垃圾檢測(cè)系統(tǒng),從垃圾數(shù)據(jù)采集和預(yù)處理,到配置神經(jīng)網(wǎng)絡(luò)模型,并將模型部署在硬件開發(fā)板上,實(shí)現(xiàn)理論研究到生產(chǎn)實(shí)踐落地的整個(gè)過程。
基于視覺的垃圾檢測(cè)系統(tǒng)包含三部分:數(shù)據(jù)準(zhǔn)備與預(yù)處理;模型訓(xùn)練與評(píng)估;模型轉(zhuǎn)換與邊緣部署?!霸啤⑦?、端”協(xié)同開發(fā)流程如圖1所示。
數(shù)據(jù)的準(zhǔn)備和預(yù)處理包括:數(shù)據(jù)采集和標(biāo)注,劃分訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,配置標(biāo)簽文件,將訓(xùn)練數(shù)據(jù)集轉(zhuǎn)換為符合Caffe框架訓(xùn)練要求的lmdb格式的數(shù)據(jù)庫文件。對(duì)模型進(jìn)行訓(xùn)練和評(píng)估包括:環(huán)境和框架配置、Caffe solver超參數(shù)設(shè)置、模型訓(xùn)練和模型評(píng)估。對(duì)模型進(jìn)行轉(zhuǎn)換和邊緣部署主要是為了實(shí)現(xiàn)在邊緣端的應(yīng)用,通過攝像頭采集垃圾物體數(shù)據(jù),對(duì)采集數(shù)據(jù)預(yù)處理,進(jìn)行模型推理得到結(jié)果,并將結(jié)果通過驅(qū)動(dòng)QT界面反饋,將分類結(jié)果顯示在平板的屏幕上。通過基于云邊端協(xié)同垃圾分類檢測(cè)系統(tǒng)實(shí)現(xiàn)智能垃圾分類,助力降低人工分揀成本。
圖1 “云、邊、端”協(xié)同開發(fā)流程
為了成功模仿或超越人類的視覺功能,計(jì)算機(jī)視覺在對(duì)目標(biāo)設(shè)備進(jìn)行研發(fā)的過程中,需要通過對(duì)大量模型訓(xùn)練,實(shí)現(xiàn)對(duì)圖像的標(biāo)注。圖像標(biāo)注是一個(gè)將標(biāo)簽添加到圖像的過程。數(shù)據(jù)采集和數(shù)據(jù)標(biāo)注是整個(gè)開發(fā)過程中工作量最大、最基礎(chǔ)的一個(gè)環(huán)節(jié)。項(xiàng)目選用精靈標(biāo)注工具,對(duì)1391個(gè)垃圾物體圖片進(jìn)行標(biāo)注,從而得到相應(yīng)的xml格式的垃圾物體標(biāo)注文件。標(biāo)注后的圖片樣例見圖2。
圖2 自建數(shù)據(jù)集
模型訓(xùn)練過程是訓(xùn)練、測(cè)試不斷迭代的過程,圖片標(biāo)注之后,按照設(shè)定比例(8∶2)將標(biāo)注的垃圾圖片數(shù)據(jù)集隨機(jī)劃分為訓(xùn)練數(shù)據(jù)集和測(cè)試集,并生成圖片和標(biāo)注文件地址對(duì)應(yīng)的訓(xùn)練集以及測(cè)試集關(guān)系清單的txt文件。
在訓(xùn)練模型之前,模型需要知道目標(biāo)檢測(cè)物體的類別標(biāo)簽。模型及其優(yōu)化以純文本的形式定義,而非代碼模式,使用Caffe框架可以在配置中定義模型和優(yōu)化,不需要硬編碼,更方便高效[2]。學(xué)術(shù)和工業(yè)領(lǐng)域,運(yùn)算速度對(duì)模型和海量數(shù)據(jù)的處理至關(guān)重要,Caffe結(jié)合cuDNN,速度更快。Caffe工作流程如圖3所示。Caffe框架中的layer是模型和計(jì)算的基本單元,用以實(shí)現(xiàn)前向和反向傳播。再通過blob結(jié)構(gòu)來存儲(chǔ)、交換和處理網(wǎng)絡(luò)中間正向和反向迭代時(shí)的數(shù)據(jù)和導(dǎo)數(shù)信息,實(shí)現(xiàn)數(shù)據(jù)傳遞。solver定義針對(duì)net網(wǎng)絡(luò)模型的求解方法,記錄神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程,保存神經(jīng)網(wǎng)絡(luò)模型參數(shù)。
圖3 Caffe工作流程
在Caffe框架下,通過輸入標(biāo)簽參數(shù)來自動(dòng)生成模型所要使用到的標(biāo)簽配置文件和標(biāo)簽文件。其中,labelmap.prototxt是Caffe框架使用的標(biāo)準(zhǔn)配置文件,用以描述模型文件具有的標(biāo)簽清單,得到垃圾圖片的標(biāo)簽及其格式如圖4所示。
圖4 Caffe框架下標(biāo)簽清單格式
使用Caffe框架下自帶的convert_annoset工具,將訓(xùn)練數(shù)據(jù)集轉(zhuǎn)換成復(fù)合Caffe訓(xùn)練要求的lmdb格式數(shù)據(jù)文件,這是一種小型的鍵值對(duì)數(shù)據(jù)庫[3]。其中,每個(gè)鍵值對(duì)都是數(shù)據(jù)集中的一個(gè)樣本。使用lmdb數(shù)據(jù)庫來存放垃圾物體圖像數(shù)據(jù),是因其具有極高的存儲(chǔ)速度,在系統(tǒng)訪問開發(fā)中使用到大量圖片、小文件時(shí),用以減少磁盤IO時(shí)間開銷。得到lmdb格式數(shù)據(jù)需要滿足以下要求:(1)垃圾物體的圖片地址與其對(duì)應(yīng)標(biāo)注文件的txt清單文件;(2)轉(zhuǎn)換工具convert_annoset。使用轉(zhuǎn)換工具為普通圖片數(shù)據(jù)源轉(zhuǎn)換為lmdb數(shù)據(jù)庫提供便捷方法,配置關(guān)鍵參數(shù)快速找到lmdb數(shù)據(jù)文件。執(zhí)行完腳本后,根目錄下出現(xiàn)Caffe訓(xùn)練數(shù)據(jù)文件和測(cè)試數(shù)據(jù)庫文件。
神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程包括模型訓(xùn)練和模型測(cè)試,雖然兩者的模型主體架構(gòu)完全相同,但其數(shù)據(jù)輸入方式不同,且對(duì)應(yīng)不同數(shù)據(jù)集,需要對(duì)數(shù)據(jù)層部分參數(shù)進(jìn)行手動(dòng)配置。本項(xiàng)目的神經(jīng)網(wǎng)絡(luò)模型是基于YOLO v3[4]的深度學(xué)習(xí)框架,優(yōu)點(diǎn)是速度快,充分發(fā)揮多核處理器和GPU并行運(yùn)算的功能。并且,在尺寸中等偏小的物體上有超高準(zhǔn)確率,適合垃圾物體的識(shí)別。
YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)如圖5所示。它只有卷積層,通過調(diào)節(jié)卷積步長(zhǎng)控制輸出特征圖的尺寸,對(duì)于輸入圖片尺寸沒有特別限制;它采用金字塔特征圖,借鑒ResNet,將輸入的特征圖與輸出特征圖對(duì)應(yīng)維度進(jìn)行相加;同時(shí)也借鑒DenseNet將特征圖按照通道維度直接進(jìn)行拼接。YOLO輸出特征圖解碼是它的關(guān)鍵點(diǎn)之一。根據(jù)不同的輸入尺寸,會(huì)得到不同大小的輸出特征圖。每個(gè)特征圖的每個(gè)格子中,都配置有3個(gè)不同的先驗(yàn)框。檢測(cè)框位置(4維)、檢測(cè)置信度(1維)、類別(80維)都在其中,共計(jì)85維。v3沿用v2中關(guān)于先驗(yàn)框的技巧,使用k-means對(duì)數(shù)據(jù)集中的標(biāo)簽框進(jìn)行聚類,得到類別中心點(diǎn)的9個(gè)框,作為先驗(yàn)框。有了先驗(yàn)框與輸出特征圖,就可以解碼檢測(cè)框。置信度在輸出85維中占固定一維,由sigmoid函數(shù)解碼,解碼之后數(shù)值區(qū)間在[0,1]中。COCO數(shù)據(jù)集有80個(gè)類別,類別數(shù)在85維輸出中占了80維,每一個(gè)維度代表一個(gè)類別的置信度,使用sigmoid函數(shù)替代了v2中的softmax,取消了類別之間的互斥,可以使網(wǎng)絡(luò)更加靈活。
圖5 YOLO v3模型結(jié)構(gòu)
Caffe框架下,神經(jīng)網(wǎng)絡(luò)各功能層高度模塊化,以“l(fā)ayer{}”為標(biāo)志形成塊的形式堆疊,最后組成完整的神經(jīng)網(wǎng)絡(luò)。配置神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型和測(cè)試模型文件之后,進(jìn)行solver超參數(shù)配置。Caffe solver定義整個(gè)模型如何運(yùn)轉(zhuǎn),它的配置信息如下:(1)網(wǎng)絡(luò)參數(shù)配置,包括train_net訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型文件地址,test_net測(cè)試神經(jīng)網(wǎng)絡(luò)模型文件地址,test_iter網(wǎng)絡(luò)測(cè)試迭代次數(shù)為圖片總數(shù)量N除以批次大小,test_interval測(cè)試間隔設(shè)置為500,display設(shè)置為0;(2)學(xué)習(xí)率參數(shù)配置,包括base_lr基礎(chǔ)學(xué)習(xí)率設(shè)置為0.01,lr_policy學(xué)習(xí)率調(diào)整策略設(shè)置為multistep,max_iter最大迭代次數(shù)設(shè)置為100 000;(3)模型優(yōu)化參數(shù)配置,type迭代優(yōu)化算法設(shè)置SGD;(4)模型保存快照參數(shù)配置,snapshot快照輸出評(píng)率設(shè)置為5000。
調(diào)用Caffe框架自帶命令caffe train執(zhí)行模型訓(xùn)練,包括從頭訓(xùn)練和基于預(yù)訓(xùn)練模型進(jìn)行訓(xùn)練兩種訓(xùn)練模式,得到不同的log日志文件。輸出日志文件如圖6所示,可以看到no obj期望值越來越小,obj置信度越來越接近1,iou預(yù)測(cè)出和實(shí)際標(biāo)注的交集相關(guān),值越大效果越好,loss參數(shù)隨著訓(xùn)練次數(shù)增加而降低。
圖6 訓(xùn)練輸出結(jié)果
最后,選擇合適的評(píng)估方法,迭代地對(duì)模型進(jìn)行優(yōu)化。將評(píng)價(jià)指標(biāo)數(shù)據(jù)可視化能夠快速且直觀地判斷模型訓(xùn)練情況,提取日志文件中的參數(shù)信息,處理loss參數(shù)信息和iou參數(shù)信息,如圖7所示。loss圖中的折線總體呈下降趨勢(shì),說明隨著不斷迭代訓(xùn)練次數(shù)的增加,損失在不斷減少。由iou圖可見,總體趨勢(shì)向上,隨著訓(xùn)練次數(shù)增大,預(yù)測(cè)框和物體標(biāo)注框的重合程度正當(dāng)上升,但值并不高,說明仍需繼續(xù)訓(xùn)練達(dá)到模型收斂。
圖7 模型評(píng)估圖
完成數(shù)據(jù)集劃分,通過神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)訓(xùn)練集中的數(shù)據(jù)得到模型參數(shù),通過測(cè)試集來模擬測(cè)試模型的泛用性,這些都是基于一種數(shù)據(jù)源的圖片文件進(jìn)行的,且輸出結(jié)果是對(duì)圖片預(yù)測(cè)程度正確與否的系列評(píng)價(jià)指標(biāo)。
邊緣計(jì)算是一種分布式處理和存儲(chǔ)的體系結(jié)構(gòu),是利用靠近數(shù)據(jù)源的邊緣地帶來完成運(yùn)算程序,可在大中小型運(yùn)算設(shè)備、本地端網(wǎng)絡(luò)內(nèi)完成[5]。將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型部署到邊緣端設(shè)備,雖然部署的神經(jīng)網(wǎng)絡(luò)模型主體結(jié)構(gòu)與訓(xùn)練時(shí)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)保持相同,但與訓(xùn)練和測(cè)試過程存在兩大區(qū)別:(1)邊緣端的神經(jīng)網(wǎng)絡(luò)模型需要處理攝像頭采集到的未標(biāo)注垃圾物體圖片,所以神經(jīng)網(wǎng)絡(luò)模型的數(shù)據(jù)層不必再定義數(shù)據(jù)集的來源,但需要定義輸入數(shù)據(jù)的大小格式;(2)邊緣端的神經(jīng)網(wǎng)絡(luò)模型處理圖片后,輸出不再是對(duì)圖片預(yù)測(cè)準(zhǔn)確率評(píng)價(jià)指標(biāo),而是對(duì)實(shí)時(shí)采集到的物體圖片預(yù)測(cè)和分類的反饋結(jié)果。
ResNet-152模型論文中提出了越寬越深越大的模型往往比越窄越小越淺的模型精度要高的證明[6]。但越寬越深越大的模型對(duì)計(jì)算機(jī)資源要求更高,現(xiàn)在的模型應(yīng)用越來越傾向于從云端部署到邊緣側(cè),而受限于邊緣側(cè)設(shè)備的計(jì)算資源,需要考慮設(shè)備存儲(chǔ)空間、內(nèi)存大小、運(yùn)行功耗和時(shí)延性等問題。特別是在移動(dòng)端和嵌入設(shè)備等資源受限的邊緣側(cè)應(yīng)用場(chǎng)景中,更需要模型量化,以較低的推理精度損失將連續(xù)取值的浮點(diǎn)型模型權(quán)重等數(shù)據(jù)定點(diǎn)近似為有限多個(gè)離散值的過程。模型量化增加了操作復(fù)雜度,在量化時(shí)需要做一些特殊處理。
制作邊緣部署使用的神經(jīng)網(wǎng)絡(luò)模型文件,從獲取訓(xùn)練時(shí)使用的神經(jīng)網(wǎng)絡(luò)模型文件中的所有層,刪除沒有bottom字段的用于數(shù)據(jù)輸入的數(shù)據(jù)層,并設(shè)置新的數(shù)據(jù)層,修改輸出層。在訓(xùn)練時(shí)一般需要輸出loss,但邊緣部署對(duì)未知數(shù)據(jù)進(jìn)行識(shí)別,輸出內(nèi)容為檢測(cè)垃圾物體的分類概率,需要softmax層,并將該輸出層封裝在API內(nèi)。
對(duì)應(yīng)開發(fā)使用到的硬件資源包括開發(fā)板、高清USB攝像頭和觸摸顯示屏。開發(fā)板選用NNIE,這是海思媒體SoC針對(duì)神經(jīng)網(wǎng)絡(luò)特別是深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行加速處理的硬件單元,芯片為Hi3559A。使用該開發(fā)板之前,需要先配置轉(zhuǎn)換工具nnie_mapper的配置文件。
使用nnie_mapper轉(zhuǎn)換工具來實(shí)現(xiàn)caffe model轉(zhuǎn)換為wk文件。針對(duì)開發(fā)板芯片選擇對(duì)應(yīng)的版本命令nnie_mapper_11,執(zhí)行轉(zhuǎn)換命令生成wk文件,并下載標(biāo)簽文件,將它們置于model文件夾下,用于后續(xù)部署。電腦端與開發(fā)板連接,使用同一網(wǎng)段,設(shè)置配置ip地址。使用MobaXterm連接到開發(fā)板,將項(xiàng)目文件夾上傳到開發(fā)板;運(yùn)行項(xiàng)目文件,將目標(biāo)物體放入攝像頭下方,測(cè)試識(shí)別效果如圖8所示。測(cè)試蘋果置于攝像頭下,識(shí)別出物體是蘋果,且分類屬于廚余垃圾。
圖8 垃圾分類識(shí)別效果
經(jīng)過訓(xùn)練后的模型,在復(fù)雜背景下識(shí)別垃圾的能力大大提升,經(jīng)測(cè)試準(zhǔn)確率可達(dá)90%,有一定的實(shí)用價(jià)值。
本文研究了在垃圾分類中運(yùn)用機(jī)器視覺和物聯(lián)網(wǎng)應(yīng)用技術(shù)實(shí)現(xiàn)云邊端協(xié)同垃圾物體分類檢測(cè)應(yīng)用開發(fā)。通過對(duì)整個(gè)云邊端協(xié)同開發(fā)流程進(jìn)行梳理,從對(duì)垃圾物體數(shù)據(jù)進(jìn)行采集、預(yù)處理,到配置神經(jīng)網(wǎng)絡(luò)模型,并在該模型上進(jìn)行訓(xùn)練和評(píng)估,最終將模型分別部署在云端和邊緣端,邊緣端通過開發(fā)板控制攝像頭實(shí)時(shí)采集物體數(shù)據(jù),并將推理計(jì)算后的分類結(jié)果顯示在觸控屏上。通過訓(xùn)練策略得到性能好的模型,并賦能到實(shí)際垃圾分類檢測(cè)場(chǎng)景之中,發(fā)揮AI分類檢測(cè)的能力。