Swin Transformer目标检测—训练自己数据集

文章目录

  • 一、环境配置
    • (1)安装VS2019
    • (2)创建Conda虚拟环境
    • (3)安装mmcv
    • (4)安装mmdetection
    • (5)安装apex
  • 二、工程修改
  • 三、踩坑记录

一、环境配置

Code:https://github.com/SwinTransformer/Swin-Transformer-Object-Detection

软件准备:

  • Ubantu 18.04
  • Pycharm 2020.1
  • Anaconda

(1)安装VS2019

VS官网: https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes
安装时只勾选桌面端的C++部分就可以,并添加环境变量,安装后需要重启电脑才有效

(2)创建Conda虚拟环境

创建:conda create -n swin_det python=3.8
激活:conda activate swin_det
pytorch安装:pip3 install torch==1.8.2+cu111 torchvision==0.9.2+cu111 torchaudio===0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
其他包安装:pip install cython matplotlib opencv-python timm -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

(3)安装mmcv

项目地址:https://github.com/open-mmlab/mmcv/blob/master/README_zh-CN.md

  • 使用Anaconda的Powershell Prompt进入mmcv目录下,执行 pip install -r requirements.txt来安装mmcv所需的python包
  • 运行python setup.py build_ext(这步包括下面的一步就会用到之前VS中的cl工具,若VS安装有问题,这一步没法成功)
  • 运行python setup.py develop重建代码

(4)安装mmdetection

项目地址:https://github.com/open-mmlab/mmdetection/tree/v2.11.0

  • 使用Anaconda的Powershell Prompt进入mmdetection的代码目录,执行 pip install -r requirements.txt安装mmdetection所需的python包
  • 运行python setup.py develop重建代码

(5)安装apex

项目地址:https://github.com/open-mmlab/mmdetection/tree/v2.11.0

  • 使用Anaconda的Powershell Prompt进入mmdetection的代码目录,执行 pip install -r requirements.txt安装mmdetection所需的python包
  • 运行python setup.py develop重建代码

二、工程修改

1. 设置类别
修改 configs/base/models/mask_rcnn_swin_fpn.py 中 num_classes 为自己数据集的类别(有两处需要修改)
2. 数据集路径
配置数据集路径:configs/base/datasets/coco_instance.py 文件的最上面指定了数据集的路径,因此在项目下新建 data/coco目录,下面四个子目录 annotations和test2017,train2017,val2017。
3. 修改分类数组
mmdet/datasets/coco.py目录下,CLASSES中填写自己的分类:

CLASSES = ('class1',)

三、踩坑记录

  1. 修改分类数组时,若只有一个类,一定要定义为元组,即类名后面加都好,不然会报错,别问我怎么知道的!
    报错如下:
# AssertionError: The `num_classes` (80) in Shared2FCBBoxHead of MMDataParallel does not matches the
  1. 修改完代码以后,若还是包相同的错误,建议执行python setup.py develop再尝试运行
  2. list index out of range
    训练了若干个epoch之后,报错如下图所示(错误没及时记录下来,借用别人的图~):
    Swin Transformer目标检测—训练自己数据集_第1张图片
    原因在于数据集json文件中segmentation字段是空的,在github的官方代码库中的requests栏目中发现了解决方式,修改mmdet/models/roi_heads_test_mixins.py文件的第118行为supplement_mask = rois.abs()[..., 1:].sum(dim=-1) == 0即可成功运行。
    Swin Transformer目标检测—训练自己数据集_第2张图片
    参考链接:
    https://beyonderwei.com/
    https://blog.csdn.net/hasque2019/article/details/121899614

测试部分后面跑完有时间再来追加~
干饭去了!

你可能感兴趣的:(环境配置,基于深度学习的目标检测,transformer,目标检测,深度学习)