Path: blob/master/EfficientNet/EfficientNet_ResNet50.ipynb
3118 views
Kernel: Python 3
#EfficientNet Inference in Keras
In [0]:
Collecting efficientnet
Downloading https://files.pythonhosted.org/packages/66/9c/8bee2927037da1a56e899eb62140fba2862a0d4faeeacbdbe7a1f27bd528/efficientnet-0.0.3-py2.py3-none-any.whl
Installing collected packages: efficientnet
Successfully installed efficientnet-0.0.3
In [0]:
Using TensorFlow backend.
EfficientNet Model Size
EfficientNet-B0: 20.8 MB
EfficientNet-B1: 30.7 MB
EfficientNet-B2: 35.7 MB
EfficientNet-B3: 47.8 MB
Let's go for the smallest model of the above 4 : EfficienNet-B0.
In [0]:
In [0]:
WARNING: Logging before flag parsing goes to stderr.
W0701 03:55:41.854610 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.
W0701 03:55:41.909897 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.
W0701 03:55:41.919556 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/efficientnet/initializers.py:30: The name tf.random_normal is deprecated. Please use tf.random.normal instead.
W0701 03:55:41.975130 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:174: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.
W0701 03:55:41.980821 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:181: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.
W0701 03:55:42.291757 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1834: The name tf.nn.fused_batch_norm is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.
W0701 03:55:43.210394 139951651768192 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/efficientnet/layers.py:29: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Deprecated in favor of operator or tf.math.divide.
W0701 03:55:47.900598 139951651768192 deprecation.py:506] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.
Instructions for updating:
Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
Downloading data from https://github.com/qubvel/efficientnet/releases/download/v0.0.1/efficientnet-b0_imagenet_1000.h5
21856256/21849008 [==============================] - 0s 0us/step
In [0]:
--2019-07-01 03:55:53-- https://github.com/qubvel/efficientnet/raw/master/misc/panda.jpg
Resolving github.com (github.com)... 192.30.253.113
Connecting to github.com (github.com)|192.30.253.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/qubvel/efficientnet/master/misc/panda.jpg [following]
--2019-07-01 03:55:53-- https://raw.githubusercontent.com/qubvel/efficientnet/master/misc/panda.jpg
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 116068 (113K) [image/jpeg]
Saving to: ‘panda.jpg’
panda.jpg 100%[===================>] 113.35K --.-KB/s in 0.04s
2019-07-01 03:55:54 (3.01 MB/s) - ‘panda.jpg’ saved [116068/116068]
In [0]:
In [0]:
In [0]:
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json
40960/35363 [==================================] - 0s 0us/step
[[('n02510455', 'giant_panda', 0.8347929),
('n02134084', 'ice_bear', 0.0156020615),
('n02509815', 'lesser_panda', 0.004553518),
('n02133161', 'American_black_bear', 0.0024719085),
('n02132136', 'brown_bear', 0.002070759)]]
ResNet50 in Keras
In [0]:
In [0]:
W0701 04:09:44.433862 139951651768192 deprecation_wrapper.py:119] From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3976: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.
Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.2/resnet50_weights_tf_dim_ordering_tf_kernels.h5
102858752/102853048 [==============================] - 1s 0us/step
In [0]:
[[('n01930112', 'nematode', 0.029634755),
('n03729826', 'matchstick', 0.028414724),
('n03657121', 'lens_cap', 0.022990918),
('n04153751', 'screw', 0.022090413),
('n02783161', 'ballpoint', 0.021520559)]]
Now that we know how to run inference on both models, let's start off with our testing. For the testing, we will use time
module to keep a track of time taken for inference. Since we are using the same module for image pre-processing, we will not take it into consideration and only stick to inference time. We will run the inference 1000 times and take an average of all the times.
In [0]:
In [0]:
In [0]:
In [0]:
In [0]:
Iteration Number: 000
Iteration Number: 001
Iteration Number: 002
Iteration Number: 003
Iteration Number: 004
Iteration Number: 005
Iteration Number: 006
Iteration Number: 007
Iteration Number: 008
Iteration Number: 009
Iteration Number: 010
Iteration Number: 011
Iteration Number: 012
Iteration Number: 013
Iteration Number: 014
Iteration Number: 015
Iteration Number: 016
Iteration Number: 017
Iteration Number: 018
Iteration Number: 019
Iteration Number: 020
Iteration Number: 021
Iteration Number: 022
Iteration Number: 023
Iteration Number: 024
Iteration Number: 025
Iteration Number: 026
Iteration Number: 027
Iteration Number: 028
Iteration Number: 029
Iteration Number: 030
Iteration Number: 031
Iteration Number: 032
Iteration Number: 033
Iteration Number: 034
Iteration Number: 035
Iteration Number: 036
Iteration Number: 037
Iteration Number: 038
Iteration Number: 039
Iteration Number: 040
Iteration Number: 041
Iteration Number: 042
Iteration Number: 043
Iteration Number: 044
Iteration Number: 045
Iteration Number: 046
Iteration Number: 047
Iteration Number: 048
Iteration Number: 049
Iteration Number: 050
Iteration Number: 051
Iteration Number: 052
Iteration Number: 053
Iteration Number: 054
Iteration Number: 055
Iteration Number: 056
Iteration Number: 057
Iteration Number: 058
Iteration Number: 059
Iteration Number: 060
Iteration Number: 061
Iteration Number: 062
Iteration Number: 063
Iteration Number: 064
Iteration Number: 065
Iteration Number: 066
Iteration Number: 067
Iteration Number: 068
Iteration Number: 069
Iteration Number: 070
Iteration Number: 071
Iteration Number: 072
Iteration Number: 073
Iteration Number: 074
Iteration Number: 075
Iteration Number: 076
Iteration Number: 077
Iteration Number: 078
Iteration Number: 079
Iteration Number: 080
Iteration Number: 081
Iteration Number: 082
Iteration Number: 083
Iteration Number: 084
Iteration Number: 085
Iteration Number: 086
Iteration Number: 087
Iteration Number: 088
Iteration Number: 089
Iteration Number: 090
Iteration Number: 091
Iteration Number: 092
Iteration Number: 093
Iteration Number: 094
Iteration Number: 095
Iteration Number: 096
Iteration Number: 097
Iteration Number: 098
Iteration Number: 099
In [0]:
Average inference time for EfficientNet-B0: 0.1576129364967346
Average inference time for ResNet50: 0.30902464866638185
EfficientNet Inference in PyTorch
In [0]:
Downloading: "https://github.com/rwightman/gen-efficientnet-pytorch/archive/master.zip" to /root/.cache/torch/hub/master.zip
Downloading: "https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b0-d6904d92.pth" to /root/.cache/torch/checkpoints/efficientnet_b0-d6904d92.pth
100%|██████████| 21376958/21376958 [00:01<00:00, 18063640.04it/s]
In [0]:
In [0]:
In [0]:
--2019-07-01 04:14:06-- https://raw.githubusercontent.com/lukemelas/EfficientNet-PyTorch/master/examples/simple/labels_map.txt
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 31565 (31K) [text/plain]
Saving to: ‘labels_map.txt’
labels_map.txt 100%[===================>] 30.83K --.-KB/s in 0.01s
2019-07-01 04:14:06 (2.46 MB/s) - ‘labels_map.txt’ saved [31565/31565]
In [0]:
In [0]:
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (90.13%)
ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus (0.52%)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (0.32%)
American black bear, black bear, Ursus americanus, Euarctos americanus (0.10%)
soccer ball (0.08%)
ResNet50 Inference in PyTorch
In [0]:
In [0]:
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (99.38%)
French bulldog (0.09%)
hog, pig, grunter, squealer, Sus scrofa (0.04%)
ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus (0.03%)
soccer ball (0.03%)
Now, as before, let's run a speed test to see how much time the inference takes for both the models.
In [0]:
In [0]:
Using cache found in /root/.cache/torch/hub/rwightman_gen-efficientnet-pytorch_master
In [0]:
Iteration Number: 000
Iteration Number: 001
Iteration Number: 002
Iteration Number: 003
Iteration Number: 004
Iteration Number: 005
Iteration Number: 006
Iteration Number: 007
Iteration Number: 008
Iteration Number: 009
Iteration Number: 010
Iteration Number: 011
Iteration Number: 012
Iteration Number: 013
Iteration Number: 014
Iteration Number: 015
Iteration Number: 016
Iteration Number: 017
Iteration Number: 018
Iteration Number: 019
Iteration Number: 020
Iteration Number: 021
Iteration Number: 022
Iteration Number: 023
Iteration Number: 024
Iteration Number: 025
Iteration Number: 026
Iteration Number: 027
Iteration Number: 028
Iteration Number: 029
Iteration Number: 030
Iteration Number: 031
Iteration Number: 032
Iteration Number: 033
Iteration Number: 034
Iteration Number: 035
Iteration Number: 036
Iteration Number: 037
Iteration Number: 038
Iteration Number: 039
Iteration Number: 040
Iteration Number: 041
Iteration Number: 042
Iteration Number: 043
Iteration Number: 044
Iteration Number: 045
Iteration Number: 046
Iteration Number: 047
Iteration Number: 048
Iteration Number: 049
Iteration Number: 050
Iteration Number: 051
Iteration Number: 052
Iteration Number: 053
Iteration Number: 054
Iteration Number: 055
Iteration Number: 056
Iteration Number: 057
Iteration Number: 058
Iteration Number: 059
Iteration Number: 060
Iteration Number: 061
Iteration Number: 062
Iteration Number: 063
Iteration Number: 064
Iteration Number: 065
Iteration Number: 066
Iteration Number: 067
Iteration Number: 068
Iteration Number: 069
Iteration Number: 070
Iteration Number: 071
Iteration Number: 072
Iteration Number: 073
Iteration Number: 074
Iteration Number: 075
Iteration Number: 076
Iteration Number: 077
Iteration Number: 078
Iteration Number: 079
Iteration Number: 080
Iteration Number: 081
Iteration Number: 082
Iteration Number: 083
Iteration Number: 084
Iteration Number: 085
Iteration Number: 086
Iteration Number: 087
Iteration Number: 088
Iteration Number: 089
Iteration Number: 090
Iteration Number: 091
Iteration Number: 092
Iteration Number: 093
Iteration Number: 094
Iteration Number: 095
Iteration Number: 096
Iteration Number: 097
Iteration Number: 098
Iteration Number: 099
In [0]:
Average inference time for EfficientNet-B0: 0.12161755561828613
Average inference time for ResNet50: 0.28322251319885255