AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签

简介: 本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。

若该文为原创文章,转载请注明原文出处。

原本是为部署RK3568而先熟悉yolov10流程的,采用自己的数据集,网上很多,检测竹签,并计数。

1、环境搭建

1.1 官方下载源码

官网地址:YOLOv10 gitbub官网源码
利用魔法进入GitHub官网之后点击下载源码压缩包(这里针对小白使用download,当然也可以使用git clone命令)
image.png

1.2 配置环境

使用的是AutoDL平台

image.png

创建虚拟环境

创建虚拟环境

conda create -n yolov10 python=3.9

初始化

source activate

激活

conda activate yolov10

安装前需要修改requirements.txt文件,把文件里的onnxruntime-gpu==1.18.0改成onnx

runtime-gpu==1.16.0

开始安装

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple

2、测试

测试直接使用官方模型测试

模型下载命令

wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt

这里使用的是 yolov10s.pt。

测试指令

yolo predict model=yolov10s.pt source=ultralytics/assets/bus.jpg

或是使用代码测试

from ultralytics import YOLOv10

# Load a pretrained YOLOv10n model
model = YOLOv10("./weights/zhuqian.pt")

# Perform object detection on an image
results = model.predict("./test.jpg")

# Display the results
results[0].show()
results[0].save()

image.png

3、训练

3.1下载数据集

训练的是自己的数据集,想实现的是数竹签,需要数据集自行下载。

链接:https://pan.baidu.com/s/1paB9rDH8PUBNinw8DzLPiQ?pwd=1234 
提取码:1234 复制这段内容后打开百度网盘手机App,操作更方便哦

直接把数据集解压到yolov10工程目录下。

文件结构如下

image.png

3.2 yaml文件

进入yolov10\ultralytics\cfg\datasets目录,拷贝coco128.yaml文件一份为mycoco128.yaml。

修改mycoco128.yaml, 修改后的文件,修改数据集路径和修改标签。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: G:/资料/嵌入式/【正点原子】RK3568开发板资料(A盘)-基础资料/01、AI例程/Ai_Code/40_yolov10/yolov10/dataset # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: # test images (optional)

# Classes
names:
    0: skewer

# Download script/URL (optional)
#download: https://ultralytics.com/assets/coco128.zip

3.3 训练

使用下面命令训练。

yolo detect train data=/root/yolov10/ultralytics/cfg/datasets/mycoco128.yaml model=yolov10s.pt epochs=100 batch=16 imgsz=640

或代码训练

#coding:utf-8
from ultralytics import YOLOv10
# 模型配置文件
model_yaml_path = "ultralytics/cfg/models/v10/yolov10s.yaml"
#数据集配置文件
data_yaml_path = '/root/yolov10/ultralytics/cfg/datasets/coco128_zhuqian.yaml '
#预训练模型
pre_model_name = 'yolov10s.pt'

if __name__ == '__main__':
    #加载预训练模型
    model = YOLOv10(model_yaml_path).load(pre_model_name)
    #训练模型
    results = model.train(data=data_yaml_path,
                          epochs=150,
                          batch=16,
                          name='train_v10')

这里有个疑问,训练时好像不是使用yolov10s.pt模型,而是会下载yolov8n.pt模型。

image.png

4 结果测试

命令测试

yolo predict model=weights/zhuqian_no.pt source=test.py
命令测试比较方便,但如果想自己写,还是要使用API。

主要还是要学习怎么使用API

import cv2
from  ultralytics import YOLOv10
import os

model = YOLOv10(model="./weigths/best_zq.pt")

def predict(chosen_model, img, classes=[], conf=0.5):
    if classes:
        results = chosen_model.predict(img, classes=classes, conf=conf)
    else:
        results = chosen_model.predict(img, conf=conf)

    return results

def predict_and_detect(chosen_model, img, classes=[], conf=0.5, rectangle_thickness=2, text_thickness=1):
    results = predict(chosen_model, img, classes, conf=conf)
    count = 0
    for result in results:
        for box in result.boxes:
            cv2.rectangle(img, (int(box.xyxy[0][0]), int(box.xyxy[0][1])),
                          (int(box.xyxy[0][2]), int(box.xyxy[0][3])), (255, 0, 0), rectangle_thickness)

            #cv2.putText(img, f"{result.names[int(box.cls[0])]}",
            #            (int(box.xyxy[0][0]), int(box.xyxy[0][1]) - 10),
            #           cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), text_thickness)
            count += 1

    # 在图像上显示计数
    font = cv2.FONT_HERSHEY_SIMPLEX
    text = f"Count: {count}"
    cv2.putText(img, text, (10, 160), font, 5, (00, 00, 255), 4, cv2.LINE_AA)

    return img, results

image_folder = './dataset/images/train/'  # 图片文件夹路径
for image_name in os.listdir(image_folder):
    if image_name.endswith('.jpg') or image_name.endswith('.png'):
        image_path = os.path.join(image_folder, image_name)
        # read the image
        image = cv2.imread(image_path)
        result_img, _ = predict_and_detect(model, image, classes=[], conf=0.4)

        cv2.namedWindow("Image", cv2.WINDOW_NORMAL)
        cv2.moveWindow("Image", 400, 100)

        cv2.imshow("Image", result_img)
        #cv2.imwrite("result.jpg", result_img)
        cv2.waitKey(240)  # 每张图片显示500毫秒

cv2.waitKey(0)  

"""
output_filename = "YourFilename"
writer = create_video_writer(cap, output_filename)
video_path = r"YourVideoPath"
cap = cv2.VideoCapture(video_path)
while True:
    success, img = cap.read()
    if not success:
        break
    result_img, _ = predict_and_detect(model, img, classes=[], conf=0.5)
    writer.write(result_img)
    cv2.imshow("Image", result_img)

    cv2.waitKey(1)
writer.release()
"""

代码比较简单,基本和yolo其他版本差不多。

测试结果

image.png

相关文章
|
3天前
|
机器学习/深度学习 人工智能
SNOOPI:创新 AI 文本到图像生成框架,提升单步扩散模型的效率和性能
SNOOPI是一个创新的AI文本到图像生成框架,通过增强单步扩散模型的指导,显著提升模型性能和控制力。该框架包括PG-SB和NASA两种技术,分别用于增强训练稳定性和整合负面提示。SNOOPI在多个评估指标上超越基线模型,尤其在HPSv2得分达到31.08,成为单步扩散模型的新标杆。
35 10
SNOOPI:创新 AI 文本到图像生成框架,提升单步扩散模型的效率和性能
|
3天前
|
人工智能 搜索推荐 开发者
Aurora:xAI 为 Grok AI 推出新的图像生成模型,xAI Premium 用户可无限制访问
Aurora是xAI为Grok AI助手推出的新图像生成模型,专注于生成高逼真度的图像,特别是在人物和风景图像方面。该模型支持文本到图像的生成,并能处理包括公共人物和版权形象在内的多种图像生成请求。Aurora的可用性因用户等级而异,免费用户每天能生成三张图像,而Premium用户则可享受无限制访问。
33 11
Aurora:xAI 为 Grok AI 推出新的图像生成模型,xAI Premium 用户可无限制访问
|
4天前
|
存储 人工智能 PyTorch
【AI系统】模型转换流程
本文详细介绍了AI模型在不同框架间的转换方法,包括直接转换和规范式转换两种方式。直接转换涉及从源框架直接生成目标框架的模型文件,而规范式转换则通过一个中间标准格式(如ONNX)作为桥梁,实现模型的跨框架迁移。文中还提供了具体的转换流程和技术细节,以及模型转换工具的概览,帮助用户解决训练环境与部署环境不匹配的问题。
17 5
【AI系统】模型转换流程
|
1天前
|
人工智能 安全 测试技术
EXAONE 3.5:LG 推出的开源 AI 模型,采用 RAG 和多步推理能力降低模型的幻觉问题
EXAONE 3.5 是 LG AI 研究院推出的开源 AI 模型,擅长长文本处理,能够有效降低模型幻觉问题。该模型提供 24 亿、78 亿和 320 亿参数的三个版本,支持多步推理和检索增强生成技术,适用于多种应用场景。
24 9
EXAONE 3.5:LG 推出的开源 AI 模型,采用 RAG 和多步推理能力降低模型的幻觉问题
|
4天前
|
机器学习/深度学习 存储 人工智能
【AI系统】模型转换基本介绍
模型转换技术旨在解决深度学习模型在不同框架间的兼容性问题,通过格式转换和图优化,将训练框架生成的模型适配到推理框架中,实现高效部署。这一过程涉及模型格式转换、计算图优化、算子统一及输入输出支持等多个环节,确保模型能在特定硬件上快速、准确地运行。推理引擎作为核心组件,通过优化阶段和运行阶段,实现模型的加载、优化和高效执行。面对不同框架的模型文件格式和网络结构,推理引擎需具备高度的灵活性和兼容性,以支持多样化的应用场景。
18 4
【AI系统】模型转换基本介绍
|
4天前
|
机器学习/深度学习 人工智能 算法
【AI系统】模型压缩基本介绍
模型压缩旨在通过减少存储空间、降低计算量和提高计算效率,降低模型部署成本,同时保持模型性能。主要技术包括模型量化、参数剪枝、知识蒸馏和低秩分解,广泛应用于移动设备、物联网、在线服务系统、大模型及自动驾驶等领域。
27 4
【AI系统】模型压缩基本介绍
|
4天前
|
机器学习/深度学习 存储 人工智能
【AI系统】模型剪枝
本文概述了模型剪枝的概念、方法及流程,旨在通过移除神经网络中冗余或不重要的参数,实现模型规模的减小和效率的提升。剪枝不仅有助于降低模型的存储和计算需求,还能增强模型的泛化能力。文章详细介绍了剪枝的定义、分类、不同阶段的剪枝流程,以及多种剪枝算法,如基于参数重要性的方法、结构化剪枝、动态剪枝和基于优化算法的全局剪枝策略。通过这些方法,可以在保持模型性能的同时,显著提高模型的计算速度和部署灵活性。
16 2
【AI系统】模型剪枝
|
6天前
|
机器学习/深度学习 人工智能 编解码
【AI系统】Transformer 模型小型化
本文介绍了几种轻量级的 Transformer 模型,旨在解决传统 Transformer 参数庞大、计算资源消耗大的问题。主要包括 **MobileVit** 和 **MobileFormer** 系列,以及 **EfficientFormer**。MobileVit 通过结合 CNN 和 Transformer 的优势,实现了轻量级视觉模型,特别适合移动设备。MobileFormer 则通过并行结构融合了 MobileNet 和 Transformer,增强了模型的局部和全局表达能力。
29 8
|
6天前
|
机器学习/深度学习 人工智能 编解码
【AI系统】轻量级CNN模型新进展
本文继续探讨CNN模型的小型化,涵盖ESPNet、FBNet、EfficientNet和GhostNet系列。ESPNet系列通过高效空间金字塔卷积减少运算量;FBNet系列采用基于NAS的轻量化网络设计;EfficientNet系列通过复合缩放方法平衡网络深度、宽度和分辨率;GhostNet系列则通过Ghost模块生成更多特征图,减少计算成本。各系列均旨在提升模型效率和性能,适用于移动和边缘设备。
25 6
|
6天前
|
机器学习/深度学习 存储 人工智能
【AI系统】轻量级CNN模型综述
本文介绍了几种常见的小型化CNN模型,包括SqueezeNet、ShuffleNet、MobileNet等系列。这些模型通过减少参数量和计算量,实现在有限资源下高效运行,适用于存储和算力受限的场景。文章详细解释了各模型的核心技术和优化策略,如Fire Module、Channel Shuffle、Depthwise Separable Convolutions等,旨在帮助读者理解和应用这些高效的小型化CNN模型。
15 3