Swin-transformer纯目标检测训练自己的数据集
前言
快写成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版本
总结
先到这里,后续再更。