本文主要是介绍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()函数,该函数用于读取命令行
- action=‘store_true’ 当用到该参数时,则为true,默认为false。如果是store_false,则默认值是true
- default 默认值
- nargs=‘?’ 表示可设置零个或一个
- nargs=‘*’ 表示可设置零个或多个
- 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、常用的参数
- weights
- cfg
- data
- epochs
- batch-size
- imgsz
- device
- resume
- hyp
- 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、常用的参数
- weights
- source
- imgsz
- conf-thres
- iou-thres
- device
- view-img
- save-txt
- save-conf
- 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、参考文献
- Yolov5的parse_opt()中训练相关参数解释
- 手把手带你调参YOLOv5 (v5.0-v7.0)(推理)
5、目标检测系列文章
- YOLOv5s网络模型讲解(一看就会)
- 生活垃圾数据集(YOLO版)
- YOLOv5如何训练自己的数据集
- 双向控制舵机(树莓派版)
- 树莓派部署YOLOv5目标检测(详细篇)
- YOLO_Tracking 实践 (环境搭建 & 案例测试)
- 目标检测:数据集划分 & XML数据集转YOLO标签
- YOLOv5改进–轻量化YOLOv5s模型
- DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)
- YOLOv5目标检测优化点(添加小目标头检测)
这篇关于YOLOv5参数大全(parse_opt篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!