YOLOv5参数大全(parse_opt篇)

文章目录

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='+' 表示可设置一个或多个
python 复制代码
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: 网络输入图片大小, 默认的大小是640
    parser.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 文件。,默认False
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    
    # noval: 只在最后一次进行测试,默认False
    parser.add_argument('--noval', action='store_true', help='only validate final epoch')
    
    # noautoanchor: 不自动调整anchor,默认False
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    
    # evolve: 是否进行超参数优化,利用遗传算法自动搜索超参数,默认False
    parser.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: 数据集是否只有一个类别,默认False
    parser.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 arguments
    parser.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

python 复制代码
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

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

2.1.3、data

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

2.1.4、epochs

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

2.1.5、batch-size

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

2.1.6、imgsz

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

2.1.7、device

python 复制代码
# 训练的设备,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

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

2.1.9、hyp

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

2.1.10、adam

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

3、detect.py-文件解读

python 复制代码
"""
  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 Networks
  
  ONNX(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  # expand
    print_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

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

3.1.2、source

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

3.1.3、imgsz

python 复制代码
#  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

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

3.1.5、iou-thres

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

3.1.6、device

python 复制代码
# 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

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

3.1.7、save-txt

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

3.1.8、save-conf

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

3.1.9、visualize

python 复制代码
# 特征图可视化,开启后,.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目标检测优化点(添加小目标头检测)
相关推荐
NAGNIP7 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab8 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab8 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP12 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年12 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼12 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS12 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区14 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈14 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang14 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx