Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)

官方Swin Transformer 目标检测训练流程

    • 一、环境配置
      • 1. 矩池云相关环境租赁
      • 2. 安装pytorch及torchvision
      • 3. 安装MMDetection
        • 4. 克隆仓库使用代码
      • 5. 环境测试
    • 二、训练自己的数据集
      • 1 准备coco格式数据集
        • 1 数据集标签转化
          • 1.1 COCO数据集格式介绍
          • 1.2 上传数据集并解压
      • 2 改变类别数和类别名
      • 3 如何去除实例分割,仅进行目标检测

一、环境配置

1. 矩池云相关环境租赁

镜像:
Pytorch 1.5.0
镜像描述:
预装:Python3.8, CUDA 10.1, cuDNN 7.6, Pytorch 1.5.0, Ubuntu 18.04

2. 安装pytorch及torchvision

conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch -y

3. 安装MMDetection

pip install openmim
mim install mmdet

4. 克隆仓库使用代码

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

5. 环境测试

 cd /mnt/Swin-Transformer-Object-Detection

新建valid.py 内容如下:

from mmdet.apis import init_detector, inference_detector

config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
# download the checkpoint from model zoo and put it in `checkpoints/`
# url: https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
checkpoint_file = 'faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = 'cuda:0'
# init a detector
model = init_detector(config_file, checkpoint_file, device=device)
# inference the demo image
img = 'demo/demo.jpg'
result = inference_detector(model, 'demo/demo.jpg')
model.show_result(img, result)
model.show_result(img, result, out_file='demo/demo_result.jpg') # 保存推理图像

下载权重

mim download mmdet --config faster_rcnn_r50_fpn_1x_coco --dest .

装timm库

pip install timm

执行valid.py

python valid.py

遇见错误
AssertionError: MMCV==1.4.5 is used but incompatible. Please install mmcv>=1.2.4, <=1.4.0.
解决办法:降低mmcv版本

 pip install mmcv-full==1.3.17 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html

再执行valid.py

python valid.py

查看结果
Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第1张图片

二、训练自己的数据集

1 准备coco格式数据集

1 数据集标签转化

MMDetection目标检测框架采用的数据集格式是COCO格式,为了采用COCODataset 类来加载数据并进行训练以及评测,需要将VisDrone数据集转换为COCO格式,可参考VisDrone数据集转COCO格式数据集

1.1 COCO数据集格式介绍

MS COCO 是google 开源的大型数据集, 分为目标检测、分割、关键点检测三大任务, 数据集主要由图片和json 标签文件组成。 对于目标检测,json文件的格式主要如下:
Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第2张图片
其中共包括6个字段,实际应用中,info和license字段用不上。
对于本实验转化后的数据集包括4个字段
Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第3张图片
images字段又包括4项字段

  • filename:图片名
  • height:高
  • width:宽
  • id
    Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第4张图片
    其中最重要的是id字段,代表的是图片的id,每一张图片具有唯一的一个独特的id。

annotations字段包含多个annotation实例的一个列表,annotation类型本身又包含了一系列的字段,如这个目标的category id和segmentation mask。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)
Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第5张图片

  • id字段:指的是这个annotation的一个id
  • image_id:等同于前面image字段里面的id。
  • category_id:类别id
  • segmentation:用于分割
  • area:标注区域面积
  • bbox:标注框,左上角坐标 标注框宽和高
  • iscrowd:决定是RLE格式还是polygon格式。

categories字段的id数,就是类别数。Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第6张图片

  • id:类别id
  • name:类别id对应的名字

参考链接:COCO数据集介绍

1.2 上传数据集并解压

已按照前文进行了标签转化,为了实现在训练,将处理好的数据集上传至data/coco路径下。

2 改变类别数和类别名

  1. 修改Swin-Transformer-Object-Detection/mmdet/datasets/coco.py的CLASSES
  2. 修改Swin-Transformer-Object-Detection/mmdet/core/evaluation/class_names.py 的coco_classes
  3. 修改configs中的num_classes
  4. 执行 pip install -v -e .

3 如何去除实例分割,仅进行目标检测

重点参考该链接,根据该链接可正常训练

参考链接,此链接说了修改方法,但是试了会报新的错 “NoneType” object is not iterable,未解决
Swin-Transformer-Object-Detection 配置与训练自己的数据集(踩坑)_第7张图片

你可能感兴趣的:(Pytorch学习,深度学习,transformer,目标检测)