Directory Structure

Here is a quick walk-through of the CVNet code base. Below is a redacted version of the source code directory structure with the important parts marked with a star.

.
├── common
├── config
├── cvnets
│   ├── anchor_generator
│   ├── layers
│   ├── misc
│   ├── models  (*)
│   │   ├── classification
│   │   ├── detection
│   │   ├── neural_augmentation
│   │   ├── segmentation
│   │   └── video_classification
│   └── modules  (*)
├── data
│   ├── collate_fns
│   ├── datasets  (*)
│   ├── loader
│   ├── sampler  (*)
│   ├── transforms
│   └── video_reader
├── docs
├── engine  (*)
│   ├── detection_utils
│   └── segmentation_utils
├── loss_fn
├── metrics
└── optim
    └── scheduler

Models

Models for the different tasks (classification, detection, etc) are defined under cvnets/models/<task> and are categorized based on the task. Each task has its own parent class. For example, classification models are derived from the cvnets.models.classification.base_cls.BaseEncoder class.

The models are defined to be reusable and shareable between tasks. For example, the ResNet model is defined under the classification directory, but the detection models, such as ssd, can use ResNet as their encoder to avoid duplication.

Modules

High-level modules such as InvertedResidual block for MobileNet-v2 and TransformerEncoder block of ViT and MobileViT are available under cvnets/modules.

Datasets

You can find the dataset classes such as ImagenetDataset under data/datasets/<task> directory. Just like models, dataset are also categorized based on the task. You can also find the availabe transforms under data/transforms. For images, we have transforms based on both OpenCV and PIL, but we recommend using PIL for better performance.

Our novel data samplers can also be found under data/sampler.

Training/Evaluation Engine

The entry scripts (main_train.py and main_eval.py) will build and initialize objects such as the model, dataset, and optimizer. They also initialize distributed training if need be.

Next, the Training/Evaluation Engine (engine/training_engine.py and engine/evaluation_engine.py) are called which contain the training/evaluation logic.