Skip to content
This repository was archived by the owner on Oct 13, 2021. It is now read-only.

Commit 2e3161e

Browse files
authored
Add DepthwiseConv2d to subclassed model and efficient-net test cases (#394)
* Efficient-net test cases. * Add DepthwiseConv2d to subclassed model. * disable efficient net test cases.
1 parent d11de3e commit 2e3161e

File tree

6 files changed

+57
-2
lines changed

6 files changed

+57
-2
lines changed

.azure-pipelines/linux-CI-keras-applications-nightly.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ jobs:
105105
pip install git+https://www.github.com/keras-team/keras-contrib.git
106106
pip install keras-tcn==2.8.3
107107
$(UNINSTALL_KERAS)
108+
pip install git+https://github.com/qubvel/efficientnet
108109
displayName: 'Install dependencies'
109110
110111
- script: |

.azure-pipelines/win32-CI-keras-applications-nightly.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ jobs:
103103
pip install git+https://www.github.com/keras-team/keras-contrib.git
104104
pip install keras-tcn==2.8.3
105105
%UNINSTALL_KERAS%
106+
pip install git+https://github.com/qubvel/efficientnet
106107
displayName: 'Install dependencies'
107108
108109
- script: |
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
###############################################################################
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for
4+
# license information.
5+
###############################################################################
6+
import os
7+
import sys
8+
import unittest
9+
from os.path import dirname, abspath
10+
from keras2onnx.proto import keras, is_keras_older_than
11+
12+
sys.path.insert(0, os.path.join(dirname(abspath(__file__)), '../../tests/'))
13+
from test_utils import run_image
14+
15+
img_path = os.path.join(os.path.dirname(__file__), '../data', 'street.jpg')
16+
17+
18+
# @unittest.skipIf(is_keras_older_than('2.2.0'), "efficientnet needs keras >= 2.2.0")
19+
@unittest.skip("Minor discrepancy on the model output.")
20+
class TestEfn(unittest.TestCase):
21+
22+
def setUp(self):
23+
self.model_files = []
24+
25+
def tearDown(self):
26+
for fl in self.model_files:
27+
os.remove(fl)
28+
29+
def test_custom(self):
30+
from efficientnet import keras as efn
31+
keras.backend.set_learning_phase(0)
32+
base_model = efn.EfficientNetB0(input_shape=(600, 600, 3), weights=None)
33+
backbone = keras.Model(base_model.input, base_model.get_layer("top_activation").output)
34+
res = run_image(backbone, self.model_files, img_path, target_size=(600, 600), rtol=1e-1)
35+
self.assertTrue(*res)
36+
37+
def test_efn(self):
38+
from efficientnet import keras as efn
39+
keras.backend.set_learning_phase(0)
40+
model = efn.EfficientNetB7(weights='imagenet')
41+
res = run_image(model, self.model_files, img_path, target_size=(600, 600), rtol=1e-1)
42+
self.assertTrue(*res)
43+
44+
45+
if __name__ == "__main__":
46+
unittest.main()

applications/nightly_build/test_gan.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import sys
88
import unittest
99
import keras2onnx
10-
import onnx
1110
import numpy as np
1211
from keras2onnx.proto import keras
1312
from os.path import dirname, abspath

keras2onnx/_parse_tf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,10 @@ def build_layer_outputs(model, graph, outputs):
186186
output_dict[op_.name] = layer_dict[ln_]
187187
else:
188188
# fx_[1] is output node redirect function.
189-
output_dict[fx_list[1](lobj, op_)] = layer_dict[ln_]
189+
output_tensor = fx_list[1](lobj, op_)
190+
assert graph.get_operation_by_name(output_tensor) is not None, "Parsing layer({}) failed.".format(
191+
lobj)
192+
output_dict[output_tensor] = layer_dict[ln_]
190193

191194
return output_dict
192195

keras2onnx/ke2onnx/layer_spec.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ def _simple_layer_name_extractor(fstr_list, node_name):
2727

2828

2929
def _conv_layer_spec_outputs(layer, node):
30+
if type(layer) == _layer.DepthwiseConv2D:
31+
ri = node.name.rindex('/')
32+
return node.name[:ri + 1] + 'BiasAdd'
33+
3034
activation_map = {
3135
keras.activations.linear: '',
3236
tf.nn.sigmoid: 'Sigmoid',
@@ -58,6 +62,7 @@ def _relu_like_spec_outputs(layer, node):
5862
_layer.AveragePooling2D: (["{}/AvgPool"], [_default_layer_name_extractor]),
5963
_layer.AveragePooling3D: (["{}/AvgPool"], [_default_layer_name_extractor]),
6064
_layer.Conv2DTranspose: (["{}/conv2d_transpose"], [_simple_layer_name_extractor, _conv_layer_spec_outputs]),
65+
_layer.DepthwiseConv2D: (["{}/depthwise"], [_simple_layer_name_extractor, _conv_layer_spec_outputs]),
6166
_layer.LeakyReLU: (["{}/LeakyRelu"], [_default_layer_name_extractor]),
6267
_adv_activations.PReLU: (["{}/Relu"], [_simple_layer_name_extractor, _relu_like_spec_outputs])
6368
}

0 commit comments

Comments
 (0)