首页 > 其他分享 >Yolov3模型训练并转化为onnx

Yolov3模型训练并转化为onnx

时间:2022-09-23 11:22:26浏览次数:77  
标签:Yolov3 val onnx 模型 num train test path txt

下载yolov3代码,

github上下载,https://github.com/ultralytics/yolov3

我下载的v9.5.0版本

 

数据集划分,分为train,val,test

# 将图片和标注数据按比例切分为 训练集和测试集
import shutil
import random
import os

# 原始路径
image_original_path = r'D:\yolov3-9.5.0\VOCdevkit\VOC2007\JPEGImages/'
label_original_path = r'D:\yolov3-9.5.0\VOCdevkit\VOC2007\YOLOLabels/'
# 训练集路径
train_image_path = r'D:\yolov3-9.5.0\VOCdevkit\images\train/'
train_label_path = r'D:\yolov3-9.5.0\VOCdevkit\labels\train/'
# 验证集路径
val_image_path = r'D:\yolov3-9.5.0\VOCdevkit\images\val/'
val_label_path = r'D:\yolov3-9.5.0\VOCdevkit\labels\val/'
# 测试集路径
test_image_path = r'D:\yolov3-9.5.0\VOCdevkit\images\test/'
test_label_path = r'D:\yolov3-9.5.0\VOCdevkit\labels\test/'

# 数据集划分比例,训练集75%,验证集15%,测试集15%
train_percent = 0.7
val_percent = 0.15
test_percent = 0.15


# 检查文件夹是否存在
def mkdir():
    if not os.path.exists(train_image_path):
        os.makedirs(train_image_path)
    if not os.path.exists(train_label_path):
        os.makedirs(train_label_path)

    if not os.path.exists(val_image_path):
        os.makedirs(val_image_path)
    if not os.path.exists(val_label_path):
        os.makedirs(val_label_path)

    if not os.path.exists(test_image_path):
        os.makedirs(test_image_path)
    if not os.path.exists(test_label_path):
        os.makedirs(test_label_path)


def main():
    mkdir()

    total_txt = os.listdir(label_original_path)
    num_txt = len(total_txt)
    list_all_txt = range(num_txt)  # 范围 range(0, num)

    num_train = int(num_txt * train_percent)
    num_val = int(num_txt * val_percent)
    num_test = num_txt - num_train - num_val

    train = random.sample(list_all_txt, num_train)
    # train从list_all_txt取出num_train个元素
    # 所以list_all_txt列表只剩下了这些元素:val_test
    val_test = [i for i in list_all_txt if not i in train]
    # 再从val_test取出num_val个元素,val_test剩下的元素就是test
    val = random.sample(val_test, num_val)
    # 检查两个列表元素是否有重合的元素
    # set_c = set(val_test) & set(val)
    # list_c = list(set_c)
    # print(list_c)
    # print(len(list_c))

    print("训练集数目:{}, 验证集数目:{},测试集数目:{}".format(len(train), len(val), len(val_test) - len(val)))
    for i in list_all_txt:
        name = total_txt[i][:-4]

        srcImage = image_original_path + name + '.jpeg'
        srcLabel = label_original_path + name + '.txt'

        if i in train:
            dst_train_Image = train_image_path + name + '.jpeg'
            dst_train_Label = train_label_path + name + '.txt'
            try:
                shutil.copyfile(srcImage, dst_train_Image)
                shutil.copyfile(srcLabel, dst_train_Label)
            except:
                print("有错误")
        elif i in val:

            dst_val_Image = val_image_path + name + '.jpeg'
            dst_val_Label = val_label_path + name + '.txt'
            try:
                shutil.copyfile(srcImage, dst_val_Image)
                shutil.copyfile(srcLabel, dst_val_Label)
            except:
                print("1")
        else:
            dst_test_Image = test_image_path + name + '.jpeg'
            dst_test_Label = test_label_path + name + '.txt'
            try:
                shutil.copyfile(srcImage, dst_test_Image)
                shutil.copyfile(srcLabel, dst_test_Label)
            except:
                print("2")

if __name__ == '__main__':
    main()

划分完数据集后,即可训练对应的模型

1.复制一个voc.yaml文件,并重命名为smoke.yaml(做的烟雾检测识别)

进入文件,修改路径为筛选后的数据集路径,nc为标签种类,names为标签名称,同时注销掉下载的代码

2.复制yolov3-tiny.yaml文件,并重命名为yolov3-tiny_smoke.yaml

打开文件,仅需更改nc即可

3.打开train.py文件,进行设置更改

其中主要更改路径,以及epochs的次数,batch-size每批数据量的大小

4.开始训练

5.转化为onnx模型代码

export程序可以直接跑,但是会报错:

ONNX: export failure: Your model ir_version is higher than the checker's.

原因是onnx版本过低,

推荐安装1.11.0版本

pip install -i https://mirrors.aliyun.com/pypi/simple onnx==1.11.0

 

其它遇到的问题,参考博文

https://blog.csdn.net/thy0000/article/details/124579443

 

标签:Yolov3,val,onnx,模型,num,train,test,path,txt
From: https://www.cnblogs.com/ningyuan233/p/16716014.html

相关文章

  • 【UML软件分析】常见软件过程模型
    前言为什么写这篇博客:软件工程是一门大学科,想学好必先理解总结归纳。这篇文章说了什么:介绍了常见的软件过程模型,介绍各个模型的特点,优缺点,以及适用场景一、典型的过程......
  • AIDL简单通讯模型
    新建一个AIDL服务端Project将该Project命名为AIDLServerApplication新建一个AIDL接口文件命名为ITestService定义一个测试接口voidtest();源码(包名是重点!!!)packa......
  • 路由器、集线器、交换机分别工作在OSI七层协议模型的哪一层
    路由器三层(网络层);集线器一层(物理层);普通交换机二层(数据链路层)。现在也有工作在第三层的交换机。OSI七层网络模型由下至上为1至7层,分别为物理层(Physicallayer),数......
  • VS Code摸鱼神器,让你快速开发AI模型
    摘要:ModelArtsVSCode插件一键接入云上开发环境介绍及操作指导对于习惯于使用本地VSCodeIDE的开发者,受限于本地资源,采用本地开发加云上调测的远程开发方式不失为一种更......
  • 网络基础OSI七层模型
    1.ISO/OSI七层模型的分层和作用·iso是国际标准组织osi是开放系统互联1第七层:应用层·为给用户提供服务,给用户提供一个操作界面如windos窗口,linux是命令行界面第......
  • 第五章:PyTorch模型定义
    1、PyTorch中模型定义的三种方式Pytorch构建模型,常用的方式有下面的三种:继承nn.Module基类构建自定义模型使用nn.Sequential按层顺序构建模型继承nn.Module基类构建......
  • 系统架构与设计(1)- 权限系统的设计以及主流的五种权限模型
     作者:码猿技术专栏来源:https://juejin.cn/post/7121977695197970463-------------------------------------------------------------------这篇文章就来介绍一下权限......
  • cesium教程7-官方示例模型要素选择翻译
     源代码示例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>天地图</title><!--引用cesium的js和css,天地图的扩展js--><!--<s......
  • 全自动 三维管子模型 一键转出 YBC XYZ DXF文件
      可以自动将以stp 或iges的三维管子模型 自动一键转出ybc xyz dxf  ,不仅支持规则管子模型,对于不标准管子模型也可以做到一键转换。......
  • Three.js中加载外部fbx格式的模型素材
    index.html部分:index.js部分:Scene.js部分: ......