深度学习检测算法YOLOv5的实战应用

在当前的检测项目中,需要一个高效且准确的算法来处理大量的图像数据。经过一番研究和比较,初步选择了YOLOv5作为算法工具。YOLOv5是一个基于深度学习的检测算法,以其快速和准确而闻名。它不仅能够快速处理图像数据,还能提供较高的检测准确率。

  • 项目地址: https://github.com/ultralytics/yolov5
  • 项目文档:https://docs.ultralytics.com/yolov5/tutorials/

配置环境

环境准备: 在进行YOLOv5的训练和预测之前,我们需要确保环境已经准备好。以下是具体的步骤:

  1. 创建虚拟环境: 使用conda创建一个新的虚拟环境,命名为yolov5。

    conda create -n yolov5 python=3.8
    
  2. 激活虚拟环境: 激活刚刚创建的yolov5虚拟环境。

    conda activate yolov5
    
  3. 安装依赖包: 安装必要的依赖包,这里以GPU环境为例。

    pip install ultralytics
    
  4. 克隆YOLOv5项目: 从GitHub克隆YOLOv5项目。

    git clone https://github.com/ultralytics/yolov5
    
  5. 进入项目目录: 进入克隆的YOLOv5项目目录。

    cd yolov5
    
  6. 安装项目依赖: 安装项目中的依赖包。

    pip install -r requirements.txt
    

    注意:requirements.txt中的troch版本需要与你的硬件资源和CUDA版本相匹配。如果不匹配,可能无法启动GPU进行训练。

通过以上步骤,我们确保了环境已经准备好,可以顺利进行YOLOv5的训练和预测。接下来,将介绍如何进行训练。

训练

使用官方数据或者自己按照coco格式进行标注的数据都可以很简单的开始进行训练。如果是自我标注数据的话,数据格式:

  • images:文件夹里放原始图片;
  • labels:文件夹里放标注的标签文件;

1713752728165.png

训练是深度学习模型的核心环节,它决定了模型的性能和准确性。YOLOv5提供了强大的训练功能,允许用户根据自己的需求进行定制。以下是一个基本的训练命令示例,以及每个参数的含义:

python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml  --batch-size 128
  • -–data coco.yaml:指定训练数据集的配置文件。
  • -–epochs 300:设置训练的轮数(epoch)。
  • -–weights:指定预训练模型的权重,如果使用空字符串,则不加载预训练权重。
  • -–cfg yolov5n.yaml:指定配置文件,用于定义模型的结构和训练参数。
  • -–batch-size 128:设置每次迭代处理的图像数量

以上命令可以再现 YOLOv5 COCO 的效果。模型和数据集将从 YOLOv5 的最新版本中自动下载。在 V100 GPU 上,模型可选YOLOv5n/s/m/l/x,对应 的训练时间分别为 1/2/4/6/8 天(使用多 GPU 训练将更快)。尽可能使用大的 --batch-size 值(16,32,64,128),或者传递 --batch-size -1 以启用 YOLOv5 的自动批量处理功能。显示的批量大小适用于 V100-16GB GPU。训练的时候也可以加入预训练模型和多GPU--weights ./pre-models/yolov5m.pt --device 0,1

可选的预训练模型如下表所示,按照精度和推理时间选择适合自己的模型:

1713753606217.png

1713752328003.png

  • 所有检查点均按照默认设置训练了 300 个epoch。
  • Nano 和 Small 模型采用了 hyp.scratch-low.yaml 的超参数配置,而其他模型则采用了 hyp.scratch-high.yaml。
  • mAPval 值指的是在 COCO val2017 数据集上,单模型单尺度的评估结果。 通过以下命令可以复现这一结果:python val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65
  • 速度是在 AWS p3.2xlarge 实例上,对 COCO val 图像集进行平均测量的。NMS 时间(约每张图像 1 毫秒)未计入其中。 使用以下命令复现速度测试:python val.py --data coco.yaml --img 640 --task speed --batch 1
  • TTA(测试时间增强)包括反射和尺度增强。 通过以下命令可以复现 TTA:python val.py --data coco.yaml --img 1536 --iou 0.7 --augment

1713752673263.png

预测

预测是深度学习模型的最终目的,它将训练好的模型应用于实际数据,以实现目标检测。YOLOv5提供了便捷的预测功能,可以快速对图像或视频进行目标检测。

使用项目已有的detect.py文件进行预测

  • detect.py可在各种不同的来源上执行推理任务,它会自动从最新的 YOLOv5 版本中下载所需的模型或者使用已训练好的模型,并将推断结果保存到 runs/detect 文件夹中。
python detect.py --weights yolov5s.pt --source  img.jpg   # image
  • weights:指定模型的权重文件,这里使用预训练的yolov5s模型,如果本地有的话就不下载,如果没有的话就网上进行下载;
  • source:除了图片,YOLOv5还支持多种输入源,包括视频、网络摄像头、屏幕截图等。可以根据需要选择合适的输入源。
    • 0: # webcam
    • img.jpg # image
    • vid.mp4 # video
    • screen # screenshot
    • path/ # directory
    • list.txt # list of images
    • list.streams # list of streams
    • 'path/*.jpg' # glob
    • 'https://youtu.be/LNwODJXcvt4' # YouTube
    • 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream

使用torch.hub进行预测

YOLOv5 PyTorch Hub 提供自动推理服务。所需的模型将从最新的 YOLOv5 版本自动下载。

import torch# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # or yolov5n - yolov5x6, custom# Images
img = "https://ultralytics.com/images/zidane.jpg"  # or file, Path, PIL, OpenCV, numpy, list# Inference
results = model(img)# Results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

上述内容就是从网络上下载模型并进行推理,如果想使用自己的模型的话进行推理,这里对其进行了封装,代码如下:

import os
import sys
import json
import torch
import numpy as npCURRENT_DIR = os.path.abspath(os.path.dirname(__file__)) + '/'class Detector:"""implement detector"""def __init__(self):# load modelself.model = torch.hub.load(os.path.join(CURRENT_DIR, './'), 'custom',path=os.path.join(CURRENT_DIR, './yolov5s.pt'),source='local', device='cpu')def detect_img(self, img_file):"""detect from inputArgs:file, Path, PIL, OpenCV, numpy, list"""# inferenceresults = self.model(img_file)crops = results.crop(save=False)  # cropped detections dictionaryreturn cropsif __name__ == '__main__':dt = Detector()img = sys.argv[1]detect_res = dt.detect_img(img)print(detect_res)

这里使用results.crop是因为这个返回的信息会比较多,返回的结果包含预测的标签,置信度,以及检测区域等,便于后续业务逻辑处理。

总结

YOLO系列算法是检测算法里面非常实用的一种工具项目,能够在工业界得到很好的使用。本文介绍了一下Yolov5的训练及预测流程,便于大家使用以及后续自己回顾使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/3547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OceanBase诊断调优】——hpet(高精度时钟源)引起的CPU高问题排查

最近总结一些诊断OCeanBase的一些经验,出一个【OceanBase诊断调优】专题出来,也欢迎大家贡献自己的诊断OceanBase的方法。 1. 前言 昨天在问答区帮忙排查一个用户CPU高的问题,帖子链接:《刚刚新安装的OceanBase集群,…

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS 一、设备环境 最理想的输入环境就是在多端都使用同一个词库,这样能保持多端的输入习惯是一致的。 以我为例,手头每天都要用到的操作平台和对应的输入法: 操作系统设…

【热门前端【vue框架】】——vue框架和node.js的下载和安装保姆式教程

👨‍💻个人主页:程序员-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

【ARM 裸机】模仿 STM32 驱动开发

1、修改驱动 对于 STM32 来说,使用了一个结构体将一个外设的所有寄存器都放在一起,在上一节的基础上进行修改; 1.1、添加清除 bss 段代码, 1.2、添加寄存器结构体 新建一个文件,命名imx6u.h,注意地址的连…

NLP Step by Step -- How to use pipeline

正如我们在摸鱼有一手:NLP step by step -- 了解Transformer中看到的那样,Transformers模型通常非常大。对于数以百万计到数千万计数十亿的参数,训练和部署这些模型是一项复杂的任务。此外,由于几乎每天都在发布新模型&#xff0c…

Linux系统网络---DNS域名解析服务

目录 一、DNS的简介 DNS系统的分布式数据结构👇 DNS系统类 两种查询方式 二.正向解析实验 1.先关闭防火墙、selinux 2.安装bind 3.查看配置、修改配置 4.修改区域配置文件 正向解析👇 反向解析👇 5.修改 正向解析&#x1f…

python环境安装jupyter

1 前提条件:python环境 系统:win10 python:本地已经有python,可以查看本地的python版本: C:\Users\PC>python --version Python 3.8.10 2 安装jupyter并启动 安装jupyter C:\Users\PC>pip install jupyter …

Qt xml示范

1.数据格式 #ifndef XML_DATA_H #define XML_DATA_H#include<QWidget>struct Student {int s_id;QString s_name;double s_math_score;double s_english_score;}; struct Teacher{int t_id;QString t_name;QVector<Student> t_students_v; };#endif // XML_DATA_H…

面试:JVM垃圾回收

一、三种垃圾回收算法 1、标记清除&#xff08;已废弃&#xff09; 找到根对象&#xff08;局部变量正在引用的对象、静态变量正在引用的对象&#xff09;&#xff1b;沿着根对象的引用链&#xff0c;查看当前的对象是否被根对象所引用&#xff0c;若被引用&#xff0c;则加上…

区块链 | OpenSea 相关论文:Toward Achieving Anonymous NFT Trading(一)

​ &#x1f951;原文&#xff1a; Toward Achieving Anonymous NFT Trading &#x1f951;写在前面&#xff1a; 本文对实体的介绍基于论文提出的方案&#xff0c;而非基于 OpenSea 实际采用的方案。 其实右图中的 Alice 也是用了代理的&#xff0c;不过作者没有画出来。 正文…

UEFI安全启动模式下安装Ubuntu的NVIDIA显卡驱动

UEFI安全启动模式下安装ubuntu的nvidia显卡驱动 实践设备&#xff1a;华硕FX-PRO&#xff08;NVIDIA GeForce GTX 960M&#xff09; 一、NVIDIA官网下载驱动 1.1在浏览器地址栏输入https://www.nvidia.cn/drivers/lookup/进入网站&#xff0c;接着手动驱动搜索&#xff0c;并…

The Clock and the Pizza [NeurIPS 2023 oral]

本篇文章发表于NeurIPS 2023 (oral)&#xff0c;作者来自于MIT。 文章链接&#xff1a;https://arxiv.org/abs/2306.17844 一、概述 目前&#xff0c;多模态大语言模型的出现为人工智能带来新一轮发展&#xff0c;相关理论也逐渐从纸面走向现实&#xff0c;影响着人们日常生活…

探讨mfc100u.dll丢失的解决方法,修复mfc100u.dll有效方法解析

mfc100u.dll丢失是一个比较常见的情况&#xff0c;由于你电脑的各种操作&#xff0c;是有可能引起dll文件的缺失的&#xff0c;而mfc100u.dll就是其中的一个重要的dll文件&#xff0c;它的确实严重的话是会导致程序打不开&#xff0c;系统错误的。今天我们就来给大家科普一下mf…

太速科技-多路PCIe的阵列计算全国产化服务器

多路PCIe的阵列计算全国产化服务器 多路PCIe的阵列计算全国产化服务器以国产化处理器&#xff08;海光、飞腾ARM、算能RSIC V&#xff09;为主板&#xff0c;扩展6-8路PCIe3.0X4计算卡&#xff1b; 计算卡为全国产化的AI处理卡&#xff08;瑞星微ARM&#xff0c;算能AI&#x…

【stm32】swjtu西南交大嵌入式实验三 外部中断实验:按键中断

实验内容&#xff1a; 1、编写程序&#xff0c;设置主程序&#xff1a;跑马灯以 0.2s 的速度旋转&#xff1b;将 KB1 设置为外部中断&#xff0c;下 降沿触发&#xff0c;按下 KB1 则全彩灯的 R 灯闪烁 5 次。编译、下载程序到开发板&#xff0c;观察实 验现象&#xff1b;按下…

阶跃星辰:探索智能科技的星辰大海

引言 在当今快速发展的科技时代&#xff0c;人工智能已经成为推动社会进步的重要力量。阶跃星辰&#xff0c;正是在这一背景下诞生的。 阶跃星辰是一家专注于通用人工智能探索的公司&#xff0c;成立于2023年4月。该公司的创始团队由一群对人工智能充满热情和渴望的人组成&am…

LM1875L-TB5-T 音频功率放大器 PDF中文资料_参数_引脚图

LM1875L-TB5-T 规格信息&#xff1a; 商品类型音频功率放大器 音频功率放大器的类型- 输出类型1-Channel (Mono) 作业电压16V ~ 60V 输出功率25W x 1 4Ω 额外特性过流保护,热保护 UTC LM1875是一款单片功率放大器&#xff0c;可为消费类音频应 用提供极低失真和高品质的…

物联网鸿蒙实训解决方案

一、建设背景 在数字化浪潮汹涌的时代&#xff0c;华为鸿蒙系统以其前瞻的技术视野和创新的开发理念&#xff0c;成为了引领行业发展的风向标。 据华为开发者大会2023&#xff08;HDC. Together&#xff09;公布的数据&#xff0c;鸿蒙生态系统展现出了强劲的发展动力&#x…

【论文浅尝】Phi-3-mini:A Highly Capable Language Model Locally on Your Phone

Phi-3-mini phi-3-mini&#xff0c;一个3.8亿个参数的语言模型&#xff0c;训练了3.3万亿个token&#xff0c;其总体性能&#xff0c;通过学术基准和内部测试进行衡量&#xff0c;可以与Mixtral 8x7B和GPT-3.5等模型相媲美(在MMLU上达到69%&#xff0c;在MT-bench上达到8.38)&…

深圳证券交易所Binary行情数据接口规范

对接深圳证券交易所Binary行情数据接口其实并不难&#xff0c;你需要具备以下知识。 1、需要了解Binary报文设计结构&#xff0c;消息头消息体消息尾。 消息体&#xff1a; 如果是纯map结构的比较简单&#xff0c;字段平铺开来即可。如{"id":"1","…