【模型复现】自制数据集上复现目标检测域自适应 Towards Online Domain Adaption Object Decetion 代码 online-da
- 1. 环境安装
- 2. 数据准备
- 3. 模型复现
- 4. 踩坑记录
- 4.1 报错:AssertionError: Attribute 'thing_dataset_id_to_contiguous_id' in the metadata of 'coco_smoke_val' cannot be set to a different value! {1: 0, 2: 1, 3: 2, 4: 3} != {0: 0, 1: 1, 2: 2, 3: 3}
- 4.2 报错:KeyError: 'image_weak'
- 4.3 报错:Exception: backbone.stem.conv1.weight is not found in student model
- 4.4 报错:AttributeError: InstanceAnnotation
- 4.5 报错:error: package directory 'projects/PointRend/point_rend' does not exist
- 4.6 报错:unhandled cuda error
- 4.7 报错:KeyError:‘class-AP50'
1. 环境安装
1.1 要求
- Linux 上 Python ≥ 3.7
- PyTorch ≥ 1.8,torchvision 必须和安装的 PyTorch匹配
- gcc & g++ ≥ 5.4
1.2 安装
# 创建环境
conda create -n online_da python=3.7
# 激活环境
conda activate online_da
# torch 安装
# 本机 CUDA 为 11.8,根据代码 README.md 安装环境后版本不匹配,故安装了符合要求的 pytorch==1.10,这里需要自行根据 CUDA 版本安装适配的 torch 版本
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge
# pip 包
cd online-da
pip install -r requirements.txt
# pip detectron2 相关包
cd ..
python -m pip install -e online-da
2. 数据准备
- 准备
coco
格式的训练数据,数据集的文件结构为:my_datasets/ ├──annotations │ ├──train.json │ └──val.json ├──train │ ├──xxx.jpg │ ├──xxx.jpg │ └──xxx.jpg └──val ├──xxx.jpg ├──xxx.jpg └──xxx.jpg
3. 模型复现
3.1 数据集注册
- 修改
online-da-main/detectron2/data/datasets/builtin.py
- 如下图所示添加自制数据集
- 如下图所示修改加载数据路径
- 如下图所示添加自制数据集
- 修改
online-da-main/detectron2/data/datasets/builtin_meta.py
- 如下图所示添加代码并根据需要进行修改
- 同时在
_get_builtin_metadata()
函数中将coco
格式的返回值修改为上述添加的_get_smoke_coco_meta()
即可。
- 如下图所示添加代码并根据需要进行修改
3.2 超参数配置
- 超参数配置文件修改
- 在
configs/online-da/
路径下新建onda_my_datasets.yaml
,根据需要进行超参数修改,示例如下:
- 在
- 预训练权重下载
- 链接: 预训练权重下载地址
- 从上述链接中下载所需预训练权重,并放至项目根目录下
- 超参数配置
- 文件路径
online-da/detectron2/engine/defaults.py
- 配置
config-file
为第一步修改的onda_my_datasets.yaml
文件路径 - 配置
model-dir
为第二步下载的权重model_final.pth
路径 - 根据需要进行
num-gpus
配置
- 文件路径
3.3 模型训练
- 在终端中使用
python tools/train_onlineda_net.py
即可进行模型训练
4. 踩坑记录
4.1 报错:AssertionError: Attribute ‘thing_dataset_id_to_contiguous_id’ in the metadata of ‘coco_smoke_val’ cannot be set to a different value! {1: 0, 2: 1, 3: 2, 4: 3} != {0: 0, 1: 1, 2: 2, 3: 3}
- 原因分析
- 在注册数据集时,标签的 id 序号从 1 开始,而数据集的 json 文件中从 0 开始,导致标签序号不匹配
- 解决方法
- 注册数据集时,将 id 序号修改为从 0 开始
- 注册数据集时,将 id 序号修改为从 0 开始
4.2 报错:KeyError: ‘image_weak’
- 问题分析
- 变量
x
中不存在名为‘image_weak’
的key
值
- 变量
- 解决方法
- 选择合适的模型或者以
onda
开头的yaml
文件
- 选择合适的模型或者以
4.3 报错:Exception: backbone.stem.conv1.weight is not found in student model
- 问题分析
- 在 student 模型中没有权重值
backbone.stem.conv1.weight
,在tools/train_onlineda_net.py
的update_teacher_model()
函数中权重值字典中key
值从第 7 个字符开始,导致 student 和 teacher 模型的权重值名称不匹配
- 在 student 模型中没有权重值
- 解决方法
- 修改 key 值为权重值名称全称
- 修改 key 值为权重值名称全称
4.4 报错:AttributeError: InstanceAnnotation
- 问题分析
- 缺少
detectron2._C
模块,导致无法调用_C.InstanceAnnotation
- 缺少
- 解决方法
- 按照环境安装步骤重新安装环境
4.5 报错:error: package directory ‘projects/PointRend/point_rend’ does not exist
- 问题分析
- 缺少
projects
文件夹
- 缺少
- 解决方法
online-da
代码基于detectron2
框架,故从detectron2
官方代码中复制projects
文件夹到online-da
根目录下即可
4.6 报错:unhandled cuda error
- 问题分析
- 安装环境版本间不兼容
- 解决方法
- 按照环境安装步骤重新安装环境
4.7 报错:KeyError:‘class-AP50’
- 问题分析
results_i['bbox']
中无key
值’class-AP50'
- 解决方法
- 首先查看
results_i['bbox']
内容
- 可看到
results_i['bbox']
中并不存在名称为’class-AP50'
的key
值,并且报错位置的代码实现功能为记录每个类别的AP
值,故修改代码对各类别的AP
进行输出即可
- 首先查看