CondenseNet
CondenseNet: Light weighted CNN for mobile devices
Install / Use
/learn @ShichenLiu/CondenseNetREADME
CondenseNets
This repository contains the code (in PyTorch) for "CondenseNet: An Efficient DenseNet using Learned Group Convolutions" paper by Gao Huang*, Shichen Liu*, Laurens van der Maaten and Kilian Weinberger (* Authors contributed equally).
Citation
If you find our project useful in your research, please consider citing:
@inproceedings{huang2018condensenet,
title={Condensenet: An efficient densenet using learned group convolutions},
author={Huang, Gao and Liu, Shichen and Van der Maaten, Laurens and Weinberger, Kilian Q},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
pages={2752--2761},
year={2018}
}
Contents
Introduction
CondenseNet is a novel, computationally efficient convolutional network architecture. It combines dense connectivity between layers with a mechanism to remove unused connections. The dense connectivity facilitates feature re-use in the network, whereas learned group convolutions remove connections between layers for which this feature re-use is superfluous. At test time, our model can be implemented using standard grouped convolutions —- allowing for efficient computation in practice. Our experiments demonstrate that CondenseNets are much more efficient than other compact convolutional networks such as MobileNets and ShuffleNets.
<img src="https://user-images.githubusercontent.com/9162722/32978657-b10fae0e-cc81-11e7-888d-1f9e4c028a9b.png">Figure 1: Learned Group Convolution with G=C=3.
<img src="https://user-images.githubusercontent.com/9162722/31302319-6ca3a49c-ab33-11e7-938c-70379feca5bc.jpg" width="480">Figure 2: CondenseNets with Fully Dense Connectivity and Increasing Growth Rate.
Usage
Dependencies
Train
As an example, use the following command to train a CondenseNet on ImageNet
python main.py --model condensenet -b 256 -j 20 /PATH/TO/IMAGENET \
--stages 4-6-8-10-8 --growth 8-16-32-64-128 --gpu 0,1,2,3,4,5,6,7 --resume
As another example, use the following command to train a CondenseNet on CIFAR-10
python main.py --model condensenet -b 64 -j 12 cifar10 \
--stages 14-14-14 --growth 8-16-32 --gpu 0 --resume
Evaluation
We take the ImageNet model trained above as an example.
To evaluate the trained model, use evaluate to evaluate from the default checkpoint directory:
python main.py --model condensenet -b 64 -j 20 /PATH/TO/IMAGENET \
--stages 4-6-8-10-8 --growth 8-16-32-64-128 --gpu 0 --resume \
--evaluate
or use evaluate-from to evaluate from an arbitrary path:
python main.py --model condensenet -b 64 -j 20 /PATH/TO/IMAGENET \
--stages 4-6-8-10-8 --growth 8-16-32-64-128 --gpu 0 --resume \
--evaluate-from /PATH/TO/BEST/MODEL
Note that these models are still the large models. To convert the model to group-convolution version as described in the paper, use the convert-from function:
python main.py --model condensenet -b 64 -j 20 /PATH/TO/IMAGENET \
--stages 4-6-8-10-8 --growth 8-16-32-64-128 --gpu 0 --resume \
--convert-from /PATH/TO/BEST/MODEL
Finally, to directly load from a converted model (that is, a CondenseNet), use a converted model file in combination with the evaluate-from option:
python main.py --model condensenet_converted -b 64 -j 20 /PATH/TO/IMAGENET \
--stages 4-6-8-10-8 --growth 8-16-32-64-128 --gpu 0 --resume \
--evaluate-from /PATH/TO/CONVERTED/MODEL
Other Options
We also include DenseNet implementation in this repository.
For more examples of usage, please refer to script.sh
For detailed options, please python main.py --help
Results
Results on ImageNet
| Model | FLOPs | Params | Top-1 Err. | Top-5 Err. | Pytorch Model | |---|---|---|---|---|---| | CondenseNet-74 (C=G=4) | 529M | 4.8M | 26.2 | 8.3 | Download (18.69M) | | CondenseNet-74 (C=G=8) | 274M | 2.9M | 29.0 | 10.0 | Download (11.68M) |
Results on CIFAR
| Model | FLOPs | Params | CIFAR-10 | CIFAR-100 | |---|---|---|---|---| | CondenseNet-50 | 28.6M | 0.22M | 6.22 | - | | CondenseNet-74 | 51.9M | 0.41M | 5.28 | - | | CondenseNet-86 | 65.8M | 0.52M | 5.06 | 23.64 | | CondenseNet-98 | 81.3M | 0.65M | 4.83 | - | | CondenseNet-110 | 98.2M | 0.79M | 4.63 | - | | CondenseNet-122 | 116.7M | 0.95M | 4.48 | - | | CondenseNet-182* | 513M | 4.2M | 3.76 | 18.47 |
(* trained 600 epochs)
Inference time on ARM platform
| Model | FLOPs | Top-1 | Time(s) | |---|---|---|---| | VGG-16 | 15,300M | 28.5 | 354 | | ResNet-18 | 1,818M | 30.2 | 8.14 | | 1.0 MobileNet-224 | 569M | 29.4 | 1.96 | | CondenseNet-74 (C=G=4) | 529M | 26.2 | 1.89 | | CondenseNet-74 (C=G=8) | 274M | 29.0 | 0.99 |
Contact
liushichen95@gmail.com
gh349@cornell.com
We are working on the implementation on other frameworks.
Any discussions or concerns are welcomed!
Related Skills
YC-Killer
2.7kA library of enterprise-grade AI agents designed to democratize artificial intelligence and provide free, open-source alternatives to overvalued Y Combinator startups. If you are excited about democratizing AI access & AI agents, please star ⭐️ this repository and use the link in the readme to join our open source AI research team.
best-practices-researcher
The most comprehensive Claude Code skills registry | Web Search: https://skills-registry-web.vercel.app
groundhog
398Groundhog's primary purpose is to teach people how Cursor and all these other coding agents work under the hood. If you understand how these coding assistants work from first principles, then you can drive these tools harder (or perhaps make your own!).
isf-agent
a repo for an agent that helps researchers apply for isf funding
