ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Yolov5模型部署与训练

2021-05-31 17:33:00  阅读:299  来源: 互联网

标签:Yolov5 name 部署 getElementsByTagName 模型 height width file image


模型部署

安装

  • 保证CUDApytorch安装好的基础上,将YOLOv5的源码拷到本地。
$ git clone https://github.com/ultralytics/yolov5.git
  • Anacondashell里面,安装官方给好的配置文件requirements.txt
$ pip install -U -r requirements.txt

在下载好的YOLOv5源码的目录下执行。

报错处理

  • 其实requirements.txt文件主要是对以下内容进行安装,如果某一步报错,针对问题切换方法即可。
bmatplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow
PyYAML>=5.3.1
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0
tensorboard>=2.4.1
seaborn>=0.11.0
pandas
pycocotools>=2.0
thop

pycocotools安装时容易出问题,建议提前在VS里面把SDK类东西装好。

模型训练

  • 找到对应数据集之后,使用标签工具打上标签,得到XML文件。
  • 由于YOLOv5只能训练格式为{seqx_center/image_widthy_center/image_heightwidth/image_widthheight/image_height}的.txt文件,于是编写python脚本将XML文件转为.txt
import xml.dom.minidom as xmldom
import os

def data2txt(d1,d2,d3,d4,file_name):
    fd = open(file_name+'.txt','w')
    fd.write('0 '+str(d1)+' '+str(d2)+' '+str(d3)+' '+str(d4))
    fd.close

def xml2data(file_name):
    ele = xmldom.parse(os.path.abspath(file_name)).documentElement

    size = ele.getElementsByTagName("size")
    image_width = int(size[0].getElementsByTagName("width")[0].firstChild.data)
    image_height = int(size[0].getElementsByTagName("height")[0].firstChild.data)

    bndbox = ele.getElementsByTagName("bndbox")
    xmin = int(bndbox[0].getElementsByTagName("xmin")[0].firstChild.data)
    ymin = int(bndbox[0].getElementsByTagName("ymin")[0].firstChild.data)
    xmax = int(bndbox[0].getElementsByTagName("xmax")[0].firstChild.data)
    ymax = int(bndbox[0].getElementsByTagName("ymax")[0].firstChild.data)

    xcenter = (xmax + xmin)/2
    ycenter = (ymax + ymin)/2
    width = abs(xmax-xmin)
    height = abs(ymax-ymin)

    data2txt(xcenter/image_width,ycenter/image_height,width/image_width,height/image_height,file_name[:-4])

if __name__ == "__main__":
    for i in range(1,465):
        file_name = str(i)+'.xml'
        addlen = 10-len(file_name)
        for j in range(addlen):
            file_name = '0'+file_name
        xml2data(file_name)
  • 使用train.py对整理好的数据集进行训练。
$ python train.py --img 640 --batch 16 --cfg ./models/yolov5s.yaml --weights ''

训练好的数据集权重会放在./runs/train/exp/weights

  • train.py进行参数解析:
参数作用
epochs数据集被迭代的次数
batch每次权重更新所需分析的图片数
hyp超参数配置文件
cfg存储模型结构的配置文件
data数据集的配置文件
img输入图片宽高
rect矩形训练
resume恢复最近保存的模型训练
nosave仅保存最后的checkpoint
notest仅测试最后的epoch
evolve进化超参数
bucketgsutil bucket
cache-images缓存图像(加快训练速度)
weights权重文件
name重命名
device设备
adam使用adam优化
multi-scale多尺度训练
single-cls单类别训练集

加粗的参数对计算机的性能有要求,可以根据实际情况调整。

其中epochs一般选择50~200,太小欠拟合,太大过拟合。

模型使用

  • 图片
$ python detect.py --source {image_file}
  • 视频流
$ python detect.py --source {stream_url}
  • 使用自己训练的数据集权重时,需要修改参数:
$ python detect.py --weights {pt_path}

参考

标签:Yolov5,name,部署,getElementsByTagName,模型,height,width,file,image
来源: https://blog.csdn.net/qq_45969062/article/details/117422346

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有