首先去修改./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 (开放世界目标检测器)模型的。以下是脚本中每个参数的详细解释:
-
--output_dir ${EXP_DIR}
: 指定模型输出目录,包括训练产生的模型、日志等文件。 -
--dataset owod
: 使用的数据集名称,这里设定使用 'owod' 数据集。 -
--num_queries 100
: 指定解码时每个图像的最大检测目标数量。 -
--eval_every 5
: 指定每五个周期进行一次模型性能评估。 -
--PREV_INTRODUCED_CLS 0 --CUR_INTRODUCED_CLS 4
: 指定新增加的类别范围是从0到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
: TOP-UNK 策略中未知类别的数量。 -
--featdim 1024
: 模型的特征维度。 -
--NC_branch
: 是否在模型中增加一个新类别(NC)分支。 -
--nc_loss_coef 0.1
: 新类别分支的损失系数。 -
--nc_epoch 9
: 在第9个周期开始引入新类别。 -
--backbone 'dino_resnet50'
: 指定模型的骨干网络为 'dino_resnet50'。 -
--batch_size 4
: 批量大小,即每次迭代放入模型的样本数量。 -
${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")
在命令行参数中,通常我们将--
用于可选参数,而不带--
的则是位置参数。
-
可选参数(
--
开头的参数): 这种类型的参数是可选的,即在调用脚本时可以选择是否提供。它们通常具有默认值,当你不提供时,程序会使用这些默认值。 -
位置参数(不带
--
的参数): 这种类型的参数在命令行中的位置是重要的,你必须按照预期的顺序提供它们。如果你不在调用中提供这些参数,程序通常会报错,因为没有默认值可以使用。 -
training_script
是位置参数,它必须在命令行中提供,并且它没有默认值。当运行脚本和提供参数时,它的位置非常重要,必须在你指定的地方。而其他带--
的参数则是可选参数,你可以选择是否提供它们。当你不提供时,它们会使用默认值。
修改完以后可能会报错,权限不足,修改文件权限可运行就行,可以直接修改777
修改完以后运行./run.sh即可
是否多GPU运行,可以运行nvidia-smi查看或者
watch -n 1 nvidia-smi,每1秒刷新一下GPU运行情况