Swin-transformer纯目标检测训练自己的数据集

Swin-transformer纯目标检测训练自己的数据集

  • 前言
  • 具体步骤及过程
  • 一、基本修改
  • 1.修改类别名称(两处)
  • 2.修改类别数
  • 3.修改数据集路径
  • 4.修改训练参数
  • 5.修改日志参数
  • 二、禁用mask
  • 三、遇到的问题及解决办法
  • 总结

  • 前言

    快写成swin系列博客了,前两篇:
    基于win10复现swin-transformer图像分类源码
    Windows10系统下swin-transformer目标检测环境搭建

    单开一篇记录目标检测的修改过程,Swin-Transformer-Object-Detection严格意义上来说应该属于目标分割,只是加上了目标框的输出和类别,效果拉满。


    具体步骤及过程

    注:这里以mask_rcnn_swin_fpn作为backbone为例,数据格式为coco数据格式,其他模型的修改等同。

    一、基本修改

    1.修改类别名称(两处)

    one:路径/mmdet/datasets/coco.py的第23行CLASSES
    two:路径/mmdet/core/evaluation/class_names.py的第67行coco_classes
    修改为自己数据集的类别

    2.修改类别数

    路径/configs/base/models/mask_rcnn_swin_fpn.py中的num_classes,也有两处大概在第54行和73行,修改为自己数据集的类别数量

    3.修改数据集路径

    路径/configs/base/datasets/coco_detection.py,第2行的data_toot数据集根目录路径,第8行的img_scale可以根据需要修改,下面train、test、val数据集的具体路径ann_file根据自己数据集修改

    4.修改训练参数

    路径/configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x(1x)_coco.py中:

    第3行’…/base/datasets/coco_instance.py’修改为’…/base/datasets/coco_detection.py’
    第69行的max_epochs按需修改
    第31行的samples_per_gpu表示batch size大小,太大会内存溢出
    第32行的workers_per_gpu表示每个GPU对应线程数,2、4、6、8按需修改

    5.修改日志参数

    路径/configs/base/default_runtime.py中:
    第1行interval=1表示每1个epoch保存一次权重信息
    第4行interval=50表示每50次打印一次日志信息
    第14行load_from表示加载训练好的权重路径,可以不设置,在训练时终端中给定

    修改到这里其实已经可以训练了,终端中输入:

    python tools/train.py configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py
    

    实际命令根据自己使用的修改,可以看到已经可以训练了,但是这样还是训练的带mask的,还不是真正意义上的目标检测模型。


    二、禁用mask

    1.路径./configs/base/models/mask_rcnn_swin_fpn.py中第75行use_mask=True 修改为use_mask=False

    还需要删除mask_roi_extractor和mask_head两个变量,大概在第63行和68行,这里删除之后注意末尾的逗号和小括号的格式匹配问题

    2.路径/configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py中:
    第26行dict(type=‘LoadAnnotations’, with_bbox=True, with_mask=True)修改为dict(type=‘LoadAnnotations’, with_bbox=True, with_mask=False)
    第60行删掉’gt_masks’

    训练时使用下面命令训练:

    bash tools/dist_train.sh 'configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py' 1 --cfg-options model.pretrained='checkpoints/swin_tiny_patch4_window7_224.pth'
    

    其中1为GPU数量,按需修改,预训练模型model.pretrained可选

    三、遇到的问题及解决办法

    1.AssertionError: Incompatible version of pycocotools is installed. Run pip uninstall pycocotools first. Then run pip install mmpycocotools to install open-mmlab forked pycocotools.

    解决办法已经给出了,命令行中:

    pip uninstall pycocotools
    
    pip install mmpycocotools
    

    2.KeyError: "CascadeRCNN: 'backbone.layers.0.blocks.0.attn.relative_position_bias_table'"

    预训练模型加载错误,应该使用imagenet预训练的模型,而不是在coco上微调的模型,这个错误我也很无奈啊,跟我预想的使用coco模型预训练不一样,官方github也有人提出相同问题,解决办法就是不加载预训练模型从头训练,或者在https://github.com/microsoft/Swin-Transformer上下载分类的模型。

    3.import pycocotools._mask as _mask
    File "pycocotools/_mask.pyx", line 1, in init pycocotools._mask
    ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

    numpy版本问题,使用pip install –upgrade numpy升级numpy版本

    总结

    先到这里,后续再更。

    来源:努力毕业的W

    物联沃分享整理
    物联沃-IOTWORD物联网 » Swin-transformer纯目标检测训练自己的数据集

    发表评论