Skip to content

A tensorflow2 implementation of some basic CNNs(MobileNetV1/V2/V3, EfficientNet, ResNeXt, InceptionV4, InceptionResNetV1/V2, SENet, SqueezeNet, DenseNet, ShuffleNetV2, ResNet).

License

Notifications You must be signed in to change notification settings

calmiLovesAI/Basic_CNNs_TensorFlow2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f063c84 · Nov 24, 2021

History

94 Commits
Sep 11, 2019
Oct 14, 2021
Sep 11, 2019
Sep 11, 2019
Oct 14, 2021
Sep 11, 2019
Nov 24, 2021
Dec 27, 2020
Oct 14, 2021
Oct 14, 2021
Aug 28, 2021
Mar 28, 2020
Mar 27, 2020
Oct 14, 2021
Sep 26, 2019
May 12, 2020
Sep 26, 2019
Oct 14, 2021

Repository files navigation

Basic_CNNs_TensorFlow2

A tensorflow2 implementation of some basic CNNs.

Networks included:

Other networks

For AlexNet and VGG, see : https://github.com/calmisential/TensorFlow2.0_Image_Classification
For InceptionV3, see : https://github.com/calmisential/TensorFlow2.0_InceptionV3
For ResNet, see : https://github.com/calmisential/TensorFlow2.0_ResNet

Train

  1. Requirements:
  • Python >= 3.9
  • Tensorflow >= 2.7.0
  • tensorflow-addons >= 0.15.0
  1. To train the network on your own dataset, you can put the dataset under the folder original dataset, and the directory should look like this:
|——original dataset
   |——class_name_0
   |——class_name_1
   |——class_name_2
   |——class_name_3
  1. Run the script split_dataset.py to split the raw dataset into train set, valid set and test set. The dataset directory will be like this:
|——dataset
  |——train
       |——class_name_1
       |——class_name_2
       ......
       |——class_name_n
  |——valid
       |——class_name_1
       |——class_name_2
       ......
       |——class_name_n
  |—-test
       |——class_name_1
       |——class_name_2
       ......
       |——class_name_n
  1. Run to_tfrecord.py to generate tfrecord files.
  2. Change the corresponding parameters in config.py.
  3. Run show_model_list.py to get the index of model.
  4. Run python train.py --idx [index] to start training.
    If you want to train the EfficientNet, you should change the IMAGE_HEIGHT and IMAGE_WIDTH before training.
  • b0 = (224, 224)
  • b1 = (240, 240)
  • b2 = (260, 260)
  • b3 = (300, 300)
  • b4 = (380, 380)
  • b5 = (456, 456)
  • b6 = (528, 528)
  • b7 = (600, 600)

Evaluate

Run python evaluate.py --idx [index] to evaluate the model's performance on the test dataset.

Different input image sizes for different neural networks

Type Neural Network Input Image Size (height * width)
MobileNet MobileNet_V1 (224 * 224)
MobileNet_V2 (224 * 224)
MobileNet_V3 (224 * 224)
EfficientNet EfficientNet(B0~B7) /
ResNeXt ResNeXt50 (224 * 224)
ResNeXt101 (224 * 224)
SEResNeXt SEResNeXt50 (224 * 224)
SEResNeXt101 (224 * 224)
Inception InceptionV4 (299 * 299)
Inception_ResNet_V1 (299 * 299)
Inception_ResNet_V2 (299 * 299)
SE_ResNet SE_ResNet_50 (224 * 224)
SE_ResNet_101 (224 * 224)
SE_ResNet_152 (224 * 224)
SqueezeNet SqueezeNet (224 * 224)
DenseNet DenseNet_121 (224 * 224)
DenseNet_169 (224 * 224)
DenseNet_201 (224 * 224)
DenseNet_269 (224 * 224)
ShuffleNetV2 ShuffleNetV2 (224 * 224)
ResNet ResNet_18 (224 * 224)
ResNet_34 (224 * 224)
ResNet_50 (224 * 224)
ResNet_101 (224 * 224)
ResNet_152 (224 * 224)

References

  1. MobileNet_V1: Efficient Convolutional Neural Networks for Mobile Vision Applications
  2. MobileNet_V2: Inverted Residuals and Linear Bottlenecks
  3. MobileNet_V3: Searching for MobileNetV3
  4. EfficientNet: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
  5. The official code of EfficientNet: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
  6. ResNeXt: Aggregated Residual Transformations for Deep Neural Networks
  7. Inception_V4/Inception_ResNet_V1/Inception_ResNet_V2: Inception-v4, Inception-ResNet and the Impact of Residual Connectionson Learning
  8. The official implementation of Inception_V4: https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v4.py
  9. The official implementation of Inception_ResNet_V2: https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_resnet_v2.py
  10. SENet: Squeeze-and-Excitation Networks
  11. SqueezeNet: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
  12. DenseNet: Densely Connected Convolutional Networks
  13. https://zhuanlan.zhihu.com/p/37189203
  14. ShuffleNetV2: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  15. https://zhuanlan.zhihu.com/p/48261931
  16. ResNet: Deep Residual Learning for Image Recognition
  17. RegNet: Designing Network Design Spaces