







摘要:為了加強(qiáng)生活垃圾分類管理、節(jié)約資源,生活垃圾分類引起了社會高度重視。文章基于YOLOv8深度學(xué)習(xí)框架進(jìn)行可回收垃圾識別,隨后將開發(fā)環(huán)境中訓(xùn)練好的垃圾分類模型,根據(jù)生產(chǎn)環(huán)境邊緣側(cè)硬件需求進(jìn)行模型適配,并在邊緣側(cè)進(jìn)行實(shí)時垃圾檢測推理,以實(shí)現(xiàn)工程化落地應(yīng)用。文章通過在垃圾分揀生產(chǎn)環(huán)境仿真平臺對本文提出的方法進(jìn)行驗(yàn)證。在傳輸軌道上方安裝固定光源及工業(yè)攝像頭,邊緣設(shè)備JetSon Nano裝載開發(fā)環(huán)境下訓(xùn)練好的垃圾分類模型,負(fù)責(zé)對傳送帶上的垃圾進(jìn)行實(shí)時檢測推理。實(shí)驗(yàn)證明,生產(chǎn)環(huán)境邊緣側(cè)進(jìn)行垃圾檢測推理實(shí)時性高,準(zhǔn)確率達(dá)88%以上,滿足工程應(yīng)用需求。
關(guān)鍵字:深度學(xué)習(xí)模型;可回收垃圾識別;YOLOv8;邊緣設(shè)備JetSonNano
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2024)17-0029-04 開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID) :
1 研究背景
隨著城市化步伐的加快,生活垃圾的數(shù)量急劇增加,通過深度學(xué)習(xí)技術(shù)自動有效地進(jìn)行垃圾分類可以減少垃圾回收任務(wù)中的巨大勞動力。由于人工智能垃圾分揀系統(tǒng)通常在垃圾分揀生產(chǎn)環(huán)節(jié)安裝多個智能檢測設(shè)備,實(shí)時對傳送帶上的垃圾進(jìn)行檢測識別,并依據(jù)檢測結(jié)果通知機(jī)械臂進(jìn)行自動垃圾分揀。
然而,在這樣的生產(chǎn)環(huán)境邊緣側(cè),邊緣設(shè)備通常只配置有限的計(jì)算資源,無法滿足存儲和運(yùn)行復(fù)雜神經(jīng)網(wǎng)絡(luò)模型的要求。因此,需要借助云計(jì)算中心來完成這些任務(wù),但云協(xié)同會引發(fā)響應(yīng)延時和網(wǎng)絡(luò)帶寬消耗的增加,并帶來用戶隱私數(shù)據(jù)泄露等潛在風(fēng)險(xiǎn)[1]。
為了滿足生產(chǎn)環(huán)境邊緣側(cè)人工智能項(xiàng)目的部署應(yīng)用,設(shè)計(jì)高效、高性能的輕量級神經(jīng)網(wǎng)絡(luò)成為解決問題的關(guān)鍵[2]。然而,為了提升模型的準(zhǔn)確度,深度神經(jīng)網(wǎng)絡(luò)往往采用更深、更大的架構(gòu),這導(dǎo)致了模型參數(shù)的顯著增加、存儲需求的上升和計(jì)算量的增大[3]。受限于物聯(lián)網(wǎng)邊緣設(shè)備在計(jì)算能力、存儲空間和能源資源方面的局限,深度神經(jīng)網(wǎng)絡(luò)難以被直接部署到這些設(shè)備上[3]。因此,需要部署低內(nèi)存、低計(jì)算資源、高準(zhǔn)確度且能實(shí)時推理的輕量級深度神經(jīng)網(wǎng)絡(luò)到邊緣設(shè)備。
為了應(yīng)對這一重要任務(wù),我們設(shè)計(jì)和實(shí)現(xiàn)一個能夠在生產(chǎn)環(huán)境邊緣設(shè)備上實(shí)時進(jìn)行垃圾檢測識別的系統(tǒng),以實(shí)現(xiàn)工程化落地應(yīng)用。首先,在開發(fā)環(huán)境下,我們在高性能PC服務(wù)器上對基于YOLOv8的垃圾模型進(jìn)行訓(xùn)練、驗(yàn)證、評估和測試。隨后,我們將訓(xùn)練好的模型根據(jù)生產(chǎn)環(huán)境邊緣側(cè)硬件進(jìn)行適配,本文系統(tǒng)中所用的是來自英偉達(dá)的Jetson Nano邊緣計(jì)算盒子。最后,我們將適配后的模型部署在邊緣側(cè)硬件終端,實(shí)現(xiàn)對垃圾的推理檢測,并將檢測結(jié)果作為后續(xù)機(jī)械臂進(jìn)行垃圾分揀的依據(jù),從而在生產(chǎn)環(huán)境邊緣側(cè)實(shí)現(xiàn)了工程化落地應(yīng)用。
2 相關(guān)技術(shù)
2.1 目標(biāo)檢測
作為計(jì)算機(jī)視覺最重要的領(lǐng)域之一,隨著深度學(xué)習(xí)的發(fā)展,目標(biāo)檢測在過去幾年中取得了巨大進(jìn)展。目標(biāo)檢測算法可分為兩類。第一類算法是基于遞歸CNN模型設(shè)計(jì)的,該模型通過選擇性搜索或CNN網(wǎng)絡(luò)產(chǎn)生區(qū)域建議,然后進(jìn)行分類和重劃分。這些算法準(zhǔn)確得多,但效率低下。另一種算法僅使用CNN網(wǎng)絡(luò)來直接預(yù)測不同目標(biāo)的類別和位置,其中成功的例子包括YOLO 和SSD。 其中,YOLO (You Only LookOnce)系列模型是一類廣泛應(yīng)用于目標(biāo)檢測的深度學(xué)習(xí)模型,其獨(dú)特的特點(diǎn)是端到端地檢測,能夠在一次前向傳播中同時完成目標(biāo)檢測和定位,具有高效性和準(zhǔn)確性的優(yōu)勢[4]。
YOLO是目前比較流行的目標(biāo)檢測算法,速度快結(jié)構(gòu)簡單,只需要一次CNN運(yùn)算,提供end-to-end的預(yù)測, YOLO算法不斷改進(jìn),產(chǎn)生了YOLO9000 算法、YOLOv3、YOLOv5 以及較新的YOLOv8算法。YOLOv3 是有著較大改進(jìn),它相對于YOLO 和YOLO9000的改進(jìn)之處在于采用多尺度檢測和darknet53網(wǎng)絡(luò)結(jié)構(gòu),對象分類用Logistic取代了softmax,在一定程度上緩解了小目標(biāo)檢測不到的問題以及多個框疊在一起只能畫出一個框的問題。后續(xù)的YOLO 算法都是在此基礎(chǔ)上做不斷地改進(jìn)和提升。
2.2 YOLOv8模型
YOLOv8 是于2023年1月10日推出的。截至目前,它是計(jì)算機(jī)視覺領(lǐng)域中用于分類、檢測和分割任務(wù)的最先進(jìn)模型。該模型在精度和執(zhí)行時間方面都優(yōu)于所有已知模型。YOLOv8是YOLO系列模型的最新王者,各種指標(biāo)全面超越現(xiàn)有對象檢測與實(shí)例分割模型,借鑒了YO?LOv5、YOLOv6、YOLOX等模型的設(shè)計(jì)優(yōu)點(diǎn),全面提升改進(jìn)YOLOv5 的模型結(jié)構(gòu)基礎(chǔ)上實(shí)現(xiàn),同時保持了YOLOv5工程化簡潔易用的優(yōu)勢。YOLOv8的特點(diǎn)在于融合了許多實(shí)時目標(biāo)檢測中優(yōu)異的技術(shù),仍然采用了YOLOv5中的CSP(跨階段局部網(wǎng)絡(luò))思想、特征融合方法(PAN-FPN)和SPPF模塊[5]。YOLOv8除了支持姿態(tài)評估以外,通過模型結(jié)構(gòu)的修改還支持了小目標(biāo)檢測與高分辨率圖像檢測。如圖1所示官方對YO?LOv5和YOLOv8在 COCO Val 2017數(shù)據(jù)集上訓(xùn)練的結(jié)果對比。每張圖的識別準(zhǔn)確性、訓(xùn)練速度上,YO?LOv8n模型均取得更好的mAP。
YOLOv8主要的創(chuàng)新點(diǎn)包括一個新的骨干網(wǎng)絡(luò)、一個新的 Ancher-Free 檢測頭和一個新的損失函數(shù),可以在從 CPU 到 GPU 的各種硬件平臺上運(yùn)行,具體變化為:
1) 第一個卷積層的 kernel 從 6x6 變成了 3x3。
2) 所有的 C3 模塊換成 C2f,結(jié)構(gòu)如下所示,可以發(fā)現(xiàn)多了更多的跳層連接和額外的 Split 操作去掉了Neck 模塊中的 2 個卷積連接層。
3) Backbone 中 C2f 的 block 數(shù)從 3-6-9-3 改成了 3-6-6-3。
4) N/S 和 L/X 兩組模型改了縮放系數(shù)。
5) Head 部分變化最大,從原先的耦合頭變成了解耦頭,并且從 YOLOv5 的 Anchor-Based 變成了Anchor-Free,而且不再有之前的 objectness 分支,只有解耦的分類和回歸分支。
基于YOLOv8工程化簡潔易用的優(yōu)勢,本系統(tǒng)采用YOLOv8 對垃圾進(jìn)行檢測識別。YOLOv8 模型由Backbone、Neck 和 Head 三個關(guān)鍵部分構(gòu)成。Back?bone主要用于提取圖像特征。 Neck 通常由多個卷積層和特定的激活函數(shù)組成,可以對提取的特征進(jìn)行進(jìn)一步的加工處理。Head 由多個卷積層、激活函數(shù)和上采樣等組成,生成檢測目標(biāo)的位置、類別和置信度等關(guān)鍵信息。 Head 模塊的設(shè)計(jì)和優(yōu)化,對于模型的檢測精度和泛化能力起至關(guān)重要的作用[6]。
3 系統(tǒng)框架
本文中設(shè)計(jì)并實(shí)現(xiàn)了一個基于EdgeAI的可回收垃圾檢測與識別系統(tǒng)。如圖2所示,主要由三個部分構(gòu)建組成:邊緣檢測設(shè)備、邊緣AI計(jì)算盒子和高性能PC服務(wù)器或中央云。
1)高性能PC服務(wù)器。由于訓(xùn)練YOLOv8模型通常需要大量的計(jì)算資源,因此有必要求助于高性能PC服務(wù)器來訓(xùn)練圖像分類模型、存儲圖像或視頻數(shù)據(jù)集。本系統(tǒng)中首先將在高性能PC服務(wù)器完成垃圾分類模型的訓(xùn)練、驗(yàn)證和評估,生成準(zhǔn)確率、性能較好的模型。
2)終端檢測設(shè)備。邊緣檢測設(shè)備由一臺工業(yè)攝像機(jī)構(gòu)成,用于實(shí)時采集垃圾傳送帶上的垃圾圖像,并發(fā)送給邊緣AI計(jì)算盒子進(jìn)行識別。
3)邊緣AI計(jì)算盒子。將高性能PC服務(wù)器生成的模型,依據(jù)邊緣AI計(jì)算盒子硬件要求,進(jìn)行模型適配,轉(zhuǎn)化為輕量級模型,然后應(yīng)用該模型在生產(chǎn)環(huán)境邊緣側(cè)進(jìn)行垃圾推理檢測。最后,根據(jù)垃圾檢測結(jié)果,邊緣AI計(jì)算盒子向機(jī)械臂發(fā)送控制信號,將垃圾放入其正確的容器中。
4 實(shí)驗(yàn)應(yīng)用和驗(yàn)證
4.1 系統(tǒng)準(zhǔn)備
1)硬件平臺設(shè)備準(zhǔn)備。垃圾分揀系統(tǒng)生產(chǎn)環(huán)境仿真平臺硬件設(shè)備主要包括終端檢測設(shè)備、邊緣AI計(jì)算盒子、垃圾傳送帶和分揀機(jī)械臂。其中終端檢測設(shè)備配備了工業(yè)攝像機(jī)、光源。mvubs500c的工業(yè)相機(jī)負(fù)責(zé)使用穩(wěn)定的光源進(jìn)行傳送帶上垃圾圖像捕獲。邊緣AI 計(jì)算盒子 JetsonNano 主要負(fù)責(zé)垃圾實(shí)時推理檢測。2)官網(wǎng)下載YOLOv8預(yù)訓(xùn)練模型。
4.2 數(shù)據(jù)集準(zhǔn)備
我們收集了2 500 多張圖片垃圾圖片,圖像數(shù)據(jù)示例如圖3所示。隨后,使用LabelImg 標(biāo)注工具對每張圖片中的垃圾進(jìn)行標(biāo)注,分為濕的(wet) 、其他的(other)、有害的(hazardous)和可回收的(re?cycle) ,并進(jìn)行數(shù)據(jù)集劃分,其中訓(xùn)練集包含2 192張圖片,驗(yàn)證集包含200張圖片,測試集包含108 張圖片。
4.3 模型的訓(xùn)練和評估
1)模型訓(xùn)練。我們設(shè)定訓(xùn)練的輪數(shù)200,訓(xùn)練的批次為4。需要新建一個yaml文件用于存儲訓(xùn)練數(shù)據(jù)的路徑及模型需要進(jìn)行檢測的類別。YOLOv8在進(jìn)行模型訓(xùn)練時,會讀取該文件的信息,用于進(jìn)行模型的訓(xùn)練與驗(yàn)證。yaml 文件參數(shù)修改的具體內(nèi)容如下:包括對train、val、test三個數(shù)據(jù)集路徑的修改、分類數(shù)和分類標(biāo)簽值的修改。經(jīng)過200次訓(xùn)練后,我們看到各類垃圾的mAP50 都達(dá)到了0.85 以上,平均值為0.884,訓(xùn)練數(shù)據(jù)的總體準(zhǔn)確率高于88%,且每張圖片預(yù)處理時間0.9ms,推理時間為2.8ms,性能較好,如圖4 所示。
2)模型評估。在深度學(xué)習(xí)中,我們通常用損失函數(shù)下降的曲線來觀察模型訓(xùn)練的情況。YOLOv8在訓(xùn)練時主要包含三個方面的損失:定位損失(box_loss)、分類損失(cls_loss)和動態(tài)特征損失(dfl_loss) 。定位損失box_loss:預(yù)測框與標(biāo)定框之間的誤差,越小定位得越準(zhǔn);分類損失cls_loss:計(jì)算錨框與對應(yīng)的標(biāo)定分類是否正確,越小分類得越準(zhǔn);動態(tài)特征損失(dfl_loss) :用于回歸預(yù)測框與目標(biāo)框之間距離的損失函數(shù),越小越準(zhǔn)。本文在模型訓(xùn)練結(jié)束后,通過可視化損失函數(shù)可見模型收斂好,準(zhǔn)確率約在85%以上,如圖5所示。
3)模型測試和驗(yàn)證。在測試集合上對實(shí)物圖片進(jìn)行測試和驗(yàn)證,在四類垃圾上獲得較好的識別效果,如圖6所示。模型訓(xùn)練完成后,可以得到一個最佳的訓(xùn)練結(jié)果模型.pt文件,可以使用該文件進(jìn)行后續(xù)生產(chǎn)環(huán)境邊緣側(cè)的推理檢測。
4.4 工程化落地應(yīng)用
生產(chǎn)環(huán)境邊緣推理測試主要是在英偉達(dá)Jetson?Nano邊緣設(shè)備上運(yùn)行。英偉達(dá)JetsonNano邊緣設(shè)備搭載四核Cortex-A57 處理器,128 核Maxwell GPU 及4GB LPDDR內(nèi)存,有足夠的AI算力,支持NVIDIA Jet?Pack,其中包括用于深度學(xué)習(xí)、計(jì)算機(jī)視覺、GPU計(jì)算、多媒體處理、CUDA,cuDNN 和TensorRT 等軟件庫。首先將PC機(jī)測試通過模型訓(xùn)練完成后,我們可以得到一個最佳的訓(xùn)練結(jié)果模型.pt文件。由于深度學(xué)習(xí)框架中,TensorRT對Pytorch的支持更為友好,因此我們轉(zhuǎn)換為TensorRT部署文件格式,實(shí)現(xiàn)模型優(yōu)化和加速目標(biāo),達(dá)成更高推理速度。具體先將Pytorch模型文件.pt 模型轉(zhuǎn)換為權(quán)重文件 .wts ,最后轉(zhuǎn)換為TensorRT引擎文件.engine,JetsonNano邊緣設(shè)備中運(yùn)行的核心命令如下:
1)進(jìn)入/jetson/yolov8目錄,運(yùn)行命令“cd /jetson/yo?lov8”和“python3 gen_wts.py yolov8s.pt”,將.pt轉(zhuǎn)換為.wts;
2)將前面生成的wts文件從/jetson/yolov8復(fù)制到j(luò)etson/tensorrtx/yolov8里,運(yùn)行命令“sudo ./yolov8 -s ../yolov8s.wts yolov8s.engine s”生成.engine文件。
本文將JetsonNano 邊緣計(jì)算盒子部署到垃圾分揀系統(tǒng)生產(chǎn)仿真平臺,對經(jīng)由終端設(shè)備工業(yè)攝像頭采集的圖像進(jìn)行實(shí)時檢測推理,由于考慮到攝像頭采集圖像頻率和傳送帶速度的協(xié)調(diào)性問題,如果傳送帶速度慢而攝像頭采集速度快,有可能會重復(fù)發(fā)送圖像分類數(shù)據(jù),因此添加圖像采集延時功能,如下所示:
#如果圖像已經(jīng)存在并且允許識別
if show_raw is not None and self.runClassify:#對圖像進(jìn)行分類
category, cls_name, rate, image = self.yolo.predict(show_raw)
current_time = time.time()
inf = (current_time - self.last_time)
if inf >= self.ui.spb_time.value(): #超過指定的時間間隔
self.ui.lbl_msg.setText(′識別中...′)
if cls_name != ′′ and self.ui.slider_conf.value() <=rate * 100 and inf >= self.ui.spb_time.value():
# 發(fā)MQTT消息
if self.client is not None:
config = self.config[′mqtt′]
try:
self. client. publish(config[′topic′], str(category). en?code(encoding="ascii"))
show_image = ImageQt.ImageQt(image)
self. ui. lbl_classify. setPixmap(QtGui. QPixmap. fro?mImage(show_image))
self.ui.lbl_category.setText(cls_name)
self.ui.lbl_rate.setText("{0:.2f}".format(rate))
self.last_time = current_time
self.ui.lbl_msg.setText(′等待分類...′)
except IOError as err:
print(err)
else:
pass
最后,在垃圾分揀生產(chǎn)環(huán)境仿真平臺邊緣側(cè)進(jìn)行垃圾檢測識別驗(yàn)證。實(shí)驗(yàn)證明可以實(shí)時有效檢測識別傳送帶上的垃圾,并通知分揀小車將垃圾送入相應(yīng)裝置。邊緣側(cè)垃圾檢測識別效果如圖7所示。實(shí)驗(yàn)證明系統(tǒng)檢測速度快,準(zhǔn)確性高,滿足工程化應(yīng)用需要。
5 總結(jié)
在本文中,我們基于YOLOv8模型對垃圾圖像進(jìn)行檢測識別,并將在開發(fā)環(huán)境下訓(xùn)練好的垃圾分類模型,適配到生產(chǎn)環(huán)境邊緣側(cè)JetsonNano硬件中,進(jìn)行邊緣側(cè)實(shí)時檢測推理,從而實(shí)現(xiàn)人工智能項(xiàng)目的工程化落地應(yīng)用。系統(tǒng)集成了終端檢測設(shè)備、邊緣AI計(jì)算盒子和高性能PC機(jī),為處理繁重的計(jì)算任務(wù)提供了出色的平臺。
參考文獻(xiàn):
[1] 譚郁松,李恬,張鈺森.面向邊緣智能的神經(jīng)網(wǎng)絡(luò)模型生成與部署研究[J/OL].計(jì)算機(jī)工程,2024.DOI:10.19678/j.issn.1000-3428.0068554.
[2] 葛道輝,李洪升,張亮,等.輕量級神經(jīng)網(wǎng)絡(luò)架構(gòu)綜述[J].軟件學(xué)報(bào),2020,31(9):2627-2653.
[3] 徐小華,周長兵,等.輕量級深度神經(jīng)網(wǎng)絡(luò)模型適配邊緣智能研究綜述[J].計(jì)算機(jī)科學(xué),2024(5).
[4] 馬冉,顧宏.基于改進(jìn)YOLOv8的火災(zāi)目標(biāo)檢測系統(tǒng)[J].人工智能與機(jī)器人研究,2024(1):56-65.
[5] 雷源毅,朱文球,廖歡.復(fù)雜場景下的改進(jìn)YOLOv8n安全帽佩戴檢測算法[J].軟件工程,2023,26(12):46-51.
[6] 王宏宇,韓笑,宋席發(fā),等.基于YOLOv8的路面病害識別方法研究[J].工業(yè)控制計(jì)算機(jī),2024,37(5):98-99,101.
【通聯(lián)編輯:光文玲】