较少的参数,更快地,更精确……
概要YOLO11在2024年9月27日的YOLO Vision 2024活动中发布。如果你没赶上这次活动,我强烈推荐你看一下,因为活动中有几位在机器学习和计算机视觉领域非常有分量的演讲者。这里有个链接你可以看看。https://www.youtube.com/watch?v=rfI5vOo3-_A
YOLO11 是 Ultralytics YOLO 系列的最新成员,集成了最前沿的精度、速度和效率,适用于目标检测、分割、分类、定向边界框以及姿态估计。
相比于YOLOv8,它拥有更少的参数且效果更佳,可以预见,YOLO11在边缘设备上运行更高效,将成为计算机视觉领域的主流技术。
主要特点在开始项目之前,让我们来看看与其他模型相比,Roboflow Leaderboard上参数数量低但准确性高的情况。
你需要一个 Google 账户才能使用 Google Colab。
我们用 Colab 进行比如深度学习这样的任务。
我的电脑的 GPU 不给力,所以我得用 Colab 的 GPU 支持。
做完这一步,我们就检查一下GPU的状态。
它支持高达16GB的内存和2560个CUDA内核,以加速各种现代应用程序。
然后执行此代码以动态获取工作目录并灵活处理文件路径。
import os HOME = os.getcwd() # 获取当前工作目录并赋值给变量HOME
接下来,你需要下载Ultralytics包来加载和使用模型,同时下载Roboflow包来处理数据集。
!pip install ultralytics supervision roboflow from ultralytics import YOLO from roboflow import Roboflow # 安装和导入相关的库和模块数据集准备
在这个项目里,我使用了RF100中的parasites数据集。
我将在该数据集中训练一个识别8种不同寄生虫类别的目标检测模型。我将使用Roboflow处理这些带有标签分类的图像。在个人项目中,我经常使用这个开源平台Roboflow。在使用现成的数据集时,您可以在数据集的健康分析部分快速获取大量信息。例如,在类别平衡部分,我们可以看到Hymenolepis类的样本数量较少。
为了提高这一类的准确性,你需要应用数据增强、过采样或调整类别权重。文中不会详细讨论这些问题,不用担心。如果你对这些内容感兴趣,随时可以联系我。如果有足够需求,我也可以分享我在这些方面的详细研究。
你可以下载并使用任何开源项目在roboflow环境下的项目,并按照相应的格式进行。准备好或选择好数据集后,我们会在Colab环境中工作。
我们切换到Colab的原因是它免费提供16GB NVIDIA T4 GPU。下面我会提到这一点。
让我们获取准备好的代码片段和数据格式,以便使用Roboflow API将数据以YOLOv8格式导入。
rf = Roboflow(api_key="your-api-key") project = rf.workspace("roboflow-100").project("parasites-1s07h") version = project.version(2) dataset = version.download("yolov8") !sed -i -e '$d' -e '$d' -e '$d' {dataset.location}/data.yaml # 删除倒数第三行, 删除倒数第二行, 删除最后一行 !echo 'test: ../test/images' >> {dataset.location}/data.yaml !echo 'train: ../train/images' >> {dataset.location}/data.yaml !echo 'val: ../valid/images' >> {dataset.location}/data.yaml
我们需要如下所示更新data.yaml的格式,以用于YOLO11格式的训练。
!sed -i '$d' {dataset.location}/data.yaml # 删除最后一行,然后再删除倒数第二行和第三行 echo 'test: ../test/images' >> {dataset.location}/data.yaml # 添加测试数据路径 echo 'train: ../train/images' >> {dataset.location}/data.yaml # 添加训练数据路径 echo 'val: ../valid/images' >> {dataset.location}/data.yaml # 添加验证数据路径
模型训练
让我们在我们的数据集上训练这个模型40个轮次。
作为该项目的一部分,我通过命令行(CLI)命令展示了训练过程。在用一个简单的命令如下定义完成后,训练就开始。
!yolo task=识别 mode=训练模式 model=yolo11s.pt data={dataset.location}/data.yaml epochs=40 imgsz=640 plots=True
您也可以为自己的项目使用Python来创建它,从而实现更灵活的应用场景。下面是一个示例Python训练代码:
# 示例Python训练代码位置
从 ultralytics 导入 YOLO # 加载一个 COCO 预训练的 YOLO11n 模型 model = YOLO("yolo11n.pt") # 在 COCO8 示例数据集上训练模型,训练轮数为 40,图片尺寸为 640 results = model.train(data="coco8.yaml", epochs=40, imgsz=640)
训练好的模型被保存在 /runs/detect/train/weights 文件夹下的 best.pt。
Google Colab 笔记本具有 90 分钟的空闲超时时间和 12 小时的绝对超时时间。
如果你不想丢失你的数据,请及时备份!
当您的模型训练完成后,您可以利用 YOLO11 生成的图表来评估一下训练的结果。
表现指标值
混淆表
注意: 在训练模型时,查阅Ultralytics文档的训练设置部分中的参数会有很大帮助。这部分对您的训练过程至关重要。
检查模型是否有效这就是为什么使用 YOLO11 的验证模式更有优势:
!yolo task=检测任务 mode=验证模式 model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml
验证结果
总体评价:
我们来看看模型在之前未见过的测试数据集上的预测结果,评估它的泛化能力。
# 测试数据的预测模式 # 使用YOLO命令 !yolo task=detect mode=predict model={HOME}/runs/detect/train/weights/best.pt conf=0.25 source={dataset.location}/test/images save=True
# 可视化最新预测结果 # 获取最新的预测文件夹 latest_folder = max(glob.glob('/content/runs/detect/predict*/'), key=os.path.getmtime) # 遍历最新文件夹中的第一个jpg图片 for img in glob.glob(f'{latest_folder}/*.jpg')[:1]: # 显示图片 display(IPyImage(filename=img, width=600)) # 打印一个换行符 print("\n")
结果是
希望你能跟上并且顺利完成了训练吧。
我想通过搜集新资源为自己和大家写这篇文章,希望它对大家有帮助。继续关注新趋势,保持跟进!
感谢Ultralytics和Roboflow团队的无尽的感谢,他们作为这一领域的先驱,为他们的出色文档和开放源代码贡献表示感谢。
如果您有任何疑问、建议或批评,您可以通过LinkedIn或我的邮件联系我。欢迎随时联系我。
@software{yolo11_ultralytics, author = {Glenn Jocher 及 Jing Qiu,}, title = {Ultralytics YOLO11}, version = {11.0.0}, year = {2024}, url = {https://github.com/ultralytics/ultralytics}, orcid = {0000-0001-5950-6979, 0000-0002-7603-6750, 0000-0003-3783-7069}, license = {AGPL-3.0} }
@misc{ parasites-1s07h_dataset, title = { 寄生虫数据集 }, type = { 开源数据集 }, author = { Roboflow 100 }, howpublished = { 访问链接: [https://universe.roboflow.com/roboflow-100/parasites-1s07h](https://universe.roboflow.com/roboflow-100/parasites-1s07h) }, url = { https://universe.roboflow.com/roboflow-100/parasites-1s07h }, journal = { Roboflow 宇宙 }, publisher = { Roboflow }, year = { 2023 }, month = { 5月 }, note = { 访问日期: 2024年10月1日 }, }
如果你喜欢我的内容,请为我的文章点赞支持一下。我会非常感激你的点赞支持。