yolo3训练自己的模型 基于TensorFlow-keras( python)

2023-11-01

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文主要介绍一下如何配置yolo3-keras环境来进行模型训练。
这方面网上乱七八糟的资料很多,如果你有这方面的需要并且恰好看到了这篇文章,请耐下性子看下去。因为这个比较靠谱。

一、所用到的版本

1、python = = 3.6
2、yolov3
3、TensorFlow-GPU = = 1.15 (这里强烈推荐GPU训练,因为要比CPU快太多太多了,况且重新安装CUDA和CUDNN并不麻烦)
4、CUDA= =10.0 CUDNN= =7.6.5
5、Keras = = 2.3.1

下载传送
(1) yolov3及官方权重文件

https://pan.baidu.com/s/1IvqfJgS1H7reYQCm3EU6Kw 提取码:6hcy

(2) Keras 和TensorFlow

直接用命令行下载即可
pip install tensorflow-gpu==1.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install keras ==2.3.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

(3) CUDA 和CUDNN

CUDA : https://developer.nvidia.com/cuda-toolkit-archive
CUDNN: https://developer.nvidia.com/rdp/cudnn-archive

安装步骤参考 这两个

安装参考这两个,点击此处即可(1)
安装参考这两个,点击此处即可(2)

二、训练自己的模型

1.打开下载的yolo文件夹

打开界面如下:
打开界面如下

2.建立如下目录

创建如下的目录
在这里插入图片描述
test.py的代码如下:

import os
import random
 
trainval_percent = 0.2
train_percent = 0.8
xmlfilepath = 'VOCdevkit/VOC2007/Annotations'
txtsavepath = 'VOCdevkit/VOC2007/ImageSets/Main'
total_xml = os.listdir(xmlfilepath)
 
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
 
ftrainval = open('VOCdevkit/VOC2007/ImageSets/Main/trainval.txt', 'w')
ftest = open('VOCdevkit/VOC2007/ImageSets/Main/test.txt', 'w')
ftrain = open('VOCdevkit/VOC2007/ImageSets/Main/train.txt', 'w')
fval = open('VOCdevkit/VOC2007/ImageSets/Main/val.txt', 'w')
 
for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftest.write(name)
        else:
            fval.write(name)
    else:
        ftrain.write(name)
 
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

这里说明一下
logs/000:用来放训练生成的权重文件
JPEGImages:用来存放拍摄目标物体的图片
Annotations:用来存放 标记后生成xml文件(下面会介绍)
ImageSets/Main:用来存放运行test.py后生成的数据文件

3.标记目标

此次用的软件为labelimg,这个很简单2分钟就可学会
具体下载和使用方法可参考这个博主写的

点击此处可跳转
在这里插入图片描述

4.修改配置

第一处修改
在voc_annotation.py下修改classes里的内容,我训练,想要识别的的是一个矿泉水,所以我删除了其它内容。(记得和打标签时的拼写统一)
在这里插入图片描述
第二处修改
按图示修改
在这里插入图片描述
注: 很多博客下都修改了yolo3.cfg文件,其实我们用的是keras并没有用到,所以不用修改。但是要是使用darknet就要修改了。

4.运行test.py文件

运行成功后会生成如下文件:
在这里插入图片描述

5.运行train.py文件

开始训练自己的数据集
标红的部分建议改为1,太高的话训练时容易显存跑满报错。
在这里插入图片描述
这是成功训练的图
在这里插入图片描述

6.漫长的等待

… . … … … … … … …
… . … … … … … … …

7.把生成权重文件转化成.h5文件

在命令行下输入 python convert.py yolov3.cfg yolov3.weights model_data/ yolo.h5(这个看你生成的权重文件是什么名字)
vscode下在这输入即可
在这里插入图片描述

8.进行识别

打开yolo.py文件
下载的这个是不全的,在最底下要加上这段才能运行。
在这里插入图片描述
然后把刚才转换的.h5权重文件放到指定目录,并在yolo.py修改相关文件名。(见图片)
在这里插入图片描述
!!然后就可以开始识别了!!
视频的话上传太麻烦了,如果需要的再联系我吧。
我最后训练的loss值在4左右。
在这里插入图片描述

还有一个要注意的地方,我当时训练完以后,识别本地的图片可以但是外接摄像头就没办法识别。这可能是因为训练时是RGB,但CV里读取是按GBR。后来我在如下地方更改了一下就可以识别了。
如果大家遇到和我一样的问题,可以参考一下。
在这里插入图片描述

.
由于距当时实际操作有些时间,可能有些地方不是很完善。有问题的话或者操作过程中有解决不了的报错问题,大家可以在文章底下留言,我会尽全力为大家解决的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolo3训练自己的模型 基于TensorFlow-keras( python) 的相关文章

  • Flask-SocketIO redis 订阅

    我在用着https github com miguelgrinberg Flask SocketIO https github com miguelgrinberg Flask SocketIO实现 WebSocket 服务器 我需要从另一
  • 从所有数据帧列中删除子字符串

    我有一个单词列表 大约 1000 个单词 我称之为负面单词 CAST ARTICLES SANITARY JAN CLAUSES SPECIAL ENDORSEMENT 我很快就会用这个单词列表制作一个数据框 我还有一个数据框 看起来像 F
  • 如何替换Python字符串中的正确字母

    任务是 您的任务是纠正数字化文本中的错误 您只需处理以下错误 S 被误解为 5 O 被误解为 0 I 被误解为 1 我的代码 def correct string for i in string if 5 in string string
  • Python:json_normalize pandas 系列给出 TypeError

    我在 pandas 系列中有数万行像这样的 json 片段df json IDs lotId 1 Id 123456 date 2009 04 17 bidsCount 2 IDs lotId 2 Id 123456 date 2009 0
  • 动态字段取决于 WTForms 的先前字段

    我正在使用 WTForms 制作表格 目前 我有这个 class UploadForm flask wtf Form fichier wtforms fields FileField u Fichier description wtform
  • 如何用函数记录一个文件?

    我有一个带有函数 lib py 但没有类的python 文件 每个函数都有以下样式 def fnc1 a b c This fonction does something param a lalala type a str param b
  • 我可以用关闭的文件对象做什么?

    当您打开文件时 它存储在一个打开的文件对象中 该对象使您可以访问该文件的各种方法 例如读取或写入 gt gt gt f open file0 gt gt gt f
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • Eclipse/PyDev 中未使用导入警告,尽管已使用

    我正在我的文件中导入一个绘图包 如下所示 import matplotlib pyplot as plt 稍后我会在我的代码中成功使用此导入 fig plt figure figsize 16 10 然而 Eclipse 告诉我 未使用的导
  • Python脚本从字母和两个字母组合生成单词

    我正在编写一个简短的脚本 它允许我使用我设置的参数生成所有可能的字母组合 例如 b a 参数 单词 5 个字母 第三 第五个字母 b a 第一个字母 ph sd nn mm 或 gh 第二 第四个字母 任意元音 aeiouy 和 rc 换句
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何创建增量加载网页

    我正在编写一个处理大量数据的页面 它会永远持续到我的结果页面加载 几乎无限 因为返回的数据太大了 因此 我需要实现一个增量加载页面 例如 url 中的页面 http docs python org http docs python org
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 类返回语句不打印任何输出

    我正在学习课程 但遇到了问题return语句 它是语句吗 我希望如此 程序什么也没有打印出来 它只是结束而不做任何事情 class className def createName self name self name name def
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 为什么从 openAI 导入 Universe 模块时出现“无效语法”错误

    当我导入时universe来自 openAI 的模块 我收到以下错误 Traceback most recent call last File
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • PyQt5按钮lambda变量变成布尔值[重复]

    这个问题在这里已经有答案了 当我运行下面的代码时 它显示如下 为什么 x 不是 x 而是变成布尔值 这种情况仅发生在传递到用 lambda 调用的函数中的第一个参数上 错误的 y home me model some file from P
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • Tkinter 将鼠标点击绑定到框架

    我一定错过了一些明显的东西 我的 Tkinter 程序中有两个框架 每个框架在网格布局中都有一堆标签 我想将鼠标点击绑定到其中一个而不是另一个 我目前使用 root bind

随机推荐

  • BUUCTF 之 [ACTF2020 新生赛]Exec(命令执行漏洞)

    BUUCTF 之 ACTF2020 新生赛 Exec 命令执行漏洞 相关 观察 进攻 相关 项目 内容 难度 简单 类型 WEB 靶场 BUUCTF 坐标 Exec 观察 这界面和这网页标题结合起来 相信给位都能猜到这个靶场中很有可能存在命
  • 类和对象的学习

    类和对象的学习 1 什么是类 class 就是声明一个类 概念 一类事物的总体描述 及该事物包含方法的总称 属性 描述这个事物的 方法 这个事物特有的行为 定义一个学生类 属性 名字 年龄 性别 方法 吃饭 睡觉 学习 打游戏 2 封装一个
  • 《创新创业实训》网课答案解析

    创新创业实训 网课答案解析 一 网课的简单介绍 二 部分习题的展示 三 获取全部内容 一 网课的简单介绍 创新创业实训 是我之前选的一门网课 由于其比较小众 所以很多课后题很难在网上找到答案 为了帮助后续选择这门课的同学 这里我将该网课所涉
  • Zabbix--API接口

    一 API的简单介绍 Zabbix API允许你以编程方式检索和修改Zabbix的配置 并提供对历史数据的访问 1 应用 1 创建新的应用程序以使用Zabbix 2 将Zabbix与第三方软件集成 3 自动执行常规任务 2 意义 abbix
  • RabbitMQ多种问题出现的解决方案

    消息丢失 1 只要订单完成我们就会发送一条消息给MQ 这个途中突然MQ服务器网络中断 导致消息无法抵达 做好容错方法需要在消息发送前加上异常处理 try rabbitTemplate convertAndSend order event e
  • 区间和

    模板 模板来自AcWing vector
  • IDEA中新建一个java类,无法实现Servlet接口或者继承HttpServlet类

    有道云笔记链接可查看 IDEA中新建一个java类 无法实现Servlet接口或者继承HttpServlet类 问题描述 新建一个java类 无法实现Servlet接口或者继承HttpServlet类 原因 缺少tomcat的librari
  • SQL每日一练(牛客新题库)——第2天: 条件查询

    文章目录 1 查找后排序 2 查找后多列排序 3 查找后降序排列 4 查找学校是北大的学生信息 5 查找年龄大于24岁的用户信息 6 如何让刷题变得更高效 1 查找后排序 题目 现在运营想要取出用户信息表中的用户年龄 请取出相应数据 并按照
  • linux日志系统介绍 —— syslog(),openlog(),closelog()

    函数使用介绍 这里面的三个函数openlog syslog closelog是一套系统日志写入接口 另外那个vsyslog和syslog功能一样 仅仅是參数格式不同 通常 syslog守护进程读取三种格式的记录消息 此守护进程在启动时读一个
  • 毕业两年月薪36k,有时候人与人的差距比人和狗还大

    想起两年前交流过的一个应届生 当时他刚毕业技术水平不高 进了一个小公司做Java后端实习工作 最近联系上了 不问不知道 一问吓一跳 他现在已经进了某一线大厂 月薪36K 这位朋友其实也没比别人强多少 关键在于面试前做足了准备 许多人迫切需要
  • 有序表的合并

    目录 前言 一 有序表合并的两种方式 二 两种实现方式的具体操作 1 顺序表 2 链式 三 两种实现方式的比较 四 总结 前言 通过对线性表的学习 我们对其相关概念已经一定的认识 下面我们通过一些简单的实例应用来增进对线性表相关知识的认识并
  • Synthtext 数据集

    Synth text 数据集官网下载的主要包含图像文件夹和gt mat标注文件 共85万 858750 多张图片数据 该数据集中包含了词级别标注 字符级别标注和文本识别内容 可用于文本检测和文本识别模型 1 mat格式标注文件读取 采用sc
  • pythonscipy教程_Python学习教程(Python学习路线):Python—SciPy精讲

    SciPy 是 Python 里处理科学计算 scientific computing 的包 使用它遇到问题可访问它的官网 https www scipy org 去找答案 在使用 scipy 之前 需要引进它 语法如下 import sc
  • transformer 全总结

    这篇大概写于好几个月之前 最近又很多东西要重新开始 于是重新写起笔记 这是写给我自己看的笔记 所以读者看不明白是很正常的 但我并不觉得完全没有参考价值 毕竟之前看的trans介绍 要么只有encoder 要么没有训练过程 transform
  • 项目:串口接收—ram存储—TFT显示(完整设计)

    目的 1 使用uart串口接收模块接收待显示的串行数据 像素RGB值 2 把待显示的数据写入ram中 3 从ram中读取像素值到TFT显示屏中显示 并对应输出该像素的坐标值 注意 1 遵循uart协议的一个数据位宽为8 一个RGB565像素
  • html标签的checked属性详解

    注意 当元素中有checked属性时 其值无论是什么 都是被选中状态 那怎么才能让其不被选中呢 就是用jquery或js代码实现 1 html中的checked属性 仔细研究下会发现一个很怪异的现象 你知道上面这四个复选框到底那些被选中了
  • VS Code远程连接虚拟机

    太久没有使用VS Code看虚拟机的项目了 今天想看一下操作系统的代码 连接时遇到了一些比较低级的错误 便重新梳理一下整个连接流程 主要分为三步 第一VS Code下载插件 第二 虚拟机上 Ubuntu 下载ssh 第三 建立连接 Vs C
  • Layui的本地存储方法-Layui.data的基本使用 操作localstorage和sessionstorage

    http www manongjc com detail 11 jrxosqvtzledyab html
  • Git查看远程提交状态的方法

    git使用过程中 经常遇到这样的问题 已经git push 了 但是 由于冲突或者push的分支不对 导致远程的和本地的不一致 这就需要提交后查看一下远程的是否ok 查了一下资料 找到了一些方法 就做个记录吧 当程序员 要记得东西太多了 哈
  • yolo3训练自己的模型 基于TensorFlow-keras( python)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 所用到的版本 二 训练自己的模型 1 打开下载的yolo文件夹 2 建立如下目录 3 标记目标 4 修改配置 4 运行test py文件 5 运行trai