【模型复现】自制数据集上复现目标检测域自适应 Towards Online Domain Adaption Object Decetion 代码 online-da


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 开始
      在这里插入图片描述

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.pyupdate_teacher_model() 函数中权重值字典中 key 值从第 7 个字符开始,导致 student 和 teacher 模型的权重值名称不匹配
  • 解决方法
    • 修改 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 进行输出即可
      在这里插入图片描述
  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值