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

news/2024/11/26 6:05:48/

效果图

文章中采用的是棋盘格数据,这张图里面用的是开源的模型,可以用于测试,此图为最终效果,加载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: chessboard1: 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.ppmy.cn/news/43058.html

相关文章

一键生成元宇宙 AI又杀疯了

人类十几年的进步水平,AI用几个月就能轻易实现。在展示了超强的文本对话能力和一键生图功能后,AI大模型不打算停下,开始挑战搭建3D空间这一更高难度的动作。 这次,Facebook母公司Meta想当一把主导者。几天前,它的首席…

Typescript类型系统还不会?工具函数不会写?这篇文章教会你

大家好,我想在这里进一步探讨TS面试中常见的问题。在TS中,类型工具是我们经常用到的工具之一。虽然type和interface都用于描述对象,但它们之间有些微妙的不同,例如type可以定义联合类型而interface不能,interface可以合…

数学体操之牛顿数值法解方程的程序和图解

牛顿法是一种用来寻找函数零点的迭代方法,它基于以下思路,如果我们知道了一个函数在某个点的切线,那么函数的零点就可以通过切线与x轴的交点来近似计算。 给定一个函数,找到零点,过程如下: 选择初始点,然后使用这个点处的切线来近似,也就是…

Talk预告 | 新加坡国立大学郑奘巍 AAAI‘23 杰出论文:大批量学习算法加速推荐系统训练

本期为TechBeat人工智能社区第486期线上Talk! 北京时间3月30日(周四)20:00,新加坡国立大学二年级博士生——郑奘巍的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “大批量学习算法加速推荐系统训练”,届时将分…

从C出发 19 --- 函数定义细节剖析

因为编译器是自上而下执行代码的,当编译到 paw2 的时候不知道是什么东西,看起来像一个函数但是前面的代码没有发现它,这个时候编译器就会报错 为了防止编译器报错 应该在调用前先声明 ,注意声明的三要素 声明的作用: 让编译器先…

【hello Linux】环境变量

目录 1. 环境变量的概念 2. 常见的环境变量 3. 查看环境变量 4. 和环境变量相关的命令 5. 环境变量的组织方式 6. 通过代码获取环境变量 7. 通过系统调用获取环境变量 Linux🌷 在开始今天的内容之前,先来看一幅图片吧! 不知道你们是否和我一…

Stable Diffusion成为生产力工具(五):放大并修复老照片、马赛克照片、身份证件照

S:你安装stable diffusion就是为了看小姐姐么? I :当然不是,当然是为了公司的发展谋出路~~ 预先学习: 安装webui《Windows安装Stable Diffusion WebUI及问题解决记录》。运行使用时问题《Windows使用Stable Diffusion时…

计算机发展史-计算机基础知识总结(上)

随着计算机技术的不断发展,计算机已经成为人们日常生活中必不可少的一部分,而且它也对人类社会产生了巨大的影响。本文将从计算机的发展历史、计算机硬件和软件、操作系统、计算机网络、数据库等方面进行系统的介绍,为读者提供计算机基础知识…