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目标检测优化点(添加小目标头检测)
相关推荐
2401_858120263 小时前
探索sklearn文本向量化:从词袋到深度学习的转变
开发语言·python·机器学习
算法金「全网同名」5 小时前
算法金 | 一个强大的算法模型,GPR !!
机器学习
江畔柳前堤5 小时前
CV01_相机成像原理与坐标系之间的转换
人工智能·深度学习·数码相机·机器学习·计算机视觉·lstm
qq_526099135 小时前
为什么要在成像应用中使用图像采集卡?
人工智能·数码相机·计算机视觉
码上飞扬5 小时前
深度解析:机器学习与深度学习的关系与区别
人工智能·深度学习·机器学习
super_Dev_OP6 小时前
Web3 ETF的主要功能
服务器·人工智能·信息可视化·web3
Sui_Network6 小时前
探索Sui的面向对象模型和Move编程语言
大数据·人工智能·学习·区块链·智能合约
别致的SmallSix6 小时前
集成学习(一)Bagging
人工智能·机器学习·集成学习
LNTON羚通6 小时前
视频共享融合赋能平台LnyonCVS国标视频监控平台包含哪些功能
大数据·网络·人工智能·算法·音视频
实在智能RPA6 小时前
华为昇腾×实在智能:让国产AI科技实实在在“飞得更高”
人工智能·科技·华为·实在智能·agent智能体