分类¶
在 MMSelfSup 中,我们为分类任务提供了许多基线,因此模型可以在不同分类任务上进行评估。这里有详细的教程和例子来阐述如何使用 MMSelfSup 来运行所有的分类基线。我们在tools/benchmarks/classification/
文件夹中提供了所有的脚本,包含 2 个.sh
文件,一个文件夹用于与 VOC SVM 相关的分类任务,另一个文件夹用于 ImageNet 最近邻分类任务。
VOC SVM / Low-shot SVM¶
为了运行这些基准,您首先应该准备好您的 VOC 数据集。请参考 prepare_data.md 来获取数据准备的详细信息。
为了评估这些预训练的模型, 您可以运行如下指令。
# distributed version
bash tools/benchmarks/classification/svm_voc07/dist_test_svm_pretrain.sh ${SELFSUP_CONFIG} ${GPUS} ${PRETRAIN} ${FEATURE_LIST}
# slurm version
bash tools/benchmarks/classification/svm_voc07/slurm_test_svm_pretrain.sh ${PARTITION} ${JOB_NAME} ${SELFSUP_CONFIG} ${PRETRAIN} ${FEATURE_LIST}
此外,如果您想评估由 runner 保存的ckpt文件,您可以运行如下指令。
# distributed version
bash tools/benchmarks/classification/svm_voc07/dist_test_svm_epoch.sh ${SELFSUP_CONFIG} ${EPOCH} ${FEATURE_LIST}
# slurm version
bash tools/benchmarks/classification/svm_voc07/slurm_test_svm_epoch.sh ${PARTITION} ${JOB_NAME} ${SELFSUP_CONFIG} ${EPOCH} ${FEATURE_LIST}
使用 ckpt 进行测试,代码使用 epoch_*.pth 文件,这里不需要提取权重。
备注:
${SELFSUP_CONFIG}
是自监督实验的配置文件.${FEATURE_LIST}
是一个字符串,用于指定从 layer1 到 layer5 的要评估特征;例如,如果您只想评估 layer5,那么FEATURE_LIST
是 “feat5”,如果您想要评估所有的特征,那么FEATURE_LIST
是 “feat1 feat2 feat3 feat4 feat5” (用空格分隔)。如果为空,那么FEATURE_LIST
默认是 “feat5”。${PRETRAIN}
:预训练模型文件。如果您想改变 GPU 个数, 您可以在命令的前面加上
GPUS_PER_NODE=4 GPUS=4
。${EPOCH}
是您想要测试的 ckpt 的轮数
线性评估和微调¶
线性评估和微调是最常见的两个基准。我们为线性评估和微调提供了配置文件和脚本来进行训练和测试。支持的数据集有 ImageNet,Places205 和 iNaturalist18。
首先,确保您已经安装 MIM,这也是 OpenMMLab 的一个项目.
pip install openmim
此外,请参考 MMClassification 的安装和数据准备。
然后运行如下命令。
# distributed version
bash tools/benchmarks/classification/mim_dist_train.sh ${CONFIG} ${PRETRAIN}
# slurm version
bash tools/benchmarks/classification/mim_slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG} ${PRETRAIN}
备注:
${CONFIG}
:使用configs/benchmarks/classification/
下的配置文件。具体来说,imagenet
(除了imagenet_*percent
文件),places205
andinaturalist2018
。${PRETRAIN}
:预训练模型文件。
例子:
bash ./tools/benchmarks/classification/mim_dist_train.sh \
configs/benchmarks/classification/imagenet/resnet50_linear-8xb32-coslr-100e_in1k.py \
work_dir/pretrained_model.pth
如果您想测试训练好的模型,请运行如下命令。
# distributed version
bash tools/benchmarks/classification/mim_dist_test.sh ${CONFIG} ${CHECKPOINT}
# slurm version
bash tools/benchmarks/classification//mim_slurm_test.sh ${PARTITION} ${CONFIG} ${CHECKPOINT}
备注:
${CHECKPOINT}
:您想测试的训练好的分类模型
例子:
bash ./tools/benchmarks/mmsegmentation/mim_dist_test.sh \
configs/benchmarks/classification/imagenet/resnet50_linear-8xb32-coslr-100e_in1k.py \
work_dir/model.pth
ImageNet 半监督分类¶
为了运行 ImageNet 半监督分类,我们将使用和线性评估和微调一样的.sh
脚本进行训练。
备注:
默认GPU数量是4.
${CONFIG}
:使用configs/benchmarks/classification/imagenet/
下的配置文件,命名为imagenet_*percent
的文件。${PRETRAIN}
:预训练模型文件。
ImageNet 最近邻分类¶
仅支持 CNN 形式的主干网络 (例如 ResNet50)。
为评估用于 ImageNet 最近邻分类基准的预训练模型,您可以运行如下命令。
# distributed version
bash tools/benchmarks/classification/knn_imagenet/dist_test_knn.sh ${SELFSUP_CONFIG} ${PRETRAIN} [optional arguments]
# slurm version
bash tools/benchmarks/classification/knn_imagenet/slurm_test_knn.sh ${PARTITION} ${JOB_NAME} ${SELFSUP_CONFIG} ${CHECKPOINT} [optional arguments]
备注:
${SELFSUP_CONFIG}
:是自监督实验的配置文件。${CHECKPOINT}
:检查点模型文件的路径。如果您想改变GPU的数量,您可以在命令的前面加上
GPUS_PER_NODE=4 GPUS=4
。[optional arguments]
:用于可选参数,您可以参考这个脚本
命令的一个例子
# distributed version
bash tools/benchmarks/classification/knn_imagenet/dist_test_knn.sh \
configs/selfsup/barlowtwins/barlowtwins_resnet50_8xb256-coslr-300e_in1k.py \
https://download.openmmlab.com/mmselfsup/1.x/barlowtwins/barlowtwins_resnet50_8xb256-coslr-300e_in1k/barlowtwins_resnet50_8xb256-coslr-300e_in1k_20220825-57307488.pth