官方Swin Transformer 目标检测训练流程
一、环境配置
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
查看结果
二、训练自己的数据集
1 准备coco格式数据集
1 数据集标签转化
MMDetection目标检测框架采用的数据集格式是COCO格式,为了采用COCODataset 类来加载数据并进行训练以及评测,需要将VisDrone数据集转换为COCO格式,可参考VisDrone数据集转COCO格式数据集
1.1 COCO数据集格式介绍
MS COCO 是google 开源的大型数据集, 分为目标检测、分割、关键点检测三大任务, 数据集主要由图片和json 标签文件组成。 对于目标检测,json文件的格式主要如下:
其中共包括6个字段,实际应用中,info和license字段用不上。
对于本实验转化后的数据集包括4个字段
images字段又包括4项字段
- filename:图片名
- height:高
- width:宽
- id
其中最重要的是id字段,代表的是图片的id,每一张图片具有唯一的一个独特的id。
annotations字段包含多个annotation实例的一个列表,annotation类型本身又包含了一系列的字段,如这个目标的category id和segmentation mask。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)
- id字段:指的是这个annotation的一个id
- image_id:等同于前面image字段里面的id。
- category_id:类别id
- segmentation:用于分割
- area:标注区域面积
- bbox:标注框,左上角坐标 标注框宽和高
- iscrowd:决定是RLE格式还是polygon格式。
categories字段的id数,就是类别数。
- id:类别id
- name:类别id对应的名字
1.2 上传数据集并解压
已按照前文进行了标签转化,为了实现在训练,将处理好的数据集上传至data/coco路径下。
2 改变类别数和类别名
- 修改Swin-Transformer-Object-Detection/mmdet/datasets/coco.py的CLASSES
- 修改Swin-Transformer-Object-Detection/mmdet/core/evaluation/class_names.py 的coco_classes
- 修改configs中的num_classes
- 执行
pip install -v -e .
3 如何去除实例分割,仅进行目标检测
参考链接,此链接说了修改方法,但是试了会报新的错 “NoneType” object is not iterable,未解决