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
相关推荐
江畔柳前堤5 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术5 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客5 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术6 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO6 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术7 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架7 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab7 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI7 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab7 小时前
【无标题】
人工智能·开源