yolov5自动训练/预测-小白教程

文章目录

  • 引言
  • 一、配置参数设置
    • 1、数据参数配置
    • 2、模型训练参数配置
    • 3、模型预测参数配置
  • 二、一键训练/预测的sh介绍
    • 1、训练sh文件(train.sh)介绍
    • 2、预测sh文件(detect.sh)介绍
  • 三、本文训练main代码解读
    • 1、训练main函数解读
    • 2、数据加工与参数替换
  • 四、本文预测main代码解读
    • 1、训练main函数解读
    • 2、参数替换
    • 3、自动生成xml文件
  • 五、模型展示
    • 1、模型架构展示
    • 2、训练效果展示
    • 3、预测效果展示

引言

本文章基于客户一键训练与测试需求,我将yolov5模型改成较为保姆级的一键操作的训练/预测方式,也特别适合新手或想偷懒转换数据格式的朋友们。本文一键体现只需图像文件与xml文件,调用train.sh与detect.sh可完成模型的训练与预测。而为完成该操作,模型内嵌入xml转yolov5的txt格式、自动分配训练/验证集、自动切换环境等内容。接下来,我将介绍如何操作,并附修改源码。

源码链接:我已上传个人资源,请自行下载!

一、配置参数设置

该文件是yolo数据的文件,被我修改满足一键训练与测试文件的配置参数,主要包含数据参数配置、训练参数配置与检测参数配置。

1、数据参数配置

数据参数配置为图像与xml路径配置、转换yolov5数据格式保存路径、训练/验证/测试比列分配、对应yolov5数据文件参数配置,详情如下:

# 设置img与xml的文件路径,也可为同一个文件,按照xml选择img
img_path: /home/auto_yolo/data/example_data
xml_path: /home/auto_yolo/data/example_data# 设置数据集训练与验证集测试的比率,和小于1,通常test比率不设置为0
train_rate: 0.8
val_rate: 0.2
test_rate:
# 设置转换数据保存路径
path: /home/auto_yolo/data/yolo_data
train: images/train
val: images/val
test:  
# Classes
nc: 3
names: ['car', 'moto', 'person'] 

2、模型训练参数配置

模型训练相关设置,若需要设置则对应相应值,否则不填,使用默认设置,其详情如下:

# 训练模型选择参数设置
imgsz:
batch_size: 2
epochs: 
resume: False
device:
workers:
model_scale: s  #模型型号参数,s表示yolov5s模型

3、模型预测参数配置

模型预测相关设置,若需要设置则对应相应值,否则不填,使用默认设置,其详情如下:
特别说明:auto_xml参数表示是否生成xml标签数据


#detect测试参数设置,无需关心上面所有参数
weights: /home/hncy/Project/tj/auto_try/yolov5-6.0/yolov5s.pt
source: /home/hncy/Project/tj/auto_yolo/data/example_data#测试模型选择参数设置
detect_imgsz:
conf_thres:
iou_thres:
auto_xml: True  # 模型预测自动生成有标注框的xml文件

二、一键训练/预测的sh介绍

1、训练sh文件(train.sh)介绍

训练文件为sh文件,只需通过以下命令,实现训练。

sh train.sh

该文件包含虚拟环境切换与自动调用模型训练,其详情如下:


# train.shecho -e "\n"train time $(date "+%Y-%m-%d")"\n"# 更换虚拟环境__conda_setup="$('/home/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; theneval "$__conda_setup"elseif [ -f "/home/anaconda3/etc/profile.d/conda.sh" ]; then. "/home/anaconda3/etc/profile.d/conda.sh"elseexport PATH="/home/anaconda3/bin:$PATH"fi
fi
unset __conda_setup
conda activate torch1.8cur_dir=$(cd `dirname $0`;pwd)  # 获得当前路径
echo -e  "\ncur_dir:"${cur_dir}"\n"yaml_dir=$cur_dir/coco128_auto.yaml
echo -e  "\nyaml_dir:"${yaml_dir}"\n"save_dir=$cur_dir/runs/train
echo -e "\nsave_dir:"$save_dir"\n"if [ -d ${save_dir} ];thenecho "save_dir 文件存在"elseecho "save_dir文件不存在-->创建文件"mkdir -p  $save_dir
fimodel_dir=/home/auto_try/yolov5-6.0cd ${model_dir}lsecho -e "\n\n\n\t\t\t start train  ... \n\n\n"python  train_auto.py  --data $yaml_dir  

2、预测sh文件(detect.sh)介绍

预测文件为sh文件,只需通过以下命令,实现训练。

sh detect.sh

该文件包含虚拟环境切换与自动调用模型预测,其详情如下:


# detect.shecho -e "\n"detect time $(date "+%Y-%m-%d")"\n"# 更换虚拟环境__conda_setup="$('/home/hncy/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; theneval "$__conda_setup"elseif [ -f "/home/anaconda3/etc/profile.d/conda.sh" ]; then. "/home/anaconda3/etc/profile.d/conda.sh"elseexport PATH="/home/anaconda3/bin:$PATH"fi
fi
unset __conda_setup
conda activate torch1.8cur_dir=$(cd `dirname $0`;pwd)  # 获得当前路径
echo -e  "\ncur_dir:"${cur_dir}"\n"yaml_dir=$cur_dir/coco128_auto.yaml
echo -e  "\nyaml_dir:"${yaml_dir}"\n"save_dir=$cur_dir/runs/detect
echo -e "\nsave_dir:"$save_dir"\n"if [ -d ${save_dir} ];thenecho "save_dir 文件存在"elseecho "save_dir文件不存在-->创建文件"mkdir -p  $save_dir
fimodel_dir=/home/auto_try/yolov5-6.0cd ${model_dir}lsecho -e "\n\n\n\t\t\t start detect  ... \n\n\n"python  detect_auto.py  --data $yaml_dir  

三、本文训练main代码解读

1、训练main函数解读

可看出训练main函数多了replace_parameter(opt)函数,该函数为数据加工处理。

if __name__ == "__main__":opt = parse_opt()opt=replace_parameter(opt)main(opt)

2、数据加工与参数替换

数据转换主要将xml文件转成txt文件格式,可参考我的博客,xml转txt博客点击这里
。另一个是模型参数更换,其代码如下:


def replace_parameter(opt):cfg_yaml=product_yolo_dataset(opt.data)if cfg_yaml['imgsz'] is not None: opt.imgsz=cfg_yaml['imgsz']if cfg_yaml['batch_size'] is not None: opt.batch_size = cfg_yaml['batch_size']if cfg_yaml['epochs'] is not None: opt.epochs = cfg_yaml['epochs']if cfg_yaml['resume'] is not None: opt.resume = cfg_yaml['resume']if cfg_yaml['model_scale'] =='n':opt.weights = ROOT / 'yolov5n.pt'elif cfg_yaml['model_scale'] =='s':opt.weights = ROOT / 'yolov5s.pt'elif cfg_yaml['model_scale'] =='m':opt.weights = ROOT / 'yolov5m.pt'yaml_parent=Path(opt.data).parentopt.project=os.path.join(yaml_parent,'runs','train')return opt

四、本文预测main代码解读

1、训练main函数解读

可看出训练main函数多了replace_detect_parameter(opt)函数,该函数为数据加工处理。

if __name__ == "__main__":opt = parse_opt()opt = replace_detect_parameter(opt)main(opt)

2、参数替换

该函数是替换模型预测参数,我将不在介绍,其代码如下:


def replace_detect_parameter(opt):cfg_yaml=read_yaml(opt.data)if cfg_yaml['weights'] is  None :raise FileExistsError("lacking weights path")if cfg_yaml['source'] is  None:raise FileExistsError("lacking source path")opt.weights = cfg_yaml['weights']opt.source = cfg_yaml['source']opt.auto_xml = True if cfg_yaml['auto_xml'] else Falseif cfg_yaml['detect_imgsz'] is not None : opt.imgsz=cfg_yaml['detect_imgsz']if cfg_yaml['iou_thres'] is not None : opt.iou_thres=cfg_yaml['iou_thres']if cfg_yaml['conf_thres'] is not None: opt.conf_thres = cfg_yaml['conf_thres']yaml_parent=Path(opt.data).parentopt.project=os.path.join(yaml_parent,'runs','detect')del opt.dataprint_args(FILE.stem, opt)return opt

3、自动生成xml文件

我想说预测代码的自动生成xml方法,该部分在检测文件的run函数中,添加内容如下:

if auto_xml:create_xml_by_predect_xml(det, im0s.copy(), names, hide_conf, hide_labels, video_num, save_path)video_num+=1

我将预测结果生成xml标注,无论预测视频或预测图像均可实现该目的,我不在介绍,读者可查看代码,其调用函数如下:

def create_xml_by_predect_xml(det,img,names,hide_conf,hide_labels,video_num,save_path):save_xml = Path(save_path)save_xml_parent = save_xml.parentsave_xml_path = build_dir(os.path.join(save_xml_parent, 'xml_dir'))if save_xml.suffix in ['.jpg', '.png', '.bmp']:write_img_name = save_xml.namesave_xml_name = write_img_name.replace(save_xml.suffix, '.xml')else:write_img_name = 'video_' + str(video_num) + '.jpg'save_xml_name = write_img_name.replace('.jpg', '.xml')save_xml_img_path = os.path.join(save_xml_path, write_img_name)save_xml_xml_path = os.path.join(save_xml_path, save_xml_name)bboxes_lst=[]cat_lst=[]for *xyxy, conf, cls in reversed(det):c = int(cls)  # integer classlabel = None if hide_labels else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')box = [int(xyxy[0]), int(xyxy[1]), int(xyxy[2]), int(xyxy[3])]cat=label.split(' ')[0]if cat is not None and box is not None:cat_lst.append(cat)bboxes_lst.append(box)if cat_lst !=[]:tree, xml_name = product_xml(write_img_name, bboxes_lst, cat_lst, img=img)tree.write(save_xml_xml_path)cv2.imwrite(save_xml_img_path,img)

五、模型展示

1、模型架构展示

在这里插入图片描述

2、训练效果展示

在这里插入图片描述

3、预测效果展示

在这里插入图片描述

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

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

相关文章

单片机内存管理

源码说明 源码包含memory.h 和 memory.c 两个文件(嵌入式C/C代码的“标配”),其源码中包含重要的注释。 memory.h文件包含结构体等定义,函数API申明等; memory.c文件是实现内存管理相关API函数的原型。 memory.h …

相机HAL

相机HAL 1、概览实现 HAL2、相机 HAL2.1 AIDL 相机 HAL2.2 相机 HAL3 功能2.3 Camera HAL1 概览 相机 HAL 相机 实现 HAL android12-release 1、概览实现 HAL HAL 位于 相机驱动程序 和 更高级别的 Android 框架 之间,它定义您必须实现的接口,以便应用…

城市管网污水监测方案,科技助力污水排放管理!

根据《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》各地要明确“水污染,谁治理”和政府兜底的原则,明确排污主体责任。根据排污口类型集中整治,划分主体。加大私设暗管借道排污的监察力度溯源主体责任。加强科技研发&#xf…

Java实现添加文字水印、图片水印功能实战

Java实现添加文字水印、图片水印功能实战 本文介绍java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便。 java实现给图片添加水印实现步骤: 获取原图片对象信息(本地图片或网络图片)添加水印&#…

9月20日作业

时钟代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QTime> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class W…

初识canvas

对于一个前端人员来说&#xff0c;canvas是必须掌握的技能之一。如果你想像画画一样在浏览器上作画&#xff0c;那么canvas就可以做你的画布。 接下啦我们就以画画的标准来初步认识下canvas 1.画布 画画的第一步你得有一张画纸或者画布&#xff0c;canvas标签就是我们的画布…

中华崛起,科技强国!这三款充满科技风的科技模板,一起来探索吧

最近是不是都被华为mate60和苹果15刷屏了啊 &#xff0c;在我们的生活中&#xff0c;科技有着千变万化的面貌。它让我们的世界变得越来越小&#xff0c;让我们的生活越来越便捷。它使我们的梦想成为现实&#xff0c;使我们的思想得以落地。它打开了新的视野&#xff0c;为我们提…

grafana对指标进行组合计算

在使用Grafana配置图表看板时&#xff0c;我们可能需要对多个查询条件筛选出来的结果进行计算&#xff0c;把计算结果生成最终的图表。此时需要用到transform功能【add field from calculation】&#xff1a;

keytool工具生成JKS证书

生成证书 使用jdk keytool生成证书 自建证书不受CA信任&#xff0c;仅适合学习使用&#xff0c;如果需要用到服务中&#xff0c;建议使用由CA颁发的可信证书。如果仅是内部使用&#xff0c;也可以安装自己生成的证书到本机。 生成证书 keytool -genkey -alias jwt -keyalg RS…

【linux基础(七)】Linux中的开发工具(下)--make/makefile和git

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux中的开发工具 1. 前言2.…

重装系统(配置环境)

这里写目录标题 0.重装系统1.python1.1 anaconda1.2 pycharm1.3 深度学习环境配置 2.java2.1.安装JDK2.2.配置JDK环境变量2.3IDEA2.4 Maven 3.大数据3.1 虚拟机3.2 Hadoop平台3.3 存储3.4 采集3.5 计算3.6 查询3.7 可视化 0.重装系统 // An highlighted block var foo bar;1.…

SpringBoot 的版本、打包、Maven

一、SpringBoot 结构、集成 1.1、集成组件 Spring Core&#xff1a;Spring的核心组件&#xff0c;提供IOC、AOP等基础功能&#xff0c;是Spring全家桶的基础。 Spring Boot&#xff1a;一个基于Spring Framework的快速开发框架&#xff0c;可以快速创建独立的、生产级别的…

pnpm入门教程

一、概述 1、更小 使用 npm 时&#xff0c;依赖每次被不同的项目使用&#xff0c;都会重复安装一次。 而在使用 pnpm 时&#xff0c;依赖会被存储在内容可寻址的存储中。 2、更快 依赖解析。 仓库中没有的依赖都被识别并获取到仓库。目录结构计算。 node_modules 目录结构是…

Vue3快速上手

1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;Release v3.0.0 One Piece vuejs/core GitHub 2.Vue3带…

二叉搜索树(BST,Binary Search Tree)

文章目录 1. 二叉搜索树1.1 二叉搜索树概念1.2 二叉搜索树的查找1.3 二叉搜索树的插入1.4 二叉搜索树的删除 2 二叉搜索树的实现3 二叉搜索树的应用3.1二叉搜索树的性能分析 1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xf…

大模型对外提供应用的三种服务方式及示例

最近在研究Llama大模型的本地化部署和应用测试过程中&#xff0c;为了给大家提供更多的应用方式&#xff0c;研究了如何利用python快速搭建各种应用访问服务&#xff0c;一般来说&#xff0c;我们开发完成的软件模块为了体现价值&#xff0c;都需要对外提供服务&#xff0c;最原…

【css】如何实现自定义滚动悬浮置顶、固定表头

说到固定表头或者滚动置顶&#xff0c;我们需要认识css的两个api的2个属性&#xff1a; position: sticky; position: sticky; 是 CSS 中的一种定位方式。当应用于元素时&#xff0c;该元素在滚动时会固定在父容器的指定位置&#xff0c;直到滚动到达特定的位置或条件满足后&…

APP产品经理岗位的具体内容(合集)

APP产品经理岗位的具体内容1 1、负责项目产品团队的管理工作&#xff0c;对项目产品团队考核目标负责; 2、全面负责“工务园”所有产品&#xff0c;全方位负责其生命周期管理; 3、按照产品管理相关的计划和规范&#xff0c;对产品版本的更新及发布负责&#xff0c;完善产品的…

书剑宠物疫苗接种管理软件操作教程

【软件简介】 书剑宠物疫苗接种管理软件是一款宠物疫苗接种管理的工具&#xff0c;适合宠物诊所使用。具有动物主人建档、宠物疫苗接种登记管理、每日提醒、打印疫苗接种通知卡、自定义短信提醒模板等完善的功能。 另外本软件的特色是同时具有手机网页版功能&#xff0c;手机…

警惕!多本SCI/SSCI被剔除,9月SCI/SSCI期刊目录已更新~(附下载)

【SciencePub学术】 2023年9月20日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 继上次SCI期刊目录和SSCI期刊目录更新之后&#xff0c;本次9月更新共有9本期刊发生变动&#xff1a; • SCIE&#xff1a;有3本期刊不再被SCIE期刊目录收录(Editorial De-listing/Pr…