基于 ?YOLO11 的手語檢測 | 附數(shù)據(jù)集+代碼
YOLO11是Ultralytics YOLO系列實時目標檢測器的最新迭代,它重新定義了尖端精度、速度和效率的可能性。在以往YOLO版本的令人印象深刻的進步基礎上,YOLO11在架構和訓練方法上引入了重大改進,使其成為廣泛計算機視覺任務的多功能選擇。
此模型可以做很多很酷的事情,比如:
- 尋找物體:它可以在圖像中定位和識別不同的物體,如汽車、人或樹木。
- 分類事物:它可以告訴你它看到了什么樣的物體,如貓或香蕉。
- 理解物體的形狀:它甚至可以勾勒出物體的確切形狀,如追蹤它。
- 弄清楚姿勢:它可以了解人體的位置,比如他們是站著、坐著還是揮手。
主要特點
- 增強特征提?。篩OLO11采用了改進的骨干和頸部架構,增強了特征提取能力,實現(xiàn)了更精確的目標檢測和復雜任務的性能。
- 優(yōu)化效率和速度:YOLO11引入了精細的架構設計和優(yōu)化的訓練流程,提供了更快的處理速度,并在準確性和性能之間保持了最佳平衡。
- 參數(shù)更少,準確性更高:隨著模型設計的進步,YOLO11m在COCO數(shù)據(jù)集上實現(xiàn)了更高的平均精度均值(mAP),同時比YOLOv8m使用的參數(shù)減少了22%,使其在不犧牲準確性的情況下具有計算效率。
- 適應不同環(huán)境:YOLO11可以無縫部署在各種環(huán)境中,包括邊緣設備、云平臺和支持NVIDIA GPU的系統(tǒng),確保了最大的靈活性。
- 支持任務范圍廣泛:無論是目標檢測、實例分割、圖像分類、姿態(tài)估計還是定向目標檢測(OBB),YOLO11都旨在應對多樣化的計算機視覺挑戰(zhàn)。
數(shù)據(jù)集信息
在此項目中使用的美國手語(ASL)數(shù)據(jù)集來源自Roboflow Universe/duyguj/american-sign-language-letters。所有數(shù)據(jù)集中的圖像都預先標記,確保了準確的訓練數(shù)據(jù)。此外,還在Roboflow中應用了數(shù)據(jù)增強技術以增加數(shù)據(jù)集的多樣性,提高了模型的泛化能力。采用了翻轉、旋轉和亮度調整等技術。
詳細鏈接:https://app.roboflow.com/duyguj/american-sign-language-letters-vouo0/1
該數(shù)據(jù)集包含總共1224張圖像,分為三組:
- 訓練集:1008張圖像(82%)
- 驗證集:144張圖像(12%)
- 測試集:72張圖像(6%)
(1) 預處理:
- 自動定向:應用以確保圖像正確對齊。
- 調整大?。核袌D像都調整大小以適應640x640像素。
(2) 數(shù)據(jù)增強:
每個訓練示例由于增強而有兩個輸出,包括:
- 旋轉:在-15°和+15°之間以模擬不同的手姿。
- 曝光:在-10%和+10%之間調整以適應不同的光照條件。
- 模糊:高達2px以模擬運動或相機模糊。
這種設置旨在通過讓模型接觸多樣化的輸入來提高其泛化能力。
(3) 訓練過程
YOLO11模型在此ASL數(shù)據(jù)集上進行了微調,專門用于手語目標檢測。這個訓練過程包括:
- 數(shù)據(jù)集增強:使用Roboflow通過轉換來增強數(shù)據(jù)集。
- 模型訓練:使用這個增強的數(shù)據(jù)集訓練YOLOv11,并使用單獨的驗證數(shù)據(jù)集來驗證性能。
- 測試:訓練完成后,模型在專用的測試集上進行測試,以評估其預測未見數(shù)據(jù)的能力。
(4) 性能和觀察
最終模型在隨機手語圖像和視頻上進行了測試,以觀察其在現(xiàn)實世界中的表現(xiàn)。結果顯示了在實時檢測不同ASL標志方面的有希望的結果,證明了YOLO11架構在處理復雜、基于手勢的任務方面的有效性。
設置和初始化
(1) 訪問GPU
我們可以使用nvidia-smi命令來做到這一點。如果遇到任何問題,請導航到“編輯”->“筆記本設置”->“硬件加速器”,將其設置為GPU。
# “注意:此設置適用于kaggle”
!pip install ultralytics supervision roboflow
from IPython import display
display.clear_output()
!pip install ultralytics --quiet
import ultralytics
ultralytics.checks()
(2) 加載數(shù)據(jù)集
① 配置API密鑰以加載數(shù)據(jù)集
為了微調YOLO11,你需要提供你的Roboflow API密鑰。請按照以下步驟操作:
- 前往你的Roboflow設置頁面,點擊復制,這將把你的私有密鑰放在剪貼板中。
- 在Colab中,轉到左側面板并點擊“秘密”(??)。
- 在名稱為ROBOFLOW_API_KEY下存儲Roboflow API密鑰。 Roboflow:轉到你的Roboflow數(shù)據(jù)集下載 -> 選擇YOLO模型 -> 選擇顯示下載代碼 -> 點擊復制。 在Colab中:轉到左側面板并點擊“秘密”(??)。
- 在一個用戶名下存儲Roboflow API密鑰。
- 在Kaggle中:轉到“插件”→“秘密”→“添加秘密”(??),并存儲你的Kaggle API密鑰和用戶名。
# Save the API key in Kaggle
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
secret_value_0 = user_secrets.get_secret("my_api_key")
# Roboflow Dataset API Code
!pip install roboflow --quiet
from roboflow import Roboflow
rf = Roboflow(secret_value_0)
project = rf.workspace("duyguj").project("american-sign-language-letters-vouo0")
version = project.version(1)
dataset = version.download("yolov11")
② 模型訓練
# Changing to the working directory in Kaggle
%cd /kaggle/working
# Training the YOLO model
!yolo task=detect mode=train model=yolo11n.pt data=/kaggle/working/American-Sign-Language-Letters-1/data.yaml epochs=10 imgsz=640 plots=True
#Results saved to runs/detect/train
#Learn more at https://docs.ultralytics.com/modes/train
from IPython.display import Image as IPyImage
# Display the confusion matrix image from the specified directory in Kaggle
IPyImage(filename='/kaggle/working/runs/detect/train/confusion_matrix.png', width=1000)
IPyImage(filename=f'/kaggle/working/runs/detect/train/results.png', width=1000)
IPyImage(filename=f'/kaggle/working/runs/detect/train/val_batch0_pred.jpg', width=1000)
③ 預測
# Run the prediction task on Test Data
!yolo task=detect mode=predict model=/kaggle/working/runs/detect/train/weights/best.pt conf=0.25 source=/kaggle/working/American-Sign-Language-Letters-1/test/images save=True
#Results saved to runs/detect/predict
#?? Learn more at https://docs.ultralytics.com/modes/predict
import glob
import os
from IPython.display import Image as IPyImage, display
# Get the latest prediction folder for detection in Kaggle
latest_folder = max(glob.glob('/kaggle/working/runs/detect/predict*/'), key=os.path.getmtime)
# Display images from the prediction folder
for img in glob.glob(f'{latest_folder}/*.jpg')[15:18]:
display(IPyImage(filename=img, width=300))
完整代碼:https://www.kaggle.com/code/duygujones/sign-language-detection-using-yolo11