YOLO11是Ultralytics YOLO系列实时目标检测器的最新迭代,它重新定义了尖端精度、速度和效率的可能性。在以往YOLO版本的令人印象深刻的进步基础上,YOLO11在架构和训练方法上引入了重大改进,使其成为广泛计算机视觉任务的多功能选择。
此模型可以做很多很酷的事情,比如:
- 寻找物体:它可以在图像中定位和识别不同的物体,如汽车、人或树木。
- 分类事物:它可以告诉你它看到了什么样的物体,如猫或香蕉。
- 理解物体的形状:它甚至可以勾勒出物体的确切形状,如追踪它。
- 弄清楚姿势:它可以了解人体的位置,比如他们是站着、坐着还是挥手。
主要特点
- 增强特征提取:YOLO11采用了改进的骨干和颈部架构,增强了特征提取能力,实现了更精确的目标检测和复杂任务的性能。
- 优化效率和速度:YOLO11引入了精细的架构设计和优化的训练流程,提供了更快的处理速度,并在准确性和性能之间保持了最佳平衡。
- 参数更少,准确性更高:随着模型设计的进步,YOLO11m在COCO数据集上实现了更高的平均精度均值(mAP),同时比YOLOv8m使用的参数减少了22%,使其在不牺牲准确性的情况下具有计算效率。
- 适应不同环境:YOLO11可以无缝部署在各种环境中,包括边缘设备、云平台和支持NVIDIA GPU的系统,确保了最大的灵活性。
- 支持任务范围广泛:无论是目标检测、实例分割、图像分类、姿态估计还是定向目标检测(OBB),YOLO11都旨在应对多样化的计算机视觉挑战。
数据集信息
在此项目中使用的美国手语(ASL)数据集来源自Roboflow Universe/duyguj/american-sign-language-letters。所有数据集中的图像都预先标记,确保了准确的训练数据。此外,还在Roboflow中应用了数据增强技术以增加数据集的多样性,提高了模型的泛化能力。采用了翻转、旋转和亮度调整等技术。
详细链接:https://app.roboflow.com/duyguj/american-sign-language-letters-vouo0/1
该数据集包含总共1224张图像,分为三组:
- 训练集:1008张图像(82%)
- 验证集:144张图像(12%)
- 测试集:72张图像(6%)
(1) 预处理:
- 自动定向:应用以确保图像正确对齐。
- 调整大小:所有图像都调整大小以适应640x640像素。
(2) 数据增强:
每个训练示例由于增强而有两个输出,包括:
- 旋转:在-15°和+15°之间以模拟不同的手姿。
- 曝光:在-10%和+10%之间调整以适应不同的光照条件。
- 模糊:高达2px以模拟运动或相机模糊。
这种设置旨在通过让模型接触多样化的输入来提高其泛化能力。
(3) 训练过程
YOLO11模型在此ASL数据集上进行了微调,专门用于手语目标检测。这个训练过程包括:
- 数据集增强:使用Roboflow通过转换来增强数据集。
- 模型训练:使用这个增强的数据集训练YOLOv11,并使用单独的验证数据集来验证性能。
- 测试:训练完成后,模型在专用的测试集上进行测试,以评估其预测未见数据的能力。
(4) 性能和观察
最终模型在随机手语图像和视频上进行了测试,以观察其在现实世界中的表现。结果显示了在实时检测不同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) 加载数据集
① 配置API密钥以加载数据集
为了微调YOLO11,你需要提供你的Roboflow API密钥。请按照以下步骤操作:
- 前往你的Roboflow设置页面,点击复制,这将把你的私有密钥放在剪贴板中。
- 在Colab中,转到左侧面板并点击“秘密”(🔑)。
- 在名称为ROBOFLOW_API_KEY下存储Roboflow API密钥。 Roboflow:转到你的Roboflow数据集下载 -> 选择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