如何在Jetson Nano上使用YOLOv8實時檢測和計數(shù)空白空間
在Jetson nano優(yōu)化的邊緣AI上使用YOLOv8實時有效地檢測和計數(shù)空白空間,以實現(xiàn)更智能的空間管理。
1. 概述
在停車場、零售貨架和倉庫中,有效地管理空置空間是一個共同的挑戰(zhàn)。本項目演示了,提供了一個由邊緣人工智能驅(qū)動的經(jīng)濟高效的解決方案。
YOLOv8(你只看一次,版本8)。是一種最先進的物體檢測模型,以其速度和準確性而聞名。它能夠快速準確地實時識別物體,使其成為空空間檢測應(yīng)用的理想選擇。通過定制YOLOv8,我們可以訓練模型專門識別Empty Space,增強其有效性。
Jetson Nano是NVIDIA開發(fā)的一款功能強大但價格實惠的邊緣人工智能平臺,是部署基于yolov8的空白空間探測系統(tǒng)的絕佳選擇。其緊湊的尺寸、低功耗和強大的GPU功能使其非常適合在邊緣運行復雜的人工智能模型。
2.硬件配置
3. 軟件配置
4.準備數(shù)據(jù)集
下載具有所需格式的數(shù)據(jù)集,如下圖所示。
該數(shù)據(jù)集組織良好,包括以JSON格式注釋的圖像,分為三類:訓練(494張圖像)、測試(74張圖像)和有效(140張圖像)。它具有三個類(available_1, available_2, available_3)。YAML文件和其他文本文件提供了配置設(shè)置和說明,以方便在機器學習工作流程中使用數(shù)據(jù)集。
5.訓練模型
要培訓YOLOv8或更高版本(因為YOLOv8是Ultralytics的產(chǎn)品),請參閱Ultralytics文檔以獲取詳細說明。使用空白空間數(shù)據(jù)集自定義YOLOv8,如使用YOLOv8的實時空白空間檢測和計數(shù)教程所示,涉及在針對您的應(yīng)用程序量身定制的特定目標數(shù)據(jù)集上訓練YOLOv8。
5.1. 配置培訓環(huán)境:
使用提供的YAML文件配置訓練參數(shù)。該文件將包括計算機上數(shù)據(jù)集的路徑、類的數(shù)量和其他必要的設(shè)置。
一個示例YAML配置可能如下所示:
5.2. 訓練模型
5.3. 空間建筑
下圖說明了空空間檢測架構(gòu)。它包括通過凍結(jié)某些層的權(quán)重來微調(diào)預訓練的YOLOv8模型,并將輸出通過密集層進行墜落運動分類。
5.4.訓練模型
6. 評估模型的性能
評估結(jié)果表明,平均精密度(mAP)為99%,精密度為99%,召回率為99%。這些圖提供了我們的模型性能的可視化,說明了它在通過訓練結(jié)果圖和混淆矩陣檢測跌倒方面的魯棒性。
7.Hareware設(shè)置
8.推理
這段Python代碼會進行推斷,實時檢測某個空間是空的還是可用的。
代碼
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO(r'D:\My-Pretrained\empty_space.onnx')
cap = cv2.VideoCapture(0)
def count_available_spaces(results):
available_count = 0
for result in results:
for label in result.boxes.cls:
if model.names[int(label)] == "available_3":
available_count += 1
return available_count
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 inference on the frame
results = model(frame)
# Count the available spaces
available_count = count_available_spaces(results)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the count of available spaces on the frame
cv2.putText(annotated_frame, f"Available Spaces: {available_count}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
本文編譯自hackster.io