• 深度学习环境搭建笔记(二):mmdetection-CPU安装和训练


    第一步:安装anaconda

    参考教程:点击

    第二步:安装虚拟环境

    conda create --name openmmlab python=3.8
    conda activate openmmlab
    
    • 1
    • 2

    第三步:安装torch和torchvision

    conda install pytorch torchvision torchaudio cpuonly -c pytorch
    
    • 1

    安装的版本为
    在这里插入图片描述

    第四步: 安装mmcv-full

    下载地址:点击
    如果是2.*以上的版本,则为mmcv。

    pip install mmcv-2.0.1-cp38-cp38-win_amd64.whl
    
    • 1

    第五步: 安装mmdetection

    git clone https://github.com/open-mmlab/mmdetection.git
    cd mmdetection
    pip install -v -e .
    # "-v" 指详细说明,或更多的输出
    # "-e" 表示在可编辑模式下安装项目,因此对代码所做的任何本地修改都会生效,从而无需重新安装。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    到这里为止,环境的配置就完成了。

    第六步:测试环境

    mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .
    
    • 1

    下载将需要几秒钟或更长时间,这取决于你的网络环境。完成后,你会在当前文件夹中发现两个文件 rtmdet_tiny_8xb32-300e_coco.py 和 rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth。

    如果你通过源码安装的 MMDetection,那么直接运行以下命令进行验证:

    python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cpu
    
    • 1

    在这里插入图片描述
    你会在当前文件夹中的 outputs/vis 文件夹中看到一个新的图像 demo.jpg,图像中包含有网络预测的检测框。
    在这里插入图片描述

    第七步:训练-目标检测

    下载目标检测mmyolo:https://github.com/open-mmlab/mmyolo
    这个里面的yolo系列更全

    7.1 准备数据集

    Cat 数据集是由 144 张图片组成的单类数据集(原始图片由 @RangeKing 提供,并由 @PeterH0323 清理),其中包含训练所需的注释信息。示例图像如下所示:
    在这里插入图片描述您可以通过以下命令直接下载并使用它:
    python tools/misc/download_dataset.py --dataset-name cat --save-dir data/cat --unzip --delete
    此数据集使用以下目录结构自动下载到 dir:data/cat
    在这里插入图片描述

    7.2 检查数据集

    检查标签是否有问题

    修改 tools/analysis_tools/browse_coco_json.py --img-dir ../misc/data/cat/images --ann-file ../misc/data/cat/annotations/annotations_all.json
    
    • 1

    在这里插入图片描述

    7.3 训练网络

    以 YOLOv5 算法为例,考虑到用户的 GPU 内存有限,我们需要修改一些默认的训练参数,使其流畅运行。需要修改的关键参数如下:

    • YOLOv5 是一种基于锚点的算法,不同的数据集需要自适应地计算合适的锚点
    • 默认配置使用 8 个 GPU,每个 GPU 的批大小为 16 个。现在将其更改为批处理大小为 12 的单个 GPU。
    • 默认训练周期为 300。将其更改为 40 纪元
    • 鉴于数据集很小,我们选择使用固定的主干权重
    • 原则上,当批量大小发生变化时,学习率应相应地线性缩放,但实际测量发现这不是必需的

    在文件夹中创建一个配置文件(我们提供了这个配置供您直接使用),并将以下内容复制到配置文件中。yolov5_s-v61_fast_1xb12-40e_cat.pyconfigs/yolov5

    _base_ = 'yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py'
    
    data_root = 'misc/data/cat/'
    class_name = ('cat', )
    num_classes = len(class_name)
    metainfo = dict(classes=class_name, palette=[(20, 220, 60)])
    
    anchors = [
        [(68, 69), (154, 91), (143, 162)],  # P3/8
        [(242, 160), (189, 287), (391, 207)],  # P4/16
        [(353, 337), (539, 341), (443, 432)]  # P5/32
    ]
    
    max_epochs = 40
    train_batch_size_per_gpu = 12
    train_num_workers = 4
    
    load_from = 'https://download.openmmlab.com/mmyolo/v0/yolov5/yolov5_s-v61_syncbn_fast_8xb16-300e_coco/yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth'  # noqa
    
    model = dict(
        backbone=dict(frozen_stages=4),
        bbox_head=dict(
            head_module=dict(num_classes=num_classes),
            prior_generator=dict(base_sizes=anchors)))
    
    train_dataloader = dict(
        batch_size=train_batch_size_per_gpu,
        num_workers=train_num_workers,
        dataset=dict(
            data_root=data_root,
            metainfo=metainfo,
            ann_file='annotations/trainval.json',
            data_prefix=dict(img='images/')))
    
    val_dataloader = dict(
        dataset=dict(
            metainfo=metainfo,
            data_root=data_root,
            ann_file='annotations/test.json',
            data_prefix=dict(img='images/')))
    
    test_dataloader = val_dataloader
    
    _base_.optim_wrapper.optimizer.batch_size_per_gpu = train_batch_size_per_gpu
    
    val_evaluator = dict(ann_file=data_root + 'annotations/test.json')
    test_evaluator = val_evaluator
    
    default_hooks = dict(
        checkpoint=dict(interval=10, max_keep_ckpts=2, save_best='auto'),
        # The warmup_mim_iter parameter is critical.
        # The default value is 1000 which is not suitable for cat datasets.
        param_scheduler=dict(max_epochs=max_epochs, warmup_mim_iter=10),
        logger=dict(type='LoggerHook', interval=5))
    train_cfg = dict(max_epochs=max_epochs, val_interval=10)
    # visualizer = dict(vis_backends = [dict(type='LocalVisBackend'), dict(type='WandbVisBackend')]) # noqa
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    然后修改tools/train.py。主要修改config就行了

        parser.add_argument('--config', default="../configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py", help='train config file path')
    
    
    • 1
    • 2

    报错需要安装pip install albumentations -i https://pypi.tuna.tsinghua.edu.cn/simple 和pip install prettytable -i https://pypi.tuna.tsinghua.edu.cn/simple
    安装完运行后成功训练:
    在这里插入图片描述

  • 相关阅读:
    咖啡技术培训:6款创意咖啡拿铁教程
    WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量
    nodejs多版本管理
    NPDP考试应该怎么准备?考试攻略解析!
    Excel中行列范围的转换
    Lyapunov optimization 李雅普诺夫优化
    微软8月系统更新引发问题:虚拟内存分页文件出现错误
    【EI检索征稿】第五届机器学习、大数据与商务智能国际会议(MLBDBI 2023)
    kotlin实践笔记
    React子组件没有随父组件更新问题的解决
  • 原文地址:https://blog.csdn.net/m0_51004308/article/details/132673805