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

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

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

一、基本修改

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

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

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

路径/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按需修改

路径/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
  1. KeyError: "CascadeRCNN: 'backbone.layers.0.blocks.0.attn.relative_position_bias_table'"

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

  1. 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版本

先到这里,后续再更。

Original: https://blog.csdn.net/qq_36622589/article/details/124355564
Author: 努力毕业的W
Title: Swin-transformer纯目标检测训练自己的数据集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/519759/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球