yolov5 学习体验

news2024/9/30 9:28:22

模型训练:

train.py

def parse_opt(known=False):
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
    parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=100, help='total training epochs')
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs, -1 for autobatch')
    parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--noval', action='store_true', help='only validate final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
    parser.add_argument('--noplots', action='store_true', help='save no plot files')
    parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache', type=str, nargs='?', const='ram', help='image --cache ram/disk')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)') # workers设置进程个数,最好设置为0
    parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
    parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
    parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
    parser.add_argument('--seed', type=int, default=0, help='Global training seed')
    parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')

    # Logger arguments
    parser.add_argument('--entity', default=None, help='Entity')
    parser.add_argument('--upload_dataset', nargs='?', const=True, default=False, help='Upload data, "val" option')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval')
    parser.add_argument('--artifact_alias', type=str, default='latest', help='Version of dataset artifact to use')

    return parser.parse_known_args()[0] if known else parser.parse_args()

参数设置:

主要是这三行代码:

parser.add_argument('--weights', type=str, default '', help='initial weights path')
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
  • weights:指定预训练模型的权重文件路径,例如 --weights weights/yolov5s.pt。但是刚开始训练的时候一般设置为空。
  • cfg:指定模型的配置文件路径,例如 --cfg models/yolov5s.yaml。

yolov5模型种类(可以填进去的参数):

  • yolov5l:大型模型
  • yolov5s:中等模型
  • yolov5s:小型模型
  • yolov5x:
  • data:指定训练数据集路径,例如 --data coco.yaml。数据集文件 yaml文件指定在哪里下载数据集,如果在指定文件里,则不用使用文件里的下载连接,如果不在,则会使用文件里的download下载连接重新下载数据集,并将数据集放在指定的文件夹里。

可以填进去的参数:

  • coco.yaml
  • coco128.yaml
  • voc.yaml
  • –epochs:指定训练的 epoch 数,例如 --epochs 300。
  • –batch-size:指定每个 batch 的大小,例如 --batch-size 16。
  • –img-size:指定输入图片的大小,例如 --img-size 640 表示输入图片的大小为 640x640。
  • –rect :指定在训练过程中是否进行图像矫正,例如 --rect 表示进行图像矫正。
  • –resume:指定是否从之前的训练中断处继续训练,例如 --resume 表示从中断处继续训练。
  • –nosave 不保存模型 默认False(保存)。
  • –noautoanchor 不自动调整anchor, 默认False, 自动调整anchor。
  • –evolve:指定是否进行超参数优化,例如 --evolve 表示进行超参数优化。
  • –name:指定保存模型的名称,例如 --name my_model 表示保存模型为 my_model.pt。
  • –workers:指定用于加载数据的进程数,例如 --workers 8 表示使用 8 个进程来加载数据。
     

以上参数可以在命令行使用,例如:

python train.py --data coco.yaml --batch-size 16 --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --device 0 --epochs 300 --img-size 640 --notest --workers 8 --rect --cache-images --name my_model --evolve

训练结果:

训练结束后,在“autodl-tmp/yolov5-5.0/runs/train/exp9”这里提取获得训练结果,在“autodl-tmp/yolov5-5.0/runs/train/exp9/weights”获得best.py文件。

best.py和last.py是保存的一些训练模型权重数据,训练好后可以作为测试环节的weights。

best.py是训练最好的模型数据

last.py是最新的模型数据。

模型测试:

detect.py

if __name__ == '__main__':
    parser = argparse.ArgumentParser(prog='test.py')
    parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
    parser.add_argument('--data', type=str, default='data/coco128.yaml', help='*.data path')
    parser.add_argument('--batch-size', type=int, default=32, help='size of each image batch')
    parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    parser.add_argument('--conf-thres', type=float, default=0.001, help='object confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.6, help='IOU threshold for NMS')
    parser.add_argument('--task', default='val', help='train, val, test, speed or study')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--single-cls', action='store_true', help='treat as single-class dataset')
    parser.add_argument('--augment', action='store_true', help='augmented inference')
    parser.add_argument('--verbose', action='store_true', help='report mAP by class')
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    parser.add_argument('--save-hybrid', action='store_true', help='save label+prediction hybrid results to *.txt')
    parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
    parser.add_argument('--save-json', action='store_true', help='save a cocoapi-compatible JSON results file')
    parser.add_argument('--project', default='runs/test', help='save to project/name')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    opt = parser.parse_args()
    opt.save_json |= opt.data.endswith('coco.yaml')
    opt.data = check_file(opt.data)  # check file
    print(opt)
    check_requirements()

训练好的模型放在了autodl-tmp/yolov5-5.0/runs/train/exp6/weights/best.pt

点击复制best.pt文件并粘贴到detect.py文件的同一目录。

在detect.py文件里修改权重:

将default设置为best.pt.

parser.add_argument('--weights', nargs='+', type=str, default='best.pt', help='model.pt path(s)')

参数设置:

主要是修改两行代码:

# parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
parser.add_argument('--weights', nargs='+', type=str, default='best.pt', help='model.pt path(s)')
# parser.add_argument('--data', type=str, default='data/coco128.yaml', help='*.data path')
parser.add_argument('--data', type=str, default='./data/mydata.yaml', help='*.data path')

测试结果:

测试结果保存在该路径下“autodl-tmp/yolov5-5.0/data/images".

云端(AutoDL)训练文件

准备工作:

解压压缩包:

!unzip /content/yolov5-5.0.zip -d /content/yolov5

删除文件:

!rm -rf /content/yolov5/ MACOSX

进入当前文件夹:

%cd /content/yolov5/yolov5-5.0

下载requirement:

!pip install -r requirements.txt

加载tensorboard

ext是tian'jia

%load_ext tensorboard

%load_ext tensorboard

重新加载tensorboard

%reload_ext tensorboard

启动tensorboard

%tensorboard --logdir=runs/train

训练模型

!python train.py

测试模型

!python test.py

制作自己的数据集

制作数据集的软件:

makesense.ai

网址:

https://www.makesense.ai/

进入网址:

上传数据,启动目标检测

预定义类别:

启动时添加类别:

AI:

export:

三大改动

1.1 改动 dataset.yaml

# COCO 2017 dataset http://cocodataset.org - first 128 training images
# Train command: python train.py --data coco128.yaml
# Default dataset location is next to /yolov5:
#   /parent_folder
#     /coco128
#     /yolov5


# download command/URL (optional)
download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip
#如果数据集对应路径不存在,则通过参考链接自动下载。 

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ../coco128/images/train2017/  # 128 images
val: ../coco128/images/train2017/  # 128 images

# number of classes
nc: 80

# class names
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]

复制粘贴一个新的coco128.yaml文件的内容,文件命名为mydata.yaml:

  • 路径位置:autodl-tmp/yolov5-5.0/data/mydata.yaml

  • 修改四处地方

1,2 构建自己的数据集文件夹组织结构

以下是直观的文件组织目录:

1.3 主要是在train.py文件的main函数里改动两个:

1、weight权重文件的路径

2、yaml数据集文件的路径

解释yaml文件:

在yolov5目标检测项目里,yaml文件用来当做中介,是模型训练时的data数据集,然后通过键值对映射到真正的数据集,训练集,种类数量,种类名称。

YAML(YAML Ain't Markup Language)是一种人类可读、用于数据序列化的格式。它采用了类似于其他编程语言中的键值对的结构。YAML文件通常用于配置文件和数据交换,具有简洁、易读、易写的特点。

YAML文件使用缩进和空格来表示层次结构,而不是像XML或JSON那样使用标签或大括号。这使得YAML文件更加清晰、易于阅读和编辑。

下面是一个简单的YAML示例:

yamlCopy Code# 注释以 # 开头
name: John Smith
age: 30
email: john@example.com
address:
  street: 123 Main St
  city: New York
  country: USA

在上面的示例中,nameageemailaddress都是键,它们对应的值可以是字符串、数字、布尔值或其他复杂类型。address键下面有一个嵌套的层次结构,使用缩进来表示。

YAML还支持列表和复杂的数据结构,例如包含多个对象的列表或嵌套的字典。此外,YAML还可以使用特殊标记来表示日期、正则表达式等特殊类型。

总而言之,YAML是一种用于配置文件和数据序列化的格式,它采用简洁、易读、易写的结构,并使用缩进和空格来表示层次结构。

解释txt文件:

Create Labels

After using an annotation tool to label your images, export your labels to YOLO format, with one *.txt file per image (if no objects in image, no *.txt file is required). The *.txt file specifications are:

  • One row per object

  • Each row is class x_center y_center width height format.

  • Box coordinates must be in normalized xywh format (from 0 - 1). If your boxes are in pixels, divide x_center and width by image width, and y_center and height by image height.

  • Class numbers are zero-indexed (start from 0).

txt文件的解释

2 0.111111 0.22222 0.333333 0.444444

第一个:类别

第二个:x的中心

第三个:y的中心

第四个:宽度

第五个:高度

后面四位数字是做了归一化的(0到1)

小修改-exclude无关数据集

防止花时间去检索没必要的数据集

在AutoDL上调试yolov5

由于实验室服务器的环境不匹配,需要重新再在的包很多,我转成了云上服务器AutoDL。

通过github我下载了yolov5的5.0版本“yolov5-5.0”.

下载之后会有tutoral.py的教程文件。

通过Setup模块来配置相关环境:

!git clone https://github.com/ultralytics/yolov5  # clone repo
%cd yolov5
%pip install -qr requirements.txt  # install dependencies

import torch
from IPython.display import Image, clear_output  # to display images

clear_output()
print('Setup complete. Using torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))

这第一行代码是直接下载yolov5文件的压缩包,即通过github下载了一次yolov5文件,再下载一个。

第二行代码是进入yolov5文件夹的意思。

第三行代码是一次性下载所有相关包的意思。

在终端运行"python train.py"之后出现的报错问题

Exception has occurred:

RemoteDisconnected Remote end closed connection without response

关了梯子,成功运行

untimeError: Given groups=1, weight of size [512, 1024, 1, 1], expected input[1, 512, 8, 8] to have 1024 channels, but got 512 channels instead

在train.py文件中:

parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
修改if name == ‘main’:里的
cfg的dafault为‘models/yolov5s.yaml’即可

WARNING: Dataset not found, nonexistent paths: ['/root/autodl-tmp/coco128/images/train2017']

按照提示在指定文件夹下创建文件夹,完善目录结构

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FL Studio21中文升级版全能的音乐制作软件

对于唱作人来说&#xff0c;一款优秀、全能的音乐制作软件&#xff0c;能帮助他们在创作上获得更多的灵感、以及为歌曲带来更多的变化。 FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家内容。更新后&#xff0c;现在还可以使用…

必看!玩转Salesforce沙盒的5个实用技巧

定期刷新沙盒对于尝试最新版本的功能&#xff0c;以及防止在生产组织的环境中缺乏测试而导致开发工作回滚至关重要。 为了确保沙盒设置在刷新后顺利进行&#xff0c;需要考虑几个因素。首先&#xff0c;确保有完善的文档化流程。文档应分为Conga、DocuSign、数据&#xff08;C…

基于ubuntu1604的ROS安装

不同版本的Ubuntu都有对应的ROS版本&#xff0c;不要强行安装不对应的版本&#xff0c;否则遇到问题会很难找到解决方法。此教程也只是基于Ubuntu1604和kinetic版本的ROS。 一、基本流程 以下命令仅记录执行顺序&#xff0c;不要无脑复制执行&#xff0c;重在理解 #基本更新…

JavaScript 进阶问题列表,巩固自己的知识。

不定时更新 JavaScript 进阶问题列表 从基础到进阶&#xff0c;测试你有多了解 JavaScript&#xff0c;刷新你的知识&#xff0c;或者帮助你的 coding 面试&#xff01; &#x1f4aa; &#x1f680; 答案❤️ 1. 输出是什么&#xff1f; function sayHi() {console.log(na…

【Git】Git 学习笔记_操作本地仓库

1. 安装与初始化配置 1.1 安装 下载地址 在文件夹里右键点击 git bash here 即可打开命令行面板。 git -v // 查看版本1.2 配置 git config --global user.name "heo" git config --global user.email xxxgmail.com git config --global credential.helper stor…

关于Alibaba Cloud Toolkit 下载配置以及后端自动部署

idea中File-Settings-Plugins 搜索Alibaba Cloud Toolkit点击下载&#xff0c;下载完成重启 1、点击 Tools-Alibaba Cloud-Deploy to Host 部署到主机 2、配置服务器ip、jar包启动命令、服务器jar存放位置 3、设置服务器ip用户名密码&#xff0c;点击测试连接情况 4、配置脚本…

基于SSM的酒店客房管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

读取xlsx文件存入MongoDB数据库中

要将xlsx文件存入MongoDB数据库&#xff0c;您需要执行以下步骤&#xff1a; 步骤1&#xff1a;安装必要的库 您需要安装pymongo和openpyxl库。您可以使用以下命令安装&#xff1a; pip install pymongo openpyxl 步骤2&#xff1a;创建一个MongoDB数据库 您需要创建一个Mon…

Etcd 常用命令与备份恢复

1. etcd简介 官方网站&#xff1a;etcd.io 官方文档&#xff1a;etcd.io/docs/v3.5/op-guide/maintenance 官方硬件推荐&#xff1a;etcd.io/docs/v3.5/op-guide/hardware github地址&#xff1a;github.com/etcd-io/etcd etcd是CoreOS团队于2013年6月发起的开源项目&#xf…

常用评价指标及方法(以NILM及SV为例)

1. NILM的评价指标 主要有 accuracy,precision,recal, F1-score, F1-micro, F1-macro 首先需要了解一下几个概念&#xff0c;TP (true positive), FP (false positive), TN (true negitive), FN (false negitive)。 TP:true positive。预测是正确的正样本FP:false positive。…

Linux应用开发基础知识——Makefile 的使用(二)

前言&#xff1a; 在 Linux 中使用 make 命令来编译程序&#xff0c;特别是大程序&#xff1b;而 make 命令所执 行的动作依赖于 Makefile 文件。最简单的 Makefile 文件&#xff1a; hello: hello.c 、gcc -o hello hello.c 、clean:、 rm -f hello 将上述 4 行存为 Makefile …

通过关键词合并2张excel表格——Python代码实现

问题描述 2个excel表格中都包含了一个共同的关键字【单品编码】&#xff0c;如何将2个表通过该关键字合并为一张表格。使用Python代码完成该任务。 1.数据说明 附件1中的数据excel格式 销售日期,扫码销售时间,单品编码,销量(千克),销售单价(元/千克),销售类型,是否打折销售…

访问控制列表

目录 ACL ACL原理 ACL包过滤方式 ACL通用命令 查看ACL表命令 删除整张表命令 接口配置ACL ACL分类 标准ACL 标准ACL的动作与条件 通配符掩码 扩展ACL 扩展ACL的动作与条件 命名ACL 前言 书写方式 ACL 含义&#xff1a;访问控制列表&#xff0c;其是一种包过滤…

element 弹窗浏览器后退-遮照层还存在问题 以及跟vue keep-alive冲突

问题&#xff1a;element 弹窗浏览器后退-遮照层还存在问题 查询官网可以设置 modal-append-to-body“false” 可以全局设置 ElementUI.Dialog.props.modalAppendToBody.default false 后续 基本到这能解决问题&#xff0c;不过本项目比较特殊&#xff0c;使用了 keep-alive…

你真的了解static吗?

目录 一.static1.概念2.存在形式3.访问形式注意4.static成员变量的初始化4.1就地初始化4.2使用代码块初始化 5.关于main 二.代码块概念1.普通代码块2.构造代码块3.静态代码块注意事项①加载形式②加载顺序 一.static 1.概念 在Java中&#xff0c;被static修饰的成员&#xff0…

Visual Studio 2017附加依赖项

在读韩国人尹圣雨的《TCP/IP网络编程》,在书中教我如何在Visual Studio 2008中设置附加依赖项&#xff0c;但是我使用的是Visual Studio 2017&#xff0c;所以我写下这篇文章学习如何在Visual Studio 2017附加依赖项。 在项目这里选择属性。 选择输入这一项&#xff0c;然后点…

如何通过货架电子标签PTL灯光指引拣选优化仓库管理

物流仓储行业的不断发展和智能化技术的应用&#xff0c;仓库管理的效率和精度要求也日益提高。在这样的背景下&#xff0c;PTL亮灯拣选系统作为一种智能化设备&#xff0c;采用分布式管理结构&#xff0c;为仓库管理带来了新的可能性。 PTL亮灯拣选系统采用智能计算机作为主控设…

低代码工具的常见用例与受众市场

目录 一、低代码工具的常见用例是什么&#xff1f; 1.业务流程管理&#xff08;BPM&#xff09; 2.自定义应用程序开发 3.数据管理和分析 4.移动应用程序开发 二、低代码受众和市场 1.制造商 2.个人开发者/自由职业者 3.代理商 4.小型企业和初创企业 5.中型企业 6.营销团队 7.软…

Voice Control for ChatGPT简单高效的与ChatGPT进行交流学习。

快捷又不失灵活性 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通便更高效…

基于Java Web的在线教学质量评价系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…