点击下方卡片,关注“小白玩转Python”公众号

YOLO11是Ultralytics YOLO系列实时目标检测器的最新迭代,它重新定义了尖端精度、速度和效率的可能性。在以往YOLO版本的令人印象深刻的进步基础上,YOLO11在架构和训练方法上引入了重大改进,使其成为广泛计算机视觉任务的多功能选择。

29d97bf76e79d76465f7e044b2553ca5.png

此模型可以做很多很酷的事情,比如:

  • 寻找物体:它可以在图像中定位和识别不同的物体,如汽车、人或树木。

  • 分类事物:它可以告诉你它看到了什么样的物体,如猫或香蕉。

  • 理解物体的形状:它甚至可以勾勒出物体的确切形状,如追踪它。

  • 弄清楚姿势:它可以了解人体的位置,比如他们是站着、坐着还是挥手。

主要特点

  • 增强特征提取: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%)

预处理:

  • 自动定向:应用以确保图像正确对齐。

  • 调整大小:所有图像都调整大小以适应640x640像素。

数据增强:

每个训练示例由于增强而有两个输出,包括:

  • 旋转:在-15°和+15°之间以模拟不同的手姿。

  • 曝光:在-10%和+10%之间调整以适应不同的光照条件。

  • 模糊:高达2px以模拟运动或相机模糊。

这种设置旨在通过让模型接触多样化的输入来提高其泛化能力。

训练过程

YOLO11模型在此ASL数据集上进行了微调,专门用于手语目标检测。这个训练过程包括:

  • 数据集增强:使用Roboflow通过转换来增强数据集。

  • 模型训练:使用这个增强的数据集训练YOLOv11,并使用单独的验证数据集来验证性能。

  • 测试:训练完成后,模型在专用的测试集上进行测试,以评估其预测未见数据的能力。

性能和观察

最终模型在随机手语图像和视频上进行了测试,以观察其在现实世界中的表现。结果显示了在实时检测不同ASL标志方面的有希望的结果,证明了YOLO11架构在处理复杂、基于手势的任务方面的有效性。

设置和初始化

访问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()

加载数据集

1. 配置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)

a38dc2f7b72903ed4405b2d9c6c4eeb1.png

IPyImage(filename=f'/kaggle/working/runs/detect/train/results.png', width=1000)

af7b61024fea359a3a22bb184f47de73.png

IPyImage(filename=f'/kaggle/working/runs/detect/train/val_batch0_pred.jpg', width=1000)

7dadd01607e8f385b4b591eb5302d651.jpeg

预测

# 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))

d079bb454e6c3d48c805a81b0de7b98e.jpeg

7ab640c7d3e9fa7b471d57175858ff05.jpeg

完整代码:https://www.kaggle.com/code/duygujones/sign-language-detection-using-yolo11

·  END  ·



🌟 想要变身计算机视觉小能手?快来「小白玩转Python」公众号!
回复“Python视觉实战项目”,解锁31个超有趣的视觉项目大礼包!🎁



本文仅供学习交流使用,如有侵权请联系作者删除
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐