YOLOv5参数大全(parse_opt篇)

2024-04-15 21:44
文章标签 参数 大全 yolov5 parse opt

本文主要是介绍YOLOv5参数大全(parse_opt篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、前言
  • 2、train.py-文件解读
    • 2.1、常用的参数
      • 2.1.1、weights
      • 2.1.2、cfg
      • 2.1.3、data
      • 2.1.4、epochs
      • 2.1.5、batch-size
      • 2.1.6、imgsz
      • 2.1.7、device
      • 2.1.8、resume
      • 2.1.9、hyp
      • 2.1.10、adam
  • 3、detect.py-文件解读
    • 3.1、常用的参数
      • 3.1.1、weights
      • 3.1.2、source
      • 3.1.3、imgsz
      • 3.1.4、conf-thres
      • 3.1.5、iou-thres
      • 3.1.6、device
      • 3.1.6、view-img
      • 3.1.7、save-txt
      • 3.1.8、save-conf
      • 3.1.9、visualize
  • 4、参考文献
  • 5、目标检测系列文章

1、前言

文本主要详细讲解运行参数含义

2、train.py-文件解读

train.py里面有一个parse_opt()函数,该函数用于读取命令行

  1. action=‘store_true’ 当用到该参数时,则为true,默认为false。如果是store_false,则默认值是true
  2. default 默认值
  3. nargs=‘?’ 表示可设置零个或一个
  4. nargs=‘*’ 表示可设置零个或多个
  5. nargs=‘+’ 表示可设置一个或多个
def parse_opt(known=False):parser = argparse.ArgumentParser()#  weights: 训练的权重路径,可以使用自己训练的权重,也可以使用官网提供的权重parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')# cfg:模型参数配置文件路径parser.add_argument('--cfg', type=str, default='', help='model.yaml path')# data: 配置数据集路径, 包括image/label/classes等信息。# 如果设置了只显示个别类别即使用了--classes = 0 或二者1, 2, 3等, 则需要设置该文件,数字和类别相对应才能只检测某一个类parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')# hyp: 超参数的设置parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')# epochs:训练总轮次parser.add_argument('--epochs', type=int, default=300)# batch-size:批次大小parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')# imgsz: 网络输入图片大小, 默认的大小是640parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')# rect: 是否采用Rectangular training/inference,一张图片为长方形,我们在将其送入模型前需要将其resize到要求的尺寸,所以我们需要通过补灰padding来变为正方形的图。# 但是这个操作会生成过多的冗余信息影响训练效果。Rectangular training/inference就是去除这些冗余信息。parser.add_argument('--rect', action='store_true', help='rectangular training')# resume: 接着上次打断的的结果开始训练parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')#   nosave: 只保存最后一次 pt 文件。,默认Falseparser.add_argument('--nosave', action='store_true', help='only save final checkpoint')# noval: 只在最后一次进行测试,默认Falseparser.add_argument('--noval', action='store_true', help='only validate final epoch')# noautoanchor: 不自动调整anchor,默认Falseparser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')# evolve: 是否进行超参数优化,利用遗传算法自动搜索超参数,默认Falseparser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')# bucket: 谷歌云盘bucket,一般不会用到parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')#  cache:是否提前缓存图片到内存,以加快训练速度parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')#  image-weights: 对于那些训练不好的图片,会在下一轮中增加一些权重parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')# device: 训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu)parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')# multi-scale: 是否进行多尺度训练,一般设置几种不同尺度的图片,训练时每隔一定iterations随机选取一种尺度训练# 这样训练出来的模型鲁棒性强,可以接受任意大小的图片作为输入,使用尺度小的图片测试速度会快些,但准确度低,用尺度大的图片测试速度慢,但是准确度高parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')# single-cls: 数据集是否只有一个类别,默认Falseparser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')# adam: 是否使用adam优化器parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')# sync-bn: 是否进行多 GPU 进行分布式训练parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')# dataloader的最大worker数量parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')# project:保存测试日志的文件夹路径parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')# name:保存测试日志文件夹的名字, 所以最终是保存在project/name中parser.add_argument('--name', default='exp', help='save to project/name')# exist_ok: 是否重新创建日志文件, False时重新创建文件parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')# quad: 四元数据加载器parser.add_argument('--quad', action='store_true', help='quad dataloader')# linear-lr:用于对学习速率进行调整,默认为 False,(通过余弦函数来降低学习率)parser.add_argument('--linear-lr', action='store_true', help='linear LR')# label-smoothing: 对标签进行平滑处理,防止过拟合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)')# freeze: 使用预训练模型的规定固定权重不进行调整  --freeze 10  :意思从第0层到到第10层不训练parser.add_argument('--freeze', type=int, default=0, help='Number of layers to freeze. backbone=10, all=24')parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')# gpu编号parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')# Weights & Biases argumentsparser.add_argument('--entity', default=None, help='W&B: Entity')parser.add_argument('--upload_dataset', action='store_true', help='W&B: Upload dataset as artifact table')parser.add_argument('--bbox_interval', type=int, default=-1, help='W&B: Set bounding-box image logging interval')parser.add_argument('--artifact_alias', type=str, default='latest', help='W&B: Version of dataset artifact to use')opt = parser.parse_known_args()[0] if known else parser.parse_args()return opt

2.1、常用的参数

  1. weights
  2. cfg
  3. data
  4. epochs
  5. batch-size
  6. imgsz
  7. device
  8. resume
  9. hyp
  10. adam

2.1.1、weights

parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')

这个就是指定网络权重的路径,默认是yolov5s.pt,官方提供了很多的版本,我们要更换的时候直接按照模型的名字更换就可以了(当然,使用自己的也是完全没问题的);例如yolov5m.pt,yolov5l.pt,他会自动的下载对应的权重,不需要我们去Github手动下载。(如果下载太慢或者失败只能去官网下载了,下载好了直接放到根目录下就可以)

2.1.2、cfg

 # 模型参数配置文件路径,即你自己的网络模型,比方models/yolov5s.yamlparser.add_argument('--cfg', type=str, default='', help='model.yaml path')

2.1.3、data

# 配置数据集路径, 包括image/label/classes等信息。
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')

2.1.4、epochs

# 训练总轮次
parser.add_argument('--epochs', type=int, default=300)

2.1.5、batch-size

# 批次大小
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')

2.1.6、imgsz

# 输入图片大小
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')

2.1.7、device

# 训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu)
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

2.1.8、resume

# 接着上次打断的的结果开始训练
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')

2.1.9、hyp

# 超参数的设置
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')

2.1.10、adam

# adam: 是否使用adam优化器
parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')

3、detect.py-文件解读

"""weights: 训练的权重路径,可以使用自己训练的权重,也可以使用官网提供的权重source: 这个参数就是指定网络输入的路径,默认指定的是文件夹,也可以指定具体的文件或者扩展名等。imgsz: 输入图片的大小,默认640,即模型在检测图片前会把图片resize成640 × 640的尺寸,然后检测。conf-thres: 置信度的阈值,调节检测框的置信度,要大于等于该阈值,该检测框才会保留下来iou-thres: 调节IoU的阈值max-det: 设置一张图像中的最大检测数量,默认是最多检测 1000 个目标device: 如果有GPU则默认用第0块GPU,如果没有则会选择cpu,如果想要使用多个 GPU 并行训练时设置 0, 1 等。view-img: 实时的把检测结果显示出来,即每检测出一张就会显示出一张,直到所有图片检测完成。save-txt: 把检测结果保存成一个.txt的格式,txt文件里面保存了一些类别信息和边框的坐标信息。save-conf: 以.txt的格式保存目标的置信度,一般配合--save-txt一起使用。save-crop: 是否把模型检测的物体裁剪下来。裁剪的物体图片会保存在crops目录下。nosave: 不保存预测的结果。classes: 检测的类别,可以设置一个或者多个类别,根据自己的类别名去设置。比如coco数据集里面0,代表person。agnostic-nms: 跨类别nms,比如待检测图像中有一个长得很像篮球的足球,pt文件的分类中有足球和篮球两种,那在识别时这个足球可能会被同时框上2个框:一个是足球,一个是篮球。开启agnostic-nms后,那只会框出一个框。augment: 增强推理visualize: 特征图可视化,开启后,.npy格式的文件就是保存的模型文件,可以使用numpy读写,.png就是图片文件。update: 在模型训练的最后阶段去除优化器信息,以减小模型文件的大小,并将模型准备好用于推断或其他目的。project: 预测结果保存的路径。name: 预测结果保存的文件夹名字。exist-ok: 每次预测模型的结果是否保存在原来的文件夹,如果指定了这个参数的话,那么本次预测的结果还是保存在上一次保存的文件夹里;如果不指定就是每次预测结果保存一个新的文件夹下。line-thickness: 调节预测框线条粗细的,因为有的时候目标重叠太多会产生遮挡;hide-labels: 隐藏标签,显示类别之类的信息,只保存检测框。hide-conf: 隐藏标签的置信度。half: 是否使用FP16半精度推理dnn: 使用 OpenCV DNN 进行 ONNX 推理。DNN --> Deep Neural NetworksONNX(Open Neural Network Exchange)是一种多框架共用的,开放协议的神经网络交换格式。 ONNX 定义了一组与环境和平台无关的标准格式,为 AI 模型的互操作性提供了基础,使 AI 模型可以在不同框架和环境下交互使用。
"""
def parse_opt():parser = argparse.ArgumentParser()parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'weights/yolov5s-320.pt', help='model path(s)')parser.add_argument('--source', type=str, default=ROOT / 'data/data-txt', help='file/dir/URL/glob, 0 for webcam')parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')parser.add_argument('--view-img', action='store_true', help='show results')parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes')parser.add_argument('--nosave', action='store_true', help='do not save images/videos')parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3')parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')parser.add_argument('--augment', action='store_true', help='augmented inference')parser.add_argument('--visualize', action='store_true', help='visualize features')parser.add_argument('--update', action='store_true', help='update all models')parser.add_argument('--project', default=ROOT / 'runs/detect', help='save results to project/name')parser.add_argument('--name', default='exp', help='save results to project/name')parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)')parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels')parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences')parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')opt = parser.parse_args()opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1  # expandprint_args(FILE.stem, opt)return opt

3.1、常用的参数

  1. weights
  2. source
  3. imgsz
  4. conf-thres
  5. iou-thres
  6. device
  7. view-img
  8. save-txt
  9. save-conf
  10. visualize

3.1.1、weights

# weights: 训练的权重路径,可以使用自己训练的权重,也可以使用官网提供的权重
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'weights/yolov5s-320.pt', help='model path(s)')

3.1.2、source

# source: 这个参数就是指定网络输入的路径,默认指定的是文件夹,也可以指定具体的文件或者扩展名等。
parser.add_argument('--source', type=str, default=ROOT / 'data/data-txt', help='file/dir/URL/glob, 0 for webcam')

3.1.3、imgsz

#  imgsz: 输入图片的大小,默认640,即模型在检测图片前会把图片resize成640 × 640的尺寸,然后检测。
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')

3.1.4、conf-thres

# conf-thres: 置信度的阈值,调节检测框的置信度,要大于等于该阈值,该检测框才会保留下来
parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')

3.1.5、iou-thres

# iou-thres: 调节IoU的阈值
parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')

3.1.6、device

# device: 如果有GPU则默认用第0块GPU,如果没有则会选择cpu,如果想要使用多个 GPU 并行训练时设置 0, 1 等。
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

3.1.6、view-img

# view-img: 实时的把检测结果显示出来,即每检测出一张就会显示出一张,直到所有图片检测完成。
parser.add_argument('--view-img', action='store_true', help='show results')

3.1.7、save-txt

# save-txt: 把检测结果保存成一个.txt的格式,txt文件里面保存了一些类别信息和边框的坐标信息。
parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')

3.1.8、save-conf

# save-conf: 以.txt的格式保存目标的置信度,一般配合--save-txt一起使用。
parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')

3.1.9、visualize

# 特征图可视化,开启后,.npy格式的文件就是保存的模型文件,可以使用numpy读写,.png就是图片文件。
parser.add_argument('--visualize', action='store_true', help='visualize features')

4、参考文献

  1. Yolov5的parse_opt()中训练相关参数解释
  2. 手把手带你调参YOLOv5 (v5.0-v7.0)(推理)

5、目标检测系列文章

  1. YOLOv5s网络模型讲解(一看就会)
  2. 生活垃圾数据集(YOLO版)
  3. YOLOv5如何训练自己的数据集
  4. 双向控制舵机(树莓派版)
  5. 树莓派部署YOLOv5目标检测(详细篇)
  6. YOLO_Tracking 实践 (环境搭建 & 案例测试)
  7. 目标检测:数据集划分 & XML数据集转YOLO标签
  8. YOLOv5改进–轻量化YOLOv5s模型
  9. DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)
  10. YOLOv5目标检测优化点(添加小目标头检测)

这篇关于YOLOv5参数大全(parse_opt篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907007

相关文章

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja