# Training Classification Models on the ImageNet dataset ## Training on the ImageNet dataset Single node training of any classification backbone can be done using below command: ``` export CFG_FILE="PATH_TO_MODEL_CONFIGURATION_FILE" cvnets-train --common.config-file $CFG_FILE --common.results-loc classification_results ``` By default, training will use all GPUs available on the machine. To restrict training to a subset of GPUs available on a machine, use `CUDA_VISIBLE_DEVICES` environment variable For example configuration files, please see [config](../../../../../config/classification) folder. ***Note***: Do not forget to change the training and validation dataset locations in configuration files. <details> <summary> Multi-node training of any classification backbone </summary> Assuming we have 4 8-GPU nodes (i.e., 32 GPUs), we can train using below commands Node-0 ``` export CFG_FILE="PATH_TO_MODEL_CONFIGURATION_FILE" cvnets-train --common.config-file $CFG_FILE --common.results-loc classification_results --ddp.rank 0 --ddp.world-size 32 --ddp.dist-url 'tcp://IP_OF_NODE0:FREEPORT' --ddp.backend nccl ``` Node-1 ``` export CFG_FILE="PATH_TO_MODEL_CONFIGURATION_FILE" cvnets-train --common.config-file $CFG_FILE --common.results-loc classification_results --ddp.rank 8 --ddp.world-size 32 --ddp.dist-url 'tcp://IP_OF_NODE0:FREEPORT' --ddp.backend nccl ``` Node-2 ``` export CFG_FILE="PATH_TO_MODEL_CONFIGURATION_FILE" cvnets-train --common.config-file $CFG_FILE --common.results-loc classification_results --ddp.rank 16 --ddp.world-size 32 --ddp.dist-url 'tcp://IP_OF_NODE0:FREEPORT' --ddp.backend nccl ``` Node-3 ``` export CFG_FILE="PATH_TO_MODEL_CONFIGURATION_FILE" cvnets-train --common.config-file $CFG_FILE --common.results-loc classification_results --ddp.rank 24 --ddp.world-size 32 --ddp.dist-url 'tcp://IP_OF_NODE0:FREEPORT' --ddp.backend nccl ``` </details> ## Finetuning the classification model If we want to finetune the ImageNet model with `1000` classes on another classification dataset with `N` classes, we can do so by using following arguments: * Pass this argument `--model.classification.finetune-pretrained-model` to enable finetuning * Specify number of classes in pre-trained model using `--model.classification.n-pretrained-classes` argument * Specify the location of pre-trained weights using `--model.classification.pretrained` argument For a concrete example, see training recipe of [MobileViTv2](README-mobilevit-v2.md) ## Evaluating the classification model Evaluation can be done using the below command: ``` export CFG_FILE="PATH_TO_MODEL_CONFIGURATION_FILE" export MODEL_WEIGHTS="PATH_TO_MODEL_WEIGHTS_FILE" CUDA_VISIBLE_DEVICES=0 cvnets-eval --common.config-file $CFG_FILE --common.results-loc classification_results --model.classification.pretrained $MODEL_WEIGHTS ``` If you are evaluating the model from finetuning task, please disable `finetune-pretrained-model` argument by using the following `--common.override-kwargs model.classification.finetune_pretrained_model=false` argument