/ProxylessNAS

ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware. https://arxiv.org/abs/1812.00332

Primary LanguagePythonApache License 2.0Apache-2.0

ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware

@article{cai2018proxylassnas,
    title={ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware},
    author={Cai, Han and Zhu, Ligeng and Han, Song},
    journal={arXiv preprint arXiv:1812.00332},
    year={2018}
}  

Without any proxy, directly search neural network architectures on your target task and hardware!

Note: our code is developed in PyTorch 0.3, and has been tested in both 0.3 and 0.4.

Performance

Mobile settings GPU settings
Model Top-1 Top-5 Latency
MobilenetV1 70.6 89.5 113ms
MobilenetV2 71.8 91.0 75ms
MNasNet(our impl) 74.0 91.8 79ms
ProxylessNAS (mobile) 74.6 92.2 78ms
Model Top-1 Top-5 Latency
MobilenetV2 71.8 91.0 6.1ms
ShufflenetV2(1.5) 72.6 - 7.3ms
ResNet-34 73.3 91.4 8.0ms
MNasNet(our impl) 74.0 91.8 6.1ms
ProxylessNAS (GPU) 75.1 92.5 5.1ms
2.6% better than MobilenetV2 with same speed. 3.1% better than MobilenetV2 with 20% faster.


ProxylessNAS consistently outperforms MobileNetV2 under various latency settings.

Specialization

People used to deploy one model to all platforms, but this is not good. To fully exploit the efficiency, we should specialize architectures for each platform.

Please refer to our paper for more results.

How to use / evaluate

  • Use

    from proxyless_nas import proxyless_cpu, proxyless_gpu, proxyless_mobile
    net = proxyless_cpu(pretrained=True) # Yes, we provide pre-trained models!
  • Evaluate

    python eval.py --path 'Your path to imagent' --arch proxyless_cpu