第一章 深度学习入门之流程初体验

news2024/10/5 16:19:05

效果图

文章中采用的是棋盘格数据,这张图里面用的是开源的模型,可以用于测试,此图为最终效果,加载mp4视频,通过opencv读取图像,传递到infer接口,进行推理识别,利用opencv显示出来
在这里插入图片描述


文章目录

  • 效果图
  • 前言
  • 一、数据集生成
    • 1.图像准备
    • 2.图像标注
    • 3.标注成果转换为yolo格式
      • 3.1.开源的python脚本
      • 3.2.自己写脚本转换
  • 二、模型训练
    • 1.安装yolo
    • 2.配置train.yaml
    • 3.执行训练
    • 4.导出onnx
  • 三、TensorRT推理
    • 1.环境安装
    • 2.engine模型转换
    • 3.TensorRT C++ 集成
      • 3.1 tensorRT_Pro
      • 3.2 infer
    • 4.yolo样例数据
  • 总结
    • 过程中遇到的问题
      • 1.执行train.py时提示的错误,这个问题是由于安装了Anaconda后,Anaconda的环境每次启动命令行后自动激活的问题导致,现象表现为打开控制台后,出现命令行前出现 *(base)* 字样
      • 2.使用TensorRT 7.x版本转换生成engine文件时失败,但是8.x正常
      • 3.执行pt转换onnx脚本时,不需要指定 --device ,转化engine才需要


前言

作为一个没有接触过深度学习的码农,此篇文章记录一下自己深度学习入门的一些经验分享,从数据集准备到模型训练生成pt文件,然后通过yolo将模型导出为onnx,通过tensorrt将模型转化为engine规格给tensorrt的infer使用。


一、数据集生成

1.图像准备

准备一些带有目标物体的影像例程中采用相机内标定的棋盘格数据,放在一个目录下。
带有棋盘格的影像

2.图像标注

一般采用开源的软件来做图像标注,如labelme(https://github.com/wkentaro/labelme),在release页面找对应平台的可执行文件。
windows平台
labelme标注软件使用方法:标注完成后点击 上一张 下一张 可以切换图像,会在图像目录生成对应json文件
label名称要写对,注意图片里面的配置项,取消保存图像数据可以减小json体积

3.标注成果转换为yolo格式

labelme出来的成果为json格式,图片和json在1个目录,记录的是标注框的左上和右下角点
需要注意的是这2个角点没有顺序

yolo需要的成果为txt格式,分images和labels目录,train.txt和val.txt分别记录用于训练的样本和用于验证的样本,一般比例为8:2。文件格式为labelId cx cy w h空格 分隔,值为归一化的值
归一化的值
yolo数据集转化方法

3.1.开源的python脚本

Labelme2YOLO(https://github.com/rooneysh/Labelme2YOLO)

3.2.自己写脚本转换

到此位置样本数据准备完成,可以进行后续训练和检测操作了

TODO.

二、模型训练

1.安装yolo

前提:pycharm已安装,python > 3.7
源码:https://github.com/ultralytics/yolov5.git,参考readme.md安装依赖

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

目录

2.配置train.yaml

在yolo源码的data目录新建1个train.yaml,内容如下

# 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: D:/XmpCache/yolov5_images
train: train.txt  # train images (relative to 'path') 118287 images
val: val.txt  # val images (relative to 'path') 5000 images

# Classes
names:
  0: chessboard
  1: fisheye_chessboard

红框为必须文件


3.执行训练

通过传递参数,就不用去动yolo源码脚本了

python train.py --cfg models/yolov5s.yaml --data data/train.yaml --batch-size 4

4.导出onnx

通过传递参数,就不用去动yolo源码脚本了

#yolo训练的模型在yolo/runs/expX/weights目录下,X为执行次数,best.pt为最好的那次结果,last.pt为最新的那次结果
python .\export.py --weights .\runs\train\exp5\weights\best.pt --include onnx --opset 12

三、TensorRT推理

1.环境安装

cudNN、TensorRT版本需要和CUDA版本对应,目前cuda-11.1、cuDNN-8.0.5、TensorRT-8.0.1.6/7.2.3.4测试通过

安装 CUDA:https://developer.nvidia.com/cuda-downloads
安装 cuDNN:https://developer.nvidia.com/nvidia-tensorrt-8x-download
安装 TensorRT:https://developer.nvidia.com/rdp/cudnn-download

2.engine模型转换

tensorrt pathto\trtexec --onnx=best.onnx --saveEngine=chessboard.engine

3.TensorRT C++ 集成

目前比较好用的C++ Infer的SDK

3.1 tensorRT_Pro

源码:(https://github.com/shouxieai/tensorRT_Pro.git)

3.2 infer

源码:(https://github.com/shouxieai/infer.git)
在这里插入图片描述

4.yolo样例数据

总结

过程中遇到的问题

1.执行train.py时提示的错误,这个问题是由于安装了Anaconda后,Anaconda的环境每次启动命令行后自动激活的问题导致,现象表现为打开控制台后,出现命令行前出现 (base) 字样

报错OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
解决方案:关闭Anaconda的base环境自动激活功能

#在Anaconda的prompt中输入: 
config --set auto_activate_base false 

此时再打开pycharm命令行可以看到环境提示为venv
在这里插入图片描述

2.使用TensorRT 7.x版本转换生成engine文件时失败,但是8.x正常

Input dimensions [1,3,80,80,6] have volume 115200 and output dimensions [1,1]
解决方案:此时注意onnx的opset版本为17或更高,需要在yolo执行export.py时将他的opset版本修改为12左右即可

3.执行pt转换onnx脚本时,不需要指定 --device ,转化engine才需要

以上就是本次要写的内容,本文仅仅简单介绍了yolo+tensorrt入门级的使用。

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

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

相关文章

比较好的文档翻译软件-哪个翻译软件最精准

免费语言翻译软件可以帮助用户快速准确地翻译语言,其主要作用如下: 辅助语言学习:语言翻译软件可以帮助用户学习语言,让用户更好地理解在不同语言之间的差异,从而使语言学习更加高效。 翻译外语内容:语言翻…

Java中常见的几种分布式锁介绍及实战应用

文章目录什么是锁?场景描述代码示例总结Java中单体应用锁的局限性&分布式锁前言互联网系统架构的演进单体应用锁的局限性什么是分布式锁分布式锁的设计思路目前存在的分布式的方案Java中锁的解决方案前言乐观锁 与 悲观锁公平锁 与 非公平锁总结分布式锁设计如何…

Python基础教程:__call__用法

人生苦短,我用python python 安装包资料:点击此处跳转文末名片获取 __call__可以使得方法变成可被调用对象; (PS:python中的方法和普通函数有点区别: 方法的第一个参数是类实例) 允许一个类的实例像函数一样被调用。 实质上说…

相机雷达时间同步(基于ROS)

文章目录运行环境:思路:同步前和同步后效果对比1.1创建工作空间1.2创建功能包2.1编写源文件2.2编写头文件2.3编写可执行文件2.4配置文件3.1编译运行4.1录制时间同步后的rosbag4.2rviz可视化rosbag运行环境: ubuntu20.04 noetic usb_cam 速腾R…

小黑子—Java从入门到入土过程:第七章

Java零基础入门7.0Java系列第七章1. 游戏打包exe2. API2.1 Math2.2 练习2.2.1 判断质数2.2.2 判断水仙花数(自幂数)2.3 System2.4 Runtime2.5 Object2.5.1 Object 的成员方法(1) toString(2) equals 比较两个对象是否相等(3) clone方法(Objec…

投放视频广告时,如何快速与第三方播放器兼容?

新媒体时代,广告样式越来越丰富。相较于传统的图文信息,视频类广告更具有直观性,能够让消费者在了解产品知识和功能的同时加深对产品的印象。 因此在各类网站或App上投放视频类广告是个很好的宣传方式,但广告商们如果想在网站上展…

1.14 从0开始学习Unity游戏开发--物理引擎

上一篇文章我们讲了如何动态创建物体,以及如何用Prefab机制复用我们制作好的物体和逻辑,那么本篇我们将会讲解如何利用这些功能,结合Unity自带的物理引擎,实现一个简单的FPS游戏的效果。 物理组件 首先我们需要先了解如何使用Un…

Linux基础(超级无敌认真好用,万字收藏篇!!!!)

文章目录Linux基础1 Linux概述1.1 Linux特点1.2 Linux和Window区别2 Linux安装2.1 什么是虚拟化2.2 安装虚拟机2.3 配置网络环境3 Linux文件目录4 Linux常用命令4.1 文件与目录操作4.2 查看文件内容4.3 文本内容处理4.4 查询操作4.5 网络相关4.6 其他命令4.7 解压缩命令5 VI/VI…

今天面了个腾讯拿 38K 出来的,让我见识到了基础的天花板

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

0102加权quick_union和路径压缩-union-find-动态连通性-算法研究

3 union-find算法 3.5 加权quick-union算法 3.5.1 算法实现 quick-union出现最坏情况,因为我们是随意将一棵树链接到另外一棵树上,修改如下: 添加一个数组和一些代码记录树中节点数;链接时将节点数较小的树链接到较大的树上&a…

基础算法-双指针,滑动窗口,位运算,区间离散化

双指针 两种类型 for(int i0,j0;i<n;i) {while(i<j&&check(i,j)) j;// 每道题目具体逻辑}双指针最核心的性质 可以优化 输入一个字符串 把每个单词输出出来 i找到单词开头 j找到空格 vector<string> rs; for(int i0,j0;i<s.size();i) {ji;while(j&…

.Net Forms Resize 12 Crack

.Net Forms Resize 12 Crack 添加了对Microsoft Visual Studio 2022(v17.5.3)及更高版本的支持。 增加了对Microsoft Windows Server 2019和2022的支持。 改进并调整引擎大小(大约快20%)。 更新与受支持的第三方控件的新版本的兼容性。 添加了新的Microsoft Framework 4.8.1库。…

in、not in、between and、基本查询数据库实验三 单表查询(一)(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴&#xff0c;并无盈利目的&#xff0c;尊重版权&#xff0c;如有侵犯&#xff0c;请官方工作人员联系博主谢谢。 目录 第1关&#xff1a;基本查询语句 任务描述 相关知识 查询数据表中指定字段的内容 查询数据表中的所有内容 …

Ucore lab2

练习一&#xff1a;实现first-fit 连续物理内存分配算法 根据实验指导书中的实验执行流程概述&#xff0c;先了解分析ucore如何对物理内存进行管理&#xff0c;再完成实验练习。 在对物理内存进行管理之前&#xff0c;需要先进行物理内存布局的探测&#xff0c;探测得到的内存…

[LeetCode解题报告] 1157. 子数组中占绝大多数的元素

[LeetCode解题报告] 1157. 子数组中占绝大多数的元素 一、 题目1. 题目描述2. 原题链接二、 解题报告1. 思路分析2. 复杂度分析3. 代码实现三、 本题小结四、 参考链接一、 题目 1. 题目描述 2. 原题链接 链接: 1157. 子数组中占绝大多数的元素 二、 解题报告 1. 思路分析 …

python+requests的接口自动化测试框架实例详解教程

目录 前言 一、环境准备 二、设计框架结构 三、实现框架功能 四、执行测试用例 五、总结 前言 Python是一种简单易学、功能强大的编程语言&#xff0c;广泛应用于各种软件开发和测试场景中。requests是Python中流行的HTTP库&#xff0c;支持发送HTTP请求和处理HTTP响应&a…

【c语言】多维数组原理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

话说~~ HTTP协议请求的工作流程 (Web服务请求过程)最细详解

目录 文章导入 &#xff1a; 概述 &#xff1a; 详解过程 &#xff1a; DNS域名解析 &#xff1a; DNS 域名解析过程分析 &#xff1a; TCP连接搭建 &#xff1a; 等待TCP队列 建立TCP连接 发起 HTTP 请求 &#xff1a; # 哪是如何进行 HTTP 请求的呢 &#…

实验架构的部署

目录 实验要求 实验环境 1、部署静态页面 2、部署负载均衡 3、搭建动态网页 4、 nginx反向代理 5、部署NFS 7、mysql 安装mysql 安装mha 准备主从复制 开启mha 架构的部署 实验要求 完成用户访问时虚拟IP由LVS负责高可用&#xff0c;静态交给nginx处理&#xff0c;…

【工具篇】Spring Boot 整合阿里云短信-SMS

短信服务-SMS 短信服务&#xff08;Short Message Service&#xff09;是广大企业客户快速触达手机用户所优选使用的通信能力&#xff0c;分为国内短信服务和国际/港澳台短信服务。通过 API/SDK、控制台调用短信发送能力&#xff0c;将指定信息发送至国内或境外手机号码。 应…