YOLOv5项目梳理

1 项目介绍

参考项目:YOLO项目

1.1训练模型

YOLOv5模型
在这里插入图片描述

train.py 训练预训练模型

...
...
def parse_opt(known=False):
    # 命令行参数解析器初始化
    parser = argparse.ArgumentParser()
    # 初始权重路径,默认为 ROOT / 'yolov5s.pt',用于指定模型的初始权重文件路径或者设为空自己训练模型
    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')
    # 数据集配置文件路径,默认为 ROOT / 'data/coco128.yaml',用于指定数据集的配置文件。
    parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
    # 超参数配置文件路径,默认为 ROOT / 'data/hyps/hyp.scratch.yaml',用于指定模型的超参数配置。
    parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')
    # 训练的总轮数,默认为 300
    parser.add_argument('--epochs', type=int, default=300)
    # 每个GPU的总批量大小,默认为 16
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
    # 训练和验证图像的大小(像素数),默认为 640。
    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 check')
    # 进化超参数进行 x 代演化。
    # 可能意味着在某个优化过程中,通过进化算法对模型的超参数进行了多轮(x 代)的优化和演化。这种方法可以自动地探索超参数空间,并尝试找到最优的超参数设置,以便最大化模型的预测能力或其他性能指标。
    parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
    # gsutil 存储桶
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    # 指在处理图像时选择将缓存存储在 RAM(默认)或者磁盘中,这种缓存通常用于加快图像处理的速度
    parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "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')
    # 是否使用 torch.optim.Adam() 优化器
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')

    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')

    parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')
    # 保存到项目/名称
    parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
    # 保存的项目/名称。
    parser.add_argument('--name', default='exp', help='save to project/name')
    # 设置为true每次预测结果默认保存上述文件夹,不再创建新的文件夹
    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('--linear-lr', action='store_true', help='linear LR')
    # 标签平滑的 epsilon 值。
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    # EarlyStopping 的等待时间
    parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
    # 要冻结的层数。
    parser.add_argument('--freeze', type=int, default=0, help='Number of layers to freeze. backbone=10, all=24')
    # 每 x 轮保存检查
    parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')

    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
...
...

1.加载预训练完成的模型,进行进一步训练

# 初始权重路径,默认为 ROOT / 'yolov5s.pt',用于指定模型的初始权重文件路径或者设为空自己训练模型
    parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')

训练完成后,会生成在训练过程中最好的模型与最新的模型

在这里插入图片描述
2.存放预模型的相关参数

# 模型配置文件路径,默认为空字符串,用于指定模型的配置文件。
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')

在这里插入图片描述

3.数据集的相关配置文件

# 数据集配置文件路径,默认为 ROOT / 'data/coco128.yaml',用于指定数据集的配置文件   
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')

在这里插入图片描述
4.超参数配置文件路径

# 超参数配置文件路径,默认为 ROOT / 'data/hyps/hyp.scratch.yaml',用于指定模型的超参数配置。
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')

在这里插入图片描述
5.每次训练完的模型、参数、结果等均保存到该位置

# 保存到项目/名称
parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
# 保存的项目/名称。
parser.add_argument('--name', default='exp', help='save to project/name')

在这里插入图片描述

1.2使用模型

detect.py使用预训练或者上述训练完成的模型进行预测

...
...
if __name__ == '__main__':
    # 创建了一个ArgumentParser对象,用于处理命令行参数。
    parser = argparse.ArgumentParser()
    # 加载训练好的模型赋予权值
    parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
    # 指定网络的输入
    parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for webcam
    # 训练过程中照片的尺寸
    parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    # 置信度  检测概率超过某个值,才判断预测成功
    parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
    # 多个框重合度在某个标准时,才合为一个框(一个目标)
    parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')

    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='display results')
    # 保存为txt文本
    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('--nosave', action='store_true', help='do not save images/videos')
    # 规定展示预测哪一个类别   --class 0  只展示下标为0的类别
    parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
    # 增强的NMS  多个框重合度在某个标准时,才合为一个框(一个目标)
    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('--update', action='store_true', help='update all models')
    # 运行结果保存的位置
    parser.add_argument('--project', default='runs/detect', help='save results to project/name')
    # 运行结果保存的文件夹名称
    parser.add_argument('--name', default='exp', help='save results to project/name')
    # 设置为true每次预测结果默认保存上述文件夹,不再创建新的文件夹
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    opt = parser.parse_args()
    print(opt)
    check_requirements(exclude=('pycocotools', 'thop'))

    with torch.no_grad():
        if opt.update:  # update all models (to fix SourceChangeWarning)
            for opt.weights in ['yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt']:
                detect()
                strip_optimizer(opt.weights)
        else:
            detect()
...
...

1.加载训练好的模型,可以是预训练模型,也可以是上述训练的模型

# 加载训练好的模型赋予权值
parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')

2.待预测识别的图片或视频

# 指定网络的输入
parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for webcam

在这里插入图片描述
3.每次识别完的结果保存到该位置

# 运行结果保存的位置
parser.add_argument('--project', default='runs/detect', help='save results to project/name')
# 运行结果保存的文件夹名称
parser.add_argument('--name', default='exp', help='save results to project/name')

在这里插入图片描述

2 YOLO数据集

数据与label进行标注MakeSense
在这里插入图片描述

标注完成后,导出数据集
由此建立该数据集的配置文件
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]

train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 80  # number of classes
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']  # class names

训练即可

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 18:24:04       123 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 18:24:04       131 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 18:24:04       109 阅读
  4. Python语言-面向对象

    2024-07-20 18:24:04       117 阅读

热门阅读

  1. Python数据类型转换:掌握数据形态的转换艺术

    2024-07-20 18:24:04       32 阅读
  2. Spring Boot与JPA:无缝集成,轻松管理数据库】

    2024-07-20 18:24:04       28 阅读
  3. 分享遇到的异步问题合集

    2024-07-20 18:24:04       26 阅读
  4. 【高考志愿】音乐与舞蹈学

    2024-07-20 18:24:04       29 阅读
  5. B端产品方向(五)

    2024-07-20 18:24:04       24 阅读
  6. Canvas总结二

    2024-07-20 18:24:04       29 阅读
  7. 二叉树---从中序与后序遍历序列构造二叉树

    2024-07-20 18:24:04       26 阅读
  8. 冒泡排序代码

    2024-07-20 18:24:04       28 阅读
  9. qt log 输出为文件,每分钟换一个log文件

    2024-07-20 18:24:04       23 阅读