EfficientViT: Multi-Scale Linear Attention for High-Resolution Dense Prediction

September 20, 2023 · View on GitHub

News

If you are interested in getting updates, please join our mailing list here.

  • [2023/09/18] The first version of the EfficientViT Segment Anything Model has been released.
  • [2023/09/12] EfficientViT is highlighted by MIT home page and MIT News.
  • [2023/07/18] EfficientViT is accepted by ICCV 2023.

Demo

EfficientViT-L0 for Segment Anything (1009 image/s on A100 GPU) demo demo demo

EfficientViT-L1 for Semantic Segmentation (45.9ms on Nvidia Jetson AGX Orin, 82.7 mIoU on Cityscapes)

demo

About EfficientViT Models

EfficientViT is a new family of vision models for efficient high-resolution dense prediction. The core building block of EfficientViT is a new lightweight multi-scale linear attention module that achieves global receptive field and multi-scale learning with only hardware-efficient operations.

Getting Started

Installation

conda create -n efficientvit python=3.10
conda activate efficientvit
conda install -c conda-forge mpi4py openmpi
pip install -r requirements.txt

Dataset

ImageNet: https://www.image-net.org/
Our code expects the ImageNet dataset directory to follow the following structure:

imagenet
├── train
├── val
Cityscapes: https://www.cityscapes-dataset.com/
Our code expects the Cityscapes dataset directory to follow the following structure:

cityscapes
├── gtFine
|   ├── train
|   ├── val
├── leftImg8bit
|   ├── train
|   ├── val
ADE20K: https://groups.csail.mit.edu/vision/datasets/ADE20K/
Our code expects the ADE20K dataset directory to follow the following structure:

ade20k
├── annotations
|   ├── training
|   ├── validation
├── images
|   ├── training
|   ├── validation

Pretrained Models

Latency/Throughput is measured on NVIDIA Jetson Nano, NVIDIA Jetson AGX Orin, and NVIDIA A100 GPU with TensorRT, fp16. Data transfer time is included.

Segment Anything

In this version, the EfficientViT segment anything models are trained using the image embedding extracted by SAM ViT-H as the target. The prompt encoder and mask decoder are the same as SAM ViT-H.

Image EncoderCOCO-val2017 mIoU (all)COCO-val2017 mIoU (large)COCO-val2017 mIoU (medium)COCO-val2017 mIoU (small)ParamsMACsA100 ThroughputCheckpoint
NanoSAM70.679.673.862.4--744 image/s-
MobileSAM72.880.475.965.8--297 image/s-
EfficientViT-L074.581.477.268.231M35G1009 image/slink
EfficientViT-L175.281.878.168.944M49G815 image/slink

ImageNet

All EfficientViT classification models are trained on ImageNet-1K with random initialization (300 epochs + 20 warmup epochs) using supervised learning.

ModelResolutionImageNet Top1 AccImageNet Top5 AccParamsMACsA100 ThroughputCheckpoint
EfficientNetV2-S384x38483.9-22M8.8G2869 image/s-
EfficientNetV2-M480x48085.1-54M24G1160 image/s-
EfficientViT-L1224x22484.596.953M5.3G6207 image/slink
EfficientViT-L2224x22485.097.164M6.9G4998 image/slink
EfficientViT-L2256x25685.497.264M9.1G3969 image/slink
EfficientViT-L2288x28885.697.464M11G3102 image/slink
EfficientViT-L2320x32085.897.464M14G2525 image/slink
EfficientViT-L2352x35285.997.564M17G2099 image/slink
EfficientViT-L2384x38486.097.564M20G1784 image/slink
EfficientViT B series
ModelResolutionImageNet Top1 AccImageNet Top5 AccParamsMACsJetson Nano (bs1)Jetson Orin (bs1)Checkpoint
EfficientViT-B1224x22479.494.39.1M0.52G24.8ms1.48mslink
EfficientViT-B1256x25679.994.79.1M0.68G28.5ms1.57mslink
EfficientViT-B1288x28880.495.09.1M0.86G34.5ms1.82mslink
EfficientViT-B2224x22482.195.824M1.6G50.6ms2.63mslink
EfficientViT-B2256x25682.796.124M2.1G58.5ms2.84mslink
EfficientViT-B2288x28883.196.324M2.6G69.9ms3.30mslink
EfficientViT-B3224x22483.596.449M4.0G101ms4.36mslink
EfficientViT-B3256x25683.896.549M5.2G120ms4.74mslink
EfficientViT-B3288x28884.296.749M6.5G141ms5.63mslink

Cityscapes

ModelResolutionCityscapes mIoUParamsMACsJetson Orin Latency (bs1)A100 Throughput (bs1)Checkpoint
EfficientViT-L11024x204882.740M282G45.9ms122 image/slink
EfficientViT-L21024x204883.253M396G60.0ms102 image/slink
EfficientViT B series
ModelResolutionCityscapes mIoUParamsMACsJetson Nano (bs1)Jetson Orin (bs1)Checkpoint
EfficientViT-B01024x204875.70.7M4.4G275ms9.9mslink
EfficientViT-B11024x204880.54.8M25G819ms24.3mslink
EfficientViT-B21024x204882.115M74G1676ms46.5mslink
EfficientViT-B31024x204883.040M179G3192ms81.8mslink

ADE20K

ModelResolutionADE20K mIoUParamsMACsJetson Orin Latency (bs1)A100 Throughput (bs16)Checkpoint
EfficientViT-L1512x51249.140M36G7.2ms947 image/slink
EfficientViT-L2512x51250.751M45G9.0ms758 image/slink
EfficientViT B series
ModelResolutionADE20K mIoUParamsMACsJetson Nano (bs1)Jetson Orin (bs1)Checkpoint
EfficientViT-B1512x51242.84.8M3.1G110ms4.0mslink
EfficientViT-B2512x51245.915M9.1G212ms7.3mslink
EfficientViT-B3512x51249.039M22G411ms12.5mslink

Usage

# segment anything
from efficientvit.sam_model_zoo import create_sam_model

efficientvit_sam = create_sam_model(
  name="l1", weight_url="assets/checkpoints/sam/l1.pt",
)
efficientvit_sam = efficientvit_sam.cuda().eval()
from efficientvit.models.efficientvit.sam import EfficientViTSamPredictor

efficientvit_sam_predictor = EfficientViTSamPredictor(efficientvit_sam)
from efficientvit.models.efficientvit.sam import EfficientViTSamAutomaticMaskGenerator

efficientvit_mask_generator = EfficientViTSamAutomaticMaskGenerator(efficientvit_sam)

# classification
from efficientvit.cls_model_zoo import create_cls_model

model = create_cls_model(
  name="l2", weight_url="assets/checkpoints/cls/l2-r384.pt"
)
# semantic segmentation
from efficientvit.seg_model_zoo import create_seg_model

model = create_seg_model(
  name="l2", dataset="cityscapes", weight_url="assets/checkpoints/seg/cityscapes/l2.pt"
)

model = create_seg_model(
  name="l2", dataset="ade20k", weight_url="assets/checkpoints/seg/ade20k/l2.pt"
)

Evaluation

Please run eval_sam_coco.py, eval_cls_model.py or eval_seg_model.py to evaluate our models.

Examples: segment anything, classification, segmentation

Visualization

Please run demo_sam_model.py to visualize our segment anything models.

Example:

# segment everything
python demo_sam_model.py --model l1 --mode all

# prompt with points
python demo_sam_model.py --model l1 --mode point

# prompt with box
python demo_sam_model.py --model l1 --mode box --box "[150,70,630,400]"

Please run eval_seg_model.py to visualize the outputs of our semantic segmentation models.

Example:

python eval_seg_model.py --dataset cityscapes --crop_size 1024 --model b3 --save_path demo/cityscapes/b3/

Benchmarking with TFLite

To generate TFLite files, please refer to tflite_export.py. It requires the TinyNN package.

pip install git+https://github.com/alibaba/TinyNeuralNetwork.git

Example:

python tflite_export.py --export_path model.tflite --task seg --dataset ade20k --model b3 --resolution 512 512

Benchmarking with TensorRT

To generate onnx files, please refer to onnx_export.py.

Benchmarking with ONNXRuntime

bash run.sh encoder
bash run.sh decoder
bash run.sh demo_onnx

Training

Please see TRAINING.md for detailed training instructions.

Contact

Han Cai: hancai@mit.edu

TODO

  • ImageNet Pretrained models
  • Segmentation Pretrained models
  • ImageNet training code
  • EfficientViT L series, designed for cloud
  • EfficientViT for segment anything
  • EfficientViT for super-resolution
  • Segmentation training code

Citation

If EfficientViT is useful or relevant to your research, please kindly recognize our contributions by citing our paper:

@article{cai2022efficientvit,
  title={Efficientvit: Enhanced linear attention for high-resolution low-computation visual recognition},
  author={Cai, Han and Gan, Chuang and Han, Song},
  journal={arXiv preprint arXiv:2205.14756},
  year={2022}
}