OW-DETR分布式运行(单机多GPU)

首先去修改./util/misc.py文件的distributed初始化函数,删除425-427行的代码,理论上这三行应该在else里边。

根目录有个 run.sh修改里边的参数,用几个GPU数字就改成几

然后对应修改configs/OWOD_our_proposed_split.sh,以下是一个示例

#!/usr/bin/env bash
​
set -x
​
EXP_DIR=exps/OWDETR_t1
PY_ARGS=${@:1}
​
python -u main_open_world.py \
    --output_dir ${EXP_DIR} --dataset owod --num_queries 100 --eval_every 5 \
    --PREV_INTRODUCED_CLS 0 --CUR_INTRODUCED_CLS 4 --data_root '/home/zhanghaonan/OW-DETR/data/OWDETR' --train_set 't1_train' --test_set 't1_test' --num_classes 9 \
    --unmatched_boxes --epochs 300 --top_unk 5 --featdim 1024 --NC_branch --nc_loss_coef 0.1 --nc_epoch 9 \
    --backbone 'dino_resnet50'  --batch_size 4 \
    ${PY_ARGS}

这个脚本是用来训练 OWDETR (开放世界目标检测器)模型的。以下是脚本中每个参数的详细解释:

  1. --output_dir ${EXP_DIR}: 指定模型输出目录,包括训练产生的模型、日志等文件。

  2. --dataset owod: 使用的数据集名称,这里设定使用 'owod' 数据集。

  3. --num_queries 100: 指定解码时每个图像的最大检测目标数量。

  4. --eval_every 5: 指定每五个周期进行一次模型性能评估。

  5. --PREV_INTRODUCED_CLS 0 --CUR_INTRODUCED_CLS 4: 指定新增加的类别范围是从0到4。

  6. --data_root '/home/zhanghaonan/OW-DETR/data/OWDETR': 数据集的存放位置。

  7. --train_set 't1_train' --test_set 't1_test': 指定训练集和测试集的名称。

  8. --num_classes 9: 类别数量,包括背景类别。

  9. --unmatched_boxes: 用于处理在固定预设框集和真实边界框匹配时,找不到匹配框的情况。

  10. --epochs 300: 训练的总周期数。

  11. --top_unk 5: TOP-UNK 策略中未知类别的数量。

  12. --featdim 1024: 模型的特征维度。

  13. --NC_branch: 是否在模型中增加一个新类别(NC)分支。

  14. --nc_loss_coef 0.1: 新类别分支的损失系数。

  15. --nc_epoch 9: 在第9个周期开始引入新类别。

  16. --backbone 'dino_resnet50': 指定模型的骨干网络为 'dino_resnet50'。

  17. --batch_size 4: 批量大小,即每次迭代放入模型的样本数量。

  18. ${PY_ARGS}:这是bash脚本接收的任意额外的python参数,用户可以在运行脚本时传入。

然后修改./tools/launch.py文件的第50行

去掉--,上边其他的--不用删,只需删掉training_script前的--

# positional
parser.add_argument("training_script", type=str,
                    help="The full path to the single GPU training "
                         "program/script to be launched in parallel, "
                         "followed by all the arguments for the "
                         "training script")

在命令行参数中,通常我们将--用于可选参数,而不带--的则是位置参数。

  1. 可选参数(--开头的参数): 这种类型的参数是可选的,即在调用脚本时可以选择是否提供。它们通常具有默认值,当你不提供时,程序会使用这些默认值。

  2. 位置参数(不带--的参数): 这种类型的参数在命令行中的位置是重要的,你必须按照预期的顺序提供它们。如果你不在调用中提供这些参数,程序通常会报错,因为没有默认值可以使用。

  3. training_script是位置参数,它必须在命令行中提供,并且它没有默认值。当运行脚本和提供参数时,它的位置非常重要,必须在你指定的地方。而其他带--的参数则是可选参数,你可以选择是否提供它们。当你不提供时,它们会使用默认值。

修改完以后可能会报错,权限不足,修改文件权限可运行就行,可以直接修改777

修改完以后运行./run.sh即可

是否多GPU运行,可以运行nvidia-smi查看或者

watch -n 1 nvidia-smi,每1秒刷新一下GPU运行情况

  • 37
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值