DINO训练自己的数据集(swin transformer backbone)

源码:https://github.com/IDEA-Research/DINO

数据集:coco格式

python 复制代码
COCODIR/
  ├── train2017/
  ├── val2017/
  └── annotations/
  	├── instances_train2017.json
  	└── instances_val2017.json
环境配置
1. 下载代码
python 复制代码
git clone https://github.com/IDEA-Research/DINO.git
cd DINO
2. 新建个环境
python 复制代码
conda create -n dino python=3.7 -y    # 新建环境
conda activate dino    # 激活环境
3. 装pytorch(作者版本:python=3.7.3,pytorch=1.9.0,cuda=11.1)
python 复制代码
# an example:
conda install -c pytorch pytorch torchvision

在pytorch.org上找到合适版本的pytorch安装即可,比如我是直接沿用的之前配的vit_adapter环境,版本和作者一样

python 复制代码
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
4. 安装其他包
python 复制代码
pip install -r requirements.txt
5. 编译 CUDA operators
python 复制代码
cd models/dino/ops
python setup.py build install
# unit test (should see all checking is True)
python test.py
cd ../../..

执行 test.py 后出现 out of memory是正常现象

到这里配置环境就over了

训练
1. 修改配置文件

/config/DINO/DINO_4scale_swin.py 中

  1. num_classes调整为数据集类别数

  2. 修改 dn_labelbook_size满足 dn_labebook_size >= num_classes + 1

(此处建议复制一份作为自己的config文件进行修改,防止以后弄混出现问题,也方便自己管理,这里我复制了一份命名为 DINO_4scale_swin_custom.py)

2. 下载预训练模型文件等

下载预训练模型 and the checkpoint of Swin-L backbone

3. start to train
python 复制代码
bash scripts/DINO_train_submitit_swin.sh /path/to/your/COCODIR /path/to/your/pretrained_backbone

train from scratch

python 复制代码
bash scripts/DINO_train_swin.sh /path/to/your/COCODIR /path/to/your/pretrained_backbone_dir

或者

python 复制代码
python main.py \
	--output_dir logs/DINO/R50-MS4 -c ./config/DINO/DINO_4scale_swin_custom.py --coco_path ./coco_path \
	--options dn_scalar=100 embed_init_tgt=TRUE \
	dn_label_coef=1.0 dn_bbox_coef=1.0 use_ema=False \
	dn_box_noise_scale=1.0 backbone_dir=./backbone_dir

finetune with pre-trained models

python 复制代码
bash scripts/DINO_train_swin.sh /path/to/your/COCODIR /path/to/your/pretrained_backbone --pretrain_model_path /path/to/a/pretrianed/model --finetune_ignore label_enc.weight class_embed

指定GPU序号的话在 /path/to/your/pretrained_backbone后加上序号数即可,即第三个参数

ps. 如果是用的自己的config文件,那么需要修改 DINO_train_swin.sh 里面的参数,把里面的 DINO_4scale_swin.py 修改为自己的文件名即可

遇到的报错

第一次train的时候出现报错 RuntimeError: No shared folder available dino

解决方法:在项目文件夹下新建一个名为comp_robot的文件夹,该文件夹内再新建一个名为experiments的文件夹,然后在根目录下的run_with_submitit.py中找到get_shared_folder()函数,将其中的 /comp_robot 换为自己的文件夹所在路径,/comp_robot/{user}/experiments 同理

占用现存好大,改天再跑,先记录一下我自己的指令(服务器103 环境名vit_adapter)

python 复制代码
 bash scripts/DINO_train_swin.sh /data/zy/dataset/project/Cooper001_withlabel/coco/ /data/zy/code/DINO-main/pretrained/ 2 --pretrain_model_path /data/zy/code/DINO-main/pretrained/checkpoint0011_4scale_swin.pth --finetune_ignore label_enc.weight class_embed
相关推荐
小酒星小杜17 小时前
画 AI 漫画,别只会写“日漫风”:10 种画风、适用故事和可复制提示词
人工智能·设计模式·程序员
桃西西呀17 小时前
Laya 源码级原理拆解之二:序列打包与决策头
人工智能·llm·ai编程
知几蜗牛17 小时前
模型能正常出字,答案却悄悄变差:推理配置漂移比报错更危险
人工智能
知几蜗牛17 小时前
模型已经开始吐字,界面为什么还会卡?用本地推理讲清异步流
人工智能
2301_7903559717 小时前
适合新手用的AI配音工具推荐:2026年横向测评与选型指南
人工智能·自然语言处理
X54先生(人文科技)17 小时前
《元创力》纪实录 · 卷宗 3.6《不退场的人——Yuri尤栗外滩大会AI音乐会的碳硅协同推演全记录》
人工智能·深度学习·ai写作·开源协议
盟接之桥17 小时前
线束数字化--先进先出为什么总是停留在纸面上?
大数据·网络·数据库·人工智能·制造·ai编程
阳明山水18 小时前
因果一致性正则化实战解析
人工智能·深度学习·算法·机器学习·架构
甲维斯18 小时前
首测LangCat2.5,美团牛鼻,远胜“卧龙凤雏”!
人工智能
Zentceh18 小时前
夜间野生动物监测:AI全彩夜视+AI行为分析方案
图像处理·人工智能·科技·计算机视觉·车载系统·无人机·智能硬件