From 2f90802eec125e4728ab499707f06f4e6f775c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=81=92=E6=AD=A3?= <1771467123@qq.com> Date: Tue, 31 May 2022 06:12:26 +0000 Subject: [PATCH 1/2] First commit Efficientnet-Condconv --- .../LICENSE | 203 ++++ .../README.md | 49 + .../__init__.py | 28 + .../autoaugment.py | 735 ++++++++++++++ .../boot_modelarts.py | 53 + .../efficientnet_builder.py | 348 +++++++ .../efficientnet_model.py | 736 ++++++++++++++ .../eval_ckpt_main.py | 137 +++ .../export_model.py | 181 ++++ .../help_modelarts.py | 89 ++ .../imagenet_input.py | 528 ++++++++++ .../inspect_model_architecture.py | 90 ++ .../lars_optimizer.py | 188 ++++ .../main.py | 948 ++++++++++++++++++ .../model_builder_factory.py | 76 ++ .../modelzoo_level.txt | 7 + .../preprocessing.py | 277 +++++ .../requirements.txt | 0 .../run_1p.sh | 22 + .../utils.py | 596 +++++++++++ 20 files changed, 5291 insertions(+) create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/LICENSE create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/README.md create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/__init__.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/autoaugment.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/boot_modelarts.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_builder.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_model.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/eval_ckpt_main.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/export_model.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/help_modelarts.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/imagenet_input.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/inspect_model_architecture.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lars_optimizer.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/main.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/model_builder_factory.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/modelzoo_level.txt create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/preprocessing.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/requirements.txt create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/run_1p.sh create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/utils.py diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/LICENSE b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/LICENSE new file mode 100644 index 000000000..a6b1b1f81 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/LICENSE @@ -0,0 +1,203 @@ +Copyright 2019 The TensorFlow Authors. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/README.md b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/README.md new file mode 100644 index 000000000..e8b2ac848 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/README.md @@ -0,0 +1,49 @@ +# Efficientnet-CondConv +Condconv即有条件参数化卷积,为每个样本学习专有的卷积内核。用CondConv替换正常卷积,能够增加网络的大小和容量,同时保持有效的推理。参考文章为 CondConv: Conditionally Parameterized Convolutions for Efficient Inference 参考项目:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv. + + +# setup +* python 3.7.5+ +* tensorflow-gpu 1.15.0+ +* numpy 1.14.1+ + + +# Train + +数据集: 请用户自行准备好数据集,包含训练集和验证集两部分,可选用的数据集包括ImageNet2012,CIFAR10、Flower等,包含train和val两部分。格式为TFRecord文件。 + +Boot File:boot_modelarts.py + +Pretrained: obs://cann-lhz/MA-new-efficientnet-condconv_tensorflow_ID2074-11-26-22-22/output/result/archive/ + + +# 精度对比 +测试集:Imagenet2012 + +论文精度: + +| Precision | +| :--------: | +| 78.3% | + +GPU目标精度: + +| Precision | +| :--------: | +| 80.0% | + +Ascend精度: + +| Precision | +| :--------: | +| 80.9% | + + +# 性能对比: + +| GPU V100 | Ascend 910 | +| :--------: | --------| +| 1.90global_step/s | 2.47global_step/s | + + + diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/__init__.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/__init__.py new file mode 100644 index 000000000..24bdf4010 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/__init__.py @@ -0,0 +1,28 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""The initial file of the efficientnet.""" \ No newline at end of file diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/autoaugment.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/autoaugment.py new file mode 100644 index 000000000..e76245cf6 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/autoaugment.py @@ -0,0 +1,735 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""AutoAugment and RandAugment policies for enhanced image preprocessing. + +AutoAugment Reference: https://arxiv.org/abs/1805.09501 +RandAugment Reference: https://arxiv.org/abs/1909.13719 +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import inspect +import math +import tensorflow.compat.v1 as tf +from tensorflow.contrib import image as contrib_image +from tensorflow.contrib import training as contrib_training + + +# This signifies the max integer that the controller RNN could predict for the +# augmentation scheme. +_MAX_LEVEL = 10. + + +def policy_v0(): + """Autoaugment policy that was used in AutoAugment Paper.""" + # Each tuple is an augmentation operation of the form + # (operation, probability, magnitude). Each element in policy is a + # sub-policy that will be applied sequentially on the image. + policy = [ + [('Equalize', 0.8, 1), ('ShearY', 0.8, 4)], + [('Color', 0.4, 9), ('Equalize', 0.6, 3)], + [('Color', 0.4, 1), ('Rotate', 0.6, 8)], + [('Solarize', 0.8, 3), ('Equalize', 0.4, 7)], + [('Solarize', 0.4, 2), ('Solarize', 0.6, 2)], + [('Color', 0.2, 0), ('Equalize', 0.8, 8)], + [('Equalize', 0.4, 8), ('SolarizeAdd', 0.8, 3)], + [('ShearX', 0.2, 9), ('Rotate', 0.6, 8)], + [('Color', 0.6, 1), ('Equalize', 1.0, 2)], + [('Invert', 0.4, 9), ('Rotate', 0.6, 0)], + [('Equalize', 1.0, 9), ('ShearY', 0.6, 3)], + [('Color', 0.4, 7), ('Equalize', 0.6, 0)], + [('Posterize', 0.4, 6), ('AutoContrast', 0.4, 7)], + [('Solarize', 0.6, 8), ('Color', 0.6, 9)], + [('Solarize', 0.2, 4), ('Rotate', 0.8, 9)], + [('Rotate', 1.0, 7), ('TranslateY', 0.8, 9)], + [('ShearX', 0.0, 0), ('Solarize', 0.8, 4)], + [('ShearY', 0.8, 0), ('Color', 0.6, 4)], + [('Color', 1.0, 0), ('Rotate', 0.6, 2)], + [('Equalize', 0.8, 4), ('Equalize', 0.0, 8)], + [('Equalize', 1.0, 4), ('AutoContrast', 0.6, 2)], + [('ShearY', 0.4, 7), ('SolarizeAdd', 0.6, 7)], + [('Posterize', 0.8, 2), ('Solarize', 0.6, 10)], + [('Solarize', 0.6, 8), ('Equalize', 0.6, 1)], + [('Color', 0.8, 6), ('Rotate', 0.4, 5)], + ] + return policy + + +def policy_vtest(): + """Autoaugment test policy for debugging.""" + # Each tuple is an augmentation operation of the form + # (operation, probability, magnitude). Each element in policy is a + # sub-policy that will be applied sequentially on the image. + policy = [ + [('TranslateX', 1.0, 4), ('Equalize', 1.0, 10)], + ] + return policy + + +def blend(image1, image2, factor): + """Blend image1 and image2 using 'factor'. + + Factor can be above 0.0. A value of 0.0 means only image1 is used. + A value of 1.0 means only image2 is used. A value between 0.0 and + 1.0 means we linearly interpolate the pixel values between the two + images. A value greater than 1.0 "extrapolates" the difference + between the two pixel values, and we clip the results to values + between 0 and 255. + + Args: + image1: An image Tensor of type uint8. + image2: An image Tensor of type uint8. + factor: A floating point value above 0.0. + + Returns: + A blended image Tensor of type uint8. + """ + if factor == 0.0: + return tf.convert_to_tensor(image1) + if factor == 1.0: + return tf.convert_to_tensor(image2) + + image1 = tf.to_float(image1) + image2 = tf.to_float(image2) + + difference = image2 - image1 + scaled = factor * difference + + # Do addition in float. + temp = tf.to_float(image1) + scaled + + # Interpolate + if factor > 0.0 and factor < 1.0: + # Interpolation means we always stay within 0 and 255. + return tf.cast(temp, tf.uint8) + + # Extrapolate: + # + # We need to clip and then cast. + return tf.cast(tf.clip_by_value(temp, 0.0, 255.0), tf.uint8) + + +def cutout(image, pad_size, replace=0): + """Apply cutout (https://arxiv.org/abs/1708.04552) to image. + + This operation applies a (2*pad_size x 2*pad_size) mask of zeros to + a random location within `img`. The pixel values filled in will be of the + value `replace`. The located where the mask will be applied is randomly + chosen uniformly over the whole image. + + Args: + image: An image Tensor of type uint8. + pad_size: Specifies how big the zero mask that will be generated is that + is applied to the image. The mask will be of size + (2*pad_size x 2*pad_size). + replace: What pixel value to fill in the image in the area that has + the cutout mask applied to it. + + Returns: + An image Tensor that is of type uint8. + """ + image_height = tf.shape(image)[0] + image_width = tf.shape(image)[1] + + # Sample the center location in the image where the zero mask will be applied. + cutout_center_height = tf.random_uniform( + shape=[], minval=0, maxval=image_height, + dtype=tf.int32) + + cutout_center_width = tf.random_uniform( + shape=[], minval=0, maxval=image_width, + dtype=tf.int32) + + lower_pad = tf.maximum(0, cutout_center_height - pad_size) + upper_pad = tf.maximum(0, image_height - cutout_center_height - pad_size) + left_pad = tf.maximum(0, cutout_center_width - pad_size) + right_pad = tf.maximum(0, image_width - cutout_center_width - pad_size) + + cutout_shape = [image_height - (lower_pad + upper_pad), + image_width - (left_pad + right_pad)] + padding_dims = [[lower_pad, upper_pad], [left_pad, right_pad]] + mask = tf.pad( + tf.zeros(cutout_shape, dtype=image.dtype), + padding_dims, constant_values=1) + mask = tf.expand_dims(mask, -1) + mask = tf.tile(mask, [1, 1, 3]) + image = tf.where( + tf.equal(mask, 0), + tf.ones_like(image, dtype=image.dtype) * replace, + image) + return image + + +def solarize(image, threshold=128): + """For each pixel in the image, select the pixel + if the value is less than the threshold. + Otherwise, subtract 255 from the pixel. + """ + return tf.where(image < threshold, image, 255 - image) + + +def solarize_add(image, addition=0, threshold=128): + """For each pixel in the image less than threshold + we add 'addition' amount to it and then clip the + pixel value to be between 0 and 255. The value + of 'addition' is between -128 and 128. + """ + added_image = tf.cast(image, tf.int64) + addition + added_image = tf.cast(tf.clip_by_value(added_image, 0, 255), tf.uint8) + return tf.where(image < threshold, added_image, image) + + +def color(image, factor): + """Equivalent of PIL Color.""" + degenerate = tf.image.grayscale_to_rgb(tf.image.rgb_to_grayscale(image)) + return blend(degenerate, image, factor) + + +def contrast(image, factor): + """Equivalent of PIL Contrast.""" + degenerate = tf.image.rgb_to_grayscale(image) + # Cast before calling tf.histogram. + degenerate = tf.cast(degenerate, tf.int32) + + # Compute the grayscale histogram, then compute the mean pixel value, + # and create a constant image size of that value. Use that as the + # blending degenerate target of the original image. + hist = tf.histogram_fixed_width(degenerate, [0, 255], nbins=256) + mean = tf.reduce_sum(tf.cast(hist, tf.float32)) / 256.0 + degenerate = tf.ones_like(degenerate, dtype=tf.float32) * mean + degenerate = tf.clip_by_value(degenerate, 0.0, 255.0) + degenerate = tf.image.grayscale_to_rgb(tf.cast(degenerate, tf.uint8)) + return blend(degenerate, image, factor) + + +def brightness(image, factor): + """Equivalent of PIL Brightness.""" + degenerate = tf.zeros_like(image) + return blend(degenerate, image, factor) + + +def posterize(image, bits): + """Equivalent of PIL Posterize.""" + shift = 8 - bits + return tf.bitwise.left_shift(tf.bitwise.right_shift(image, shift), shift) + + +def rotate(image, degrees, replace): + """Rotates the image by degrees either clockwise or counterclockwise. + + Args: + image: An image Tensor of type uint8. + degrees: Float, a scalar angle in degrees to rotate all images by. If + degrees is positive the image will be rotated clockwise otherwise it will + be rotated counterclockwise. + replace: A one or three value 1D tensor to fill empty pixels caused by + the rotate operation. + + Returns: + The rotated version of image. + """ + # Convert from degrees to radians. + degrees_to_radians = math.pi / 180.0 + radians = degrees * degrees_to_radians + + # In practice, we should randomize the rotation degrees by flipping + # it negatively half the time, but that's done on 'degrees' outside + # of the function. + image = contrib_image.rotate(wrap(image), radians) + return unwrap(image, replace) + + +def translate_x(image, pixels, replace): + """Equivalent of PIL Translate in X dimension.""" + image = contrib_image.translate(wrap(image), [-pixels, 0]) + return unwrap(image, replace) + + +def translate_y(image, pixels, replace): + """Equivalent of PIL Translate in Y dimension.""" + image = contrib_image.translate(wrap(image), [0, -pixels]) + return unwrap(image, replace) + + +def shear_x(image, level, replace): + """Equivalent of PIL Shearing in X dimension.""" + # Shear parallel to x axis is a projective transform + # with a matrix form of: + # [1 level + # 0 1]. + image = contrib_image.transform( + wrap(image), [1., level, 0., 0., 1., 0., 0., 0.]) + return unwrap(image, replace) + + +def shear_y(image, level, replace): + """Equivalent of PIL Shearing in Y dimension.""" + # Shear parallel to y axis is a projective transform + # with a matrix form of: + # [1 0 + # level 1]. + image = contrib_image.transform( + wrap(image), [1., 0., 0., level, 1., 0., 0., 0.]) + return unwrap(image, replace) + + +def autocontrast(image): + """Implements Autocontrast function from PIL using TF ops. + + Args: + image: A 3D uint8 tensor. + + Returns: + The image after it has had autocontrast applied to it and will be of type + uint8. + """ + + def scale_channel(image): + """Scale the 2D image using the autocontrast rule.""" + # A possibly cheaper version can be done using cumsum/unique_with_counts + # over the histogram values, rather than iterating over the entire image. + # to compute mins and maxes. + lo = tf.to_float(tf.reduce_min(image)) + hi = tf.to_float(tf.reduce_max(image)) + + + def scale_values(im): + """Scale the image, making the lowest value 0 and the highest value 255.""" + scale = 255.0 / (hi - lo) + offset = -lo * scale + im = tf.to_float(im) * scale + offset + im = tf.clip_by_value(im, 0.0, 255.0) + return tf.cast(im, tf.uint8) + + result = tf.cond(hi > lo, lambda: scale_values(image), lambda: image) + return result + + # Assumes RGB for now. Scales each channel independently + # and then stacks the result. + s1 = scale_channel(image[:, :, 0]) + s2 = scale_channel(image[:, :, 1]) + s3 = scale_channel(image[:, :, 2]) + image = tf.stack([s1, s2, s3], 2) + return image + + +def sharpness(image, factor): + """Implements Sharpness function from PIL using TF ops.""" + orig_image = image + image = tf.cast(image, tf.float32) + # Make image 4D for conv operation. + image = tf.expand_dims(image, 0) + # SMOOTH PIL Kernel. + kernel = tf.constant( + [[1, 1, 1], [1, 5, 1], [1, 1, 1]], dtype=tf.float32, + shape=[3, 3, 1, 1]) / 13. + # Tile across channel dimension. + kernel = tf.tile(kernel, [1, 1, 3, 1]) + strides = [1, 1, 1, 1] + with tf.device('/cpu:0'): + # Some augmentation that uses depth-wise conv will cause crashing when + # training on GPU. See (b/156242594) for details. + degenerate = tf.nn.depthwise_conv2d( + image, kernel, strides, padding='VALID', rate=[1, 1]) + degenerate = tf.clip_by_value(degenerate, 0.0, 255.0) + degenerate = tf.squeeze(tf.cast(degenerate, tf.uint8), [0]) + + # For the borders of the resulting image, fill in the values of the + # original image. + mask = tf.ones_like(degenerate) + padded_mask = tf.pad(mask, [[1, 1], [1, 1], [0, 0]]) + padded_degenerate = tf.pad(degenerate, [[1, 1], [1, 1], [0, 0]]) + result = tf.where(tf.equal(padded_mask, 1), padded_degenerate, orig_image) + + # Blend the final result. + return blend(result, orig_image, factor) + + +def equalize(image): + """Implements Equalize function from PIL using TF ops.""" + def scale_channel(im, c): + """Scale the data in the channel to implement equalize.""" + im = tf.cast(im[:, :, c], tf.int32) + # Compute the histogram of the image channel. + histo = tf.histogram_fixed_width(im, [0, 255], nbins=256) + + # For the purposes of computing the step, filter out the nonzeros. + nonzero = tf.where(tf.not_equal(histo, 0)) + nonzero_histo = tf.reshape(tf.gather(histo, nonzero), [-1]) + step = (tf.reduce_sum(nonzero_histo) - nonzero_histo[-1]) // 255 + + def build_lut(histo, step): + """ Compute the cumulative sum, shifting by step // 2 and then normalization by step. """ + lut = (tf.cumsum(histo) + (step // 2)) // step + # Shift lut, prepending with 0. + lut = tf.concat([[0], lut[:-1]], 0) + # Clip the counts to be in range. This is done + # in the C code for image.point. + return tf.clip_by_value(lut, 0, 255) + + # If step is zero, return the original image. Otherwise, build + # lut from the full histogram and step and then index from it. + result = tf.cond(tf.equal(step, 0), + lambda: im, + lambda: tf.gather(build_lut(histo, step), im)) + + return tf.cast(result, tf.uint8) + + # Assumes RGB for now. Scales each channel independently + # and then stacks the result. + s1 = scale_channel(image, 0) + s2 = scale_channel(image, 1) + s3 = scale_channel(image, 2) + image = tf.stack([s1, s2, s3], 2) + return image + + +def invert(image): + """Inverts the image pixels.""" + image = tf.convert_to_tensor(image) + return 255 - image + + +def wrap(image): + """Returns 'image' with an extra channel set to all 1s.""" + shape = tf.shape(image) + extended_channel = tf.ones([shape[0], shape[1], 1], image.dtype) + extended = tf.concat([image, extended_channel], 2) + return extended + + +def unwrap(image, replace): + """Unwraps an image produced by wrap. + + Where there is a 0 in the last channel for every spatial position, + the rest of the three channels in that spatial dimension are grayed + (set to 128). Operations like translate and shear on a wrapped + Tensor will leave 0s in empty locations. Some transformations look + at the intensity of values to do preprocessing, and we want these + empty pixels to assume the 'average' value, rather than pure black. + + + Args: + image: A 3D Image Tensor with 4 channels. + replace: A one or three value 1D tensor to fill empty pixels. + + Returns: + image: A 3D image Tensor with 3 channels. + """ + image_shape = tf.shape(image) + # Flatten the spatial dimensions. + flattened_image = tf.reshape(image, [-1, image_shape[2]]) + + # Find all pixels where the last channel is zero. + alpha_channel = flattened_image[:, 3] + + replace = tf.concat([replace, tf.ones([1], image.dtype)], 0) + + # Where they are zero, fill them in with 'replace'. + flattened_image = tf.where( + tf.equal(alpha_channel, 0), + tf.ones_like(flattened_image, dtype=image.dtype) * replace, + flattened_image) + + image = tf.reshape(flattened_image, image_shape) + image = tf.slice(image, [0, 0, 0], [image_shape[0], image_shape[1], 3]) + return image + + +NAME_TO_FUNC = { + 'AutoContrast': autocontrast, + 'Equalize': equalize, + 'Invert': invert, + 'Rotate': rotate, + 'Posterize': posterize, + 'Solarize': solarize, + 'SolarizeAdd': solarize_add, + 'Color': color, + 'Contrast': contrast, + 'Brightness': brightness, + 'Sharpness': sharpness, + 'ShearX': shear_x, + 'ShearY': shear_y, + 'TranslateX': translate_x, + 'TranslateY': translate_y, + 'Cutout': cutout, +} + + +def _randomly_negate_tensor(tensor): + """With 50% prob turn the tensor negative.""" + should_flip = tf.cast(tf.floor(tf.random_uniform([]) + 0.5), tf.bool) + final_tensor = tf.cond(should_flip, lambda: tensor, lambda: -tensor) + return final_tensor + + +def _rotate_level_to_arg(level): + level = (level / _MAX_LEVEL) * 30. + level = _randomly_negate_tensor(level) + return (level,) + + +def _shrink_level_to_arg(level): + """Converts level to ratio by which we shrink the image content.""" + if level == 0: + return (1.0,) # if level is zero, do not shrink the image + # Maximum shrinking ratio is 2.9. + level = 2. / (_MAX_LEVEL / level) + 0.9 + return (level,) + + +def _enhance_level_to_arg(level): + return ((level / _MAX_LEVEL) * 1.8 + 0.1,) + + +def _shear_level_to_arg(level): + level = (level / _MAX_LEVEL) * 0.3 + # Flip level to negative with 50% chance. + level = _randomly_negate_tensor(level) + return (level,) + + +def _translate_level_to_arg(level, translate_const): + level = (level / _MAX_LEVEL) * float(translate_const) + # Flip level to negative with 50% chance. + level = _randomly_negate_tensor(level) + return (level,) + + +def level_to_arg(hparams): + """Transform parameters from level to arguement.""" + return { + 'AutoContrast': lambda level: (), + 'Equalize': lambda level: (), + 'Invert': lambda level: (), + 'Rotate': _rotate_level_to_arg, + 'Posterize': lambda level: (int((level / _MAX_LEVEL) * 4),), + 'Solarize': lambda level: (int((level / _MAX_LEVEL) * 256),), + 'SolarizeAdd': lambda level: (int((level / _MAX_LEVEL) * 110),), + 'Color': _enhance_level_to_arg, + 'Contrast': _enhance_level_to_arg, + 'Brightness': _enhance_level_to_arg, + 'Sharpness': _enhance_level_to_arg, + 'ShearX': _shear_level_to_arg, + 'ShearY': _shear_level_to_arg, + 'Cutout': lambda level: (int((level / _MAX_LEVEL) * hparams.cutout_const),), + # pylint:disable=g-long-lambda + 'TranslateX': lambda level: _translate_level_to_arg(level, hparams.translate_const), + 'TranslateY': lambda level: _translate_level_to_arg(level, hparams.translate_const), + # pylint:enable=g-long-lambda + } + + +def _parse_policy_info(name, prob, level, replace_value, augmentation_hparams): + """Return the function that corresponds to `name` and update `level` param.""" + func = NAME_TO_FUNC[name] + args = level_to_arg(augmentation_hparams)[name](level) + + # Check to see if prob is passed into function. This is used for operations + # where we alter bboxes independently. + # pytype:disable=wrong-arg-types + if 'prob' in inspect.getargspec(func)[0]: + args = tuple([prob] + list(args)) + # pytype:enable=wrong-arg-types + + # Add in replace arg if it is required for the function that is being called. + # pytype:disable=wrong-arg-types + if 'replace' in inspect.getargspec(func)[0]: + # Make sure replace is the final argument + assert 'replace' == inspect.getargspec(func)[0][-1] + args = tuple(list(args) + [replace_value]) + # pytype:enable=wrong-arg-types + + return (func, prob, args) + + +def _apply_func_with_prob(func, image, args, prob): + """Apply `func` to image w/ `args` as input with probability `prob`.""" + assert isinstance(args, tuple) + + # If prob is a function argument, then this randomness is being handled + # inside the function, so make sure it is always called. + # pytype:disable=wrong-arg-types + if 'prob' in inspect.getargspec(func)[0]: + prob = 1.0 + # pytype:enable=wrong-arg-types + + # Apply the function with probability `prob`. + should_apply_op = tf.cast( + tf.floor(tf.random_uniform([], dtype=tf.float32) + prob), tf.bool) + augmented_image = tf.cond( + should_apply_op, + lambda: func(image, *args), + lambda: image) + return augmented_image + + +def select_and_apply_random_policy(policies, image): + """Select a random policy from `policies` and apply it to `image`.""" + policy_to_select = tf.random_uniform( + [], maxval=len(policies), dtype=tf.int32) + # Note that using tf.case instead of tf.conds would result in significantly + # larger graphs and would even break export for some larger policies. + for (i, policy) in enumerate(policies): + image = tf.cond( + tf.equal(i, policy_to_select), + lambda selected_policy=policy: selected_policy(image), + lambda: image) + return image + + +def build_and_apply_nas_policy(policies, image, + augmentation_hparams): + """Build a policy from the given policies passed in and apply to image. + + Args: + policies: list of lists of tuples in the form `(func, prob, level)`, `func` + is a string name of the augmentation function, `prob` is the probability + of applying the `func` operation, `level` is the input argument for + `func`. + image: tf.Tensor that the resulting policy will be applied to. + augmentation_hparams: Hparams associated with the NAS learned policy. + + Returns: + A version of image that now has data augmentation applied to it based on + the `policies` pass into the function. + """ + replace_value = [128, 128, 128] + + # func is the string name of the augmentation function, prob is the + # probability of applying the operation and level is the parameter associated + # with the tf op. + + # tf_policies are functions that take in an image and return an augmented + # image. + tf_policies = [] + for policy in policies: + tf_policy = [] + # Link string name to the correct python function and make sure the correct + # argument is passed into that function. + for policy_info in policy: + policy_info = list(policy_info) + \ + [replace_value, augmentation_hparams] + + tf_policy.append(_parse_policy_info(*policy_info)) + # Now build the tf policy that will apply the augmentation procedue + # on image. + + def make_final_policy(tf_policy_): + """Make the final policy.""" + def final_policy(image_): + """The final policy.""" + for func, prob, args in tf_policy_: + image_ = _apply_func_with_prob( + func, image_, args, prob) + return image_ + return final_policy + tf_policies.append(make_final_policy(tf_policy)) + + augmented_image = select_and_apply_random_policy( + tf_policies, image) + return augmented_image + + +def distort_image_with_autoaugment(image, augmentation_name): + """Applies the AutoAugment policy to `image`. + + AutoAugment is from the paper: https://arxiv.org/abs/1805.09501. + + Args: + image: `Tensor` of shape [height, width, 3] representing an image. + augmentation_name: The name of the AutoAugment policy to use. The available + options are `v0` and `test`. `v0` is the policy used for + all of the results in the paper and was found to achieve the best results + on the COCO dataset. `v1`, `v2` and `v3` are additional good policies + found on the COCO dataset that have slight variation in what operations + were used during the search procedure along with how many operations are + applied in parallel to a single image (2 vs 3). + + Returns: + A tuple containing the augmented versions of `image`. + """ + available_policies = {'v0': policy_v0, + 'test': policy_vtest} + if augmentation_name not in available_policies: + raise ValueError( + 'Invalid augmentation_name: {}'.format(augmentation_name)) + + policy = available_policies[augmentation_name]() + # Hparams that will be used for AutoAugment. + augmentation_hparams = contrib_training.HParams( + cutout_const=100, translate_const=250) + + return build_and_apply_nas_policy(policy, image, augmentation_hparams) + + +def distort_image_with_randaugment(image, num_layers, magnitude): + """Applies the RandAugment policy to `image`. + + RandAugment is from the paper https://arxiv.org/abs/1909.13719, + + Args: + image: `Tensor` of shape [height, width, 3] representing an image. + num_layers: Integer, the number of augmentation transformations to apply + sequentially to an image. Represented as (N) in the paper. Usually best + values will be in the range [1, 3]. + magnitude: Integer, shared magnitude across all augmentation operations. + Represented as (M) in the paper. Usually best values are in the range + [5, 30]. + + Returns: + The augmented version of `image`. + """ + replace_value = [128] * 3 + tf.logging.info('Using RandAug.') + augmentation_hparams = contrib_training.HParams( + cutout_const=40, translate_const=100) + available_ops = [ + 'AutoContrast', 'Equalize', 'Invert', 'Rotate', 'Posterize', + 'Solarize', 'Color', 'Contrast', 'Brightness', 'Sharpness', + 'ShearX', 'ShearY', 'TranslateX', 'TranslateY', 'Cutout', 'SolarizeAdd'] + + for layer_num in range(num_layers): + op_to_select = tf.random_uniform( + [], maxval=len(available_ops), dtype=tf.int32) + random_magnitude = float(magnitude) + with tf.name_scope('randaug_layer_{}'.format(layer_num)): + for (i, op_name) in enumerate(available_ops): + prob = tf.random_uniform( + [], minval=0.2, maxval=0.8, dtype=tf.float32) + func, _, args = _parse_policy_info(op_name, prob, random_magnitude, + replace_value, augmentation_hparams) + image = tf.cond( + tf.equal(i, op_to_select), + # pylint:disable=g-long-lambda + lambda selected_func=func, selected_args=args: selected_func(image, *selected_args), + # pylint:enable=g-long-lambda + lambda: image) + return image diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/boot_modelarts.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/boot_modelarts.py new file mode 100644 index 000000000..dcbf0d9d1 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/boot_modelarts.py @@ -0,0 +1,53 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +This is the boot file for ModelArts platform. +Firstly, the train datasets are copyed from obs to ModelArts. +Then, the string of train shell command is concated and using 'os.system()' to execute +""" +import os +import numpy as np +import argparse +from help_modelarts import obs_data2modelarts + +print(os.system('env')) + +if __name__ == '__main__': + # Note: the code dir is not the same as work dir on ModelArts Platform!!! + code_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + print("===>>>code_dir:{}, work_dir:{}".format(code_dir, work_dir)) + + parser = argparse.ArgumentParser() + parser.add_argument("--data_url", type=str, default=None) + parser.add_argument("--train_url", type=str, default=None) + parser.add_argument("--modelarts_data_dir", type=str, + default="/cache/data_url") + config = parser.parse_args() + + print("--------config----------") + for k in list(vars(config).keys()): + print("key:{}: value:{}".format(k, vars(config)[k])) + print("--------config----------") + + # copy dataset from obs to modelarts + obs_data2modelarts(config) + + # start to train on Modelarts platform + bash_header = os.path.join(code_dir, 'run_1p.sh') + arg_url = '%s %s %s %s' % (code_dir, config.modelarts_data_dir + + '/ILSVRC2012', config.modelarts_data_dir+'/result_eff', config.train_url) + bash_command = 'bash %s %s' % (bash_header, arg_url) + print("bash command:", bash_command) + os.system(bash_command) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_builder.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_builder.py new file mode 100644 index 000000000..5d45ce676 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_builder.py @@ -0,0 +1,348 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Model Builder for EfficientNet.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import functools +import os +import re +from absl import logging +import numpy as np +import six +import tensorflow.compat.v1 as tf + +import efficientnet_model +import utils +MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] +STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] + + +def efficientnet_params(model_name): + """Get efficientnet params based on model name.""" + params_dict = { + # (width_coefficient, depth_coefficient, resolution, dropout_rate) + 'efficientnet-b0': (1.0, 1.0, 224, 0.2), + 'efficientnet-b1': (1.0, 1.1, 240, 0.2), + 'efficientnet-b2': (1.1, 1.2, 260, 0.3), + 'efficientnet-b3': (1.2, 1.4, 300, 0.3), + 'efficientnet-b4': (1.4, 1.8, 380, 0.4), + 'efficientnet-b5': (1.6, 2.2, 456, 0.4), + 'efficientnet-b6': (1.8, 2.6, 528, 0.5), + 'efficientnet-b7': (2.0, 3.1, 600, 0.5), + 'efficientnet-b8': (2.2, 3.6, 672, 0.5), + 'efficientnet-l2': (4.3, 5.3, 800, 0.5), + } + return params_dict[model_name] + + +class BlockDecoder(object): + """Block Decoder for readability.""" + + def _decode_block_string(self, block_string): + """Gets a block through a string notation of arguments.""" + if six.PY2: + assert isinstance(block_string, (str, unicode)) + else: + assert isinstance(block_string, str) + ops = block_string.split('_') + options = {} + for op in ops: + splits = re.split(r'(\d.*)', op) + if len(splits) >= 2: + key, value = splits[:2] + options[key] = value + + if 's' not in options or len(options['s']) != 2: + raise ValueError('Strides options should be a pair of integers.') + + return efficientnet_model.BlockArgs( + kernel_size=int(options['k']), + num_repeat=int(options['r']), + input_filters=int(options['i']), + output_filters=int(options['o']), + expand_ratio=int(options['e']), + id_skip=('noskip' not in block_string), + se_ratio=float(options['se']) if 'se' in options else None, + strides=[int(options['s'][0]), + int(options['s'][1])], + conv_type=int(options['c']) if 'c' in options else 0, + fused_conv=int(options['f']) if 'f' in options else 0, + space2depth=int(options['d']) if 'd' in options else 0, + condconv=('cc' in block_string), + activation_fn=(tf.nn.relu if int(options['a']) == 0 + else tf.nn.swish) if 'a' in options else None) + + def _encode_block_string(self, block): + """Encodes a block to a string.""" + args = [ + 'r%d' % block.num_repeat, + 'k%d' % block.kernel_size, + 's%d%d' % (block.strides[0], block.strides[1]), + 'e%s' % block.expand_ratio, + 'i%d' % block.input_filters, + 'o%d' % block.output_filters, + 'c%d' % block.conv_type, + 'f%d' % block.fused_conv, + 'd%d' % block.space2depth, + ] + if block.se_ratio > 0 and block.se_ratio <= 1: + args.append('se%s' % block.se_ratio) + if block.id_skip is False: # pylint: disable=g-bool-id-comparison + args.append('noskip') + if block.condconv: + args.append('cc') + return '_'.join(args) + + def decode(self, string_list): + """Decodes a list of string notations to specify blocks inside the network. + + Args: + string_list: a list of strings, each string is a notation of block. + + Returns: + A list of namedtuples to represent blocks arguments. + """ + assert isinstance(string_list, list) + blocks_args = [] + for block_string in string_list: + blocks_args.append(self._decode_block_string(block_string)) + return blocks_args + + def encode(self, blocks_args): + """Encodes a list of Blocks to a list of strings. + + Args: + blocks_args: A list of namedtuples to represent blocks arguments. + Returns: + a list of strings, each string is a notation of block. + """ + block_strings = [] + for block in blocks_args: + block_strings.append(self._encode_block_string(block)) + return block_strings + + +def swish(features, use_native=True, use_hard=False): + """Computes the Swish activation function. + + We provide three alternnatives: + - Native tf.nn.swish, use less memory during training than composable swish. + - Quantization friendly hard swish. + - A composable swish, equivalant to tf.nn.swish, but more general for + finetuning and TF-Hub. + + Args: + features: A `Tensor` representing preactivation values. + use_native: Whether to use the native swish from tf.nn that uses a custom + gradient to reduce memory usage, or to use customized swish that uses + default TensorFlow gradient computation. + use_hard: Whether to use quantization-friendly hard swish. + + Returns: + The activation value. + """ + if use_native and use_hard: + raise ValueError('Cannot specify both use_native and use_hard.') + + if use_native: + return tf.nn.swish(features) + + if use_hard: + return features * tf.nn.relu6(features + np.float32(3)) * (1. / 6.) + + features = tf.convert_to_tensor(features, name='features') + return features * tf.nn.sigmoid(features) + + +_DEFAULT_BLOCKS_ARGS = [ + 'r1_k3_s11_e1_i32_o16_se0.25', 'r2_k3_s22_e6_i16_o24_se0.25', + 'r2_k5_s22_e6_i24_o40_se0.25', 'r3_k3_s22_e6_i40_o80_se0.25', + 'r3_k5_s11_e6_i80_o112_se0.25', 'r4_k5_s22_e6_i112_o192_se0.25', + 'r1_k3_s11_e6_i192_o320_se0.25', +] + + +def efficientnet(width_coefficient=None, + depth_coefficient=None, + dropout_rate=0.2, + survival_prob=0.8): + """Creates a efficientnet model.""" + global_params = efficientnet_model.GlobalParams( + blocks_args=_DEFAULT_BLOCKS_ARGS, + batch_norm_momentum=0.99, + batch_norm_epsilon=1e-3, + dropout_rate=dropout_rate, + survival_prob=survival_prob, + data_format='channels_last', + num_classes=1000, + width_coefficient=width_coefficient, + depth_coefficient=depth_coefficient, + depth_divisor=8, + min_depth=None, + relu_fn=tf.nn.swish, + # The default is TPU-specific batch norm. + # The alternative is tf.layers.BatchNormalization. + batch_norm=utils.train_batch_norm, # TPU-specific requirement. + use_se=True, + clip_projection_output=False) + return global_params + + +def get_model_params(model_name, override_params): + """Get the block args and global params for a given model.""" + if model_name.startswith('efficientnet'): + width_coefficient, depth_coefficient, _, dropout_rate = ( + efficientnet_params(model_name)) + global_params = efficientnet( + width_coefficient, depth_coefficient, dropout_rate) + else: + raise NotImplementedError( + 'model name is not pre-defined: %s' % model_name) + + if override_params: + # ValueError will be raised here if override_params has fields not included + # in global_params. + global_params = global_params._replace(**override_params) + + decoder = BlockDecoder() + blocks_args = decoder.decode(global_params.blocks_args) + + logging.info('global_params= %s', global_params) + return blocks_args, global_params + + +def build_model(images, + model_name, + training, + override_params=None, + model_dir=None, + fine_tuning=False, + features_only=False, + pooled_features_only=False): + """A helper function to create a model and return predicted logits. + + Args: + images: input images tensor. + model_name: string, the predefined model name. + training: boolean, whether the model is constructed for training. + override_params: A dictionary of params for overriding. Fields must exist in + efficientnet_model.GlobalParams. + model_dir: string, optional model dir for saving configs. + fine_tuning: boolean, whether the model is used for finetuning. + features_only: build the base feature network only (excluding final + 1x1 conv layer, global pooling, dropout and fc head). + pooled_features_only: build the base network for features extraction (after + 1x1 conv layer and global pooling, but before dropout and fc head). + + Returns: + logits: the logits tensor of classes. + endpoints: the endpoints for each layer. + + Raises: + When model_name specified an undefined model, raises NotImplementedError. + When override_params has invalid fields, raises ValueError. + """ + assert isinstance(images, tf.Tensor) + assert not (features_only and pooled_features_only) + + # For backward compatibility. + if override_params and override_params.get('drop_connect_rate', None): + override_params['survival_prob'] = 1 - \ + override_params['drop_connect_rate'] + + if not training or fine_tuning: + if not override_params: + override_params = {} + override_params['batch_norm'] = utils.eval_batch_norm + if fine_tuning: + override_params['relu_fn'] = functools.partial( + swish, use_native=False) + blocks_args, global_params = get_model_params(model_name, override_params) + + if model_dir: + param_file = os.path.join(model_dir, 'model_params.txt') + if not tf.gfile.Exists(param_file): + if not tf.gfile.Exists(model_dir): + tf.gfile.MakeDirs(model_dir) + with tf.gfile.GFile(param_file, 'w') as f: + logging.info('writing to %s', param_file) + f.write('model_name= %s\n\n' % model_name) + f.write('global_params= %s\n\n' % str(global_params)) + f.write('blocks_args= %s\n\n' % str(blocks_args)) + + with tf.variable_scope(model_name): + model = efficientnet_model.Model(blocks_args, global_params) + outputs = model( + images, + training=training, + features_only=features_only, + pooled_features_only=pooled_features_only) + if features_only: + outputs = tf.identity(outputs, 'features') + elif pooled_features_only: + outputs = tf.identity(outputs, 'pooled_features') + else: + outputs = tf.identity(outputs, 'logits') + return outputs, model.endpoints + + +def build_model_base(images, model_name, training, override_params=None): + """Create a base feature network and return the features before pooling. + + Args: + images: input images tensor. + model_name: string, the predefined model name. + training: boolean, whether the model is constructed for training. + override_params: A dictionary of params for overriding. Fields must exist in + efficientnet_model.GlobalParams. + + Returns: + features: base features before pooling. + endpoints: the endpoints for each layer. + + Raises: + When model_name specified an undefined model, raises NotImplementedError. + When override_params has invalid fields, raises ValueError. + """ + assert isinstance(images, tf.Tensor) + # For backward compatibility. + if override_params and override_params.get('drop_connect_rate', None): + override_params['survival_prob'] = 1 - \ + override_params['drop_connect_rate'] + + blocks_args, global_params = get_model_params(model_name, override_params) + + with tf.variable_scope(model_name): + model = efficientnet_model.Model(blocks_args, global_params) + features = model(images, training=training, features_only=True) + + features = tf.identity(features, 'features') + return features, model.endpoints diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_model.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_model.py new file mode 100644 index 000000000..03c248ad0 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/efficientnet_model.py @@ -0,0 +1,736 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Contains definitions for EfficientNet model. + +[1] Mingxing Tan, Quoc V. Le + EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. + ICML'19, https://arxiv.org/abs/1905.11946 +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import collections +import functools +import math + +from absl import logging +import numpy as np +import six +from six.moves import xrange +import tensorflow.compat.v1 as tf + +import utils +from condconv import condconv_layers + +GlobalParams = collections.namedtuple('GlobalParams', [ + 'batch_norm_momentum', 'batch_norm_epsilon', 'dropout_rate', 'data_format', + 'num_classes', 'width_coefficient', 'depth_coefficient', 'depth_divisor', + 'min_depth', 'survival_prob', 'relu_fn', 'batch_norm', 'use_se', + 'se_coefficient', 'local_pooling', 'condconv_num_experts', + 'clip_projection_output', 'blocks_args', 'fix_head_stem', +]) +# Note: the default value of None is not necessarily valid. It is valid to leave +# width_coefficient, depth_coefficient at None, which is treated as 1.0 (and +# which also allows depth_divisor and min_depth to be left at None). +GlobalParams.__new__.__defaults__ = (None,) * len(GlobalParams._fields) + +BlockArgs = collections.namedtuple('BlockArgs', [ + 'kernel_size', 'num_repeat', 'input_filters', 'output_filters', + 'expand_ratio', 'id_skip', 'strides', 'se_ratio', 'conv_type', 'fused_conv', + 'space2depth', 'condconv', 'activation_fn' +]) +# defaults will be a public argument for namedtuple in Python 3.7 +# https://docs.python.org/3/library/collections.html#collections.namedtuple +BlockArgs.__new__.__defaults__ = (None,) * len(BlockArgs._fields) + + +def conv_kernel_initializer(shape, dtype=None, partition_info=None): + """Initialization for convolutional kernels. + + The main difference with tf.variance_scaling_initializer is that + tf.variance_scaling_initializer uses a truncated normal with an uncorrected + standard deviation, whereas here we use a normal distribution. Similarly, + tf.initializers.variance_scaling uses a truncated normal with + a corrected standard deviation. + + Args: + shape: shape of variable + dtype: dtype of variable + partition_info: unused + + Returns: + an initialization for the variable + """ + del partition_info + kernel_height, kernel_width, _, out_filters = shape + fan_out = int(kernel_height * kernel_width * out_filters) + return tf.random_normal( + shape, mean=0.0, stddev=np.sqrt(2.0 / fan_out), dtype=dtype) + + +def dense_kernel_initializer(shape, dtype=None, partition_info=None): + """Initialization for dense kernels. + + This initialization is equal to + tf.variance_scaling_initializer(scale=1.0/3.0, mode='fan_out', + distribution='uniform'). + It is written out explicitly here for clarity. + + Args: + shape: shape of variable + dtype: dtype of variable + partition_info: unused + + Returns: + an initialization for the variable + """ + del partition_info + init_range = 1.0 / np.sqrt(shape[1]) + return tf.random_uniform(shape, -init_range, init_range, dtype=dtype) + + +def round_filters(filters, global_params, skip=False): + """Round number of filters based on depth multiplier.""" + orig_f = filters + multiplier = global_params.width_coefficient + divisor = global_params.depth_divisor + min_depth = global_params.min_depth + if skip or not multiplier: + return filters + + filters *= multiplier + min_depth = min_depth or divisor + new_filters = max(min_depth, int( + filters + divisor / 2) // divisor * divisor) + # Make sure that round down does not go down by more than 10%. + if new_filters < 0.9 * filters: + new_filters += divisor + logging.info('round_filter input=%s output=%s', orig_f, new_filters) + return int(new_filters) + + +def round_repeats(repeats, global_params, skip=False): + """Round number of filters based on depth multiplier.""" + multiplier = global_params.depth_coefficient + if skip or not multiplier: + return repeats + return int(math.ceil(multiplier * repeats)) + + +class MBConvBlock(tf.keras.layers.Layer): + """A class of MBConv: Mobile Inverted Residual Bottleneck. + + Attributes: + endpoints: dict. A list of internal tensors. + """ + + def __init__(self, block_args, global_params): + """Initializes a MBConv block. + + Args: + block_args: BlockArgs, arguments to create a Block. + global_params: GlobalParams, a set of global parameters. + """ + super(MBConvBlock, self).__init__() + self._block_args = block_args + self._local_pooling = global_params.local_pooling + self._batch_norm_momentum = global_params.batch_norm_momentum + self._batch_norm_epsilon = global_params.batch_norm_epsilon + self._batch_norm = global_params.batch_norm + self._condconv_num_experts = global_params.condconv_num_experts + self._data_format = global_params.data_format + self._se_coefficient = global_params.se_coefficient + if self._data_format == 'channels_first': + self._channel_axis = 1 + self._spatial_dims = [2, 3] + else: + self._channel_axis = -1 + self._spatial_dims = [1, 2] + + self._relu_fn = (self._block_args.activation_fn + or global_params.relu_fn or tf.nn.swish) + self._has_se = ( + global_params.use_se and self._block_args.se_ratio is not None and + 0 < self._block_args.se_ratio <= 1) + + self._clip_projection_output = global_params.clip_projection_output + + self.endpoints = None + + self.conv_cls = utils.Conv2D + self.depthwise_conv_cls = utils.DepthwiseConv2D + if self._block_args.condconv: + self.conv_cls = functools.partial( + condconv_layers.CondConv2D, num_experts=self._condconv_num_experts) + self.depthwise_conv_cls = functools.partial( + condconv_layers.DepthwiseCondConv2D, + num_experts=self._condconv_num_experts) + + # Builds the block accordings to arguments. + self._build() + + def block_args(self): + """Call the function of block_args.""" + return self._block_args + + def _build(self): + """Builds block according to the arguments.""" + if self._block_args.space2depth == 1: + self._space2depth = tf.layers.Conv2D( + self._block_args.input_filters, + kernel_size=[2, 2], + strides=[2, 2], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=False) + self._bnsp = self._batch_norm( + axis=self._channel_axis, + momentum=self._batch_norm_momentum, + epsilon=self._batch_norm_epsilon) + + if self._block_args.condconv: + # Add the example-dependent routing function + self._avg_pooling = tf.keras.layers.GlobalAveragePooling2D( + data_format=self._data_format) + self._routing_fn = tf.layers.Dense( + self._condconv_num_experts, activation=tf.nn.sigmoid) + + filters = self._block_args.input_filters * self._block_args.expand_ratio + kernel_size = self._block_args.kernel_size + + # Fused expansion phase. Called if using fused convolutions. + self._fused_conv = self.conv_cls( + filters=filters, + kernel_size=[kernel_size, kernel_size], + strides=self._block_args.strides, + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=False) + + # Expansion phase. Called if not using fused convolutions and expansion + # phase is necessary. + self._expand_conv = self.conv_cls( + filters=filters, + kernel_size=[1, 1], + strides=[1, 1], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=False) + self._bn0 = self._batch_norm( + axis=self._channel_axis, + momentum=self._batch_norm_momentum, + epsilon=self._batch_norm_epsilon) + + # Depth-wise convolution phase. Called if not using fused convolutions. + self._depthwise_conv = self.depthwise_conv_cls( + kernel_size=[kernel_size, kernel_size], + strides=self._block_args.strides, + depthwise_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=False) + + self._bn1 = self._batch_norm( + axis=self._channel_axis, + momentum=self._batch_norm_momentum, + epsilon=self._batch_norm_epsilon) + + if self._has_se: + num_reduced_filters = int(self._block_args.input_filters * ( + self._block_args.se_ratio * (self._se_coefficient + if self._se_coefficient else 1))) + # account for space2depth transformation in SE filter depth, since + # the SE compression ratio is w.r.t. the original filter depth before + # space2depth is applied. + num_reduced_filters = (num_reduced_filters // 4 + if self._block_args.space2depth == 1 + else num_reduced_filters) + num_reduced_filters = max(1, num_reduced_filters) + # Squeeze and Excitation layer. + self._se_reduce = utils.Conv2D( + num_reduced_filters, + kernel_size=[1, 1], + strides=[1, 1], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=True) + self._se_expand = utils.Conv2D( + filters, + kernel_size=[1, 1], + strides=[1, 1], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=True) + + # Output phase. + filters = self._block_args.output_filters + self._project_conv = self.conv_cls( + filters=filters, + kernel_size=[1, 1], + strides=[1, 1], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._data_format, + use_bias=False) + self._bn2 = self._batch_norm( + axis=self._channel_axis, + momentum=self._batch_norm_momentum, + epsilon=self._batch_norm_epsilon) + + def _call_se(self, input_tensor): + """Call Squeeze and Excitation layer. + + Args: + input_tensor: Tensor, a single input tensor for Squeeze/Excitation layer. + + Returns: + A output tensor, which should have the same shape as input. + """ + if self._local_pooling: + shape = input_tensor.get_shape().as_list() + kernel_size = [ + 1, shape[self._spatial_dims[0]], shape[self._spatial_dims[1]], 1] + se_tensor = tf.nn.avg_pool( + input_tensor, + ksize=kernel_size, + strides=[1, 1, 1, 1], + padding='VALID', + data_format=self._data_format) + else: + se_tensor = tf.reduce_mean( + input_tensor, self._spatial_dims, keepdims=True) + se_tensor = self._se_expand(self._relu_fn(self._se_reduce(se_tensor))) + logging.info('Built SE %s : %s', self.name, se_tensor.shape) + return tf.sigmoid(se_tensor) * input_tensor + + def call(self, inputs, training=True, survival_prob=None): + """Implementation of call(). + + Args: + inputs: the inputs tensor. + training: boolean, whether the model is constructed for training. + survival_prob: float, between 0 to 1, drop connect rate. + + Returns: + A output tensor. + """ + logging.info('Block %s input shape: %s', self.name, inputs.shape) + x = inputs + + fused_conv_fn = self._fused_conv + expand_conv_fn = self._expand_conv + depthwise_conv_fn = self._depthwise_conv + project_conv_fn = self._project_conv + + if self._block_args.condconv: + pooled_inputs = self._avg_pooling(inputs) + routing_weights = self._routing_fn(pooled_inputs) + # Capture routing weights as additional input to CondConv layers + fused_conv_fn = functools.partial( + self._fused_conv, routing_weights=routing_weights) + expand_conv_fn = functools.partial( + self._expand_conv, routing_weights=routing_weights) + depthwise_conv_fn = functools.partial( + self._depthwise_conv, routing_weights=routing_weights) + project_conv_fn = functools.partial( + self._project_conv, routing_weights=routing_weights) + + # creates conv 2x2 kernel + if self._block_args.space2depth == 1: + with tf.variable_scope('space2depth'): + x = self._relu_fn( + self._bnsp(self._space2depth(x), training=training)) + logging.info('Block start with space2depth shape: %s', x.shape) + + if self._block_args.fused_conv: + # If use fused mbconv, skip expansion and use regular conv. + x = self._relu_fn(self._bn1(fused_conv_fn(x), training=training)) + logging.info('Conv2D shape: %s', x.shape) + else: + # Otherwise, first apply expansion and then apply depthwise conv. + if self._block_args.expand_ratio != 1: + x = self._relu_fn( + self._bn0(expand_conv_fn(x), training=training)) + logging.info('Expand shape: %s', x.shape) + + x = self._relu_fn( + self._bn1(depthwise_conv_fn(x), training=training)) + logging.info('DWConv shape: %s', x.shape) + + if self._has_se: + with tf.variable_scope('se'): + x = self._call_se(x) + + self.endpoints = {'expansion_output': x} + + x = self._bn2(project_conv_fn(x), training=training) + # Add identity so that quantization-aware training can insert quantization + # ops correctly. + x = tf.identity(x) + if self._clip_projection_output: + x = tf.clip_by_value(x, -6, 6) + if self._block_args.id_skip: + if all( + s == 1 for s in self._block_args.strides + ) and inputs.get_shape().as_list()[-1] == x.get_shape().as_list()[-1]: + # Apply only if skip connection presents. + if survival_prob: + x = utils.drop_connect(x, training, survival_prob) + x = tf.add(x, inputs) + logging.info('Project shape: %s', x.shape) + return x + + +class MBConvBlockWithoutDepthwise(MBConvBlock): + """MBConv-like block without depthwise convolution and squeeze-and-excite.""" + + def _build(self): + """Builds block according to the arguments.""" + filters = self._block_args.input_filters * self._block_args.expand_ratio + if self._block_args.expand_ratio != 1: + # Expansion phase: + self._expand_conv = tf.layers.Conv2D( + filters, + kernel_size=[3, 3], + strides=self._block_args.strides, + kernel_initializer=conv_kernel_initializer, + padding='same', + use_bias=False) + self._bn0 = self._batch_norm( + axis=self._channel_axis, + momentum=self._batch_norm_momentum, + epsilon=self._batch_norm_epsilon) + + # Output phase: + filters = self._block_args.output_filters + self._project_conv = tf.layers.Conv2D( + filters, + kernel_size=[1, 1], + strides=[1, 1], + kernel_initializer=conv_kernel_initializer, + padding='same', + use_bias=False) + self._bn1 = self._batch_norm( + axis=self._channel_axis, + momentum=self._batch_norm_momentum, + epsilon=self._batch_norm_epsilon) + + def call(self, inputs, training=True, survival_prob=None): + """Implementation of call(). + + Args: + inputs: the inputs tensor. + training: boolean, whether the model is constructed for training. + survival_prob: float, between 0 to 1, drop connect rate. + + Returns: + A output tensor. + """ + logging.info('Block input shape: %s', inputs.shape) + if self._block_args.expand_ratio != 1: + x = self._relu_fn( + self._bn0(self._expand_conv(inputs), training=training)) + else: + x = inputs + logging.info('Expand shape: %s', x.shape) + + self.endpoints = {'expansion_output': x} + + x = self._bn1(self._project_conv(x), training=training) + # Add identity so that quantization-aware training can insert quantization + # ops correctly. + x = tf.identity(x) + if self._clip_projection_output: + x = tf.clip_by_value(x, -6, 6) + + if self._block_args.id_skip: + if all( + s == 1 for s in self._block_args.strides + ) and self._block_args.input_filters == self._block_args.output_filters: + # Apply only if skip connection presents. + if survival_prob: + x = utils.drop_connect(x, training, survival_prob) + x = tf.add(x, inputs) + logging.info('Project shape: %s', x.shape) + return x + + +class Model(tf.keras.Model): + """A class implements tf.keras.Model for MNAS-like model. + + Reference: https://arxiv.org/abs/1807.11626 + """ + + def __init__(self, blocks_args=None, global_params=None): + """Initializes an `Model` instance. + + Args: + blocks_args: A list of BlockArgs to construct block modules. + global_params: GlobalParams, a set of global parameters. + + Raises: + ValueError: when blocks_args is not specified as a list. + """ + super(Model, self).__init__() + if not isinstance(blocks_args, list): + raise ValueError('blocks_args should be a list.') + self._global_params = global_params + self._blocks_args = blocks_args + self._relu_fn = global_params.relu_fn or tf.nn.swish + self._batch_norm = global_params.batch_norm + self._fix_head_stem = global_params.fix_head_stem + + self.endpoints = None + + self._build() + + def _get_conv_block(self, conv_type): + conv_block_map = {0: MBConvBlock, 1: MBConvBlockWithoutDepthwise} + return conv_block_map[conv_type] + + def _build(self): + """Builds a model.""" + self._blocks = [] + batch_norm_momentum = self._global_params.batch_norm_momentum + batch_norm_epsilon = self._global_params.batch_norm_epsilon + if self._global_params.data_format == 'channels_first': + channel_axis = 1 + self._spatial_dims = [2, 3] + else: + channel_axis = -1 + self._spatial_dims = [1, 2] + + # Stem part. + self._conv_stem = utils.Conv2D( + filters=round_filters(32, self._global_params, + self._fix_head_stem), + kernel_size=[3, 3], + strides=[2, 2], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._global_params.data_format, + use_bias=False) + self._bn0 = self._batch_norm( + axis=channel_axis, + momentum=batch_norm_momentum, + epsilon=batch_norm_epsilon) + + # Builds blocks. + for i, block_args in enumerate(self._blocks_args): + assert block_args.num_repeat > 0 + assert block_args.space2depth in [0, 1, 2] + # Update block input and output filters based on depth multiplier. + input_filters = round_filters(block_args.input_filters, + self._global_params) + + output_filters = round_filters(block_args.output_filters, + self._global_params) + kernel_size = block_args.kernel_size + if self._fix_head_stem and (i == 0 or i == len(self._blocks_args) - 1): + repeats = block_args.num_repeat + else: + repeats = round_repeats( + block_args.num_repeat, self._global_params) + block_args = block_args._replace( + input_filters=input_filters, + output_filters=output_filters, + num_repeat=repeats) + + # The first block needs to take care of stride and filter size increase. + conv_block = self._get_conv_block(block_args.conv_type) + if not block_args.space2depth: # no space2depth at all + self._blocks.append(conv_block( + block_args, self._global_params)) + else: + # if space2depth, adjust filters, kernels, and strides. + depth_factor = int( + 4 / block_args.strides[0] / block_args.strides[1]) + block_args = block_args._replace( + input_filters=block_args.input_filters * depth_factor, + output_filters=block_args.output_filters * depth_factor, + kernel_size=((block_args.kernel_size + 1) // 2 if depth_factor > 1 + else block_args.kernel_size)) + # if the first block has stride-2 and space2depth transformation + if (block_args.strides[0] == 2 and block_args.strides[1] == 2): + block_args = block_args._replace(strides=[1, 1]) + self._blocks.append(conv_block( + block_args, self._global_params)) + block_args = block_args._replace( # sp stops at stride-2 + space2depth=0, + input_filters=input_filters, + output_filters=output_filters, + kernel_size=kernel_size) + elif block_args.space2depth == 1: + self._blocks.append(conv_block( + block_args, self._global_params)) + block_args = block_args._replace(space2depth=2) + else: + self._blocks.append(conv_block( + block_args, self._global_params)) + if block_args.num_repeat > 1: # rest of blocks with the same block_arg + # pylint: disable=protected-access + block_args = block_args._replace( + input_filters=block_args.output_filters, strides=[1, 1]) + # pylint: enable=protected-access + for _ in xrange(block_args.num_repeat - 1): + self._blocks.append(conv_block( + block_args, self._global_params)) + + # Head part. + self._conv_head = utils.Conv2D( + filters=round_filters( + 1280, self._global_params, self._fix_head_stem), + kernel_size=[1, 1], + strides=[1, 1], + kernel_initializer=conv_kernel_initializer, + padding='same', + data_format=self._global_params.data_format, + use_bias=False) + self._bn1 = self._batch_norm( + axis=channel_axis, + momentum=batch_norm_momentum, + epsilon=batch_norm_epsilon) + + self._avg_pooling = tf.keras.layers.GlobalAveragePooling2D( + data_format=self._global_params.data_format) + if self._global_params.num_classes: + self._fc = tf.layers.Dense( + self._global_params.num_classes, + kernel_initializer=dense_kernel_initializer) + else: + self._fc = None + + if self._global_params.dropout_rate > 0: + self._dropout = tf.keras.layers.Dropout( + self._global_params.dropout_rate) + else: + self._dropout = None + + def call(self, + inputs, + training=True, + features_only=None, + pooled_features_only=False): + """Implementation of call(). + + Args: + inputs: input tensors. + training: boolean, whether the model is constructed for training. + features_only: build the base feature network only. + pooled_features_only: build the base network for features extraction + (after 1x1 conv layer and global pooling, but before dropout and fc + head). + + Returns: + output tensors. + """ + outputs = None + self.endpoints = {} + reduction_idx = 0 + # Calls Stem layers + with tf.variable_scope('stem'): + outputs = self._relu_fn( + self._bn0(self._conv_stem(inputs), training=training)) + logging.info('Built stem layers with output shape: %s', outputs.shape) + self.endpoints['stem'] = outputs + + # Calls blocks. + for idx, block in enumerate(self._blocks): + is_reduction = False # reduction flag for blocks after the stem layer + # If the first block has space-to-depth layer, then stem is + # the first reduction point. + if (block.block_args().space2depth == 1 and idx == 0): + reduction_idx += 1 + self.endpoints['reduction_%s' % reduction_idx] = outputs + + elif ((idx == len(self._blocks) - 1) or + self._blocks[idx + 1].block_args().strides[0] > 1): + is_reduction = True + reduction_idx += 1 + + with tf.variable_scope('blocks_%s' % idx): + survival_prob = self._global_params.survival_prob + if survival_prob: + drop_rate = 1.0 - survival_prob + survival_prob = 1.0 - drop_rate * \ + float(idx) / len(self._blocks) + logging.info('block_%s survival_prob: %s', + idx, survival_prob) + outputs = block.call( + outputs, training=training, survival_prob=survival_prob) + self.endpoints['block_%s' % idx] = outputs + if is_reduction: + self.endpoints['reduction_%s' % reduction_idx] = outputs + if block.endpoints: + for k, v in six.iteritems(block.endpoints): + self.endpoints['block_%s/%s' % (idx, k)] = v + if is_reduction: + self.endpoints['reduction_%s/%s' % + (reduction_idx, k)] = v + self.endpoints['features'] = outputs + + if not features_only: + # Calls final layers and returns logits. + with tf.variable_scope('head'): + outputs = self._relu_fn( + self._bn1(self._conv_head(outputs), training=training)) + self.endpoints['head_1x1'] = outputs + + if self._global_params.local_pooling: + shape = outputs.get_shape().as_list() + kernel_size = [ + 1, shape[self._spatial_dims[0]], shape[self._spatial_dims[1]], 1] + outputs = tf.nn.avg_pool( + outputs, ksize=kernel_size, strides=[1, 1, 1, 1], padding='VALID') + self.endpoints['pooled_features'] = outputs + if not pooled_features_only: + if self._dropout: + outputs = self._dropout(outputs, training=training) + self.endpoints['global_pool'] = outputs + if self._fc: + outputs = tf.squeeze(outputs, self._spatial_dims) + outputs = self._fc(outputs) + self.endpoints['head'] = outputs + else: + outputs = self._avg_pooling(outputs) + self.endpoints['pooled_features'] = outputs + if not pooled_features_only: + if self._dropout: + outputs = self._dropout(outputs, training=training) + self.endpoints['global_pool'] = outputs + if self._fc: + outputs = self._fc(outputs) + self.endpoints['head'] = outputs + return outputs diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/eval_ckpt_main.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/eval_ckpt_main.py new file mode 100644 index 000000000..6f86c49ad --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/eval_ckpt_main.py @@ -0,0 +1,137 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Eval checkpoint driver. + +This is an example evaluation script for users to understand the EfficientNet +model checkpoints on CPU. To serve EfficientNet, please consider to export a +`SavedModel` from checkpoints and use tf-serving to serve. +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from absl import app +from absl import flags +from absl import logging +import tensorflow.compat.v1 as tf + +import model_builder_factory +import preprocessing +import utils + +flags.DEFINE_string('model_name', 'efficientnet-b0', 'Model name to eval.') +flags.DEFINE_string('runmode', 'examples', + 'Running mode: examples or imagenet') +flags.DEFINE_string( + 'imagenet_eval_glob', None, 'Imagenet eval image glob, ' + 'such as /imagenet/ILSVRC2012*.JPEG') +flags.DEFINE_string( + 'imagenet_eval_label', None, 'Imagenet eval label file path, ' + 'such as /imagenet/ILSVRC2012_validation_ground_truth.txt') +flags.DEFINE_string('ckpt_dir', '/tmp/ckpt/', 'Checkpoint folders') +flags.DEFINE_boolean('enable_ema', True, 'Enable exponential moving average.') +flags.DEFINE_string('export_ckpt', None, 'Exported ckpt for eval graph.') +flags.DEFINE_string('example_img', '/tmp/panda.jpg', + 'Filepath for a single example image.') +flags.DEFINE_string('labels_map_file', '/tmp/labels_map.txt', + 'Labels map from label id to its meaning.') +flags.DEFINE_bool('include_background_label', False, + 'Whether to include background as label #0') +flags.DEFINE_bool('advprop_preprocessing', False, + 'Whether to use AdvProp preprocessing.') +flags.DEFINE_integer('num_images', 5000, + 'Number of images to eval. Use -1 to eval all images.') + + +class EvalCkptDriver(utils.EvalCkptDriver): + """A driver for running eval inference.""" + + def build_model(self, features, is_training): + """Build model with input features.""" + tf.logging.info(self.model_name) + model_builder = model_builder_factory.get_model_builder( + self.model_name) + + if self.advprop_preprocessing: + # AdvProp uses Inception preprocessing. + features = features * 2.0 / 255 - 1.0 + else: + features -= tf.constant( + model_builder.MEAN_RGB, shape=[1, 1, 3], dtype=features.dtype) + features /= tf.constant( + model_builder.STDDEV_RGB, shape=[1, 1, 3], dtype=features.dtype) + logits, _ = model_builder.build_model( + features, self.model_name, is_training) + probs = tf.nn.softmax(logits) + probs = tf.squeeze(probs) + return probs + + def get_preprocess_fn(self): + """Build input dataset.""" + return preprocessing.preprocess_image + + +def get_eval_driver(model_name, + include_background_label=False, + advprop_preprocessing=False): + """Get a eval driver.""" + image_size = model_builder_factory.get_model_input_size(model_name) + return EvalCkptDriver( + model_name=model_name, + batch_size=1, + image_size=image_size, + include_background_label=include_background_label, + advprop_preprocessing=advprop_preprocessing) + + +# FLAGS should not be used before main. +FLAGS = flags.FLAGS + + +def main(unused_argv): + """The main function of evaluation.""" + logging.set_verbosity(logging.ERROR) + driver = get_eval_driver(FLAGS.model_name, FLAGS.include_background_label, + FLAGS.advprop_preprocessing) + if FLAGS.runmode == 'examples': + # Run inference for an example image. + driver.eval_example_images(FLAGS.ckpt_dir, [FLAGS.example_img], + FLAGS.labels_map_file, FLAGS.enable_ema, + FLAGS.export_ckpt) + elif FLAGS.runmode == 'imagenet': + # Run inference for imagenet. + driver.eval_imagenet(FLAGS.ckpt_dir, FLAGS.imagenet_eval_glob, + FLAGS.imagenet_eval_label, FLAGS.num_images, + FLAGS.enable_ema, FLAGS.export_ckpt) + else: + print('must specify runmode: examples or imagenet') + + +if __name__ == '__main__': + app.run(main) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/export_model.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/export_model.py new file mode 100644 index 000000000..26c42d07f --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/export_model.py @@ -0,0 +1,181 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Export model (float or quantized tflite, and saved model) from a trained checkpoint.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from absl import app +from absl import flags +import tensorflow.compat.v1 as tf + +import imagenet_input +import model_builder_factory + +flags.DEFINE_string("model_name", None, "Model name to eval.") +flags.DEFINE_string("ckpt_dir", None, "Path to the training checkpoint") +flags.DEFINE_boolean("enable_ema", True, "Enable exponential moving average.") +flags.DEFINE_string("data_dir", None, + "Image dataset directory for post training quantization.") +flags.DEFINE_string("output_tflite", None, "Path to output tflite file.") +flags.DEFINE_bool("quantize", True, + "Quantize model to uint8 before exporting tflite model.") +flags.DEFINE_integer( + "num_steps", 2000, + "Number of post-training quantization calibration steps to run.") +flags.DEFINE_integer("image_size", 224, "Size of the input image.") +flags.DEFINE_integer("batch_size", 1, "Batch size of input tensor.") +flags.DEFINE_string("endpoint_name", None, "Endpoint name") +flags.DEFINE_string("output_saved_model_dir", None, + "Directory in which to save the saved_model.") +FLAGS = flags.FLAGS + + +def restore_model(sess, ckpt_dir, enable_ema=True): + """Restore variables from checkpoint dir.""" + sess.run(tf.global_variables_initializer()) + checkpoint = tf.train.latest_checkpoint(ckpt_dir) + if enable_ema: + ema = tf.train.ExponentialMovingAverage(decay=0.0) + ema_vars = tf.trainable_variables() + tf.get_collection("moving_vars") + for v in tf.global_variables(): + if "moving_mean" in v.name or "moving_variance" in v.name: + ema_vars.append(v) + ema_vars = list(set(ema_vars)) + var_dict = ema.variables_to_restore(ema_vars) + else: + var_dict = None + + sess.run(tf.global_variables_initializer()) + saver = tf.train.Saver(var_dict, max_to_keep=1) + saver.restore(sess, checkpoint) + + +def representative_dataset_gen(): + """Gets a python generator of image numpy arrays for ImageNet.""" + params = dict(batch_size=FLAGS.batch_size) + imagenet_eval = imagenet_input.ImageNetInput( + is_training=False, + data_dir=FLAGS.data_dir, + transpose_input=False, + cache=False, + image_size=FLAGS.image_size, + num_parallel_calls=1, + use_bfloat16=False, + include_background_label=True, + ) + + data = imagenet_eval.input_fn(params) + + def preprocess_map_fn(images, labels): + """The function of preprocess the map.""" + del labels + model_builder = model_builder_factory.get_model_builder( + FLAGS.model_name) + images -= tf.constant( + model_builder.MEAN_RGB, shape=[1, 1, 3], dtype=images.dtype) + images /= tf.constant( + model_builder.STDDEV_RGB, shape=[1, 1, 3], dtype=images.dtype) + return images + + data = data.map(preprocess_map_fn) + iterator = data.make_one_shot_iterator() + for _ in range(FLAGS.num_steps): + # In eager context, we can get a python generator from a dataset iterator. + images = iterator.get_next() + yield [images] + + +def main(_): + """Enables eager context for TF 1.x. TF 2.x will use eager by default. + This is used to conveniently get a representative dataset generator using + TensorFlow training input helper. + """ + tf.enable_eager_execution() + + model_builder = model_builder_factory.get_model_builder(FLAGS.model_name) + + with tf.Graph().as_default(), tf.Session() as sess: + images = tf.placeholder( + tf.float32, + shape=(1, FLAGS.image_size, FLAGS.image_size, 3), + name="images") + + logits, endpoints = model_builder.build_model(images, FLAGS.model_name, + False) + if FLAGS.endpoint_name: + output_tensor = endpoints[FLAGS.endpoint_name] + else: + output_tensor = tf.nn.softmax(logits) + + restore_model(sess, FLAGS.ckpt_dir, FLAGS.enable_ema) + + if FLAGS.output_saved_model_dir: + signature_def_map = { + "serving_default": + tf.compat.v1.saved_model.signature_def_utils + .predict_signature_def({"input": images}, + {"output": output_tensor}) + } + + builder = tf.compat.v1.saved_model.Builder( + FLAGS.output_saved_model_dir) + builder.add_meta_graph_and_variables( + sess, ["serve"], signature_def_map=signature_def_map) + builder.save() + print("Saved model written to %s" % FLAGS.output_saved_model_dir) + + converter = tf.lite.TFLiteConverter.from_session(sess, [images], + [output_tensor]) + if FLAGS.quantize: + if not FLAGS.data_dir: + raise ValueError( + "Post training quantization requires data_dir flag to point to the " + "calibration dataset. To export a float model, set " + "--quantize=False.") + + converter.representative_dataset = tf.lite.RepresentativeDataset( + representative_dataset_gen) + converter.optimizations = [tf.lite.Optimize.DEFAULT] + converter.inference_input_type = tf.lite.constants.QUANTIZED_UINT8 + converter.inference_output_type = tf.lite.constants.QUANTIZED_UINT8 + converter.target_spec.supported_ops = [ + tf.lite.OpsSet.TFLITE_BUILTINS_INT8 + ] + + tflite_buffer = converter.convert() + tf.gfile.GFile(FLAGS.output_tflite, "wb").write(tflite_buffer) + print("tflite model written to %s" % FLAGS.output_tflite) + + +if __name__ == "__main__": + flags.mark_flag_as_required("model_name") + flags.mark_flag_as_required("ckpt_dir") + flags.mark_flag_as_required("output_tflite") + app.run(main) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/help_modelarts.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/help_modelarts.py new file mode 100644 index 000000000..2d15a0774 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/help_modelarts.py @@ -0,0 +1,89 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import datetime +import moxing as mox + + +def obs_data2modelarts(config): + """ + Copy train data from obs to modelarts by using moxing api. + """ + start = datetime.datetime.now() + print("===>>>Copy files from obs:{} to modelarts dir:{}".format( + config.data_url, config.modelarts_data_dir)) + mox.file.copy_parallel(src_url=config.data_url, + dst_url=config.modelarts_data_dir) + end = datetime.datetime.now() + print("===>>>Copy from obs to modelarts, time use:{}(s)".format( + (end - start).seconds)) + files = os.listdir(config.modelarts_data_dir) + print("===>>>Files:", files) + print("===>>>File_nums:", len(files)) + + +def modelarts_result2obs(FLAGS): + """ + Copy debug data from modelarts to obs. + According to the swich flags, the debug data may contains auto tune repository, + dump data for precision comparision, even the computation graph and profiling data. + """ + work_dir = os.getcwd() + + # copy result from modelarts to obs + obs_result_dir = os.path.join(FLAGS.obs_dir, 'result') + if not mox.file.exists(obs_result_dir): + mox.file.make_dirs(obs_result_dir) + mox.file.copy_parallel(src_url=FLAGS.model_dir, dst_url=obs_result_dir) + print("===>>>Copy Event or Checkpoint from modelarts dir:{} to obs:{}".format( + FLAGS.model_dir, obs_result_dir)) + + # Copy dump data. Comment this snippets if npu_dump_data is off. + if FLAGS.npu_dump_data: + obs_dump_data_dir = os.path.join(FLAGS.obs_dir, 'npu_dump_data') + if not mox.file.exists(obs_dump_data_dir): + mox.file.make_dirs(obs_dump_data_dir) + mox.file.copy_parallel(FLAGS.dump_dir, obs_dump_data_dir) + print("===>>>Dumped graph:{} on OBS dir:{}".format( + mox.file.list_directory(obs_dump_data_dir), obs_dump_data_dir)) + + if FLAGS.npu_profiling: + obs_profiling_dir = os.path.join(FLAGS.obs_dir, 'npu_profiling') + if not mox.file.exists(obs_profiling_dir): + mox.file.make_dirs(obs_profiling_dir) + mox.file.copy_parallel(FLAGS.profiling_dir, obs_profiling_dir) + print("===>>>Profiling data:{} on OBS dir:{}".format( + mox.file.list_directory(obs_profiling_dir), obs_profiling_dir)) + + # Copy compute graph. Comment this snippets if npu_dump_graph is off. + if FLAGS.npu_dump_graph: + modelarts_dump_graph_dir = os.path.join(work_dir, "npu_dump_graph") + obs_dump_graph_dir = os.path.join(FLAGS.obs_dir, 'npu_dump_graph') + if not mox.file.exists(obs_dump_graph_dir): + mox.file.make_dirs(obs_dump_graph_dir) + mox.file.copy_parallel(modelarts_dump_graph_dir, obs_dump_graph_dir) + print("===>>>Dumped data:{} on OBS dir:{}".format( + mox.file.list_directory(obs_dump_graph_dir), obs_dump_graph_dir)) + + # Copy profiling data. Comment this snippets if npu_profiling is off. + + # Copy auto tune repository. Comment this snippets if npu_auto_tune is off. + if FLAGS.npu_auto_tune: + modelarts_auto_tune_dir = os.path.join(work_dir, "npu_auto_tune") + obs_auto_tune_dir = os.path.join(FLAGS.obs_dir, 'npu_auto_tune') + if not mox.file.exists(obs_auto_tune_dir): + mox.file.make_dirs(obs_auto_tune_dir) + mox.file.copy_parallel(modelarts_auto_tune_dir, obs_auto_tune_dir) + print("===>>>Auto tune:{} on OBS dir:{}".format( + mox.file.list_directory(obs_auto_tune_dir), obs_auto_tune_dir)) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/imagenet_input.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/imagenet_input.py new file mode 100644 index 000000000..86e8a1c9f --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/imagenet_input.py @@ -0,0 +1,528 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Efficient ImageNet input pipeline using tf.data.Dataset.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import abc +import collections +import functools +import os + +from absl import logging +import six +import tensorflow.compat.v1 as tf + +import preprocessing + + +def build_image_serving_input_fn(image_size, + batch_size=None, + resize_method=None): + """Builds a serving input fn for raw images.""" + + def _image_serving_input_fn(): + """Serving input fn for raw images.""" + + def _preprocess_image(image_bytes): + """Preprocess a single raw image.""" + image = preprocessing.preprocess_image( + image_bytes=image_bytes, + is_training=False, + image_size=image_size, + resize_method=resize_method) + return image + + image_bytes_list = tf.placeholder( + shape=[batch_size], + dtype=tf.string, + ) + images = tf.map_fn( + _preprocess_image, image_bytes_list, back_prop=False, dtype=tf.float32) + return tf.estimator.export.ServingInputReceiver( + images, {'image_bytes': image_bytes_list}) + return _image_serving_input_fn + + +class ImageNetTFExampleInput(six.with_metaclass(abc.ABCMeta, object)): + """Base class for ImageNet input_fn generator.""" + + def __init__(self, + is_training, + use_bfloat16, + num_cores=8, + image_size=224, + transpose_input=False, + num_label_classes=1000, + include_background_label=False, + augment_name=None, + mixup_alpha=0.0, + randaug_num_layers=None, + randaug_magnitude=None, + resize_method=None): + """Constructor. + + Args: + is_training: `bool` for whether the input is for training + use_bfloat16: If True, use bfloat16 precision; else use float32. + num_cores: `int` for the number of TPU cores + image_size: `int` for image size (both width and height). + transpose_input: 'bool' for whether to use the double transpose trick + num_label_classes: number of label classes. Default to 1000 for ImageNet. + include_background_label: If true, label #0 is reserved for background. + augment_name: `string` that is the name of the augmentation method to + apply to the image. `autoaugment` if AutoAugment is to be used or + `randaugment` if RandAugment is to be used. If the value is `None` no no + augmentation method will be applied applied. See autoaugment.py for more + details. + mixup_alpha: float to control the strength of Mixup regularization, set to + 0.0 to disable. + randaug_num_layers: 'int', if RandAug is used, what should the number of + layers be. See autoaugment.py for detailed description. + randaug_magnitude: 'int', if RandAug is used, what should the magnitude + be. See autoaugment.py for detailed description. + resize_method: If None, use bicubic in default. + """ + self.image_preprocessing_fn = preprocessing.preprocess_image + self.is_training = is_training + self.use_bfloat16 = use_bfloat16 + self.num_cores = num_cores + self.transpose_input = transpose_input + self.image_size = image_size + self.include_background_label = include_background_label + self.num_label_classes = num_label_classes + if include_background_label: + self.num_label_classes += 1 + self.augment_name = augment_name + self.mixup_alpha = mixup_alpha + self.randaug_num_layers = randaug_num_layers + self.randaug_magnitude = randaug_magnitude + self.resize_method = resize_method + + def set_shapes(self, batch_size, images, labels): + """Statically set the batch_size dimension.""" + if self.transpose_input: + images.set_shape(images.get_shape().merge_with( + tf.TensorShape([None, None, None, batch_size]))) + labels.set_shape(labels.get_shape().merge_with( + tf.TensorShape([batch_size, None]))) + # Convert to R1 tensors for fast transfer to device. + images = tf.reshape(images, [-1]) + else: + images.set_shape(images.get_shape().merge_with( + tf.TensorShape([batch_size, None, None, None]))) + labels.set_shape(labels.get_shape().merge_with( + tf.TensorShape([batch_size, None]))) + + return images, labels + + def mixup(self, batch_size, alpha, images, labels): + """Applies Mixup regularization to a batch of images and labels. + + [1] Hongyi Zhang, Moustapha Cisse, Yann N. Dauphin, David Lopez-Paz + Mixup: Beyond Empirical Risk Minimization. + ICLR'18, https://arxiv.org/abs/1710.09412 + + Arguments: + batch_size: The input batch size for images and labels. + alpha: Float that controls the strength of Mixup regularization. + images: A batch of images of shape [batch_size, ...] + labels: A batch of labels of shape [batch_size, num_classes] + + Returns: + A tuple of (images, labels) with the same dimensions as the input with + Mixup regularization applied. + """ + mix_weight = tf.distributions.Beta( + alpha, alpha).sample([batch_size, 1]) + mix_weight = tf.maximum(mix_weight, 1. - mix_weight) + images_mix_weight = tf.cast( + tf.reshape(mix_weight, [batch_size, 1, 1, 1]), images.dtype) + # Mixup on a single batch is implemented by taking a weighted sum with the + # same batch in reverse. + images_mix = ( + images * images_mix_weight + images[::-1] * (1. - images_mix_weight)) + labels_mix = labels * mix_weight + labels[::-1] * (1. - mix_weight) + return images_mix, labels_mix + + def dataset_parser(self, value): + """Parses an image and its label from a serialized ResNet-50 TFExample. + + Args: + value: serialized string containing an ImageNet TFExample. + + Returns: + Returns a tuple of (image, label) from the TFExample. + """ + keys_to_features = { + 'image/encoded': tf.FixedLenFeature((), tf.string, ''), + 'image/class/label': tf.FixedLenFeature([], tf.int64, -1), + } + + parsed = tf.parse_single_example(value, keys_to_features) + image_bytes = tf.reshape(parsed['image/encoded'], shape=[]) + + image = self.image_preprocessing_fn( + image_bytes=image_bytes, + is_training=self.is_training, + image_size=self.image_size, + use_bfloat16=self.use_bfloat16, + augment_name=self.augment_name, + randaug_num_layers=self.randaug_num_layers, + randaug_magnitude=self.randaug_magnitude, + resize_method=self.resize_method) + + # The labels will be in range [1,1000], 0 is reserved for background + label = tf.cast( + tf.reshape(parsed['image/class/label'], shape=[]), dtype=tf.int32) + + if not self.include_background_label: + # Subtract 1 if the background label is discarded. + label -= 1 + + onehot_label = tf.one_hot(label, self.num_label_classes) + + return image, onehot_label + + @abc.abstractmethod + def make_source_dataset(self, index, num_hosts): + """Makes dataset of serialized TFExamples. + + The returned dataset will contain `tf.string` tensors, but these strings are + serialized `TFExample` records that will be parsed by `dataset_parser`. + + If self.is_training, the dataset should be infinite. + + Args: + index: current host index. + num_hosts: total number of hosts. + + Returns: + A `tf.data.Dataset` object. + """ + return + + def input_fn(self, params): + """Input function which provides a single batch for train or eval. + + Args: + params: `dict` of parameters passed from the `TPUEstimator`. + `params['batch_size']` is always provided and should be used as the + effective batch size. + + Returns: + A `tf.data.Dataset` object. + """ + # Retrieves the batch size for the current shard. The # of shards is + # computed according to the input pipeline deployment. See + # tf.estimator.tpu.RunConfig for details. + batch_size = params['batch_size'] + + if 'context' in params: + current_host = params['context'].current_input_fn_deployment()[1] + num_hosts = params['context'].num_hosts + else: + current_host = 0 + num_hosts = 1 + + dataset = self.make_source_dataset(current_host, num_hosts) + + # Use the fused map-and-batch operation. + # + # For XLA, we must used fixed shapes. Because we repeat the source training + # dataset indefinitely, we can use `drop_remainder=True` to get fixed-size + # batches without dropping any training examples. + # + # When evaluating, `drop_remainder=True` prevents accidentally evaluating + # the same image twice by dropping the final batch if it is less than a full + # batch size. As long as this validation is done with consistent batch size, + # exactly the same images will be used. + dataset = dataset.map(self.dataset_parser, 64).batch(batch_size, True) + + # Apply Mixup + if self.is_training and self.mixup_alpha > 0.0: + dataset = dataset.map( + functools.partial(self.mixup, batch_size, self.mixup_alpha), + num_parallel_calls=64) + + # Transpose for performance on TPU + if self.transpose_input: + dataset = dataset.map( + lambda images, labels: (tf.transpose( + images, [1, 2, 3, 0]), labels), + num_parallel_calls=64) + + # Assign static batch size dimension + dataset = dataset.map(functools.partial( + self.set_shapes, batch_size), 64) + + # Prefetch overlaps in-feed with training + dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE) + options = tf.data.Options() + options.experimental_deterministic = False + options.experimental_threading.max_intra_op_parallelism = 1 + options.experimental_threading.private_threadpool_size = 48 + dataset = dataset.with_options(options) + + return dataset + + +class ImageNetInput(ImageNetTFExampleInput): + """Generates ImageNet input_fn from a series of TFRecord files. + + The training data is assumed to be in TFRecord format with keys as specified + in the dataset_parser below, sharded across 1024 files, named sequentially: + + train-00000-of-01024 + train-00001-of-01024 + ... + train-01023-of-01024 + + The validation data is in the same format but sharded in 128 files. + + The format of the data required is created by the script at: + https://github.com/tensorflow/tpu/blob/master/tools/datasets/imagenet_to_gcs.py + """ + + def __init__(self, + is_training, + use_bfloat16, + transpose_input, + data_dir, + image_size=224, + num_parallel_calls=64, + cache=False, + num_label_classes=1000, + include_background_label=False, + augment_name=None, + mixup_alpha=0.0, + randaug_num_layers=None, + randaug_magnitude=None, + resize_method=None, + holdout_shards=None): + """Create an input from TFRecord files. + + Args: + is_training: `bool` for whether the input is for training + use_bfloat16: If True, use bfloat16 precision; else use float32. + transpose_input: 'bool' for whether to use the double transpose trick + data_dir: `str` for the directory of the training and validation data; + if 'null' (the literal string 'null') or implicitly False + then construct a null pipeline, consisting of empty images + and blank labels. + image_size: `int` for image size (both width and height). + num_parallel_calls: concurrency level to use when reading data from disk. + cache: if true, fill the dataset by repeating from its cache. + num_label_classes: number of label classes. Default to 1000 for ImageNet. + include_background_label: if true, label #0 is reserved for background. + augment_name: `string` that is the name of the augmentation method + to apply to the image. `autoaugment` if AutoAugment is to be used or + `randaugment` if RandAugment is to be used. If the value is `None` no + no augmentation method will be applied applied. See autoaugment.py + for more details. + mixup_alpha: float to control the strength of Mixup regularization, set + to 0.0 to disable. + randaug_num_layers: 'int', if RandAug is used, what should the number of + layers be. See autoaugment.py for detailed description. + randaug_magnitude: 'int', if RandAug is used, what should the magnitude + be. See autoaugment.py for detailed description. + resize_method: If None, use bicubic in default. + holdout_shards: number of holdout training shards for validation. + """ + super(ImageNetInput, self).__init__( + is_training=is_training, + image_size=image_size, + use_bfloat16=use_bfloat16, + transpose_input=transpose_input, + num_label_classes=num_label_classes, + include_background_label=include_background_label, + augment_name=augment_name, + mixup_alpha=mixup_alpha, + randaug_num_layers=randaug_num_layers, + randaug_magnitude=randaug_magnitude) + self.data_dir = data_dir + if self.data_dir == 'null' or not self.data_dir: + self.data_dir = None + self.num_parallel_calls = num_parallel_calls + self.cache = cache + self.holdout_shards = holdout_shards + + def _get_null_input(self, data): + """Returns a null image (all black pixels). + + Args: + data: element of a dataset, ignored in this method, since it produces + the same null image regardless of the element. + + Returns: + a tensor representing a null image. + """ + del data # Unused since output is constant regardless of input + return tf.zeros([self.image_size, self.image_size, 3], tf.bfloat16 + if self.use_bfloat16 else tf.float32) + + def dataset_parser(self, value): + """See base class.""" + if not self.data_dir: + return value, tf.constant(0., tf.float32, (1000,)) + return super(ImageNetInput, self).dataset_parser(value) + + def make_source_dataset(self, index, num_hosts): + """See base class.""" + if not self.data_dir: + logging.info('Undefined data_dir implies null input') + return tf.data.Dataset.range(1).repeat().map(self._get_null_input) + + if self.holdout_shards: + if self.is_training: + filenames = [ + os.path.join(self.data_dir, 'train-%05d-of-01024' % i) + for i in range(self.holdout_shards, 1024) + ] + else: + filenames = [ + os.path.join(self.data_dir, 'train-%05d-of-01024' % i) + for i in range(0, self.holdout_shards) + ] + for f in filenames[:10]: + logging.info('datafiles: %s', f) + dataset = tf.data.Dataset.from_tensor_slices(filenames) + else: + file_pattern = os.path.join( + self.data_dir, 'train-*' if self.is_training else 'validation-*') + logging.info('datafiles: %s', file_pattern) + dataset = tf.data.Dataset.list_files(file_pattern, shuffle=False) + + # For multi-host training, we want each hosts to always process the same + # subset of files. Each host only sees a subset of the entire dataset, + # allowing us to cache larger datasets in memory. + dataset = dataset.shard(num_hosts, index) + + if self.is_training and not self.cache: + dataset = dataset.repeat() + + def fetch_dataset(filename): + buffer_size = 8 * 1024 * 1024 # 8 MiB per file + dataset = tf.data.TFRecordDataset( + filename, buffer_size=buffer_size) + return dataset + + # Read the data from disk in parallel + dataset = dataset.interleave( + fetch_dataset, cycle_length=self.num_parallel_calls, + num_parallel_calls=self.num_parallel_calls) + + if self.cache: + dataset = dataset.cache().shuffle(1024 * 16).repeat() + else: + dataset = dataset.shuffle(1024) + + return dataset + + +# Defines a selection of data from a Cloud Bigtable. +BigtableSelection = collections.namedtuple('BigtableSelection', [ + 'project', 'instance', 'table', 'prefix', 'column_family', + 'column_qualifier' +]) + + +class ImageNetBigtableInput(ImageNetTFExampleInput): + """Generates ImageNet input_fn from a Bigtable for training or evaluation. + """ + + def __init__(self, + is_training, + use_bfloat16, + transpose_input, + selection, + augment_name=None, + num_label_classes=1000, + include_background_label=False, + mixup_alpha=0.0, + randaug_num_layers=None, + randaug_magnitude=None, + resize_method=None): + """Constructs an ImageNet input from a BigtableSelection. + + Args: + is_training: `bool` for whether the input is for training + use_bfloat16: If True, use bfloat16 precision; else use float32. + transpose_input: 'bool' for whether to use the double transpose trick + selection: a BigtableSelection specifying a part of a Bigtable. + augment_name: `string` that is the name of the augmentation method + to apply to the image. `autoaugment` if AutoAugment is to be used or + `randaugment` if RandAugment is to be used. If the value is `None` no + no augmentation method will be applied applied. See autoaugment.py + for more details. + num_label_classes: number of label classes. Default to 1000 for ImageNet. + include_background_label: if true, label #0 is reserved for background. + mixup_alpha: float to control the strength of Mixup regularization, set + to 0.0 to disable. + randaug_num_layers: 'int', if RandAug is used, what should the number of + layers be. See autoaugment.py for detailed description. + randaug_magnitude: 'int', if RandAug is used, what should the magnitude + be. See autoaugment.py for detailed description.s + resize_method: if None, use bicubic. + """ + super(ImageNetBigtableInput, self).__init__( + is_training=is_training, + use_bfloat16=use_bfloat16, + transpose_input=transpose_input, + num_label_classes=num_label_classes, + include_background_label=include_background_label, + augment_name=augment_name, + mixup_alpha=mixup_alpha, + randaug_num_layers=randaug_num_layers, + randaug_magnitude=randaug_magnitude, + resize_method=resize_method) + self.selection = selection + + def make_source_dataset(self, index, num_hosts): + """See base class.""" + try: + from tensorflow.contrib.cloud import BigtableClient # pylint: disable=g-import-not-at-top + except ImportError as e: + logging.exception('Bigtable is not supported in TensorFlow 2.x.') + raise e + + data = self.selection + client = BigtableClient(data.project, data.instance) + table = client.table(data.table) + ds = table.parallel_scan_prefix(data.prefix, + columns=[(data.column_family, + data.column_qualifier)]) + # The Bigtable datasets will have the shape (row_key, data) + ds_data = ds.map(lambda index, data: data) + + if self.is_training: + ds_data = ds_data.repeat() + + return ds_data diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/inspect_model_architecture.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/inspect_model_architecture.py new file mode 100644 index 000000000..2de42f13e --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/inspect_model_architecture.py @@ -0,0 +1,90 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Export a dummy-quantized tflite model corresponding to the given model.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from absl import app +from absl import flags +import tensorflow as tf + +import efficientnet_builder +from edgetpu import efficientnet_edgetpu_builder + +flags.DEFINE_string('model_name', 'efficientnet-b0', 'Model name to inspect.') +flags.DEFINE_integer('image_res', 224, 'The size of the input image') +flags.DEFINE_string('output_tflite', '/tmp/model.tflite', + 'Location of the generated tflite model') + +# FLAGS should not be used before main. +FLAGS = flags.FLAGS + + +def main(unused_argv): + tf.logging.set_verbosity(tf.logging.ERROR) + image_res = FLAGS.image_res + model_name = FLAGS.model_name + model_builder_fn = None + if model_name.startswith('efficientnet-edgetpu'): + model_builder_fn = efficientnet_edgetpu_builder + elif model_name.startswith('efficientnet'): + model_builder_fn = efficientnet_builder + + else: + raise ValueError( + 'Model must be either efficientnet-b* or efficientnet-edgetpu*') + + with tf.Graph().as_default(), tf.Session() as sess: + images = tf.placeholder( + tf.float32, shape=(1, image_res, image_res, 3), name='input') + output, _ = model_builder_fn.build_model( + images, FLAGS.model_name, training=False) + + tf.global_variables_initializer().run() + updates = [] + for var in tf.trainable_variables(): + noise = tf.random.normal(shape=var.shape, stddev=0.001) + updates.append(var.assign_add(noise)) + sess.run(updates) + converter = tf.lite.TFLiteConverter.from_session( + sess, [images], [output]) # pytype: disable=attribute-error + converter.inference_type = tf.lite.constants.QUANTIZED_UINT8 + converter.quantized_input_stats = {'input': (0, 1.)} + converter.default_ranges_stats = (-10, 10) + + tflite_model = converter.convert() + tf.gfile.Open(FLAGS.output_tflite, 'wb').write(tflite_model) + + print('Model %s, image size %d' % (model_name, image_res)) + print('TfLite model stored at %s' % FLAGS.output_tflite) + + +if __name__ == '__main__': + app.run(main) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lars_optimizer.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lars_optimizer.py new file mode 100644 index 000000000..4db7b4ac1 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lars_optimizer.py @@ -0,0 +1,188 @@ +# Copyright 2018 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Layer-wise Adaptive Rate Scaling optimizer for large-batch training.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import tensorflow.compat.v1 as tf + + +class LARSOptimizer(tf.train.Optimizer): + """Layer-wise Adaptive Rate Scaling for large batch training. + + Introduced by "Large Batch Training of Convolutional Networks" by Y. You, + I. Gitman, and B. Ginsburg. (https://arxiv.org/abs/1708.03888) + + Implements the LARS learning rate scheme presented in the paper above. This + optimizer is useful when scaling the batch size to up to 32K without + significant performance degradation. It is recommended to use the optimizer + in conjunction with: + - Gradual learning rate warm-up + - Linear learning rate scaling + - Poly rule learning rate decay + + Note, LARS scaling is currently only enabled for dense tensors. Sparse tensors + use the default momentum optimizer. + """ + + def __init__( + self, + learning_rate, + momentum=0.9, + weight_decay=0.0001, + # The LARS coefficient is a hyperparameter + eeta=0.001, + epsilon=0.0, + name="LARSOptimizer", + # Enable skipping variables from LARS scaling. + # TODO(sameerkm): Enable a direct mechanism to pass a + # subset of variables to the optimizer. + skip_list=None, + use_nesterov=False): + """Construct a new LARS Optimizer. + + Args: + learning_rate: A `Tensor` or floating point value. The base learning rate. + momentum: A floating point value. Momentum hyperparameter. + weight_decay: A floating point value. Weight decay hyperparameter. + eeta: LARS coefficient as used in the paper. Dfault set to LARS + coefficient from the paper. (eeta / weight_decay) determines the highest + scaling factor in LARS. + epsilon: Optional epsilon parameter to be set in models that have very + small gradients. Default set to 0.0. + name: Optional name prefix for variables and ops created by LARSOptimizer. + skip_list: List of strings to enable skipping variables from LARS scaling. + If any of the strings in skip_list is a subset of var.name, variable + 'var' is skipped from LARS scaling. For a typical classification model + with batch normalization, the skip_list is ['batch_normalization', + 'bias'] + use_nesterov: when set to True, nesterov momentum will be enabled + + Raises: + ValueError: If a hyperparameter is set to a non-sensical value. + """ + if momentum < 0.0: + raise ValueError("momentum should be positive: %s" % momentum) + if weight_decay < 0.0: + raise ValueError( + "weight_decay should be positive: %s" % weight_decay) + super(LARSOptimizer, self).__init__(use_locking=False, name=name) + + self._learning_rate = learning_rate + self._momentum = momentum + self._weight_decay = weight_decay + self._eeta = eeta + self._epsilon = epsilon + self._name = name + self._skip_list = skip_list + self._use_nesterov = use_nesterov + + def _create_slots(self, var_list): + for v in var_list: + self._zeros_slot(v, "momentum", self._name) + + def compute_lr(self, grad, var): + """Compute the learning rate according to the grad and var.""" + scaled_lr = self._learning_rate + if self._skip_list is None or not any(v in var.name + for v in self._skip_list): + w_norm = tf.norm(var, ord=2) + g_norm = tf.norm(grad, ord=2) + trust_ratio = tf.where( + tf.math.greater(w_norm, 0), + tf.where( + tf.math.greater(g_norm, 0), + (self._eeta * w_norm / + (g_norm + self._weight_decay * w_norm + self._epsilon)), 1.0), + 1.0) + scaled_lr = self._learning_rate * trust_ratio + # Add the weight regularization gradient + grad = grad + self._weight_decay * var + return scaled_lr, grad + + def _apply_dense(self, grad, var): + scaled_lr, grad = self.compute_lr(grad, var) + mom = self.get_slot(var, "momentum") + return tf.raw_ops.ApplyMomentum( + var, + mom, + tf.cast(1.0, var.dtype.base_dtype), + grad * scaled_lr, + self._momentum, + use_locking=False, + use_nesterov=self._use_nesterov) + + def _resource_apply_dense(self, grad, var): + scaled_lr, grad = self.compute_lr(grad, var) + mom = self.get_slot(var, "momentum") + return tf.raw_ops.ResourceApplyMomentum( + var=var.handle, + accum=mom.handle, + lr=tf.cast(1.0, var.dtype.base_dtype), + grad=grad * scaled_lr, + momentum=self._momentum, + use_locking=False, + use_nesterov=self._use_nesterov) + + # Fallback to momentum optimizer for sparse tensors + def _apply_sparse(self, grad, var): + mom = self.get_slot(var, "momentum") + return tf.raw_ops.SparseApplyMomentum( + var, + mom, + tf.cast(self._learning_rate_tensor, var.dtype.base_dtype), + grad.values, + grad.indices, + tf.cast(self._momentum_tensor, var.dtype.base_dtype), + use_locking=self._use_locking, + use_nesterov=self._use_nesterov).op + + def _resource_apply_sparse(self, grad, var, indices): + mom = self.get_slot(var, "momentum") + return tf.raw_ops.ResourceSparseApplyMomentum( + var.handle, + mom.handle, + tf.cast(self._learning_rate_tensor, grad.dtype), + grad, + indices, + tf.cast(self._momentum_tensor, grad.dtype), + use_locking=self._use_locking, + use_nesterov=self._use_nesterov) + + def _prepare(self): + learning_rate = self._learning_rate + if callable(learning_rate): + learning_rate = learning_rate() + self._learning_rate_tensor = tf.convert_to_tensor( + learning_rate, name="learning_rate") + momentum = self._momentum + if callable(momentum): + momentum = momentum() + self._momentum_tensor = tf.convert_to_tensor(momentum, name="momentum") diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/main.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/main.py new file mode 100644 index 000000000..ada95db16 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/main.py @@ -0,0 +1,948 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Train a EfficientNets on ImageNet on TPU.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import time +import argparse +from absl import app +from absl import flags +from absl import logging +import numpy as np +import tensorflow.compat.v1 as tf +import tensorflow.compat.v2 as tf2 # used for summaries only. + +import imagenet_input +import model_builder_factory +import utils +# pylint: disable=g-direct-tensorflow-import +from tensorflow.core.protobuf import rewriter_config_pb2 +from tensorflow.python.estimator import estimator +from npu_bridge.npu_init import * +from npu_bridge.estimator.npu.npu_config import NPURunConfig +from npu_bridge.estimator import npu_ops +from npu_bridge.estimator.npu.npu_estimator import NPUEstimator, NPUEstimatorSpec + +# pylint: enable=g-direct-tensorflow-import + + +FLAGS = flags.FLAGS + +# Required parameters +flags.DEFINE_string( + 'data_dir', default=None, + help='The directory where the ImageNet input data is stored.' + 'Please see the README.md for the expected data format.') + +flags.DEFINE_string( + 'model_dir', default=None, + help='The directory where the model and training/evaluation summaries are stored.') + +flags.DEFINE_string( + 'dump_dir', default="/cache/dump_dir", + help='The directory where the dump data are stored.') + +flags.DEFINE_string( + 'profiling_dir', default="/cache/profiling_dir", + help='The directory where the profiling data are stored.' + 'You need create it first and have the permissions of read and write.') + +flags.DEFINE_string("obs_dir", None, "obs dir") + +flags.DEFINE_string( + 'model_name', + default='efficientnet-condconv-b0-8e', + help='The model name among existing configurations.') + +flags.DEFINE_integer( + 'batch_size', default=128, help='Batch size for me.') + + +# The following params only useful on NPU chip mode +flags.DEFINE_boolean("npu_dump_data", False, "dump data for precision or not") +flags.DEFINE_boolean("npu_dump_graph", False, "dump graph or not") +flags.DEFINE_boolean("npu_profiling", False, + "profiling for performance or not") +flags.DEFINE_boolean("npu_auto_tune", False, + "auto tune or not. And you must set tune_bank_path param.") + + +FAKE_DATA_DIR = 'gs://cloud-tpu-test-datasets/fake_imagenet' + +flags.DEFINE_bool( + 'use_tpu', default=False, + help=('Use TPU to execute the model for training and evaluation. If' + ' --use_tpu=false, will use whatever devices are available to' + ' TensorFlow by default (e.g. CPU and GPU)')) + +flags.DEFINE_string('tpu_job_name', None, help=('Name of worker binary.')) + +# Cloud TPU Cluster Resolvers +flags.DEFINE_string( + 'tpu', default=None, + help='The Cloud TPU to use for training. This should be either the name ' + 'used when creating the Cloud TPU, or a grpc://ip.address.of.tpu:8470 url.') + +flags.DEFINE_string( + 'gcp_project', default=None, + help='Project name for the Cloud TPU-enabled project. If not specified, we ' + 'will attempt to automatically detect the GCE project from metadata.') + +flags.DEFINE_string( + 'tpu_zone', default=None, + help='GCE zone where the Cloud TPU is located in. If not specified, we ' + 'will attempt to automatically detect the GCE project from metadata.') + +# Model specific flags + +flags.DEFINE_integer( + 'holdout_shards', + default=None, + help=('Number of holdout shards for validation. Recommended 20.')) + +flags.DEFINE_string('eval_name', default=None, help=('Evaluation name.')) + +flags.DEFINE_bool( + 'archive_ckpt', default=True, help=('If true, archive the best ckpt.')) + +flags.DEFINE_string( + 'mode', default='train_and_eval', + help='One of {"train_and_eval", "train", "eval"}.') + +flags.DEFINE_string( + 'augment_name', default=None, + help='`string` that is the name of the augmentation method' + 'to apply to the image. `autoaugment` if AutoAugment is to be used or' + '`randaugment` if RandAugment is to be used. If the value is `None` no' + 'augmentation method will be applied applied. See autoaugment.py for ' + 'more details.') + + +flags.DEFINE_integer( + 'randaug_num_layers', default=2, + help='If RandAug is used, what should the number of layers be.' + 'See autoaugment.py for detailed description.') + +flags.DEFINE_integer( + 'randaug_magnitude', default=10, + help='If RandAug is used, what should the magnitude be. ' + 'See autoaugment.py for detailed description.') + + +flags.DEFINE_integer( + 'train_steps', default=250000, + help=('The number of steps to use for training. Default is 218949 steps' + ' which is approximately 350 epochs at batch size 96. This flag' + ' should be adjusted according to the --train_batch_size flag.')) + +flags.DEFINE_integer( + 'input_image_size', default=None, + help='Input image size: it depends on specific model name.') + +flags.DEFINE_integer( + 'train_batch_size', default=128, help='Batch size for training.') + +flags.DEFINE_integer( + 'eval_batch_size', default=8, help='Batch size for evaluation.') + +flags.DEFINE_integer( + 'batch_norm_batch_size', + default=8, + help='Per-group batch size for distributed batch normalization.') + +flags.DEFINE_integer( + 'num_train_images', default=1281167, help='Size of training data set.') + +flags.DEFINE_integer( + 'num_eval_images', default=50000, help='Size of evaluation data set.') + +flags.DEFINE_integer( + 'steps_per_eval', default=6255, + help=('Controls how often evaluation is performed. Since evaluation is' + ' fairly expensive, it is advised to evaluate as infrequently as' + ' possible (i.e. up to --train_steps, which evaluates the model only' + ' after finishing the entire training regime).')) + +flags.DEFINE_integer( + 'eval_timeout', + default=None, + help='Maximum seconds between checkpoints before evaluation terminates.') + +flags.DEFINE_bool( + 'skip_host_call', default=False, + help=('Skip the host_call which is executed every training step. This is' + ' generally used for generating training summaries (train loss,' + ' learning rate, etc...). When --skip_host_call=false, there could' + ' be a performance drop if host_call function is slow and cannot' + ' keep up with the TPU-side computation.')) + +flags.DEFINE_integer( + 'iterations_per_loop', default=1251, + help=('Number of steps to run on TPU before outfeeding metrics to the CPU.' + ' If the number of iterations in the loop would exceed the number of' + ' train steps, the loop will exit before reaching' + ' --iterations_per_loop. The larger this value is, the higher the' + ' utilization on the TPU.')) + +flags.DEFINE_integer( + 'num_parallel_calls', default=64, + help=('Number of parallel threads in CPU for the input pipeline')) + +flags.DEFINE_string( + 'bigtable_project', None, + 'The Cloud Bigtable project. If None, --gcp_project will be used.') +flags.DEFINE_string( + 'bigtable_instance', None, + 'The Cloud Bigtable instance to load data from.') +flags.DEFINE_string( + 'bigtable_table', 'imagenet', + 'The Cloud Bigtable table to load data from.') +flags.DEFINE_string( + 'bigtable_train_prefix', 'train_', + 'The prefix identifying training rows.') +flags.DEFINE_string( + 'bigtable_eval_prefix', 'validation_', + 'The prefix identifying evaluation rows.') +flags.DEFINE_string( + 'bigtable_column_family', 'tfexample', + 'The column family storing TFExamples.') +flags.DEFINE_string( + 'bigtable_column_qualifier', 'example', + 'The column name storing TFExamples.') + +flags.DEFINE_string( + 'data_format', default='channels_last', + help=('A flag to override the data format used in the model. The value' + ' is either channels_first or channels_last. To run the network on' + ' CPU or TPU, channels_last should be used. For GPU, channels_first' + ' will improve performance.')) +flags.DEFINE_integer( + 'num_label_classes', default=1000, help='Number of classes, at least 2') + +flags.DEFINE_float( + 'batch_norm_momentum', + default=None, + help=('Batch normalization layer momentum of moving average to override.')) +flags.DEFINE_float( + 'batch_norm_epsilon', + default=None, + help=('Batch normalization layer epsilon to override..')) + +flags.DEFINE_bool( + 'transpose_input', default=True, + help='Use TPU double transpose optimization') + +flags.DEFINE_bool( + 'use_bfloat16', + default=False, + help=('Whether to use bfloat16 as activation for training.')) + +flags.DEFINE_string( + 'export_dir', + default=None, + help=('The directory where the exported SavedModel will be stored.')) +flags.DEFINE_bool( + 'export_to_tpu', default=False, + help=('Whether to export additional metagraph with "serve, tpu" tags' + ' in addition to "serve" only metagraph.')) + +flags.DEFINE_float( + 'base_learning_rate', + default=0.016, + help=('Base learning rate when train batch size is 256.')) + +flags.DEFINE_float('lr_decay_epoch', default=2.4, help='LR decay epoch.') + +flags.DEFINE_float( + 'moving_average_decay', default=0.9999, + help=('Moving average decay rate.')) + +flags.DEFINE_float( + 'weight_decay', default=1e-5, + help=('Weight decay coefficiant for l2 regularization.')) + +flags.DEFINE_float( + 'label_smoothing', default=0.1, + help=('Label smoothing parameter used in the softmax_cross_entropy')) + +flags.DEFINE_float( + 'dropout_rate', default=None, + help=('Dropout rate for the final output layer.')) + +flags.DEFINE_float( + 'survival_prob', default=None, + help=('Drop connect rate for the network.')) + +flags.DEFINE_float( + 'mixup_alpha', + default=0.0, + help=('Alpha parameter for mixup regularization, 0.0 to disable.')) + +flags.DEFINE_integer('log_step_count_steps', 64, 'The number of steps at ' + 'which the global step information is logged.') + +flags.DEFINE_bool( + 'use_cache', default=False, help=('Enable cache for training input.')) + +flags.DEFINE_float( + 'depth_coefficient', default=None, + help=('Depth coefficient for scaling number of layers.')) + +flags.DEFINE_float( + 'width_coefficient', default=None, + help=('Width coefficient for scaling channel size.')) + +flags.DEFINE_bool( + 'use_async_checkpointing', default=True, help=('Enable async checkpoint')) + +flags.DEFINE_string( + 'optimizer', + default='rmsprop', + help='The optimizer to use. Can be either rmsprop, sgd, momentum, or lars.') + +flags.DEFINE_string( + 'lr_schedule', default='exponential', help=('learning rate schedule')) + +flags.DEFINE_float( + 'lr_decay_factor', default=0.97, help=('Learning rate decay factor.')) + +flags.DEFINE_float( + 'lr_warmup_epochs', default=5, help=('warmup epochs for learning rate')) + +flags.DEFINE_float( + 'lars_weight_decay', + default=0.00001, + help=('Weight decay for LARS optimizer.')) + +flags.DEFINE_float( + 'lars_epsilon', default=0.0, help=('Epsilon for LARS optimizer.')) + +flags.DEFINE_integer( + 'num_replicas', default=32, help=('Number of TPU replicas.')) + + +def model_fn(features, labels, mode, params): + """The model_fn to be used with TPUEstimator. + + Args: + features: `Tensor` of batched images. + labels: `Tensor` of one hot labels for the data samples + mode: one of `tf.estimator.ModeKeys.{TRAIN,EVAL,PREDICT}` + params: `dict` of parameters passed to the model from the TPUEstimator, + `params['batch_size']` is always provided and should be used as the + effective batch size. + + Returns: + A `(TPU)EstimatorSpec` for the model + """ + if isinstance(features, dict): + features = features['feature'] + + # In most cases, the default data format NCHW instead of NHWC should be + # used for a significant performance boost on GPU. NHWC should be used + # only if the network needs to be run on CPU since the pooling operations + # are only supported on NHWC. TPU uses XLA compiler to figure out best layout. + if FLAGS.data_format == 'channels_first': + assert not FLAGS.transpose_input # channels_first only for GPU + features = tf.transpose(features, [0, 3, 1, 2]) + stats_shape = [3, 1, 1] + else: + stats_shape = [1, 1, 3] + + input_image_size = FLAGS.input_image_size + if not input_image_size: + input_image_size = model_builder_factory.get_model_input_size( + FLAGS.model_name) + + if FLAGS.transpose_input and mode != tf.estimator.ModeKeys.PREDICT: + features = tf.reshape(features, + [input_image_size, input_image_size, 3, -1]) + features = tf.transpose(features, [3, 0, 1, 2]) # HWCN to NHWC + + is_training = (mode == tf.estimator.ModeKeys.TRAIN) + has_moving_average_decay = (FLAGS.moving_average_decay > 0) + # This is essential, if using a keras-derived model. + tf.keras.backend.set_learning_phase(is_training) + logging.info('Using open-source implementation.') + override_params = {} + if FLAGS.batch_norm_momentum is not None: + override_params['batch_norm_momentum'] = FLAGS.batch_norm_momentum + if FLAGS.batch_norm_epsilon is not None: + override_params['batch_norm_epsilon'] = FLAGS.batch_norm_epsilon + if FLAGS.dropout_rate is not None: + override_params['dropout_rate'] = FLAGS.dropout_rate + if FLAGS.survival_prob is not None: + override_params['survival_prob'] = FLAGS.survival_prob + if FLAGS.data_format: + override_params['data_format'] = FLAGS.data_format + if FLAGS.num_label_classes: + override_params['num_classes'] = FLAGS.num_label_classes + if FLAGS.depth_coefficient: + override_params['depth_coefficient'] = FLAGS.depth_coefficient + if FLAGS.width_coefficient: + override_params['width_coefficient'] = FLAGS.width_coefficient + + def normalize_features(features, mean_rgb, stddev_rgb): + """Normalize the image given the means and stddevs.""" + features -= tf.constant(mean_rgb, shape=stats_shape, + dtype=features.dtype) + features /= tf.constant(stddev_rgb, + shape=stats_shape, dtype=features.dtype) + return features + + def build_model(): + """Build model using the model_name given through the command line.""" + model_builder = model_builder_factory.get_model_builder( + FLAGS.model_name) + normalized_features = normalize_features(features, model_builder.MEAN_RGB, + model_builder.STDDEV_RGB) + logits, _ = model_builder.build_model( + normalized_features, + model_name=FLAGS.model_name, + training=is_training, + override_params=override_params, + model_dir=FLAGS.model_dir) + return logits + + if params['use_bfloat16']: + with tf.tpu.bfloat16_scope(): + logits = tf.cast(build_model(), tf.float32) + else: + logits = build_model() + + if mode == tf.estimator.ModeKeys.PREDICT: + predictions = { + 'classes': tf.argmax(logits, axis=1), + 'probabilities': tf.nn.softmax(logits, name='softmax_tensor') + } + return NPUEstimatorSpec( + mode=mode, + predictions=predictions, + export_outputs={ + 'classify': tf.estimator.export.PredictOutput(predictions) + }) + + # If necessary, in the model_fn, use params['batch_size'] instead the batch + # size flags (--train_batch_size or --eval_batch_size). + batch_size = params['batch_size'] # pylint: disable=unused-variable + + # Calculate loss, which includes softmax cross entropy and L2 regularization. + cross_entropy = tf.losses.softmax_cross_entropy( + logits=logits, + onehot_labels=labels, + label_smoothing=FLAGS.label_smoothing) + + # Add weight decay to the loss for non-batch-normalization variables. + loss = cross_entropy + FLAGS.weight_decay * tf.add_n( + [tf.nn.l2_loss(v) for v in tf.trainable_variables() + if 'batch_normalization' not in v.name]) + + global_step = tf.train.get_global_step() + if has_moving_average_decay: + ema = tf.train.ExponentialMovingAverage( + decay=FLAGS.moving_average_decay, num_updates=global_step) + ema_vars = utils.get_ema_vars() + + host_call = None + restore_vars_dict = None + if is_training: + # Compute the current epoch and associated learning rate from global_step. + current_epoch = ( + tf.cast(global_step, tf.float32) / params['steps_per_epoch']) + + scaled_lr = FLAGS.base_learning_rate * (FLAGS.train_batch_size / 256.0) + logging.info('base_learning_rate = %f', FLAGS.base_learning_rate) + learning_rate = utils.build_learning_rate( + scaled_lr, + global_step, + params['steps_per_epoch'], + decay_epochs=FLAGS.lr_decay_epoch, + warmup_epochs=FLAGS.lr_warmup_epochs, + decay_factor=FLAGS.lr_decay_factor, + lr_decay_type=FLAGS.lr_schedule, + total_steps=FLAGS.train_steps) + optimizer = utils.build_optimizer( + learning_rate, + optimizer_name=FLAGS.optimizer, + lars_weight_decay=FLAGS.lars_weight_decay, + lars_epsilon=FLAGS.lars_epsilon) + if FLAGS.use_tpu: + # When using TPU, wrap the optimizer with CrossShardOptimizer which + # handles synchronization details between different TPU cores. To the + # user, this should look like regular synchronous training. + optimizer = tf.tpu.CrossShardOptimizer(optimizer) + + # Batch normalization requires UPDATE_OPS to be added as a dependency to + # the train operation. + update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS) + with tf.control_dependencies(update_ops): + train_op = optimizer.minimize(loss, global_step) + + if has_moving_average_decay: + with tf.control_dependencies([train_op]): + train_op = ema.apply(ema_vars) + + if not FLAGS.skip_host_call: + def host_call_fn(gs, lr, ce): + """Training host call. Creates scalar summaries for training metrics. + + This function is executed on the CPU and should not directly reference + any Tensors in the rest of the `model_fn`. To pass Tensors from the + model to the `metric_fn`, provide as part of the `host_call`. See + https://www.tensorflow.org/api_docs/python/tf/estimator/tpu/TPUEstimatorSpec + for more information. + + Arguments should match the list of `Tensor` objects passed as the second + element in the tuple passed to `host_call`. + + Args: + gs: `Tensor with shape `[batch]` for the global_step + lr: `Tensor` with shape `[batch]` for the learning_rate. + ce: `Tensor` with shape `[batch]` for the current_epoch. + + Returns: + List of summary ops to run on the CPU host. + """ + gs = gs[0] + # Host call fns are executed FLAGS.iterations_per_loop times after one + # TPU loop is finished, setting max_queue value to the same as number of + # iterations will make the summary writer only flush the data to storage + # once per loop. + with tf2.summary.create_file_writer( + FLAGS.model_dir, max_queue=FLAGS.iterations_per_loop).as_default(): + with tf2.summary.record_if(True): + tf2.summary.scalar('learning_rate', lr[0], step=gs) + tf2.summary.scalar('current_epoch', ce[0], step=gs) + + return tf.summary.all_v2_summary_ops() + + # To log the loss, current learning rate, and epoch for Tensorboard, the + # summary op needs to be run on the host CPU via host_call. host_call + # expects [batch_size, ...] Tensors, thus reshape to introduce a batch + # dimension. These Tensors are implicitly concatenated to + # [params['batch_size']]. + gs_t = tf.reshape(global_step, [1]) + lr_t = tf.reshape(learning_rate, [1]) + ce_t = tf.reshape(current_epoch, [1]) + + host_call = (host_call_fn, [gs_t, lr_t, ce_t]) + + else: + train_op = None + if has_moving_average_decay: + # Load moving average variables for eval. + restore_vars_dict = ema.variables_to_restore(ema_vars) + + eval_metrics = None + if mode == tf.estimator.ModeKeys.EVAL: + def metric_fn(labels, logits): + """Evaluation metric function. Evaluates accuracy. + + This function is executed on the CPU and should not directly reference + any Tensors in the rest of the `model_fn`. To pass Tensors from the model + to the `metric_fn`, provide as part of the `eval_metrics`. See + https://www.tensorflow.org/api_docs/python/tf/estimator/tpu/TPUEstimatorSpec + for more information. + + Arguments should match the list of `Tensor` objects passed as the second + element in the tuple passed to `eval_metrics`. + + Args: + labels: `Tensor` with shape `[batch, num_classes]`. + logits: `Tensor` with shape `[batch, num_classes]`. + + Returns: + A dict of the metrics to return from evaluation. + """ + labels = tf.argmax(labels, axis=1) + predictions = tf.argmax(logits, axis=1) + top_1_accuracy = tf.metrics.accuracy(labels, predictions) + in_top_5 = tf.cast(tf.nn.in_top_k(logits, labels, 5), tf.float32) + top_5_accuracy = tf.metrics.mean(in_top_5) + + return { + 'top_1_accuracy': top_1_accuracy, + 'top_5_accuracy': top_5_accuracy, + } + + #eval_metrics = (metric_fn, [labels, logits]) + eval_metrics = metric_fn(labels, logits) + + num_params = np.sum([np.prod(v.shape) for v in tf.trainable_variables()]) + logging.info('number of trainable parameters: %d', num_params) + + saver = tf.train.Saver(restore_vars_dict) + + return NPUEstimatorSpec( + mode=mode, + loss=loss, + train_op=train_op, + eval_metric_ops=eval_metrics, + scaffold=tf.train.Scaffold(saver=saver)) + + +def _verify_non_empty_string(value, field_name): + """Ensures that a given proposed field value is a non-empty string. + + Args: + value: proposed value for the field. + field_name: string name of the field, e.g. `project`. + + Returns: + The given value, provided that it passed the checks. + + Raises: + ValueError: the value is not a string, or is a blank string. + """ + if not isinstance(value, str): + raise ValueError( + 'Bigtable parameter "%s" must be a string.' % field_name) + if not value: + raise ValueError( + 'Bigtable parameter "%s" must be non-empty.' % field_name) + return value + + +def _select_tables_from_flags(): + """Construct training and evaluation Bigtable selections from flags. + + Returns: + [training_selection, evaluation_selection] + """ + project = _verify_non_empty_string( + FLAGS.bigtable_project or FLAGS.gcp_project, + 'project') + instance = _verify_non_empty_string(FLAGS.bigtable_instance, 'instance') + table = _verify_non_empty_string(FLAGS.bigtable_table, 'table') + train_prefix = _verify_non_empty_string(FLAGS.bigtable_train_prefix, + 'train_prefix') + eval_prefix = _verify_non_empty_string(FLAGS.bigtable_eval_prefix, + 'eval_prefix') + column_family = _verify_non_empty_string(FLAGS.bigtable_column_family, + 'column_family') + column_qualifier = _verify_non_empty_string(FLAGS.bigtable_column_qualifier, + 'column_qualifier') + return [ + imagenet_input.BigtableSelection( # pylint: disable=g-complex-comprehension + project=project, + instance=instance, + table=table, + prefix=p, + column_family=column_family, + column_qualifier=column_qualifier) + for p in (train_prefix, eval_prefix) + ] + + +def export(est, export_dir, input_image_size=None): + """Export graph to SavedModel and TensorFlow Lite. + + Args: + est: estimator instance. + export_dir: string, exporting directory. + input_image_size: int, input image size. + + Raises: + ValueError: the export directory path is not specified. + """ + if not export_dir: + raise ValueError('The export directory path is not specified.') + + if not input_image_size: + input_image_size = FLAGS.input_image_size + is_cond_conv = FLAGS.model_name.startswith('efficientnet-condconv') + # Use fixed batch size for condconv. + batch_size = 1 if is_cond_conv else None + + logging.info('Starting to export model.') + if (FLAGS.model_name.startswith('efficientnet-lite') or + FLAGS.model_name.startswith('efficientnet-edgetpu')): + # lite or edgetpu use binlinear for easier post-quantization. + resize_method = tf.image.ResizeMethod.BILINEAR + else: + resize_method = None + image_serving_input_fn = imagenet_input.build_image_serving_input_fn( + input_image_size, batch_size=batch_size, resize_method=resize_method) + est.export_saved_model( + export_dir_base=export_dir, + serving_input_receiver_fn=image_serving_input_fn) + + +def main(unused_argv): + logging.set_verbosity(logging.INFO) + + print("===>>>dataset:{}".format(FLAGS.data_dir)) + print("===>>>result:{}".format(FLAGS.model_dir)) + print("===>>>train_steps:{}".format(FLAGS.train_steps)) + + input_image_size = FLAGS.input_image_size + if not input_image_size: + input_image_size = model_builder_factory.get_model_input_size( + FLAGS.model_name) + + if FLAGS.holdout_shards: + holdout_images = int(FLAGS.num_train_images * + FLAGS.holdout_shards / 1024.0) + FLAGS.num_train_images -= holdout_images + if FLAGS.eval_name and 'test' in FLAGS.eval_name: + FLAGS.holdout_shards = None # do not use holdout if eval test set. + else: + FLAGS.num_eval_images = holdout_images + + # For imagenet dataset, include background label if number of output classes + # is 1001 + include_background_label = (FLAGS.num_label_classes == 1001) + + if FLAGS.use_async_checkpointing: + save_checkpoints_steps = None + else: + save_checkpoints_steps = max(100, FLAGS.iterations_per_loop) + + from tensorflow.core.protobuf.rewriter_config_pb2 import RewriterConfig + config = tf.ConfigProto() + custom_op = config.graph_options.rewrite_options.custom_optimizers.add() + custom_op.name = "NpuOptimizer" + + # Set the precision_mode + custom_op.parameter_map['precision_mode'].s = tf.compat.as_bytes( + 'allow_mix_precision') + custom_op.parameter_map["use_off_line"].b = True + + # Set the dump path + os.mkdir(FLAGS.dump_dir) + custom_op.parameter_map['dump_path'].s = tf.compat.as_bytes(FLAGS.dump_dir) + # Set dump debug + custom_op.parameter_map['enable_dump_debug'].b = True + custom_op.parameter_map['dump_debug_mode'].s = tf.compat.as_bytes('all') + + """ + # Can not profiling from session.run + os.mkdir("/tmp/profiling") + custom_op.parameter_map["profiling_mode"].b = True + custom_op.parameter_map["profiling_options"].s = tf.compat.as_bytes('{"output":"/tmp/profiling","task_trace":"on"}') + """ + + config.graph_options.rewrite_options.remapping = RewriterConfig.OFF # Must be OFF + config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF # Must be OFF + + os.mkdir(FLAGS.profiling_dir) + profiling_options = '{"output":"%s","task_trace":"on"}' % FLAGS.profiling_dir + profiling_config = ProfilingConfig( + enable_profiling=True, profiling_options=profiling_options) + + runconfig = NPURunConfig( + profiling_config=profiling_config, + model_dir=FLAGS.model_dir, + save_checkpoints_steps=save_checkpoints_steps, + log_step_count_steps=FLAGS.log_step_count_steps, + session_config=config) # pylint: disable=line-too-long + + # Initializes model parameters. + params = dict( + steps_per_epoch=FLAGS.num_train_images / FLAGS.train_batch_size, + use_bfloat16=FLAGS.use_bfloat16, + batch_size=FLAGS.batch_size) + est = NPUEstimator( + model_fn=model_fn, + config=runconfig, + model_dir=FLAGS.model_dir, + params=params) + + if (FLAGS.model_name.startswith('efficientnet-lite') or + FLAGS.model_name.startswith('efficientnet-edgetpu')): + # lite or edgetpu use binlinear for easier post-quantization. + resize_method = tf.image.ResizeMethod.BILINEAR + else: + resize_method = None + # Input pipelines are slightly different (with regards to shuffling and + # preprocessing) between training and evaluation. + + def build_imagenet_input(is_training): + """Generate ImageNetInput for training and eval.""" + if FLAGS.bigtable_instance: + logging.info('Using Bigtable dataset, table %s', + FLAGS.bigtable_table) + select_train, select_eval = _select_tables_from_flags() + return imagenet_input.ImageNetBigtableInput( + is_training=is_training, + use_bfloat16=FLAGS.use_bfloat16, + transpose_input=FLAGS.transpose_input, + selection=select_train if is_training else select_eval, + num_label_classes=FLAGS.num_label_classes, + include_background_label=include_background_label, + augment_name=FLAGS.augment_name, + mixup_alpha=FLAGS.mixup_alpha, + randaug_num_layers=FLAGS.randaug_num_layers, + randaug_magnitude=FLAGS.randaug_magnitude, + resize_method=resize_method) + else: + if FLAGS.data_dir == FAKE_DATA_DIR: + logging.info('Using fake dataset.') + else: + logging.info('Using dataset: %s', FLAGS.data_dir) + + return imagenet_input.ImageNetInput( + is_training=is_training, + data_dir=FLAGS.data_dir, + transpose_input=FLAGS.transpose_input, + cache=FLAGS.use_cache and is_training, + image_size=input_image_size, + num_parallel_calls=FLAGS.num_parallel_calls, + use_bfloat16=FLAGS.use_bfloat16, + num_label_classes=FLAGS.num_label_classes, + include_background_label=include_background_label, + augment_name=FLAGS.augment_name, + mixup_alpha=FLAGS.mixup_alpha, + randaug_num_layers=FLAGS.randaug_num_layers, + randaug_magnitude=FLAGS.randaug_magnitude, + resize_method=resize_method, + holdout_shards=FLAGS.holdout_shards) + + imagenet_train = build_imagenet_input(is_training=True) + imagenet_eval = build_imagenet_input(is_training=False) + + if FLAGS.mode == 'eval': + eval_steps = FLAGS.num_eval_images // FLAGS.eval_batch_size + # Run evaluation when there's a new checkpoint + for ckpt in tf.train.checkpoints_iterator( + FLAGS.model_dir, timeout=FLAGS.eval_timeout): + logging.info('Starting to evaluate.') + try: + start_timestamp = time.time() # This time will include compilation time + eval_results = est.evaluate( + input_fn=imagenet_eval.input_fn, + steps=eval_steps, + checkpoint_path=ckpt, + name=FLAGS.eval_name) + elapsed_time = int(time.time() - start_timestamp) + logging.info('Eval results: %s. Elapsed seconds: %d', + eval_results, elapsed_time) + if FLAGS.archive_ckpt: + utils.archive_ckpt( + eval_results, eval_results['top_1_accuracy'], ckpt) + + # Terminate eval job when final checkpoint is reached + try: + current_step = int(os.path.basename(ckpt).split('-')[1]) + except IndexError: + logging.info('%s has no global step info: stop!', ckpt) + break + + if current_step >= FLAGS.train_steps: + logging.info( + 'Evaluation finished after training step %d', current_step) + break + + except tf.errors.NotFoundError: + # Since the coordinator is on a different job than the TPU worker, + # sometimes the TPU worker does not finish initializing until long after + # the CPU job tells it to start evaluating. In this case, the checkpoint + # file could have been deleted already. + logging.info( + 'Checkpoint %s no longer exists, skipping checkpoint', ckpt) + else: # FLAGS.mode == 'train' or FLAGS.mode == 'train_and_eval' + current_step = estimator._load_global_step_from_checkpoint_dir( + FLAGS.model_dir) # pylint: disable=protected-access,line-too-long + + logging.info( + 'Training for %d steps (%.2f epochs in total). Current' + ' step %d.', FLAGS.train_steps, + FLAGS.train_steps / params['steps_per_epoch'], current_step) + + start_timestamp = time.time() # This time will include compilation time + + if FLAGS.mode == 'train': + hooks = [] + if FLAGS.use_async_checkpointing: + try: + from tensorflow.contrib.tpu.python.tpu import async_checkpoint # pylint: disable=g-import-not-at-top + except ImportError as e: + logging.exception( + 'Async checkpointing is not supported in TensorFlow 2.x') + raise e + + hooks.append( + async_checkpoint.AsyncCheckpointSaverHook( + checkpoint_dir=FLAGS.model_dir, + save_steps=max(100, FLAGS.iterations_per_loop))) + est.train( + input_fn=imagenet_train.input_fn, + max_steps=FLAGS.train_steps, + hooks=hooks) + + else: + assert FLAGS.mode == 'train_and_eval' + while current_step < FLAGS.train_steps: + # Train for up to steps_per_eval number of steps. + # At the end of training, a checkpoint will be written to --model_dir. + next_checkpoint = min(current_step + FLAGS.steps_per_eval, + FLAGS.train_steps) + est.train(input_fn=imagenet_train.input_fn, + max_steps=next_checkpoint) + current_step = next_checkpoint + + logging.info('Finished training up to step %d. Elapsed seconds %d.', + next_checkpoint, int(time.time() - start_timestamp)) + + # Evaluate the model on the most recent model in --model_dir. + # Since evaluation happens in batches of --eval_batch_size, some images + # may be excluded modulo the batch size. As long as the batch size is + # consistent, the evaluated images are also consistent. + logging.info('Starting to evaluate.') + eval_results = est.evaluate( + input_fn=imagenet_eval.input_fn, + steps=FLAGS.num_eval_images // FLAGS.eval_batch_size, + name=FLAGS.eval_name) + logging.info('Eval results at step %d: %s', + next_checkpoint, eval_results) + ckpt = tf.train.latest_checkpoint(FLAGS.model_dir) + if FLAGS.archive_ckpt: + utils.archive_ckpt( + eval_results, eval_results['top_1_accuracy'], ckpt) + + elapsed_time = int(time.time() - start_timestamp) + logging.info('Finished training up to step %d. Elapsed seconds %d.', + FLAGS.train_steps, elapsed_time) + if FLAGS.export_dir: + export(est, FLAGS.export_dir, input_image_size) + + from help_modelarts import modelarts_result2obs + modelarts_result2obs(FLAGS) + + +if __name__ == '__main__': + flags.mark_flag_as_required("data_dir") + flags.mark_flag_as_required("model_dir") + flags.mark_flag_as_required("obs_dir") + flags.mark_flag_as_required("model_name") + + app.run(main) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/model_builder_factory.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/model_builder_factory.py new file mode 100644 index 000000000..77f9756ea --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/model_builder_factory.py @@ -0,0 +1,76 @@ +# Copyright 2020 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Utilities for model builder or input size.""" + +import efficientnet_builder +from condconv import efficientnet_condconv_builder +from edgetpu import efficientnet_edgetpu_builder +from lite import efficientnet_lite_builder +from tpu import efficientnet_x_builder + + +def get_model_builder(model_name): + """Get the model_builder module for a given model name.""" + if model_name.startswith('efficientnet-lite'): + return efficientnet_lite_builder + elif model_name.startswith('efficientnet-edgetpu-'): + return efficientnet_edgetpu_builder + elif model_name.startswith('efficientnet-condconv-'): + return efficientnet_condconv_builder + elif model_name.startswith('efficientnet-x-'): + return efficientnet_x_builder + elif model_name.startswith('efficientnet-'): + return efficientnet_builder + else: + raise ValueError( + 'Model must be either efficientnet-b* or efficientnet-edgetpu* or' + 'efficientnet-condconv*, efficientnet-lite*') + + +def get_model_input_size(model_name): + """Get model input size for a given model name.""" + if model_name.startswith('efficientnet-lite'): + _, _, image_size, _ = ( + efficientnet_lite_builder.efficientnet_lite_params(model_name)) + elif model_name.startswith('efficientnet-edgetpu-'): + _, _, image_size, _ = ( + efficientnet_edgetpu_builder.efficientnet_edgetpu_params(model_name)) + elif model_name.startswith('efficientnet-condconv-'): + _, _, image_size, _, _ = ( + efficientnet_condconv_builder.efficientnet_condconv_params(model_name)) + elif model_name.startswith('efficientnet-x'): + _, _, image_size, _, _ = efficientnet_x_builder.efficientnet_x_params( + model_name) + elif model_name.startswith('efficientnet'): + _, _, image_size, _ = efficientnet_builder.efficientnet_params( + model_name) + else: + raise ValueError( + 'Model must be either efficientnet-b* or efficientnet-x-b* or efficientnet-edgetpu* or ' + 'efficientnet-condconv*, efficientnet-lite*') + return image_size diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/modelzoo_level.txt b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/modelzoo_level.txt new file mode 100644 index 000000000..83f8226cf --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/modelzoo_level.txt @@ -0,0 +1,7 @@ +GPUStatus:OK +NPUMigrationStatus:OK + +FuncStatus:OK +PrecisionStatus:OK +AutoTune:OK +PerfStatus:OK \ No newline at end of file diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/preprocessing.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/preprocessing.py new file mode 100644 index 000000000..3c3dc62b1 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/preprocessing.py @@ -0,0 +1,277 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""ImageNet preprocessing.""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from absl import logging + +import tensorflow.compat.v1 as tf + + +IMAGE_SIZE = 224 +CROP_PADDING = 32 + + +def distorted_bounding_box_crop(image_bytes, + bbox, + min_object_covered=0.1, + aspect_ratio_range=(0.75, 1.33), + area_range=(0.05, 1.0), + max_attempts=100, + scope=None): + """Generates cropped_image using one of the bboxes randomly distorted. + + See `tf.image.sample_distorted_bounding_box` for more documentation. + + Args: + image_bytes: `Tensor` of binary image data. + bbox: `Tensor` of bounding boxes arranged `[1, num_boxes, coords]` + where each coordinate is [0, 1) and the coordinates are arranged + as `[ymin, xmin, ymax, xmax]`. If num_boxes is 0 then use the whole + image. + min_object_covered: An optional `float`. Defaults to `0.1`. The cropped + area of the image must contain at least this fraction of any bounding + box supplied. + aspect_ratio_range: An optional list of `float`s. The cropped area of the + image must have an aspect ratio = width / height within this range. + area_range: An optional list of `float`s. The cropped area of the image + must contain a fraction of the supplied image within in this range. + max_attempts: An optional `int`. Number of attempts at generating a cropped + region of the image of the specified constraints. After `max_attempts` + failures, return the entire image. + scope: Optional `str` for name scope. + Returns: + cropped image `Tensor` + """ + with tf.name_scope(scope, 'distorted_bounding_box_crop', [image_bytes, bbox]): + shape = tf.image.extract_jpeg_shape(image_bytes) + sample_distorted_bounding_box = tf.image.sample_distorted_bounding_box( + shape, + bounding_boxes=bbox, + min_object_covered=min_object_covered, + aspect_ratio_range=aspect_ratio_range, + area_range=area_range, + max_attempts=max_attempts, + use_image_if_no_bounding_boxes=True) + bbox_begin, bbox_size, _ = sample_distorted_bounding_box + + # Crop the image to the specified bounding box. + offset_y, offset_x, _ = tf.unstack(bbox_begin) + target_height, target_width, _ = tf.unstack(bbox_size) + crop_window = tf.stack( + [offset_y, offset_x, target_height, target_width]) + image = tf.image.decode_and_crop_jpeg( + image_bytes, crop_window, channels=3) + + return image + + +def _at_least_x_are_equal(a, b, x): + """At least `x` of `a` and `b` `Tensors` are equal.""" + match = tf.equal(a, b) + match = tf.cast(match, tf.int32) + return tf.greater_equal(tf.reduce_sum(match), x) + + +def _resize_image(image, image_size, method=None): + if method is not None: + tf.logging.info('Use customized resize method {}'.format(method)) + return tf.image.resize([image], [image_size, image_size], method)[0] + tf.logging.info('Use default resize_bicubic.') + return tf.image.resize_bicubic([image], [image_size, image_size])[0] + + +def _decode_and_random_crop(image_bytes, image_size, resize_method=None): + """Make a random crop of image_size.""" + bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4]) + image = distorted_bounding_box_crop( + image_bytes, + bbox, + min_object_covered=0.1, + aspect_ratio_range=(3. / 4, 4. / 3.), + area_range=(0.08, 1.0), + max_attempts=10, + scope=None) + original_shape = tf.image.extract_jpeg_shape(image_bytes) + bad = _at_least_x_are_equal(original_shape, tf.shape(image), 3) + + image = tf.cond( + bad, + lambda: _decode_and_center_crop(image_bytes, image_size), + lambda: _resize_image(image, image_size, resize_method)) + + return image + + +def _decode_and_center_crop(image_bytes, image_size, resize_method=None): + """Crops to center of image with padding then scales image_size.""" + shape = tf.image.extract_jpeg_shape(image_bytes) + image_height = shape[0] + image_width = shape[1] + + padded_center_crop_size = tf.cast( + ((image_size / (image_size + CROP_PADDING)) * + tf.cast(tf.minimum(image_height, image_width), tf.float32)), + tf.int32) + + offset_height = ((image_height - padded_center_crop_size) + 1) // 2 + offset_width = ((image_width - padded_center_crop_size) + 1) // 2 + crop_window = tf.stack([offset_height, offset_width, + padded_center_crop_size, padded_center_crop_size]) + image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) + image = _resize_image(image, image_size, resize_method) + return image + + +def _flip(image): + """Random horizontal image flip.""" + image = tf.image.random_flip_left_right(image) + return image + + +def preprocess_for_train(image_bytes, + use_bfloat16, + image_size=IMAGE_SIZE, + augment_name=None, + randaug_num_layers=None, + randaug_magnitude=None, + resize_method=None): + """Preprocesses the given image for evaluation. + + Args: + image_bytes: `Tensor` representing an image binary of arbitrary size. + use_bfloat16: `bool` for whether to use bfloat16. + image_size: image size. + augment_name: `string` that is the name of the augmentation method + to apply to the image. `autoaugment` if AutoAugment is to be used or + `randaugment` if RandAugment is to be used. If the value is `None` no + augmentation method will be applied applied. See autoaugment.py for more + details. + randaug_num_layers: 'int', if RandAug is used, what should the number of + layers be. See autoaugment.py for detailed description. + randaug_magnitude: 'int', if RandAug is used, what should the magnitude + be. See autoaugment.py for detailed description. + resize_method: resize method. If none, use bicubic. + + Returns: + A preprocessed image `Tensor`. + """ + image = _decode_and_random_crop(image_bytes, image_size, resize_method) + image = _flip(image) + image = tf.reshape(image, [image_size, image_size, 3]) + + if augment_name: + try: + import autoaugment # pylint: disable=g-import-not-at-top + except ImportError as e: + logging.exception('Autoaugment is not supported in TF 2.x.') + raise e + + logging.info('Apply AutoAugment policy %s', augment_name) + input_image_type = image.dtype + image = tf.clip_by_value(image, 0.0, 255.0) + image = tf.cast(image, dtype=tf.uint8) + + if augment_name == 'autoaugment': + logging.info('Apply AutoAugment policy %s', augment_name) + image = autoaugment.distort_image_with_autoaugment(image, 'v0') + elif augment_name == 'randaugment': + image = autoaugment.distort_image_with_randaugment( + image, randaug_num_layers, randaug_magnitude) + else: + raise ValueError( + 'Invalid value for augment_name: %s' % (augment_name)) + + image = tf.cast(image, dtype=input_image_type) + + image = tf.image.convert_image_dtype( + image, dtype=tf.bfloat16 if use_bfloat16 else tf.float32) + + return image + + +def preprocess_for_eval(image_bytes, + use_bfloat16, + image_size=IMAGE_SIZE, + resize_method=None): + """Preprocesses the given image for evaluation. + + Args: + image_bytes: `Tensor` representing an image binary of arbitrary size. + use_bfloat16: `bool` for whether to use bfloat16. + image_size: image size. + resize_method: if None, use bicubic. + + Returns: + A preprocessed image `Tensor`. + """ + image = _decode_and_center_crop(image_bytes, image_size, resize_method) + image = tf.reshape(image, [image_size, image_size, 3]) + image = tf.image.convert_image_dtype( + image, dtype=tf.bfloat16 if use_bfloat16 else tf.float32) + return image + + +def preprocess_image(image_bytes, + is_training=False, + use_bfloat16=False, + image_size=IMAGE_SIZE, + augment_name=None, + randaug_num_layers=None, + randaug_magnitude=None, + resize_method=None): + """Preprocesses the given image. + + Args: + image_bytes: `Tensor` representing an image binary of arbitrary size. + is_training: `bool` for whether the preprocessing is for training. + use_bfloat16: `bool` for whether to use bfloat16. + image_size: image size. + augment_name: `string` that is the name of the augmentation method + to apply to the image. `autoaugment` if AutoAugment is to be used or + `randaugment` if RandAugment is to be used. If the value is `None` no + augmentation method will be applied applied. See autoaugment.py for more + details. + randaug_num_layers: 'int', if RandAug is used, what should the number of + layers be. See autoaugment.py for detailed description. + randaug_magnitude: 'int', if RandAug is used, what should the magnitude + be. See autoaugment.py for detailed description. + resize_method: 'string' or None. Use resize_bicubic in default. + + Returns: + A preprocessed image `Tensor` with value range of [0, 255]. + """ + if is_training: + return preprocess_for_train( + image_bytes, use_bfloat16, image_size, augment_name, + randaug_num_layers, randaug_magnitude, resize_method) + else: + return preprocess_for_eval(image_bytes, use_bfloat16, image_size, + resize_method) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/requirements.txt b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/requirements.txt new file mode 100644 index 000000000..e69de29bb diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/run_1p.sh b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/run_1p.sh new file mode 100644 index 000000000..4232be514 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/run_1p.sh @@ -0,0 +1,22 @@ +#!/bin/bash +### Do not need to Configure CANN Environment on Modelarts Platform, because it has been set already. +### Modelarts Platform command for train +export TF_CPP_MIN_LOG_LEVEL=2 ## Tensorflow api print Log Config +export ASCEND_SLOG_PRINT_TO_STDOUT=0 ## Print log on terminal on(1), off(0) + +code_dir=${1} +data_dir=${2} +result_dir=${3} +obs_url=${4} + +current_time=`date "+%Y-%m-%d-%H-%M-%S"` + +python3.7 ${code_dir}/main.py \ + --data_dir=${data_dir} \ + --model_dir=${result_dir} \ + --obs_dir=${obs_url} \ + --model_name='efficientnet-condconv-b0-8e' \ + --npu_dump_data=True \ + --npu_profiling=True \ + --npu_dump_graph=False \ + --npu_auto_tune=False 2>&1 | tee ${result_dir}/${current_time}_train_npu.log \ No newline at end of file diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/utils.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/utils.py new file mode 100644 index 000000000..af65ed3fe --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/utils.py @@ -0,0 +1,596 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Model utilities.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import json +import os +import sys + +from absl import flags +from absl import logging +import numpy as np +import tensorflow.compat.v1 as tf + +import lars_optimizer +from tensorflow.python.tpu import tpu_function # pylint:disable=g-direct-tensorflow-import + +FLAGS = flags.FLAGS + + +def build_learning_rate(initial_lr, + global_step, + steps_per_epoch=None, + lr_decay_type='exponential', + decay_factor=0.97, + decay_epochs=2.4, + total_steps=None, + warmup_epochs=5): + """Build learning rate.""" + if lr_decay_type == 'exponential': + assert steps_per_epoch is not None + decay_steps = steps_per_epoch * decay_epochs + lr = tf.train.exponential_decay( + initial_lr, global_step, decay_steps, decay_factor, staircase=True) + elif lr_decay_type == 'cosine': + assert total_steps is not None + lr = 0.5 * initial_lr * ( + 1 + tf.cos(np.pi * tf.cast(global_step, tf.float32) / total_steps)) + elif lr_decay_type == 'constant': + lr = initial_lr + elif lr_decay_type == 'poly': + tf.logging.info('Using poly LR schedule') + assert steps_per_epoch is not None + assert total_steps is not None + warmup_steps = int(steps_per_epoch * warmup_epochs) + min_step = tf.constant(1, dtype=tf.int64) + decay_steps = tf.maximum( + min_step, tf.subtract(global_step, warmup_steps)) + lr = tf.train.polynomial_decay( + initial_lr, + decay_steps, + total_steps - warmup_steps + 1, + end_learning_rate=0.1, + power=2.0) + else: + assert False, 'Unknown lr_decay_type : %s' % lr_decay_type + + if warmup_epochs: + logging.info('Learning rate warmup_epochs: %d', warmup_epochs) + warmup_steps = int(warmup_epochs * steps_per_epoch) + warmup_lr = ( + initial_lr * tf.cast(global_step, tf.float32) / tf.cast( + warmup_steps, tf.float32)) + lr = tf.cond(global_step < warmup_steps, lambda: warmup_lr, lambda: lr) + + return lr + + +def build_optimizer(learning_rate, + optimizer_name='rmsprop', + decay=0.9, + epsilon=0.001, + momentum=0.9, + lars_weight_decay=None, + lars_epsilon=None): + """Build optimizer.""" + if optimizer_name == 'sgd': + logging.info('Using SGD optimizer') + optimizer = tf.train.GradientDescentOptimizer( + learning_rate=learning_rate) + elif optimizer_name == 'momentum': + logging.info('Using Momentum optimizer') + optimizer = tf.train.MomentumOptimizer( + learning_rate=learning_rate, momentum=momentum) + elif optimizer_name == 'rmsprop': + logging.info('Using RMSProp optimizer') + optimizer = tf.train.RMSPropOptimizer(learning_rate, decay, momentum, + epsilon) + elif optimizer_name == 'lars': + logging.info('Using LARS optimizer') + assert lars_weight_decay is not None, 'LARS weight decay is None.' + assert lars_epsilon is not None, 'LARS epsilon is None.' + optimizer = lars_optimizer.LARSOptimizer( + learning_rate, + momentum=momentum, + weight_decay=lars_weight_decay, + skip_list=['batch_normalization', 'bias', 'beta', 'gamma'], + epsilon=lars_epsilon) + else: + logging.fatal('Unknown optimizer: %s', optimizer_name) + + return optimizer + + +class TpuBatchNormalization(tf.layers.BatchNormalization): + # class TpuBatchNormalization(tf.layers.BatchNormalization): + """Cross replica batch normalization.""" + + def __init__(self, fused=False, **kwargs): + if fused in (True, None): + raise ValueError( + 'TpuBatchNormalization does not support fused=True.') + super(TpuBatchNormalization, self).__init__(fused=fused, **kwargs) + + def _cross_replica_average(self, t, num_shards_per_group): + """Calculates the average value of input tensor across TPU replicas.""" + num_shards = tpu_function.get_tpu_context().number_of_shards + group_assignment = None + if num_shards_per_group > 1: + if num_shards % num_shards_per_group != 0: + raise ValueError('num_shards: %d mod shards_per_group: %d, should be 0' + % (num_shards, num_shards_per_group)) + num_groups = num_shards // num_shards_per_group + group_assignment = [[ + x for x in range(num_shards) if x // num_shards_per_group == y + ] for y in range(num_groups)] + return tf.tpu.cross_replica_sum(t, group_assignment) / tf.cast( + num_shards_per_group, t.dtype) + + def _moments(self, inputs, reduction_axes, keep_dims): + """Compute the mean and variance: it overrides the original _moments.""" + shard_mean, shard_variance = super(TpuBatchNormalization, self)._moments( + inputs, reduction_axes, keep_dims=keep_dims) + + num_shards = tpu_function.get_tpu_context().number_of_shards or 1 + if num_shards <= 8: # Skip cross_replica for 2x2 or smaller slices. + num_shards_per_group = 1 + else: + num_shards_per_group = max(8, num_shards // 8) + logging.info('TpuBatchNormalization with num_shards_per_group %s', + num_shards_per_group) + if num_shards_per_group > 1: + # Compute variance using: Var[X]= E[X^2] - E[X]^2. + shard_square_of_mean = tf.math.square(shard_mean) + shard_mean_of_square = shard_variance + shard_square_of_mean + group_mean = self._cross_replica_average( + shard_mean, num_shards_per_group) + group_mean_of_square = self._cross_replica_average( + shard_mean_of_square, num_shards_per_group) + group_variance = group_mean_of_square - tf.math.square(group_mean) + return (group_mean, group_variance) + else: + return (shard_mean, shard_variance) + + +class BatchNormalization(tf.layers.BatchNormalization): + """Fixed default name of BatchNormalization to match TpuBatchNormalization.""" + + def __init__(self, name='tpu_batch_normalization', **kwargs): + super(BatchNormalization, self).__init__(name=name, **kwargs) + + +def train_batch_norm(**kwargs): + if 'optimizer' in FLAGS and FLAGS.optimizer == 'lars': + return DistributedBatchNormalization(**kwargs) + return TpuBatchNormalization(**kwargs) + + +def eval_batch_norm(**kwargs): + if 'optimizer' in FLAGS and FLAGS.optimizer == 'lars': + return DistributedBatchNormalization(**kwargs) + return BatchNormalization(**kwargs) + + +class DistributedBatchNormalization: + """Distributed batch normalization used in https://arxiv.org/abs/2011.00071.""" + + def __init__(self, axis, momentum, epsilon): + self.axis = axis + self.momentum = momentum + self.epsilon = epsilon + + def __call__(self, x, training, distname='batch_normalization'): + shape = [x.shape[-1]] + with tf.variable_scope('batch_normalization'): + ones = tf.initializers.ones() + zeros = tf.initializers.zeros() + gamma = tf.get_variable( + 'gamma', shape, initializer=ones, trainable=True, use_resource=True) + beta = tf.get_variable( + 'beta', shape, initializer=zeros, trainable=True, use_resource=True) + moving_mean = tf.get_variable( + 'moving_mean', + shape, + initializer=zeros, + trainable=False, + use_resource=True) + moving_variance = tf.get_variable( + 'moving_variance', + shape, + initializer=ones, + trainable=False, + use_resource=True) + num_replicas = FLAGS.num_replicas + + x = tf.cast(x, tf.float32) + if training: + if num_replicas <= 8: + group_assign = None + group_shards = tf.cast(num_replicas, tf.float32) + else: + + group_shards = max( + 1, + int(FLAGS.batch_norm_batch_size / + (FLAGS.train_batch_size / num_replicas))) + group_assign = np.arange(num_replicas, dtype=np.int32) + group_assign = group_assign.reshape([-1, group_shards]) + group_assign = group_assign.tolist() + group_shards = tf.cast(group_shards, tf.float32) + + mean = tf.reduce_mean(x, [0, 1, 2]) + mean = tf.tpu.cross_replica_sum(mean, group_assign) / group_shards + + # Var[x] = E[x^2] - E[x]^2 + mean_sq = tf.reduce_mean(tf.math.square(x), [0, 1, 2]) + mean_sq = tf.tpu.cross_replica_sum( + mean_sq, group_assign) / group_shards + variance = mean_sq - tf.math.square(mean) + + decay = tf.cast(1. - self.momentum, tf.float32) + + def u(moving, normal, name): + num_replicas_fp = tf.cast(num_replicas, tf.float32) + normal = tf.tpu.cross_replica_sum(normal) / num_replicas_fp + diff = decay * (moving - normal) + return tf.assign_sub(moving, diff, use_locking=True, name=name) + + tf.add_to_collection(tf.GraphKeys.UPDATE_OPS, + u(moving_mean, mean, name='moving_mean')) + tf.add_to_collection(tf.GraphKeys.UPDATE_OPS, + u(moving_variance, variance, name='moving_variance')) + + x = tf.nn.batch_normalization( + x, + mean=mean, + variance=variance, + offset=beta, + scale=gamma, + variance_epsilon=self.epsilon) + else: + + x, _, _ = tf.nn.fused_batch_norm( + x, + scale=gamma, + offset=beta, + mean=moving_mean, + variance=moving_variance, + epsilon=self.epsilon, + is_training=False) + + return x + + +def drop_connect(inputs, is_training, survival_prob): + """Drop the entire conv with given survival probability.""" + # "Deep Networks with Stochastic Depth", https://arxiv.org/pdf/1603.09382.pdf + if not is_training: + return inputs + + # Compute tensor. + batch_size = tf.shape(inputs)[0] + random_tensor = survival_prob + random_tensor += tf.random_uniform([batch_size, + 1, 1, 1], dtype=inputs.dtype) + binary_tensor = tf.floor(random_tensor) + # Unlike conventional way that multiply survival_prob at test time, here we + # divide survival_prob at training time, such that no addition compute is + # needed at test time. + output = tf.div(inputs, survival_prob) * binary_tensor + return output + + +def archive_ckpt(ckpt_eval, ckpt_objective, ckpt_path): + """Archive a checkpoint if the metric is better.""" + ckpt_dir, ckpt_name = os.path.split(ckpt_path) + + saved_objective_path = os.path.join(ckpt_dir, 'best_objective.txt') + saved_objective = float('-inf') + if tf.gfile.Exists(saved_objective_path): + with tf.gfile.GFile(saved_objective_path, 'r') as f: + saved_objective = float(f.read()) + if saved_objective > ckpt_objective: + logging.info('Ckpt %s is worse than %s', + ckpt_objective, saved_objective) + return False + + filenames = tf.gfile.Glob(ckpt_path + '.*') + if filenames is None: + logging.info('No files to copy for checkpoint %s', ckpt_path) + return False + + # Clear the old folder. + dst_dir = os.path.join(ckpt_dir, 'archive') + if tf.gfile.Exists(dst_dir): + tf.gfile.DeleteRecursively(dst_dir) + tf.gfile.MakeDirs(dst_dir) + + # Write checkpoints. + for f in filenames: + dest = os.path.join(dst_dir, os.path.basename(f)) + tf.gfile.Copy(f, dest, overwrite=True) + ckpt_state = tf.train.generate_checkpoint_state_proto( + dst_dir, + model_checkpoint_path=ckpt_name, + all_model_checkpoint_paths=[ckpt_name]) + with tf.gfile.GFile(os.path.join(dst_dir, 'checkpoint'), 'w') as f: + f.write(str(ckpt_state)) + with tf.gfile.GFile(os.path.join(dst_dir, 'best_eval.txt'), 'w') as f: + f.write('%s' % ckpt_eval) + + # Update the best objective. + with tf.gfile.GFile(saved_objective_path, 'w') as f: + f.write('%f' % ckpt_objective) + + logging.info('Copying checkpoint %s to %s', ckpt_path, dst_dir) + return True + + +def get_ema_vars(): + """Get all exponential moving average (ema) variables.""" + ema_vars = tf.trainable_variables() + tf.get_collection('moving_vars') + for v in tf.global_variables(): + # We maintain mva for batch norm moving mean and variance as well. + if 'moving_mean' in v.name or 'moving_variance' in v.name: + ema_vars.append(v) + return list(set(ema_vars)) + + +class DepthwiseConv2D(tf.keras.layers.DepthwiseConv2D, tf.layers.Layer): + """Wrap keras DepthwiseConv2D to tf.layers.""" + + pass + + +class Conv2D(tf.layers.Conv2D): + """Wrapper for Conv2D with specialization for fast inference.""" + + def _bias_activation(self, outputs): + if self.use_bias: + outputs = tf.nn.bias_add(outputs, self.bias, data_format='NCHW') + if self.activation is not None: + return self.activation(outputs) + return outputs + + def _can_run_fast_1x1(self, inputs): + batch_size = inputs.shape.as_list()[0] + return (self.data_format == 'channels_first' and + batch_size == 1 and + self.kernel_size == (1, 1)) + + def _call_fast_1x1(self, inputs): + # Compute the 1x1 convolution as a matmul. + inputs_shape = tf.shape(inputs) + flat_inputs = tf.reshape(inputs, [inputs_shape[1], -1]) + flat_outputs = tf.matmul( + tf.squeeze(self.kernel), + flat_inputs, + transpose_a=True) + outputs_shape = tf.concat( + [[1, self.filters], inputs_shape[2:]], axis=0) + outputs = tf.reshape(flat_outputs, outputs_shape) + + # Handle the bias and activation function. + return self._bias_activation(outputs) + + def call(self, inputs): + if self._can_run_fast_1x1(inputs): + return self._call_fast_1x1(inputs) + return super(Conv2D, self).call(inputs) + + +class EvalCkptDriver(object): + """A driver for running eval inference. + + Attributes: + model_name: str. Model name to eval. + batch_size: int. Eval batch size. + image_size: int. Input image size, determined by model name. + num_classes: int. Number of classes, default to 1000 for ImageNet. + include_background_label: whether to include extra background label. + advprop_preprocessing: whether to use advprop preprocessing. + """ + + def __init__(self, + model_name, + batch_size=1, + image_size=224, + num_classes=1000, + include_background_label=False, + advprop_preprocessing=False): + """Initialize internal variables.""" + self.model_name = model_name + self.batch_size = batch_size + self.num_classes = num_classes + self.include_background_label = include_background_label + self.image_size = image_size + self.advprop_preprocessing = advprop_preprocessing + + def restore_model(self, sess, ckpt_dir, enable_ema=True, export_ckpt=None): + """Restore variables from checkpoint dir.""" + sess.run(tf.global_variables_initializer()) + checkpoint = tf.train.latest_checkpoint(ckpt_dir) + if enable_ema: + ema = tf.train.ExponentialMovingAverage(decay=0.0) + ema_vars = get_ema_vars() + var_dict = ema.variables_to_restore(ema_vars) + ema_assign_op = ema.apply(ema_vars) + else: + var_dict = get_ema_vars() + ema_assign_op = None + + tf.train.get_or_create_global_step() + sess.run(tf.global_variables_initializer()) + saver = tf.train.Saver(var_dict, max_to_keep=1) + saver.restore(sess, checkpoint) + + if export_ckpt: + if ema_assign_op is not None: + sess.run(ema_assign_op) + saver = tf.train.Saver(max_to_keep=1, save_relative_paths=True) + saver.save(sess, export_ckpt) + + def build_model(self, features, is_training): + """Build model with input features.""" + del features, is_training + raise ValueError('Must be implemented by subclasses.') + + def get_preprocess_fn(self): + raise ValueError('Must be implemented by subclsses.') + + def build_dataset(self, filenames, labels, is_training): + """Build input dataset.""" + batch_drop_remainder = False + if 'condconv' in self.model_name and not is_training: + # CondConv layers can only be called with known batch dimension. Thus, we + # must drop all remaining examples that do not make up one full batch. + # To ensure all examples are evaluated, use a batch size that evenly + # divides the number of files. + batch_drop_remainder = True + num_files = len(filenames) + if num_files % self.batch_size != 0: + tf.logging.warn('Remaining examples in last batch are not being ' + 'evaluated.') + filenames = tf.constant(filenames) + labels = tf.constant(labels) + dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) + + def _parse_function(filename, label): + image_string = tf.read_file(filename) + preprocess_fn = self.get_preprocess_fn() + image_decoded = preprocess_fn( + image_string, is_training, image_size=self.image_size) + image = tf.cast(image_decoded, tf.float32) + return image, label + + dataset = dataset.map(_parse_function) + dataset = dataset.batch(self.batch_size, + drop_remainder=batch_drop_remainder) + + iterator = dataset.make_one_shot_iterator() + images, labels = iterator.get_next() + return images, labels + + def run_inference(self, + ckpt_dir, + image_files, + labels, + enable_ema=True, + export_ckpt=None): + """Build and run inference on the target images and labels.""" + label_offset = 1 if self.include_background_label else 0 + with tf.Graph().as_default(), tf.Session() as sess: + images, labels = self.build_dataset(image_files, labels, False) + probs = self.build_model(images, is_training=False) + if isinstance(probs, tuple): + probs = probs[0] + + self.restore_model(sess, ckpt_dir, enable_ema, export_ckpt) + + prediction_idx = [] + prediction_prob = [] + for _ in range(len(image_files) // self.batch_size): + out_probs = sess.run(probs) + idx = np.argsort(out_probs)[::-1] + prediction_idx.append(idx[:5] - label_offset) + prediction_prob.append([out_probs[pid] for pid in idx[:5]]) + + # Return the top 5 predictions (idx and prob) for each image. + return prediction_idx, prediction_prob + + def eval_example_images(self, + ckpt_dir, + image_files, + labels_map_file, + enable_ema=True, + export_ckpt=None): + """Eval a list of example images. + + Args: + ckpt_dir: str. Checkpoint directory path. + image_files: List[str]. A list of image file paths. + labels_map_file: str. The labels map file path. + enable_ema: enable expotential moving average. + export_ckpt: export ckpt folder. + + Returns: + A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction + index and pred_prob is the top 5 prediction probability. + """ + classes = json.loads(tf.gfile.Open(labels_map_file).read()) + pred_idx, pred_prob = self.run_inference( + ckpt_dir, image_files, [0] * len(image_files), enable_ema, export_ckpt) + for i in range(len(image_files)): + print('predicted class for image {}: '.format(image_files[i])) + for j, idx in enumerate(pred_idx[i]): + print(' -> top_{} ({:4.2f}%): {} '.format(j, pred_prob[i][j] * 100, + classes[str(idx)])) + return pred_idx, pred_prob + + def eval_imagenet(self, ckpt_dir, imagenet_eval_glob, + imagenet_eval_label, num_images, enable_ema, export_ckpt): + """Eval ImageNet images and report top1/top5 accuracy. + + Args: + ckpt_dir: str. Checkpoint directory path. + imagenet_eval_glob: str. File path glob for all eval images. + imagenet_eval_label: str. File path for eval label. + num_images: int. Number of images to eval: -1 means eval the whole + dataset. + enable_ema: enable expotential moving average. + export_ckpt: export checkpoint folder. + + Returns: + A tuple (top1, top5) for top1 and top5 accuracy. + """ + imagenet_val_labels = [int(i) + for i in tf.gfile.GFile(imagenet_eval_label)] + imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) + if num_images < 0: + num_images = len(imagenet_filenames) + image_files = imagenet_filenames[:num_images] + labels = imagenet_val_labels[:num_images] + + pred_idx, _ = self.run_inference( + ckpt_dir, image_files, labels, enable_ema, export_ckpt) + top1_cnt, top5_cnt = 0.0, 0.0 + for i, label in enumerate(labels): + top1_cnt += label in pred_idx[i][:1] + top5_cnt += label in pred_idx[i][:5] + if i % 100 == 0: + print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( + i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) + sys.stdout.flush() + top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images + print( + 'Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) + return top1, top5 -- Gitee From 79d127a43df347e6b25b1a0e0f660ce98ac91298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=81=92=E6=AD=A3?= <1771467123@qq.com> Date: Tue, 31 May 2022 06:13:18 +0000 Subject: [PATCH 2/2] First commit Efficientnet-Condconv --- .../condconv/__init__.py | 28 + .../condconv/condconv_layers.py | 481 ++++++++++++++++++ .../condconv/efficientnet_condconv_builder.py | 200 ++++++++ .../edgetpu/__init__.py | 28 + .../edgetpu/efficientnet_edgetpu_builder.py | 195 +++++++ .../g3doc/condconv-layer.png | Bin 0 -> 42275 bytes .../g3doc/efficientnet-edgetpu.png | Bin 0 -> 52265 bytes .../g3doc/flops.png | Bin 0 -> 244949 bytes .../g3doc/lite-float-gpu.png | Bin 0 -> 24195 bytes .../g3doc/lite-quant-cpu.png | Bin 0 -> 24771 bytes .../g3doc/lite-quant-size.png | Bin 0 -> 24293 bytes .../g3doc/params.png | Bin 0 -> 243107 bytes .../lite/__init__.py | 28 + .../lite/efficientnet_lite_builder.py | 221 ++++++++ .../lite/efficientnet_lite_builder_test.py | 84 +++ .../tpu/__init__.py | 28 + .../tpu/efficientnet_x_builder.py | 233 +++++++++ 17 files changed, 1526 insertions(+) create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/__init__.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/condconv_layers.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/efficientnet_condconv_builder.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/__init__.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/efficientnet_edgetpu_builder.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/condconv-layer.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/efficientnet-edgetpu.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/flops.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-float-gpu.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-quant-cpu.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-quant-size.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/params.png create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lite/__init__.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lite/efficientnet_lite_builder.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/lite/efficientnet_lite_builder_test.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/tpu/__init__.py create mode 100644 TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/tpu/efficientnet_x_builder.py diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/__init__.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/__init__.py new file mode 100644 index 000000000..e58dedf12 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/__init__.py @@ -0,0 +1,28 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""The initial file of condconv.""" \ No newline at end of file diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/condconv_layers.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/condconv_layers.py new file mode 100644 index 000000000..3aff57842 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/condconv_layers.py @@ -0,0 +1,481 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""CondConv implementations in Tensorflow Layers. + +[1] Brandon Yang, Gabriel Bender, Quoc V. Le, Jiquan Ngiam + CondConv: Conditionally Parameterized Convolutions for Efficient Inference. + NeurIPS'19, https://arxiv.org/abs/1904.04971 +""" + +from __future__ import absolute_import +from __future__ import division +# Standard imports +from __future__ import print_function + +import numpy as np +import tensorflow.compat.v1 as tf + + +def get_condconv_initializer(initializer, num_experts, expert_shape): + """Wraps the initializer to correctly initialize CondConv variables. + + CondConv initializes biases and kernels in a num_experts x num_params + matrix for efficient computation. This wrapper ensures that each expert + is correctly initialized with the given initializer before being flattened + into the correctly shaped CondConv variable. + + Arguments: + initializer: The initializer to apply for each individual expert. + num_experts: The number of experts to be initialized. + expert_shape: The original shape of each individual expert. + + Returns: + The initializer for the num_experts x num_params CondConv variable. + """ + def condconv_initializer(expected_shape, dtype=None, partition=None): + """CondConv initializer function.""" + num_params = np.prod(expert_shape) + if (len(expected_shape) != 2 or expected_shape[0] != num_experts or + expected_shape[1] != num_params): + raise (ValueError( + 'CondConv variables must have shape [num_experts, num_params]')) + flattened_kernels = [] + for _ in range(num_experts): + kernel = initializer(expert_shape, dtype, partition) + flattened_kernels.append(tf.reshape(kernel, [-1])) + return tf.stack(flattened_kernels) + + return condconv_initializer + + +class CondConv2D(tf.keras.layers.Conv2D): + """2D conditional convolution layer (e.g. spatial convolution over images). + + Attributes: + filters: Integer, the dimensionality of the output space (i.e. the number of + output filters in the convolution). + kernel_size: An integer or tuple/list of 2 integers, specifying the height + and width of the 2D convolution window. Can be a single integer to specify + the same value for all spatial dimensions. + num_experts: The number of expert kernels and biases in the CondConv layer. + strides: An integer or tuple/list of 2 integers, specifying the strides of + the convolution along the height and width. Can be a single integer to + specify the same value for all spatial dimensions. Specifying any stride + value != 1 is incompatible with specifying any `dilation_rate` value != 1. + padding: one of `"valid"` or `"same"` (case-insensitive). + data_format: A string, one of `channels_last` (default) or `channels_first`. + The ordering of the dimensions in the inputs. `channels_last` corresponds + to inputs with shape `(batch, height, width, channels)` while + `channels_first` corresponds to inputs with shape `(batch, channels, + height, width)`. It defaults to the `image_data_format` value found in + your Keras config file at `~/.keras/keras.json`. If you never set it, then + it will be "channels_last". + dilation_rate: an integer or tuple/list of 2 integers, specifying the + dilation rate to use for dilated convolution. Can be a single integer to + specify the same value for all spatial dimensions. Currently, specifying + any `dilation_rate` value != 1 is incompatible with specifying any stride + value != 1. + activation: Activation function to use. If you don't specify anything, no + activation is applied + (ie. "linear" activation: `a(x) = x`). + use_bias: Boolean, whether the layer uses a bias vector. + kernel_initializer: Initializer for the `kernel` weights matrix. + bias_initializer: Initializer for the bias vector. + kernel_regularizer: Regularizer function applied to the `kernel` weights + matrix. + bias_regularizer: Regularizer function applied to the bias vector. + activity_regularizer: Regularizer function applied to the output of the + layer (its "activation").. + kernel_constraint: Constraint function applied to the kernel matrix. + bias_constraint: Constraint function applied to the bias vector. + Input shape: + 4D tensor with shape: `(samples, channels, rows, cols)` if + data_format='channels_first' + or 4D tensor with shape: `(samples, rows, cols, channels)` if + data_format='channels_last'. + Output shape: + 4D tensor with shape: `(samples, filters, new_rows, new_cols)` if + data_format='channels_first' + or 4D tensor with shape: `(samples, new_rows, new_cols, filters)` if + data_format='channels_last'. `rows` and `cols` values might have changed + due to padding. + """ + + def __init__(self, + filters, + kernel_size, + num_experts, + strides=(1, 1), + padding='valid', + data_format=None, + dilation_rate=(1, 1), + activation=None, + use_bias=True, + kernel_initializer='glorot_uniform', + bias_initializer='zeros', + kernel_regularizer=None, + bias_regularizer=None, + activity_regularizer=None, + kernel_constraint=None, + bias_constraint=None, + **kwargs): + super(CondConv2D, self).__init__( + filters=filters, + kernel_size=kernel_size, + strides=strides, + padding=padding, + data_format=data_format, + dilation_rate=dilation_rate, + activation=activation, + use_bias=use_bias, + kernel_initializer=kernel_initializer, + bias_initializer=bias_initializer, + kernel_regularizer=kernel_regularizer, + bias_regularizer=bias_regularizer, + activity_regularizer=activity_regularizer, + kernel_constraint=kernel_constraint, + bias_constraint=bias_constraint, + **kwargs) + if num_experts < 1: + raise ValueError('A CondConv layer must have at least one expert.') + self.num_experts = num_experts + if self.data_format == 'channels_first': + self.converted_data_format = 'NCHW' + else: + self.converted_data_format = 'NHWC' + + def build(self, input_shape): + if len(input_shape) != 4: + raise ValueError( + 'Inputs to `CondConv2D` should have rank 4. ' + 'Received input shape:', str(input_shape)) + input_shape = tf.TensorShape(input_shape) + channel_axis = self._get_channel_axis() + if input_shape.dims[channel_axis].value is None: + raise ValueError('The channel dimension of the inputs ' + 'should be defined. Found `None`.') + input_dim = int(input_shape[channel_axis]) + + self.kernel_shape = self.kernel_size + (input_dim, self.filters) + kernel_num_params = 1 + for kernel_dim in self.kernel_shape: + kernel_num_params *= kernel_dim + condconv_kernel_shape = (self.num_experts, kernel_num_params) + self.condconv_kernel = self.add_weight( + name='condconv_kernel', + shape=condconv_kernel_shape, + initializer=get_condconv_initializer(self.kernel_initializer, + self.num_experts, + self.kernel_shape), + regularizer=self.kernel_regularizer, + constraint=self.kernel_constraint, + trainable=True, + dtype=self.dtype) + + if self.use_bias: + self.bias_shape = (self.filters,) + condconv_bias_shape = (self.num_experts, self.filters) + self.condconv_bias = self.add_weight( + name='condconv_bias', + shape=condconv_bias_shape, + initializer=get_condconv_initializer(self.bias_initializer, + self.num_experts, + self.bias_shape), + regularizer=self.bias_regularizer, + constraint=self.bias_constraint, + trainable=True, + dtype=self.dtype) + else: + self.bias = None + + self.input_spec = tf.layers.InputSpec( + ndim=self.rank + 2, axes={channel_axis: input_dim}) + + self.built = True + + def call(self, inputs, routing_weights): + # Compute example dependent kernels + kernels = tf.matmul(routing_weights, self.condconv_kernel) + batch_size = inputs.shape[0].value + inputs = tf.split(inputs, batch_size, 0) + kernels = tf.split(kernels, batch_size, 0) + # Apply example-dependent convolution to each example in the batch + outputs_list = [] + for input_tensor, kernel in zip(inputs, kernels): + kernel = tf.reshape(kernel, self.kernel_shape) + outputs_list.append( + tf.nn.convolution( + input_tensor, + kernel, + strides=self.strides, + padding=self._get_padding_op(), + dilations=self.dilation_rate, + data_format=self.converted_data_format)) + outputs = tf.concat(outputs_list, 0) + + if self.use_bias: + # Compute example-dependent biases + biases = tf.matmul(routing_weights, self.condconv_bias) + outputs = tf.split(outputs, batch_size, 0) + biases = tf.split(biases, batch_size, 0) + # Add example-dependent bias to each example in the batch + bias_outputs_list = [] + for output, bias in zip(outputs, biases): + bias = tf.squeeze(bias, axis=0) + bias_outputs_list.append( + tf.nn.bias_add(output, bias, + data_format=self.converted_data_format)) + outputs = tf.concat(bias_outputs_list, 0) + + if self.activation is not None: + return self.activation(outputs) + return outputs + + def get_config(self): + config = {'num_experts': self.num_experts} + base_config = super(CondConv2D, self).get_config() + return dict(list(base_config.items()) + list(config.items())) + + def _get_channel_axis(self): + if self.data_format == 'channels_first': + return 1 + else: + return -1 + + def _get_padding_op(self): + if self.padding == 'causal': + op_padding = 'valid' + else: + op_padding = self.padding + if not isinstance(op_padding, (list, tuple)): + op_padding = op_padding.upper() + return op_padding + + +class DepthwiseCondConv2D(tf.keras.layers.DepthwiseConv2D): + """Depthwise separable 2D conditional convolution layer. + + This layer extends the base depthwise 2D convolution layer to compute + example-dependent parameters. A DepthwiseCondConv2D layer has 'num_experts` + kernels and biases. It computes a kernel and bias for each example as a + weighted sum of experts using the input example-dependent routing weights, + then applies the depthwise convolution to each example. + + Attributes: + kernel_size: An integer or tuple/list of 2 integers, specifying the height + and width of the 2D convolution window. Can be a single integer to specify + the same value for all spatial dimensions. + num_experts: The number of expert kernels and biases in the + DepthwiseCondConv2D layer. + strides: An integer or tuple/list of 2 integers, specifying the strides of + the convolution along the height and width. Can be a single integer to + specify the same value for all spatial dimensions. Specifying any stride + value != 1 is incompatible with specifying any `dilation_rate` value != 1. + padding: one of `'valid'` or `'same'` (case-insensitive). + depth_multiplier: The number of depthwise convolution output channels for + each input channel. The total number of depthwise convolution output + channels will be equal to `filters_in * depth_multiplier`. + data_format: A string, one of `channels_last` (default) or `channels_first`. + The ordering of the dimensions in the inputs. `channels_last` corresponds + to inputs with shape `(batch, height, width, channels)` while + `channels_first` corresponds to inputs with shape `(batch, channels, + height, width)`. It defaults to the `image_data_format` value found in + your Keras config file at `~/.keras/keras.json`. If you never set it, then + it will be 'channels_last'. + activation: Activation function to use. If you don't specify anything, no + activation is applied + (ie. 'linear' activation: `a(x) = x`). + use_bias: Boolean, whether the layer uses a bias vector. + depthwise_initializer: Initializer for the depthwise kernel matrix. + bias_initializer: Initializer for the bias vector. + depthwise_regularizer: Regularizer function applied to the depthwise kernel + matrix. + bias_regularizer: Regularizer function applied to the bias vector. + activity_regularizer: Regularizer function applied to the output of the + layer (its 'activation'). + depthwise_constraint: Constraint function applied to the depthwise kernel + matrix. + bias_constraint: Constraint function applied to the bias vector. + Input shape: + 4D tensor with shape: `[batch, channels, rows, cols]` if + data_format='channels_first' + or 4D tensor with shape: `[batch, rows, cols, channels]` if + data_format='channels_last'. + Output shape: + 4D tensor with shape: `[batch, filters, new_rows, new_cols]` if + data_format='channels_first' + or 4D tensor with shape: `[batch, new_rows, new_cols, filters]` if + data_format='channels_last'. `rows` and `cols` values might have changed + due to padding. + """ + + def __init__(self, + kernel_size, + num_experts, + strides=(1, 1), + padding='valid', + depth_multiplier=1, + data_format=None, + activation=None, + use_bias=True, + depthwise_initializer='glorot_uniform', + bias_initializer='zeros', + depthwise_regularizer=None, + bias_regularizer=None, + activity_regularizer=None, + depthwise_constraint=None, + bias_constraint=None, + **kwargs): + super(DepthwiseCondConv2D, self).__init__( + kernel_size=kernel_size, + strides=strides, + padding=padding, + depth_multiplier=depth_multiplier, + data_format=data_format, + activation=activation, + use_bias=use_bias, + depthwise_initializer=depthwise_initializer, + bias_initializer=bias_initializer, + depthwise_regularizer=depthwise_regularizer, + bias_regularizer=bias_regularizer, + activity_regularizer=activity_regularizer, + depthwise_constraint=depthwise_constraint, + bias_constraint=bias_constraint, + **kwargs) + if num_experts < 1: + raise ValueError('A CondConv layer must have at least one expert.') + self.num_experts = num_experts + if self.data_format == 'channels_first': + self.converted_data_format = 'NCHW' + else: + self.converted_data_format = 'NHWC' + + def build(self, input_shape): + if len(input_shape) < 4: + raise ValueError( + 'Inputs to `DepthwiseCondConv2D` should have rank 4. ' + 'Received input shape:', str(input_shape)) + input_shape = tf.TensorShape(input_shape) + if self.data_format == 'channels_first': + channel_axis = 1 + else: + channel_axis = 3 + if input_shape.dims[channel_axis].value is None: + raise ValueError('The channel dimension of the inputs to ' + '`DepthwiseConv2D` ' + 'should be defined. Found `None`.') + input_dim = int(input_shape[channel_axis]) + self.depthwise_kernel_shape = (self.kernel_size[0], self.kernel_size[1], + input_dim, self.depth_multiplier) + + depthwise_kernel_num_params = 1 + for dim in self.depthwise_kernel_shape: + depthwise_kernel_num_params *= dim + depthwise_condconv_kernel_shape = (self.num_experts, + depthwise_kernel_num_params) + + self.depthwise_condconv_kernel = self.add_weight( + shape=depthwise_condconv_kernel_shape, + initializer=get_condconv_initializer(self.depthwise_initializer, + self.num_experts, + self.depthwise_kernel_shape), + name='depthwise_condconv_kernel', + regularizer=self.depthwise_regularizer, + constraint=self.depthwise_constraint, + trainable=True) + + if self.use_bias: + bias_dim = input_dim * self.depth_multiplier + self.bias_shape = (bias_dim,) + condconv_bias_shape = (self.num_experts, bias_dim) + self.condconv_bias = self.add_weight( + name='condconv_bias', + shape=condconv_bias_shape, + initializer=get_condconv_initializer(self.bias_initializer, + self.num_experts, + self.bias_shape), + regularizer=self.bias_regularizer, + constraint=self.bias_constraint, + trainable=True, + dtype=self.dtype) + else: + self.bias = None + # Set input spec. + self.input_spec = tf.layers.InputSpec( + ndim=4, axes={channel_axis: input_dim}) + self.built = True + + def call(self, inputs, routing_weights): + # Compute example dependent depthwise kernels + depthwise_kernels = tf.matmul(routing_weights, + self.depthwise_condconv_kernel) + batch_size = inputs.shape[0].value + inputs = tf.split(inputs, batch_size, 0) + depthwise_kernels = tf.split(depthwise_kernels, batch_size, 0) + # Apply example-dependent depthwise convolution to each example in the batch + outputs_list = [] + for input_tensor, depthwise_kernel in zip(inputs, depthwise_kernels): + depthwise_kernel = tf.reshape(depthwise_kernel, + self.depthwise_kernel_shape) + if self.data_format == 'channels_first': + converted_strides = (1, 1) + self.strides + else: + converted_strides = (1,) + self.strides + (1,) + outputs_list.append( + tf.nn.depthwise_conv2d( + input_tensor, + depthwise_kernel, + strides=converted_strides, + padding=self.padding.upper(), + dilations=self.dilation_rate, + data_format=self.converted_data_format)) + outputs = tf.concat(outputs_list, 0) + + if self.use_bias: + # Compute example-dependent biases + biases = tf.matmul(routing_weights, self.condconv_bias) + outputs = tf.split(outputs, batch_size, 0) + biases = tf.split(biases, batch_size, 0) + # Add example-dependent bias to each example in the batch + bias_outputs_list = [] + for output, bias in zip(outputs, biases): + bias = tf.squeeze(bias, axis=0) + bias_outputs_list.append( + tf.nn.bias_add(output, bias, + data_format=self.converted_data_format)) + outputs = tf.concat(bias_outputs_list, 0) + + if self.activation is not None: + return self.activation(outputs) + + return outputs + + def get_config(self): + config = {'num_experts': self.num_experts} + base_config = super(DepthwiseCondConv2D, self).get_config() + return dict(list(base_config.items()) + list(config.items())) diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/efficientnet_condconv_builder.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/efficientnet_condconv_builder.py new file mode 100644 index 000000000..04562242f --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/condconv/efficientnet_condconv_builder.py @@ -0,0 +1,200 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Builder for EfficientNet-CondConv models.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import tensorflow.compat.v1 as tf + +import efficientnet_builder +import efficientnet_model +import utils + +# The input tensor is in the range of [0, 255], we need to scale them to the +# range of [0, 1] +MEAN_RGB = [127.0, 127.0, 127.0] +STDDEV_RGB = [128.0, 128.0, 128.0] + + +def efficientnet_condconv_params(model_name): + """Get efficientnet-condconv params based on model name.""" + params_dict = { + # (width_coefficient, depth_coefficient, resolution, dropout_rate, + # condconv_num_experts) + 'efficientnet-condconv-b0-4e': (1.0, 1.0, 224, 0.25, 4), + 'efficientnet-condconv-b0-8e': (1.0, 1.0, 224, 0.25, 8), + 'efficientnet-condconv-b0-8e-depth': (1.0, 1.1, 224, 0.25, 8) + } + return params_dict[model_name] + + +def efficientnet_condconv(width_coefficient=None, + depth_coefficient=None, + dropout_rate=0.2, + survival_prob=0.8, + condconv_num_experts=None): + """Creates an efficientnet-condconv model.""" + blocks_args = [ + 'r1_k3_s11_e1_i32_o16_se0.25', + 'r2_k3_s22_e6_i16_o24_se0.25', + 'r2_k5_s22_e6_i24_o40_se0.25', + 'r3_k3_s22_e6_i40_o80_se0.25', + 'r3_k5_s11_e6_i80_o112_se0.25_cc', + 'r4_k5_s22_e6_i112_o192_se0.25_cc', + 'r1_k3_s11_e6_i192_o320_se0.25_cc', + ] + global_params = efficientnet_model.GlobalParams( + batch_norm_momentum=0.99, + batch_norm_epsilon=1e-3, + dropout_rate=dropout_rate, + survival_prob=survival_prob, + data_format='channels_last', + num_classes=1000, + width_coefficient=width_coefficient, + depth_coefficient=depth_coefficient, + depth_divisor=8, + min_depth=None, + relu_fn=tf.nn.swish, + # The default is TPU-specific batch norm. + # The alternative is tf.layers.BatchNormalization. + batch_norm=utils.TpuBatchNormalization, # TPU-specific requirement. + use_se=True, + condconv_num_experts=condconv_num_experts) + decoder = efficientnet_builder.BlockDecoder() + return decoder.decode(blocks_args), global_params + + +def get_model_params(model_name, override_params): + """Get the block args and global params for a given model.""" + if model_name.startswith('efficientnet-condconv'): + (width_coefficient, depth_coefficient, _, dropout_rate, + condconv_num_experts) = ( + efficientnet_condconv_params(model_name)) + blocks_args, global_params = efficientnet_condconv( + width_coefficient=width_coefficient, + depth_coefficient=depth_coefficient, + dropout_rate=dropout_rate, + condconv_num_experts=condconv_num_experts) + else: + raise NotImplementedError( + 'model name is not pre-defined: %s' % model_name) + + if override_params: + # ValueError will be raised here if override_params has fields not included + # in global_params. + global_params = global_params._replace(**override_params) + + tf.logging.info('global_params= %s', global_params) + tf.logging.info('blocks_args= %s', blocks_args) + return blocks_args, global_params + + +def build_model(images, + model_name, + training, + override_params=None, + model_dir=None, + fine_tuning=False): + """A helper functiion to creates a model and returns predicted logits. + + Args: + images: input images tensor. + model_name: string, the predefined model name. + training: boolean, whether the model is constructed for training. + override_params: A dictionary of params for overriding. Fields must exist in + efficientnet_model.GlobalParams. + model_dir: string, optional model dir for saving configs. + fine_tuning: boolean, whether the model is used for finetuning. + + Returns: + logits: the logits tensor of classes. + endpoints: the endpoints for each layer. + + Raises: + When model_name specified an undefined model, raises NotImplementedError. + When override_params has invalid fields, raises ValueError. + """ + assert isinstance(images, tf.Tensor) + if not training or fine_tuning: + if not override_params: + override_params = {} + override_params['batch_norm'] = utils.BatchNormalization + blocks_args, global_params = get_model_params(model_name, override_params) + if not training or fine_tuning: + global_params = global_params._replace( + batch_norm=utils.BatchNormalization) + + if model_dir: + param_file = os.path.join(model_dir, 'model_params.txt') + if not tf.gfile.Exists(param_file): + if not tf.gfile.Exists(model_dir): + tf.gfile.MakeDirs(model_dir) + with tf.gfile.GFile(param_file, 'w') as f: + tf.logging.info('writing to %s' % param_file) + f.write('model_name= %s\n\n' % model_name) + f.write('global_params= %s\n\n' % str(global_params)) + f.write('blocks_args= %s\n\n' % str(blocks_args)) + + with tf.variable_scope(model_name): + model = efficientnet_model.Model(blocks_args, global_params) + logits = model(images, training=training) + + logits = tf.identity(logits, 'logits') + return logits, model.endpoints + + +def build_model_base(images, model_name, training, override_params=None): + """A helper functiion to create a base model and return global_pool. + + Args: + images: input images tensor. + model_name: string, the model name of a pre-defined MnasNet. + training: boolean, whether the model is constructed for training. + override_params: A dictionary of params for overriding. Fields must exist in + mnasnet_model.GlobalParams. + + Returns: + features: global pool features. + endpoints: the endpoints for each layer. + + Raises: + When model_name specified an undefined model, raises NotImplementedError. + When override_params has invalid fields, raises ValueError. + """ + assert isinstance(images, tf.Tensor) + blocks_args, global_params = get_model_params(model_name, override_params) + + with tf.variable_scope(model_name): + model = efficientnet_model.Model(blocks_args, global_params) + features = model(images, training=training, features_only=True) + + features = tf.identity(features, 'global_pool') + return features, model.endpoints diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/__init__.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/__init__.py new file mode 100644 index 000000000..5804427de --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/__init__.py @@ -0,0 +1,28 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""The initial file of edgetpu.""" \ No newline at end of file diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/efficientnet_edgetpu_builder.py b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/efficientnet_edgetpu_builder.py new file mode 100644 index 000000000..1d98e7aa4 --- /dev/null +++ b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/edgetpu/efficientnet_edgetpu_builder.py @@ -0,0 +1,195 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Copyright 2021 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Builder for EfficientNet-EdgeTPU models.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +from absl import logging +import tensorflow.compat.v1 as tf + +import efficientnet_builder +import efficientnet_model +import utils + +# The input tensor is in the range of [0, 255], we need to scale them to the +# range of [0, 1] +MEAN_RGB = [127.0, 127.0, 127.0] +STDDEV_RGB = [128.0, 128.0, 128.0] + + +def efficientnet_edgetpu_params(model_name): + """Get efficientnet-edgetpu params based on model name.""" + params_dict = { + # (width_coefficient, depth_coefficient, resolution, dropout_rate) + 'efficientnet-edgetpu-S': (1.0, 1.0, 224, 0.2), + 'efficientnet-edgetpu-M': (1.0, 1.1, 240, 0.2), + 'efficientnet-edgetpu-L': (1.2, 1.4, 300, 0.3), + } + return params_dict[model_name] + + +def efficientnet_edgetpu(width_coefficient=None, + depth_coefficient=None, + dropout_rate=0.2, + survival_prob=0.8): + """Creates an efficientnet-edgetpu model.""" + blocks_args = [ + 'r1_k3_s11_e4_i24_o24_c1_noskip', + 'r2_k3_s22_e8_i24_o32_c1', + 'r4_k3_s22_e8_i32_o48_c1', + 'r5_k5_s22_e8_i48_o96', + 'r4_k5_s11_e8_i96_o144', + 'r2_k5_s22_e8_i144_o192', + ] + global_params = efficientnet_model.GlobalParams( + batch_norm_momentum=0.99, + batch_norm_epsilon=1e-3, + dropout_rate=dropout_rate, + survival_prob=survival_prob, + data_format='channels_last', + num_classes=1001, + width_coefficient=width_coefficient, + depth_coefficient=depth_coefficient, + depth_divisor=8, + min_depth=None, + relu_fn=tf.nn.relu, + # The default is TPU-specific batch norm. + # The alternative is tf.layers.BatchNormalization. + batch_norm=utils.TpuBatchNormalization, # TPU-specific requirement. + local_pooling=True, # for EdgeTPU. + use_se=False) + decoder = efficientnet_builder.BlockDecoder() + return decoder.decode(blocks_args), global_params + + +def get_model_params(model_name, override_params): + """Get the block args and global params for a given model.""" + if model_name.startswith('efficientnet-edgetpu'): + width_coefficient, depth_coefficient, _, dropout_rate = ( + efficientnet_edgetpu_params(model_name)) + blocks_args, global_params = efficientnet_edgetpu(width_coefficient, + depth_coefficient, + dropout_rate) + else: + raise NotImplementedError( + 'model name is not pre-defined: %s' % model_name) + + if override_params: + # ValueError will be raised here if override_params has fields not included + # in global_params. + global_params = global_params._replace(**override_params) + + logging.info('global_params= %s', global_params) + logging.info('blocks_args= %s', blocks_args) + return blocks_args, global_params + + +def build_model(images, + model_name, + training, + override_params=None, + model_dir=None, + fine_tuning=False): + """A helper functiion to creates a model and returns predicted logits. + + Args: + images: input images tensor. + model_name: string, the predefined model name. + training: boolean, whether the model is constructed for training. + override_params: A dictionary of params for overriding. Fields must exist in + efficientnet_model.GlobalParams. + model_dir: string, optional model dir for saving configs. + fine_tuning: boolean, whether the model is used for finetuning. + + Returns: + logits: the logits tensor of classes. + endpoints: the endpoints for each layer. + + Raises: + When model_name specified an undefined model, raises NotImplementedError. + When override_params has invalid fields, raises ValueError. + """ + assert isinstance(images, tf.Tensor) + if not training or fine_tuning: + if not override_params: + override_params = {} + override_params['batch_norm'] = utils.BatchNormalization + blocks_args, global_params = get_model_params(model_name, override_params) + if not training or fine_tuning: + global_params = global_params._replace( + batch_norm=utils.BatchNormalization) + + if model_dir: + param_file = os.path.join(model_dir, 'model_params.txt') + if not tf.gfile.Exists(param_file): + if not tf.gfile.Exists(model_dir): + tf.gfile.MakeDirs(model_dir) + with tf.gfile.GFile(param_file, 'w') as f: + logging.info('writing to %s', param_file) + f.write('model_name= %s\n\n' % model_name) + f.write('global_params= %s\n\n' % str(global_params)) + f.write('blocks_args= %s\n\n' % str(blocks_args)) + + with tf.variable_scope(model_name): + model = efficientnet_model.Model(blocks_args, global_params) + logits = model(images, training=training) + + logits = tf.identity(logits, 'logits') + return logits, model.endpoints + + +def build_model_base(images, model_name, training, override_params=None): + """A helper functiion to create a base model and return global_pool. + + Args: + images: input images tensor. + model_name: string, the model name of a pre-defined MnasNet. + training: boolean, whether the model is constructed for training. + override_params: A dictionary of params for overriding. Fields must exist in + mnasnet_model.GlobalParams. + + Returns: + features: global pool features. + endpoints: the endpoints for each layer. + + Raises: + When model_name specified an undefined model, raises NotImplementedError. + When override_params has invalid fields, raises ValueError. + """ + assert isinstance(images, tf.Tensor) + blocks_args, global_params = get_model_params(model_name, override_params) + + with tf.variable_scope(model_name): + model = efficientnet_model.Model(blocks_args, global_params) + features = model(images, training=training, features_only=True) + + features = tf.identity(features, 'global_pool') + return features, model.endpoints diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/condconv-layer.png b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/condconv-layer.png new file mode 100644 index 0000000000000000000000000000000000000000..4410f7df42759f42fe8a51d7ebe0d2ea2dfb1ff4 GIT binary patch literal 42275 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 pwJ5Jxo?0Z$0Bv9!NbWq$L={{W6fEA9XQ literal 0 HcmV?d00001 diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/efficientnet-edgetpu.png b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/efficientnet-edgetpu.png new file mode 100644 index 0000000000000000000000000000000000000000..de59e48f812f51da13e1163c2cab5e16e66a463d GIT binary patch literal 52265 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 Kha+QVum2|y6@ym* literal 0 HcmV?d00001 diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/flops.png b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/flops.png new file mode 100644 index 0000000000000000000000000000000000000000..540e2285933527e65fec8b47006ff258900f07a5 GIT binary patch literal 244949 zcmagG1z1&E*EWnuV-Ny@beA9@-Q6G{(ntwNcY|!{+>%O{gmg%Uba#t@ba(eZ_j8V( z^S=N0_@3+X>@BP{*IHwaxW_&2Wss7B^n&Q^2=)q zN*`Y=0}+f8h7hzu9kFlzg~7BnxI*K>^^C#wf{$Lja2UdQLT{}s^s4c6_O$=Buim>q z@h~N_`m`S|Rigzn#Qw!oxC1f7$g{oI?Ny`fNV(Xg@8IvfBYxaJFVogrRYePDymzDM z>U>vIw0eVa^}_Y0F__a%+W*k{GI8ry!`ms^?5<aXCj zebpH|G-R~NJMd++bBm=zO@!;P;YxV|D7xT{eCcZX4s+|;9)A#!V5*+vxR&0 zZC;r0&i-Cqod>tS(>H-d-sF65n>Y7t?YJ~V)ipvyI>|(Gx#HNiZ!J1*W9zi1UfTt!XWa( zA2*qdG(ouwjZ{C&kk99E(XmvbxeZ4}^zH7o5@2k~+GCN&aC~$ud56PhO7Wqs=djX$ zGL9MTq1u6A6f2efKE1nivO}@1MVe4&_>1{3@WKYZ!6r0u8J%+&3vU_%Ke2bV#D#|t z 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

NN~&bJ*o^r`*tgWb5Lvppv8OOEe+iSP(%6-^F~ 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 z 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

FBTc?xtN*|>uma2AE$;&`whXZ>Gq;)0( zH$T+cv%rcU0~T2bR9=zUu)P~}gE92SPoE;|D;S4PVOGI8GzE_Fv|9k|{CUk#pgQPH zt=b9R`N({WI&C>`8XSNq)y4I5!p+77D%pmZAa11%uoe^3+$y zpGDQB^jD8%uQrg6=Hp)>C{76Y>l}?{i`Mb$Bp@NvsoX^;_Mg3GzP^G z`4!68%fN0m4Rh_Sg9e?r$w-W2?1~gZCkGM)t(wArek^Es9Ns;4#BndWaVHGTZDDv| z!3j~p6&Z9VOZwUaq9AasM&uPtv^9%w-x$0$eJA=bm9?Ir-vk(4wh#E39FO_r6UDdy zwc_L~-rn{PJOqfyxZxC0gq>YJAKPMO;6=W7gR!pV>-NJiDD}CqJOaMZQEW((uZ+P) zPgvTm7Atlc!FO$v1?H`?2!DjU`ZW74zw&)}d=uty0b6$FCY#m_Lup3-7YJL({kOYZAyDh@rHr?O<%68G>~ z6PQc4CM7k+g~F64GOCvaL%!hh(ec9$P?^kmDB$LmHQU3TovK|_O>LV=?QZe-ZrAGIJ zy5~7h>q5#`EO4WvdY*G=$RZ)fgmgf&nx2?C0KBQpnUVNxAKhms)sR(QbK2_5B!~*7 zt=a6^U+wbI$T*dG`wA~N0+GSXSvjJe<}>U?)`@|*^kL{;8G1r*rY*fQ7f@i(l^L}D z`8zVgg@mx#US^rU#YO9lb|%FE6sIu}Yttca?9rD$JS@@dvY0H@L7SiO@%Q@!ydp3{ z56^MwyH>$kE7~d3;|#sfpcJ@$P9fde{9JW?!G;I;Cz~1)f z(%^MZ#dWFMVms9PdYF3+;;^Kwe>=UN#jP`v5X2cFWqMrEoBD<0)YsM{EWG&75F{s& zohZv}8!hBs(|$#7rpaz~!NOLpBD?|+cM2N|aV_TT8^M!aP**baG&1&mhcaTRC;svc zb$qZGFSZceLFO>L+A6-TFOcASM}}g6ShF+6}{>xNh{`PQ95EcGXZWXJcZH(;pPamTP3Fanf!KU3@J*A8A z!BG~2OrvXeWW1D zAWR;l7iy$Bl5sl)sGl=(x1p@IkN=SzZlg8ZQg6i#o2Clz3_-4T8xWzi`3`%# z{=(~Ic<1H7I}QokQg3#XyjR5O`zCP6XKoZXJh*#xH+L;|x1ME@X#wh?kYf&< z&P7w1P?4cjp}y(@4GwF7Yfl3=#ewlbV~l8~!6kmKS_-Fd`b$V5S&29E8{UkKxq+Dr*am0+UKlD(Gv*ZfGgtw z6f$ZNjZI%}Hy@q1nzVUbQm!l3(q`r>`tYX5YU#NcU7?oli|X;ZSd)d>(xbNq4tKqN zvqN>gc=)=7$n;g+!e7TQ3jsKGN2vVJ)DGw}wY#1?efk`rrSXR36){#0Nl63kJ?=k0 z?oW^@#3@(?;vqc(JH4TtBxN9Mbd!Y8Enyk?K1QhE+&2__f~aePhZf=JwA-N@ z#wC%wH&wu@e2{PNYTgn)8UPTl8%Uy(e5tzBHXh~l^QQFgAB4>t0DgAhw%neUg;(>=kA0|{yj>AkrIMAW&C}3j<{t{{G!qpCb)Tbet7Y}Vn zY-QNK4STN&_(UTU?FS+c_9e7oKv}YlfHE;^-yBpT$OqaJ#?IyQ>MOw9R~vyT#)8&p z;*cOllX0k{bHh_i(6T)kD-T?7EwUFw*^a}{K8V|gV& z_rwf1!dG)#{%VgpcNpsi@HL9Z^Gf1N>+Iivw}v7rPH14x?^uD+Ce z9q+kcnp$@y4+eWGC=>pi4LI3@C-zs^Nx&k4{FBQ^SMMFHPGpAmi+HnM*`g#O!rb(s zymK)&%uglv(KOg!{SHe?6^m)J$OK zuBq*7S>SrW7obKl1l`&BliO(D8Jt}62{>8+zT~AB08sg^%LZp=n;&!6dtm4&&-Pas zJV}9diedmS02ZV++|8KLEe4=8jo?~!34u-+9B_{a?yV^q7RJDSvk#y1w!gqec`Mnj(>kOvA=tJV+o&HaKG|@IqLeZUoF=UM_K`@V-1x@2=vV= z147ZBFoa-%S8Tu{XRuDGBf%~vIu@3`dn23Xn=tTCyFPIej5(373yMU0ZshU%(;V!T zN+9%78}6rQFUgEuJK`K9G54r^zF9m?3z~33v%OVTvxc$u5@DvRuZvI4=%_X*M+}iOO$Ob$=2xJdUOgBK@bJx$%}6j7;r#fk zumC{$?2?h=o&-_ql#Fg=PFf9tyY1Gg$dDLx8>+j*ClpDQk$wSYc6IHqqya{`amzY( z@9lW%lzNpgj>M{qfWBTy>aU>!qa>(nivpOX4g2p59@4_3^kk*N$v>IqEGe{v%YfF^ zO`7S@{55R-tP<11MvEQZcL#Xiqor{VMx$krz2kyo2@v?zW+UtZze-{>L9jTmC6)!~ zt~#X+BoJGK4Ld7Ve6@lGBdrZ(?IPwq=xWgE@Zb>rh(=t5@AC2;Q1QM#XYu9Zprbb_ zzT~wN#XkUWtTr^arx(3~#7#|TV3D$<$kNj}C~DZafIxROn`mhvT@V&Mp(S~dNRbLX zPga`)7bVe!t!DR^ZQl^6lGI^KonoTfyLb|t3Fm<+$WvF{UG*b80FK9hhI)ksW|SJA zs-01OBM7bn2Fs^1bhv{g7hjCG1HyO_Q7yD0=Vc0*p+JUHP2`FF2El9(!R0p+I!=}V z6G(fs@@pxj?0pGKYs*5-TZIVG0YvGOr_ggNX2dK01_?P}c;q=8_2Pv&=REN(&%j}$ z8Wr(vUTS#JF_cgm|GJ|dz)yytQqKI-U_@@AlMB_#q)N*0?bA6OmXFUaxeUWNNxpJ( z)vBVx%{Is_K5%mJ(=nr3SZ|ZMVUrucs8j*q~vOx#wBcRI^6FeRS-}bFBY-{ zi!H%s4|>{s0QzkW#&_$%_(a@OvAmz*{`Lz98xF(C8!KOF^UGvz`Qeu4c|RIcTcUL9 z)g!jhSsx*~0K5<@dtZ5CLymJ@BOc~^G(?`nDYJ&Jt(W>*z<(;CWkExwn^D?JpQm)} z1ad>&RA(bLCqR)np;ERY=0(jD6IDs#y{*-o#&1p zx(p7qwee94)co)>f?FMKY`-F4q)3m3T+2Vso*MwX-=ipLd(96#fVcO-lhN^q#N?w& zEubNKm49Q{;o9%YFu`ZdVQMTEks)E%{PlC&KR~#qMVQ6p)i_+IT7kx>{uC~K$2rpZ z6u3|4r8*DHrojwkJ~Cd~+fY45gaw4DK`5`{LKp`NkikM+-+bGiIk;8R@A+0o?Ik6% zxA_Uilt<*`92_S&G^wemULUhg@cp`WIp-_SRqc=Vrx&eeIh@Z^?LO?Th^0@s>+h>g zo%)2_b+m5n;w}472X*yc$>E5Wo1&)$p4AC=-w^(Z@5 z=FZo9VeEA2!whf77fj71b05VnwcOe9leEL6raRGUhr%+ofLG4ni2Nyg0c zoUqAM#t?q%bluO>eLqiqKJWY2@1OU-`|AGUJDle_*E-g59P9INBOJ z@P|W*;Ijuge_T))G)!H&=kg;M7PaqN;{7*ez+{=~N)K<066?=B*LM?q`^I24cOcXY zvJJQse|W5z$1qersO1yigdzuxW{=Y<__72-zdF&47G_1nBF>8?k&EpQ3rj5x{`!mM zrr;h2TCx)ZhqjD;_~D&;ZGTAfG46pO%C% z9o)H+Q|{x;C+N<9f_F*-#7y{MG@Jw=eu4k!?=+K z0BBSH$6w88c@FfFC(en65eWj@UAm2=gjDGotID^ZENhl|}M0Jh3Ww6Ovw|~Hk zP5@A60ls~_>rq{+>?cUak<)G9k`NKH|Bt@~X2+jc5!E}^EsIV5c6$lhpYeb^=Ky40 z%k*06{VQg{ODY$>f2h4L_geuxtcpN?7~rH)(l6th4h!MS#Mf^&P!9ya$;4S612AVD zY;X=Ba><7UWBzm-Dd=H3MGZ~5m9fe9Y$l;EHHQ2Y_p;u@JpjC=@`-inY=Lc;j(Hup zjhrlLa{tqEq%nl=>UzlgfG^w?Nr?_^>KmyK<$#JU0I{lH>@i^L2wMq|q7s%qp`CF! z`+)zS2s{ZVaoFU%`G>7~V)&T2;vhY;KWyShI7WyirnCWZ^{VjK*Lv;D{tztw!vAD| zAti5DpN1u1aais>y#BvOCDD6*2~Xf(+*$1w3-5Jf%hur!Z|^UXDHv6v(ELj8J}3On zW*f53KT`Z^DPXVPzk4WIIuW+500XPB6*|D-L!it4lSBO!E#`Xr4uFLIOh?w7?}Y6@i+viW`$26)-m5JgNTNR0;E7#)2v0D77&w>Yg)n)2S!tsm0R4R zTg#ab>z>iF4a7V1Ls>Oq!?aP4@?o^eq2thJ2y>(IJzgN90>J!rDx$OO$lFDvO0f9? z8w|?M(6@nR?-(3NjqAePG{1Q}F?s04tZed!rE<||{wNd($75x0z?u($Fz}r8=?lx} zOk{5WuW$vaXDiY(M`7h-Z7#o8m^elg&y@yeJQ`p6 z;B!17YtC^dp}<*) zaG5JUzQ+(k0Y_LSgeY|t+H;@aP)&fedjZ(GMV4fk;sd|^ekSU$vKUVvfAbR^ve9k@ zO^0D*C6KXAQ_~9+?(Jh~Q}q0P4eBGY8s(nDQjsDK{xJNK-AMR}{V8>tM@0Xz=aULF{GWnXD?3 z4T`(6Ik*-;srW%P84Sw(OBH1r6d0B}mAg=)^1~G!^)Tct5Xd@;P-V~l^#zP=*`YR< zyWUd-#F9R|tl=)&b4Y{I{x1|Rbmx#;iC)f^OAD4rcq2c?gD{Whz~H4iI{dma_c z!7DJFcneOs6(=I?nuKkK-B#CD7`|T0fk|}T&;VeEj;rjLB5wjt?JD+?$0_I&7vx#A z9=pB**?>Z{xSI*Ueib+Rc;t2~r0|ODZGnkLN5OYa7klXc>Sp%1=dtz$ScK?1e!r3e zT>?bp*twBFoNrU+B7C1qtQBd2B$9oHWIZIC5Fr!I+DL$;t|_CE2v$|cVLL6%s-Ecq z_fO7VxKH-8a#IHsu(f_8X!z3qJoK^Q@FsFn1t_@UfqH#B=!Aos9sJYCa+Ps$Q1;pe464ds5RVKFc#tFS`TOTpf+uaMu0 z4KnV6G#jv2YGplFV)4ifh8);1+yc8OkoDyk-hzz|Tphjm%3xhw;|tPJp^+7kBb3Ni ztbgTc9Z}1XnP1&aePM*N{X*Ee`nc8dB*H_v=1fJXz{jA(4uW;x@riYr*+DSN{kLxb z17{emublrjyorTvR*qDog58pRyK6<08Vp=!$EQEhY8{Dun*e!?0Puses_<@oqLW~Q zZEmheRaR!S%>{qt6}hR1ebTqCS%_P`+e#pG)C&jzVU9&`bHdHnCiS zN_dQhAmVUyQ_8fH(qo?lfb-J+wKrtVtr-TX3QQ zcH)r)v5GP;(#1Sal^hvjWZTas+xO&L()+GYm3KrbHO1|UftHpWvc@2hq}un}2M|UF zir}?tkA74-d57iQazX1{5YxHYQDXP?>u5T-{vZ^jSMKi zhUWrZb}A{lul!PkHBk`Gf%eIPGhe6l5w2s;R7LSO%KGc-1N$p2x(UkUnrqb_7VN5WOnwsk}nzA3_oDGWa zR`7u~)bGk({9$qkN^-o67&@}h`&W1u#f}t*Siid2S18SU1-`K& z5$*!hB1^)3*8zdNG>~9*3cPz#WEyE(f4pKTjM#I-Cm*`H-MAR>mS%_C^# zQi%>3G7=yaxHS!h9z}e6$t!3QglM(bxI}##xPZ?y^TrnH31SFWph07Ju-&c>66)vy zp==(cp5ZSi=d9+;F0?Zpk7!(~U+ApDXhcYjFIc+UbUobOFiZu1$_nQ*7A=(mJiecI1}VKGB!5Pt(RvDdUus9(9D|gQk1|THfm`!iUtIG2`|1DIO2NuU!oVPN$HS zWMN=g4$kUj4#1el9Fsb_H9-Bx0QM*(2DQ0N>7Tgrh8>}w`~N;wS=wK?1wpQ_`5F1o z;tl0H$Sq;ork$-e;rj24cCnr$OJw!(11~N%TzkYSX?ikhbMeVCnSgb4W{vcleltGC zTVUNs&f@~P?Rt|DtPMz*=qFk|(3xyH5%hiBZ3Mq}!1ajhH~f5P*C57s;ENFt829A3 z_*(GOZT7)+@BMY^oH3T1g07LK6Z`jde1=FyeNs@tCq_@_K9A;*n7dNtsp}JNbHKB^ zK{!fMeuYZ^?U=u!>o{cJ>@8IO%)RlDc<_5B_>7;2tFl-n33^u` zrta`+p)bhJn+V5SoS19GcpX>t(x?8>8S0IfkzTScxi4A8`c&SOKS2VPhQt~n~-r9XgF?TMg`!`U-wqjO8}-bP2L*8EIw9-1DrGBHDo~GcO85uZQku5zz!f z?h*dygI?3%^3r)!c~+=Tcjnc(Az#2b*B4sYYHQw+{-(6Sd1EGN1IKF*RtNdOGt}3J zg`0np@xi{be+cs)?xq$)&^OGaY;U?|b~USL>IOApGlV>ZRON0!XzV+Z#d<_hE`fUT zq~J_wIA3HCx0ri`t>=E`(bU%lUr=B;>?jeiOje%|q)VRbKQHFqq52lt(WMuZR#^24 zxbSgvMLqy~@gA``{a9IFZI9m$d)6a|M<`3Uaoly6GlpSH47LdxsbC4t81KCVU%dt! zDZL8FyiW6f-fem2Epxr1V~>$%8~;Hfmo-gn~?G5Buq z7jID&6tK{z_;IU&B6Y`MHzxv+Fm%(H z+f-0L+K@WPM9kgRdR&w5rcVr@1a()m^~X)THd4y(+E*k2oL{Z{MeGzr=+eDG2d7;x zgIAC*G%0Hl9ZlIRbJ(`wq<}>W*6FRdS08|MYT#+f1BPex&o) zl?7X>f)U@T_(iS}>1V$I97wg!Sq9IUIv^~0_D#%MH zWIki}x#!)hlZ69q;@UYlwT$!#3h#qE7DI>OMXMA%jz$U$K&rTm!ld^uN8LPCyA;1b znVW=v`-Fl?0TgI6GY1cpEww2Q#v#Zd+HHj}lh>{?CqBOqkIf{V{@rn3Oveowa7Cqw zBsSwOsjBLPI#(@C z&z&-ru(jn)N?I9U7+NU|x>AGET1b9$6179-e^?g|nr#Atc=s(bvomz2|7(AI=TTCf z|CL}PXt7rMQS4`12IJQQ0w}l>Y>8tgy_2+Knlp*vHv9G;DgbyDaU%jgYymwY8JX=? zxDl)-zuAD-3^~h$vdj36%oa>>N|V%b7CSNx4fD7ffVV_17k1MJd$JP4ZUUwuLEsu! zGERuu$#+>r_;h??a&lhuu}wlI8$!Wf)>0mPk4Hpk0RHnf^;;%><&I6Dh#^YhbMmt# zI;bmB4Ew+YQVfkG6&9z51zLICE#zDgzUiafzjI2C!R*UEr-gA=hwjylESh(Bl33i%8BnQMXfQ9 zniMsIy_hGIcf7TM4T{7ajDiP3=an zf-KbAA~)B9xWe%B|ZNXI6!kA(z{TTki4$_GN%9>-`UdT|r7Dl7P1tcs{$# zX1?Q-M2)4qB&=u!XXZ6wVh2phbYCi2(yc@4uT1{v3GDvMnB`gNk}3nhzn4K!?NI z8;J@5kJ8%pKA7{HowEe7vTMx}^Q)ZDN_YNY*vLm}&75i1+9uD0eI6v48l5eIToUvS zT*P*al54M><+xZY9M?0c;Zq#rViDihIYRVCdESDwC73ybU!xdY{j(ZR!F*_-2IAt& zjGjk1e?4xf1F8l}#gF3uyY7atAV7EOvRco4Y-6$nb5Ou^BgWnKq~6FlJ=uwGhb-Pi zf5Q1PPc*K&>w6qZEL7xf19W#*u@sIhT}bDsm8S<&#)T#6iS6P11p{D_(;hB1=L}Lf zXb%g&B(W5Pb*GjD!?`OK&v%cweuSEyF1tJMB+vYw2@x70v&PU$hg;Wq>jmz88^H}B zWJsZ_MF``5QK#qmZz@Y)Q~X78%$1huv;5pBMZIoOq!#SnNB9)`S*e+_^>b4h>I;m6 zUD4`XPWQu~-(@X(a}p-?#F~r`UV;ki%?uncO?<;duuA)|)Zqt&yrK=D((<+^D%%y# z1ChGbsH$vd@;O(ey}wh)?MIRxr%ZOrp*8Uv zo=@97igOmC&O2HZWlgUpsyetqwiUP9?J{rAjf+f5ftY>Q%VoJ!d;A%jcb4b49o-p_ z10n8)u1#@5E>A);91(r17eZM<{Cb?>qVaFPmOt4kA-!O>TL-koAwNBFWYsF_Ot_eP zo`G2gtKs}Bpc7W7+gPbGwcA|NwayQ6=(jG^0p+f}Clvs<31{pl)fyU?zwqd`OCZc( zL0OH<_fos1Pc#f#zsec4(Ddz}M2TQ>Im|-neUAbACWS-V=q;f6Kd!3<+ zO>S}geSM10gO4j@_0@NLva9B&mc!QWr$Ie3?0Easa;GV5<=~+jdX@7>J1jvJ=~!aF z9V@F=VmtOb`%O6+$gn3Uv5KE5TG*1m%^RI{!K6H0Sy%%!PCpcq_-EvmwSd`<&Dm)| z%ZA-d^00SsQtyX(lqj<6#pl;%Wn%82+#zlAfwHQt-)8Hf!OcX5+ zx@9PzI&p{h5WK4viS3`48+{!FfOAtR{2ns!I6WO6=N3Y$WHtWkC?@^SSCesqT+7q4PW_h`KzaN{57yp&7)uVMqdL8~ z=Q-hAt#;BqJXSf7f`>Q;$zu=-iM{(>!wf|5M%yIMkIno5Q$v}|yPyxH)z}D_q`527 zXxL*nrb@Wyg;O&=;{ChUhY1Sxj)#vYL?CE&k+Syv)C~Z4=uz1f0&K*DE9+2RXy284hfp^@-v&Xgx!M!Dkbusnz)H77FNVIfnrlU4VxH zd;N2^MhWA$sEdswtCc$oBWQNihA+gf11s#c2DsiaYq>+aj=wy76M4P}S3pP~;^LuPnLnwGC z1@r+mfteBqbh57FfxRo=_*1^16?nV3bBoaIu7!_ivr5`N@&);U=nCUc7XA21JK3EXz1e*PrAk7e6L@&y zlCpxkHwg)=478TU6E)VH3g2k23xUCUQck=V4~ z5W4a4r5|)r#@7P_eQ+9haQ(grYe96w>Gmc|#2)+t<2{s~!CPWrIe96G>bhi1*`B;t z9R)Dt`s)Jf*El(xmmn#q1S&L&ppGuRg|~;xt{kNaEG*=dIPvkY zCPdV%0PgHI%XLb;?SURB-b}$e8X}w328X$@)|1O@*C`IW%w+F4Sw3okHi7p(l5xJ6 zD)vdmRXEYKhX7f$&7@|)U5A`72hR0=8p!tjp#S0Sjw_}>lL}$d93P1K@*?iMCm%OB za^lgWE!qiimf-;}8z#!IT&&s<39?ZH#fbXXu5=#MaJaASxd?yylq?PPMRmZzPrT^A zs>vjYO-{BkZ`Iqs)2@}VI|_Z%2`$D?PvC+uT^%8&i`Zlf8&h?CGPs~5Qs(YyxM1`w zW2X#U@TMOwklMMx(hx3atJq$dxjbpiR6XdYpA(8JV&;Cl;(q=?`?!V&w8sJ zfqw1>yI=pgb0s%id1QW{gMtn$?s^lG+H6R=5AVM0dJTT6&6w>n6$H0&nvl45pg#mM z9wOMHpYSX?5Lo~h=1tXxvO#h#?4Hnr+JXtnvL6pa7qk8-pG-(3T#%DHq0|byLdNdc zm0r}|)VD^Rs)Y11`gy_VJEjoZ9h$@%N>dfSlpfoP76L zB`_1l05tXoeCI`lrZHOEh%yOPWQdSO3l3CReG3^>MA=HlzlAJ(e}X{6w)2X%JStq4< zs)+h7%#zMeD163HtpJHAJq@N_f232}FbEW(3V>mlj8x)xR&OQpYJvT&QSR)(eA*a; zB^!HE2{L07s8QnPpF(JkVshA*D!r$H*Jy8#=Wo(b;E??b9Z>6m^|EhcOWozS+1kI# zZ~zPNF-1a$|7X|hKO);cUHJS)!xA_Dpk(;xFMfd4d?4iM?%$yk|MhP;BebGsHe_f2 zKu6k%EG}>_MdIza~-{Ak(%X)&y z8d>v4@_$dI{@3X;3cKZnV%4sO921B~XqpHhYDckTfhm=6{F?x=H4ywLWW?uDdm2LR z@$u(+=gAc{aM39!tAp?p9yFb#|7qV1c_#llLHW{aZ9Xbp{11RukH%ce0{}a-?UL(2 z(pP6CA8aN}5D&=Rd3z$mwml8RD!>a#VjxfwBTVbfBLGZTKe_Nb++AjrD*xS&i&u&Zc-ozTrH@+ z($fq2>NlCQ!S%K4Y`@hF)Wq(B-ntQp3XYnd?5hi`s~w@Oov@P^ox+=*vBpFAu3INc zY+E|a_H_asJ*wZJE7Ncoy-tT}2JNd8)O?ruq6-8}1q6OZ;|kypDzK*O?E@>f-mf6p zA9VCSbdE3Ka;r+>2bs|Wn6~?Ti`nV%vTAW^hR<09B@WA>Szs{G!XJ|PT4;(KMbH8| z{5e4mJz-iJy4Mgf+3rK*qq+>keflV0A@3e=cRGjMJzW$Q1q=`bzJ2D|%7JS@qvzEt zQd=tSG}jDaaqN*qgz#QqpbWaEVSV2`B6sYc9Rv;9EU~d{EU&*pv!Qh;N)BkK(S1;?50F92%(U`t2A;k__f55A^3gBVt0P7XgV+8uH|`O zX)IGS$E*pRJr&o17K2jc|1to%0HSlrK?kh*Cq4mXcF^`=LoEPa-GW9wDIZu)a$v+^ zyge70b=}UlK!89~Q-!fzhIRGSGM8VM1c}ZD>E#++pz9Y8&bxju5+h%Jkd71DgI;1z zy3)}fGHu5guL6?N364vmqc#uJ@+&}iS=spj-1mc-S?g4C+f_t$;BC5KDMe{&gCCKv z7d;d+@0*IBhW1&e>DHI#uBqcmk1^iwP9{F_HT( z8yOyeAA?<_z9di28S~ogytOHKQO)`Z8OsW_um+&n$(iXFAi=A8u{irWed%r%tvWWO zncdp-LpUxca8F)gd?B%z93ykW!%={a{(0L0xz*yvngWeBA*?Pfxy9;PmK9~gg7CLW zIRG{07HOXYk9*Yha_oa8ecDEZ3hSGK>maoQGEOcMMn2_jJWwXRcLj4uvPyRZA}{;y-R08b4VJsT!Kdsr>JSSAA(oqsQ);Xw@q$8!XWuB- zNLZ3hstFX|lk zXv|o!P37Z@ES4+qAz@Q=l;T7(9}xmBHb#`Jv=Bs!i??_Q7OmUU4$nRTY~7$@wv~1A zRAXX5bU~Znh#&)APdwlnbzi;a9I55&eW4N;3X|f#CHe@!jm2xfT(+W!-_W}$wvdzl z^6#I=bZ99;nWAkz4F1fCT2e?-B8(c$gm$)P zj`)%fRNsYaKp4Z z;CM}(%>pxiAA5pGSDK)iIh=Iq(3H4TFMA9swAva{!Jzekf~-AdZ!aVqB#YBOIpY$Y z31eRf_8HF|JK+Vsc{Fw0a$6unVnarMiFlD1;}H>N#_gMG-X<(&oxt|aya0nlVTI4p zgvk5`zS5%E8#y?dS(Adfzs4Vv!$%P@9lxO~kF6~hR&~?DJ##V?0nM^nN;L z{NY*cn%py-Cf?QR)a$ND`zQRqb&5`Xo$ud5s=kMCA)slwB}0VH^%Ct5z?lZ4m!Zrs z6Zl*8L_(bKbI0*TE2fjqn(RC05uZ^Bqu^bwqnbE;t%N5+ zZ@Auve%B`)V_!Yctd8v)`%17^QPrK2`$nL|qrqM<5Bf#IY#bjX#}-_AIT$1{hS7nPo^AiucJM*?S1S z!a{M!P4pE6;VW45-ve^2&OsrG(PwOF0Jjy@jHV+~^llYCog8-GzybjP7@ncf5!v3Z z1ux0$L`-?pGVzk&?J(1c#|2)H)JuyJrdY5KLve}C375^p3xY825v7;iqs?p;6d$HI zJ*ayN0iTUW4DSKdVuVU4=Ldw3E)zdM#xJPDxOxwO+`(vi7-VE+Jy6st zc1d(fBg_9Oirz^l@&bUxQ+(ha^pOY8YV>Oldh1*8+>q&MO27r0x4As%Q-HSL)IJN< zTIi2o6)f2f)%imjjx;QsBM%rc~OL&T^UwTt|@6K%5ej6B6=&`02?HAP|ipZ7S+n zi#6>d>7~23y}4=%&B$yoLTbt06cF^`oR1Ah`7!GskO-6uymNXBs}q?!1CT9N({3K!@fihK58KKgH#!wpO^g zoDPWeA{?o5Qs`5Fl`DMU*}9T*Do%F_-myNu!fm78i@$ z-qJ!F))rCWIwZ$)+wJQQSB@t|jEXYM#`}1@5}=b?(G%&6iL__`(fFhiNW#_xCMBCg zDNKn2&TLOR*w7mGU^rFffR zAv@i~;yhZV4)ph(9+Gt$c7PEAv(5+zycfnhtr;;n$73iH*C>Ri0k6%8KC{_jj!1L` zo}s57o-v+<#{HZff_pASeGmy>j!zqfv<5|zyW-Sqcdkr{2MobhbUt&nIS8pC2Digu zJh8=n;@&p9HkAp5C|i1Rb{D=#IGbS6_8vGT)^Kt$WEzzbgDZCdVaa^}!rY=H*nE(2 z@RG$ZDmkkv?tHN;yV@x}^%;4xq`^|qf#aOQ#0O51$o(zZP%K!9g$$h-+X><>o(fiO zK%$U0QG4so6FsR!V>P#;)3!aS|2~DibFi-tLbNR}&3Li>8=NQ# z(a#^P zKgoIxvss4x>h>2XL$5&tlPuz?BZ}CE_es0)MZ#f=BKEN?5Uo$gcu?i!afLmYnm^Ge zrSXv16`TI)LSPr*BXm*j1p-H@_g+3w`%!R8jKewsqOT?<&&dQj&}o3|irW zhvn3<;mrxF9gsQDku40x(&-+7abX(`C0lCifSt%PKBL5(mQ^$np}Pe2h`HHlhg`}L zAOWoE*tEp#lKLQ{!KQxfUmr+g{3_?p2eND1`9KAgu#soC4Ab6@s1gJ?mJaM>K#hL5 z4kDxiv+*bu*aMwd)8<=m7Q?^J53MIm4?ozjo`k|!N~eb)gV%%&nX(h?Wf@wcELlVy z^B`Ni0lv5F|Mm!y*#7@~gtt(*3?8|-ytfrjKxsxqKIhN${#56VyH7qzo!w;EJC&7v=g^Xo$fF&$w&e31fvj6r_rSvT!;_fEoh?8Szo3_B zcN3y@NA2rHqrF8Y%B-|JmiA2fkcPwJd2i;p~<#4SQ}dHMR-3IG7e)E8gBq zedsLj=jwJ9&auzegE1OzeC=WhIwbgcny5&F_$kDh1L^Vh5 z1N}^L)l-#n0)i&n0)r(rmg`Y`w7TcF7p^39$9&^(P?*E*BeMSKb9J=eAoFgEbnKk3 z)mnkA0Do}T>`hMR1V3$0jc;3~8_MSf1DD=gas|-&VWpswX|Pw77bRpIUNiO-5}Aq* zaOKVm5~n&_kHhu~666^ycm!K{yvv|s6Q(2fx~j*>jbEM=Zw?ghsc zP+Q<{AfKXn!cUl#LSos2hg5lIm0x1u)PI9^s55I{r)IwV5t$J%Y`wER+!;;rnh$F0 z1i27zIRBy666qVO)2tLtOWYFQs%7&jl4;W_Igl0@i;FYYNR`ypd3x@(oJzuClogc2 zT2SGq!Pq<5k~cfcTP}iqA8qZpT}n~|5xw==-RdVw8Tk!nwn#E1?ukRQ!;fE|Z7odp zEf|FvLk4x))`0F9jp}tstGZAFR$Ld#h*u#(S;z>^M%;}Lor!W)RFGuuESxiMPEBbr zz{iN!SH2Rqq>h2o^Yq5{0C)vm1%ZHJAg|3q$OYXY7ldk}O~q{OQsC9Qu!VAwQ9vq8 ziR^;jM>@b!$8#!o?L9oQu{jQ}%5ib$A>&c4;$I+8eMr()_c|E9+lY3<6b7DpZ3v$O z7eLTPHFh^KKPGbQsG>Ghrlu8zkRi9Z-F(4r2qcgJQmvZDuSyUZ^iwyq{E~a+JaHFy zu|&0ypZZFK{&v`@^3@Sk&^M$?9LU1@X5dQr2bWy|JbDwr?+33Rz@uYVyc5_?L3?h) z=aCRu{EghCTuAX>Uy70@AzT0yh2` zQAcM>+~X{nK(vHUP5=UNDb%0F9HX$fF|(=q7SM6OMOM4U(>4Yyw>Q9k?*%%_KcMfU z-w><+s?$XD5L#(@sl6>p`(<%1{av7hYQwfb@jo-;y&(+f%B^tgg72H}GoD*=eeu7G zr38o(&<~-Oy3u`rG1P3bNI&#JA}|-;UInmIb-RDNboQ(v^rBLf3q_Ui7P)zkwC_Q{8LtF$V7y%pJ+fFOYwkpsd-RW_$oNI9iyRv!Dq3rYC5YpOi*< zItpC2UXW#Ywyrnff)0zXEc~PPK!0+4NahABD!^b0sp*!WV{g{B#E!!<>~c$73W)^= zO6jJ=hxds;I}tB54M0cHoe;r^VsR30-xXQ+W-D@&1*NtOvuVCSGhxI?LZd*oB@mn< zbE)OI1`xt@MQ>l_?5jJ)up+}yy8x__E{u3klP*9lBG&`Ee+P4xcJ+Uz$z+Hr6{)*ofP%gmn=lg ziQqhz0NAy$^IyHC1)wn?z|7gn`Odr`?}O1Pa9R=K)0M{ge9yA%T9hrXSoK4clL(M3 zkb40@Ra^BAY6n;Z4!VQ}3uaR$?@B}$-jZp96!S>oC?r@B;e0`{lB0~ZV6Ta}gCPQ1VZZJB}uf|3#v{2d4Jfu%O_hYyQ9{>nZgSn<>L1NjZ?Y z#mV$Zll0z$1x`b=>|MCoqVH1T)%+cgo=RYYn#ix|+w3B&t& z$;K3}gR{uoq9c^`x}f#X0n(94`qk|B0uL?CEwvT7$TWeq*zhy|ZpNF7#WH*`&D~Kh zbCy#BnqVQE4dU`iahD;csKk)4&NLmtRAAp}f$311iIinq2IHDXKvhFSC$y%*s=~D% z%b-*;);hLO|7A|pS^vcCUBscup3TyDdW1K zrDJ`hT;j&p`Ol(rMXyaSc|R9DA~b7q?Wf5LHs5rjzz#Ha*Ty+zuIp`I8Zd7Le{{jX z_pg2Vsise5b80ShJ-u2Z{s1%&3PGOJd^dJc{>TH?@RH{);$9CV2U-VaO+%4cL`EnE zXxMv2f82P=nAiUn*xbF=kz2MyFyLiluZH!8&`9#^Yi5ylm4^^*WQ}9=Uwx21=CgCt zSEz+j$@esVOC#UjcGxYcJhQa+6h5=Jdg@MwBdZVqChAlmJ0s7EAt~}wMvR_BZh01 zoxTH`OIMb~LGyik>rOr{jkgjHS?kggko8@g4XWnPg2!{Qx*>Qv9~rkRWl~szp&p{; zubls$h+i?kPJutXZ_;%)Xlt1SKe!|HZ;tJ_g3Ay#G8OmM-ql)A@)p%CTq~IgAFed4 z_$Y^o>LbT9F2R9;V!Qh4W^^<(CP?xE2#11g$whpEngS9Rx4|LV%(PNS~y zL}^3*pXBt=KgP+Ui>CUU|KD%=fA8u4&sD(Aa1R25DbyYE?Fj)f(CxErljmB?X@W_Q zz#9JC-<_y@XbMW?+lD&UXrdTmJrd5}jcW`)rwWd_W)C-^Q-y}-p#5qEfZ2*Ulo`lY zpm5b(L!$hFgPb`Wp--(~q&XTpW!W0{B>C=H#)h0Rh-1j6xE{K@<`3PV7nTDO>y5*R zPwO^_Mi;>ay3R|JM@tNb8US)d#-EO7AnaR6++Ls3hkA+^*qn)zXA(=23q|IOzIbau z7NVKkKV|4LduD@RD*yvR)Ex&Mv_a*gxeZR#Mg7k!_~Q~^Ioqtpr%BU+hRCA~=1a!S z%0k&P2KeHOKp*M;j0_EUM%;Z2q$eOaB^5PjVkqFUxyBGeCvHn$% z8puQL>?*0VDUM{={E;@&%7>N*@bp=1DV1pGNab#7uz&`mgTh(Xe^c#Y`GIRSUTqyi z_iyirL+vI$2Bd}!$i@y%C8o{PEv4YyROfLvP#Rc*f?uH;DOf;jOwfojd7kgt1PGn9 z%bc`65>gb8zTiP=*~>5vp}|;B))T;hv+ol#yGZdW%Wk5P&{k|`e(qk}u4pisKkF-~ zi^tx6ha}5jEYw$CUAA%KANqM$8sWCnRjiyx_ImlG{^%a}ov%DEtmDHM^A5Mk+J-dq z0!S}Aa*pEH=iCCnkovbS7hnA%Pf|o_+v!0>z>I;bhmplbKu)d@o_CTzO6^n>m z+4n-j8wa(pKX}5{A!bZ~1y-Jz-CBINpx5ls zMj!NC_O|jzsvb8`J#q4~3zO-sp}3a%&Eck=qok-DT?0A`a~Ov^S8V({b8aOiB(gVr{(D}gye;^psapZqt$%U2Nb{9Y$q|8IU5 z{vr(-1!n5;@CG}IeaAt)x;(c}A6yEivNS;TM4_B1>R=EGE#W@9 z5sN+`R!i92Q6TDSwBPfhVoU0#FNMiKtSfqwHHYn9PL@;XqJT&J9JGL|Pe>nkm;=+z zNGG>Ib@yT5?5Cy~z8&Jr1rCHGKfhaWRd5z4$6EtxYjb$l0CAQk`n2IjpnZ1Z;nSdp zK*+13JU2k&C>KY1BaYN*iCw+@l9-c4buY6#&L!TmMKhX7U&uG@UCg~<3BP?Dzs4)! zx`57T8W~9Pi*vS59t#RUF_|1%vVC^k(>UK1gI1%4JSL?XG&{`2I~vh9R@4S&kpl`} z(TID?eTO{lXDY{r!GWV_Z5apqW;a!d#Md~x{g(XflxiRNM3llv7jJeX)4J5owdTUR z+q*LTVHLq{{ka@xJyxjNSaH{G&!fg$0~jF2gB$bEppJfblmwbppqogV&?HPe>?G>Q z0e5CcKDDJ8j3%wHlBjtmEb>8LE8oM`h=2Qx1^vbh1Se@!P~E2W^AHU?eiMr1VmAgO zHd8zhnXWPreZX zp3|=t!CizDay_gXg3vkBHF&B!M53G_=b=#5Q}e?-eVzA zbve%Q#-)Hn()m3EsCqDiVJ;GibW(^;u@8YAaZ(~EZ>r1FwRMlsx7SrFB3|Mf>tdDe zzjlEHa0M5L25R)bwt+1T_XMs5d_3dfwc%q2gnqoX8?^9=v1giPKxcIwptVfgqhJyj z1pd|RS;M`4pe0(VZ54JyGij3UZP-EG7Z=c7!-rT(Vo9%@wjoqYc^n!N`rg%iVNvNm zlwWS1^q;!FD29Ig2nGCcn5dZ@zWA74#TRL12B~!G%&>9|-LaEkLB%zkl2@n(liFN2 zGFWL({e`&q366n;Zaf@O6w^M^%tq~uS+a#ih z^pw$QR5~kgba*vU1Wutbib!`S=HyezOSuHq0Q=lG=idF8sr%HRVs9N19+GjnI29q2 z?X_~XZHQ-R9PXHwk|rVd!q$&3P;e*x$oblGAJJiN8=gIzNA#l-TLn^KN%hnnNAOol zE@dh32U!Tv{x}f-VqQ~3X&4IYe}5cb?sQUNn6Y^RdWBiUD$9;!KNh)HETeqt%qgtx zQBLb_@sj6ecXfd)`bNaTXASnPIS%)vHrtF&IYBX2nna+Q4{eHjCr_y%qF6RBK|KF& zsy?6qVe}`+v4l&1{LiyQG0Ho%yC7_%E4{=s}yrWMI)Mzf%jpWcIAEXexlE2(rN4 zuNALN$xK6Oh=hb`D~ej|JTYj=}oE zlwcA7zRoK%%-qfUY5%?!L0$r`CID;U^VY?fHry~Yl zem$ToYu=AhPlFK%!vbPX#$FVIXLr#V_Hy=^Bprg$ET+!0Yu>`dXPX`KuVJv5XYl-> zu+yAg1I9ERaDFgtYrf&`6-=P6*Hvm;?wLQ?F2!xhO80N!@YN&7Tjr9#h{rJ|dtRKO zu?L86ufcklu$!%I^bts3DvOsmN|+yw7Q3=vwyPX>!^O+?_m9Z6?}oN zj;tGdocdlM>hRTM>VCjUBiQp`!8pDc#`>xYYWqX0_K-~Ff>^LLu)!hYHlRUw8@$D? zJ3n4)dhN~oD_*RD4;Qz@-0u8e)NXDryzzbvq1Yr1vYK^+`mbJt+~s@QiYXy^&Uc|X z&+ikdD)`}w#a##;gwLhCg8Q$GT!T?8tj;!q?AqA$E^QAO*TBJxgwFj z_eF`UP7VWE8?k=>^hBy>7l*+-PrB~Eax`YNC2kR#VB+lC%H{imuhXEsXl<+1kK;H? zWB-9x_Hk4p|`eN zDDQf_%f8?HZwVdJEDWq`i2TY>qbLsCz*>NGzk(@e-B!zR(oEpzwVeK*SSim+VPp~7 zVgz3r zfUn_D48Dqbb`EtMAy)T_rm zgchs1)-)cLG@hVZm~AkrDsv5TTj{OQeoS~P)#zn9Tw!H{+@6dlFy9#v(XMs+l|CBr zJTaboyO3Pt`J7KlW3+@}-cPWI;qaB2pMu-sOAJvR37tD-H(kr(G(hXzSbBLeoRtC9 zc1Y3q0b}@~jC+;yc@TSKMd%r*ebH z&AL-LaJ6h8X`E>IN|N|)G@mszmeFk^lCu4>qEZa|w+rEa`Gw-VV6J12{MQYkcWTJL z#dX78Dm`zrm3Yz$N#OEsb*m`dJ~eE#IV5Ojy0(Jsb{q%GMFH0{VHR`F3mpk|DlD~e zZhOv5)il_}Kz}$0Y-iS1s{3J7(Gv@nNSSC+`VaPJ|83?aH$VRH-Y{;~Uy3$-8RN56 zrp*cBVx?iB>|oO3;s;%&N-nhwa!j>iRM!?Dtb3a7)*khYzoONl#F<5Ro(S?y#xSuo z*%n|W&KQvQ2_Bu9hSMzzxl5y?B*#AEHL%?=O~ip{TDD7%qq=)jq|69RqjwiY$3Hv> z3t7^F-uubfDH8)n(dzM^mx<%2@$!al4hD(IidTJNdTuE?=(=1Py!Yjmd@4=8wn~SA zxbu4y$8;Nnc44D4os)~jz3PGiYWTQs`g1@n7jJpgzoSKze`(PLO*T~O#boyC|txU_13sQE7el6C`ziA4G zTrkzSkcM&S^6l?X_n=k}(ZjgI5Q`g|03ESKIC#8Xvlawf`QEt`^sS%k@!g9x%3yL^DCE8vXH70SHC})^1Y`X z-18`_AXB~K$m>AmgTHdsB_z_iEvxeDUyjjme*|T_O2aD2RYTHfXxR&w>-N2_*=W=0 zULJSu@lVCIKz#eshjp zgGWTYN{hapNV8`ZIO^;kobLpTSMZ)EoUIzrftkCnPV%Mp8_iY%H8aPVYTqx3v7A2W zZoZn0{oCPl3>`j$Fi@+4sdByT0aSv*<+p&NNEy-ISWM^KWVP4bKC}pgiSN;ny2-V; zIX#%HkRX*o30?6%vv6yYZhC&2v6*4SAA@lnm&EkP?6a%LZ~ny@glcJGi33?B>iXp= z{KwJS$i-09ZRQ=-GA*AcXjSy?o>-wVEE}bc=@%uMz>(D^!fHXSV#}ompt^5FLBFFt zK0?K_%`S?9C>ZqUT0Iy0?qBB%JAPkS{m(}q|1+pgVwOeL%A8J1@joZ0x$l&aXY*9^ zg{b^b@PRo7I#@#H1wmQg(2z~!TY~0m8oM)B9HWx>dFS-Q^!fgfPn3d(BO`zwQgO@& zlE2f7>pxbeo)T`!0tm$16J1Y5|C3fwC>#lR7v>*s>msp^!ituLsooL4j1-z<2pAQ@K}H^ODUXSQ#vD zoKfgYCZ2sKiZIXl3*Vb&6%XVZIS22_xCQQu#uLOB^2d$cW0A%Q%&lnDK^Z;gm=gr8 zqXtMr2240<*qtBD$92ba87ZQcDB>(mcV*v@ZJkfD;)O1D;amQ4Q$X=<8N0t9(*HM8 z%|IlL6d)zq|6A6>LBmKU@Q@I#j^%D;2$q2wK|H+J*0mD`JC;vU%!%28L zEmwNCbhaV_z%-#H?yY>V#QN#~*WQ)>Q@O6;tQMivQl^y*Nyu!QiHsX5gc6x&iY3Dm z8CsOFqB56pBPp{YQ;xBgmAR0yz0G4XWr%aXl{mlO`2)^}_=16;3Q7lrxWuW&=y_5(%n83gQe!@s^5};L;<%7RnX0n6Sd+U9V(cC@&x-Y9p!NYUatQlXT0IrGX-tnNRf@KQK3dkHVqv> z$`8ih>RfaW*CTEXI(ai{Ao7d|qyw}IZ6E>0;MW;#;ba#PE?>JVBOKwuJR8J>?%;M9 z9$i9y>StYS+Np~%-4<1(JXFj?;sZw!s*aX;QEuVWdO%*`PdvnJ(4@GJg-&V=wm??z zGWZi{2Z?PhUM+P)*f((UzZRdOHk7dBH`xV@3!R5F?< zBA2Wb9?EjG8QrDSQQwQTv6p(k-loQ82p&;~I{B6dyh_eT{Mm%gYfsQte-WIK?g)1Wa)#YXp#x0sotDwg-f#@j?Ihz><@nv?&6nAJ%`pm>ye zoEt$}dwoVGo919C$<$S;DYkoZJt%Jj;YOTeyD1DC9}RC^)t9arnBr?%Y(L-79W?~I z7ph#;9Wo*rn^sMQ6wX7sNlpxvoVM};<=(E8${s|qtck>C?B6HfcJ4J#h8Ux=t>j9bKvub{>$^v#vv_1Sa8oD4QzpLJVg*~ z_|Lt2e*_X`OW6CqenMsAX;F8@=YbZ38tH?iEESSC+^DO4X)ATzG?FL30CLP_AWRq! z9qqIQ@?H2l+A6HXnVu`SO8TU@%AMuY2GO`BWl8S>Pvxl*q$LO1Ac)nPCf}R307sVL zD^Us#pM*Bip<@U#S=^{tkx_wCw5T0%5W0UZ7Wg9a=B)r$oD26@Xk4Cczop5mDTq>h z#I1eM*e$i0HeHzs1b0AWG>*C;@zR)cn7|kmd=3gca z$-r~P>^AsXNmfv&clW{ldR1IVSd$R*k1pw-{a=5ZkmVFLl zMtQV(C8h}?&=YIl#=~ z%KIudz!_wY`_~``?WpqITI+hF)Z_%Un+!Sr!ve@aV4YW<@`1$aWVUmSl?=b}bf5C% z^Ge>rm**Z!2g`kVKtPITg8c_#o{36AGH_@WdTHhHg&`y9_g@Y2d^Vc zI=w9L=#-~&7s}JivQ)b(l!027A4vZ!hEeD{(B%+Up(cYlxZDZTuhpB^$OFXoEI=~U zn+;x1d4k@ET`3Mp;0bPOGz}^=v*SN@6lVdwF)He*wgouAPkg@J1kfDarvW1zSnhMh*n8WSQl2qxnw|WwRDrzT$xp{>=bWvO z!bwi@;jQ)Qz!bnptisxw&7$3sXU7Qy|#MxLOdE9x1s0TA4*pWVsq zz(?}Lr(UUoTyICY#Q!BFBInjOqr&HXKC|nQ(2ris%&uTWe0Z}gtL5GV4F}g{4z7Hr zm~)5_ib$m;sAXV=-{UqGxza5+?vJQ$_m|1X+GtY`U-qB~0IhOSO`^c<%A)XI7Ao>4U6hww#RLA{0uuV`#`A$NQw70aMS5_TQvcLmwX)uc0niY%3JNe?Tt^DxsL?GrxovQdC|z=8`7bChWF3hZM2JTRDWZ#X3? zjjRE%!(*x!k3PhT+K$_!28OGaAVpUL$#40=svFEBfa=MZfcOI*!)^L~(dHFJAe6Kj zMdT#wNJX4L?k^D#V+XCcxzKn69+`_U)QCQlZ?UQ9$5=LCUY6ZP;9%!1xPyK*dZUrbTccPQ-tW$*G7DB_mhDxuhf zmQBBPNKE_02BHCeP=PkF;r@{;Egq1iWI6><$Xmt2l14;Cs4{~i!NIP*DhUxKCp_m) z_GxD{cl|2A*sAQ>fVGo)oSHmo=gqcu-=Q3`JLW-oiS3n&3{6y2xQQ;mxLkK1>?a&`DCRbznI+N7Gc%*<4l& zlx;eh(+O_<@jjESHU-NvVkS{1ui2M&7q<6HRKDf!u;OtRPdnJc;87|mcLAx2&gA%1 zyw1~|7g1!uJxHB;&3aTzTL!@0sjZiuXO2twUf)yQLaJ$1G0ehdaE0j<78OT5wEe8z zgXwu2bM11sIx&dny;70I?V|~nsxcCdXCK}!h`gt9n{&mpIcLym;IYMQ#Z;x|KW>t< zm5Kfy=G%&5^P=S!FL7)ttxV1M2Ir466T7Ob~gTB(nR!Wy}@b;({u zhw4)<^d$vNYwPQLvYg>`7%%9Y4iI3_O_jzqK_jl_MVuNt&v)m)@d1X$;>*1vQ8W!v zG_&c=#2A5I&xO6mWbrRXJUPgj{5QU}^$ow60;M6{r(j8oTQzLI$x;% zWRxMT*g|SM@BPK&{<#X>#xpGyv6rfhD{fpLV6P@^+9pZv3;6rv)t<%(Hamui?p4^s z3*&H4N2)LPo#ik0S^XMtN#*65%lqeXmiLo&&nJR(!dF>FHys<`Iy6}dCQJj@&5(3Y zKYLEdtjby>`MmNLoM{p+dgcx_1K?mAttp8Nc*QueugrrlymwCg?#)qL%IaxyRW&uW zg%7rFFS~q%oZo$H#T#8LiTq1C^6}`1fm$D{V7PSZ(Y33r{tF)7%VI6>%193a%pAyD zN%&l|H>R1{fBb$PESSg>Je%4d6o0-zcq&6?^y(TTbA7Lm=;l6(THze231w^Df1inm z`jlBK>A7mgWQ+|B4N85if7Cfq)D90@$0a2-2S4^}5@BZrO*t0b z*=LKUjUP^X&88H#xIt51K4J;`ZD`0mMDgS4HEsA(^{Zs7AP<`64!W-9j5?IIPILQBImGjo8JBGzlUC+?D zK9lZ?nm;7IFr=|2S$RlKPHtxE#a;pbZ(okreTY~sO237RwgN=)Gqmfe9)aW2L2l62 z$W7diJW6*1NIT0ny}5tQo*y^oKq$2_>;|FT3-aVatnxmWjb)FwIuPji@2x(s0lw%$ z?)utVO>YUV7SJadIlAw(+mmlYNr8QwQP}y&_BY^qDb6T|@I1hGhI^ee3NkL9a$qhm zc1jFXkVIP!6uCedC2a~!QE$7q{0;yeHZnrW8tKl1-}echn41y+_qu~{Do4O?jTV%) z^^hCWAb^9*ZHRwHlT71F5dVU^$7crPTX!=@|Bg2Jgh${DG#Nu%UW2f>cy!mq+}t4u zep1O8Z+}Ptdh=E_*f%n5(o;-Z#PXCCtVz(>ec;+3{%&VPMy zDaFUxu>e)E&v4%MIs!H?G?1rLLLB8tJY)SG zt<2=;fKMUM9d@D>OL-%!Vgl!nQ7f#bPb>bwcv;17FtzRB`htC z{g`W_8T4zo3MrW=l%jYdQ!U4?h^zKN8OGcJqu8`=m@VqPb<#gBPwBlfYcilpjixzp zptwlZ>33A=(_tvHDYIm@Z*cqK+mAsZB^UmSMK=ycfOeaw01f`fP{@}0t6lIIGK z19ed}kb4wQ6hdL5BDaN}-bl@+x%Cb^5cQ6uor0D22g6Q3&M!=UWv4x*i#4nA+U$aY zslp#^?9F{)*^dFeIK{{(xP+{SJbO{_7F2 z6}dx64-^&L>!{l3g5%S9i>JCXDYhH=dT%CZ(k4%(ceE$D0NO1h81}dYzx5 zian2)vJ5OwCfqizRlby!E$G+p>gsYl@t6tbq}x4Q=4mAJ*bR4kSbxEO)G#1A;dx?F z*$+wa*pK7CINc$@hAgihxy?nZXs*^DFXw5#%X`XE-|fuMQDrk@`hCmDz+hNEl;7|p z0b_1#F`mTJM@W`pvmqw8!zn+Dx%Oxq>CI0p`l*&Gs;b7Jg6CW?O;H%h#>wlU-z5eg z&$=&8L-EhzA8~RH`QnjTO2;zgM=mgvlQ%td-xMNrJ5Gp+X%Vdo)GIBJEGlq`q2}n%1Wa>CpDaxGIXq7jE_i-8!z%s6uq$y%L@go^LXOjml|1NrC*=RTa(AikLC7ZZt*?2hpalOJbDPZ5H1aZKg zyq4-wz1vW>%)k4I)gW-Rb*jm4+(9I+^#Pk<^PXBZW3k#DXviK>wq54^e(r&@K*I0m z304hD0=31gj;pG%pMDqX`&o=t70W1NwP1zdNtYbC^T*%ZmcBO+k#h~>a~ z*RK*C`)i}28gPd@dqn4(5&ka|II8zf4mLt*z*G}x%{n0QCfCb{wCO34rq~W&Ld$g6 zLrm>clXMLDp76^C>t`n_Wk6I~P6)cW+Eq! zs&E~6wo<#dM`g$#VX(P4f&$m?WP zCln6%xP6_&aZJ5BVi@VSi0mi61XCotRv9%hMGbqt}bk`KEDP7smA zT6IzP`hDaGmD#aJ9FKRGGD7GlY_YXO9O}ZQp4b<^b`%zgKsjrFq^>o^wl7xE&((jO z$*c*lAIe%#@y@Wz8d{T-FwUgjJzYMfaZ6_iC^1%FI5@HBjAt)+{94OEG(a3qKjZOn zfn+h!6*osaFIh3k<5~Q3<9Sy5#%}(D#7ORXBbcC^z^;$@Vtu6f2dCy&SaRL?bm`$? zRW4iiB;n;&YvMX(QD1%)(-7>QFBN(g46gLV!h6%iW5c=w>$n*6`6bJ#)$|Ny zBMQ^Sbe_|>;%t5XnZ?6STe`S&G{#e}(q3Y!RTcI9xS^#+s}6>6=;qrA`lvu!8(ST` zP%2NX$EFPpSs+^cUf<;>MP$!(Z&JIya{nH4v4k}r+WS3^mMkJ-(}E0C|mlH-L81ViBPo2VE$Y`W4yRIok|Di~( zN59<6NGwsp=1!i2cBWFW@nQGZR$+sFNb7OKceh)7&|6*`%ATovJmSf!lIy#6Wn!e* zq7SNjm|slT_;3_Vbax)pR`Nwj4$P1nRMyR$E$0ZawTE+WUUg!~dEz2aVzb6! zh3*u6xE_Q;THW{$rUl%~uq^V-O9c8R2$S2RP|kY5W4`-DQT1f*wsy$ldF@k)>~d`j#R{>3xF%Mr2@j-he3&sn?iu8j zP;w>zzD{xfb34WFT3y<{y8)X)u|&7deiFQd(<#F1k9C+wpU^5B(KF*eU_v{J0dZf$ z-fz9#lgSXb2bJ3d2JKJS2iu>x2=e+`GE4T#tqwd!f`|o{x2}b~?#pY(mn-Zs**)ED zHKZdZv@t<()Sg7nI>V=`V${x4K7^?uBU7YS##(m9GV2rdwVKd^A14U&gymoQLWRmU zIWt2p{WH6Lo;1q$%-ZQp$>!=Wv|S_+8)kePUeBO0Tw;;BP+L*Ko8^=oGvO%b!UZ0q zz#IwZMu87rR}c)BE)j~A4TJ7`4t|W`mhX%iV$;Gc^fVo?U~g!rb3dAkm8FT!&o_q- zZsnW`QQkSuQ3&Fy>OJ!FlcMH*3; z1g?X@Wq{dA_Ex1-6})JPx47BKlly+3hvGZYL9a+9VkQ`Pglz%(hI*odZR~tvWtQc%v0Qxviw#$i#~&YTpjpj==p|=Lt^->#tHVBp5ic! zL=GKmCg@MUn_Kfo^+i13JxM&{jV_9l_$|#{cewXqdwCN>c?4sX4UIVxW=H4 zaA~|NVZQ4UxaSePaCX2`;@jvIai$8k*uOSkvYD>&m>(W)7BkVZeGaqilnxJ_FnlK1 z<2n3Ft_WP180UNtIrAnr(<7tz8ot}z(u>xe8t`19HkFLur+3-(EV;EY zHjAs0=_^ontDLWYiSd=U&I6cc_`z^TK`WbE(zHgQhJg^QT0WOb*c6TzF=9Aw_=~6s5I3vkjYbq7i_N7U-f%8XoZW3kn$O`pRa19Pk z8`#zTlvqq%4GG~?g72|q9I%qneK+k6zCPsQy}dJuM=B_ zxjf05YMyq{(I1z6LTKWy6D^U`@NCf5-&x>tRM9Bs0x&A^-0(poes`sy_6Ss9vjBh? z%1@BVx0k88*{Ry^FMTV7(tl%y*W|ChtB6coUJ&fW&Wz__?nB}3q@@s-%bg`=XVf8& z$t8<6TVik)%sYL%Uy(veekYjh=~u=taa08^c4Ht5+qzYHT8l) z4cd1}jsui&i#K%}=~nXZFxhMGx$5W06=XwHDE6;Fu`rA`qu7O2T%5Ow ztc+6H#aN$w3FP2`-cA@0Dr5G#oF0sF?154`-V8(%k>$YCmXD^-m9OHPD1|MH2u9N< zs3mP*X*RS7(?v%mjCWkUa<$rVey*ri)^k$|3YvBill_|b=LR@L2KpcmuFGjQ3~n)W zkba7e2A7&UmdI@{YzPS$I?1I)MtQo7gl2N7y9iHYV( zyiOHgg#Btx0PZp*)OP-ok(sGJT47-UyuIZaNZ&2G61he2FDFU!Y;~-<&)^+DMTysO zU&<3px5b{vyj#uqjJL6)R0XXj_{_#@95(ll_g2;t?Ye9(s3|B^Lm%>wU0`0nRR$7! zRXx4ba;wQ?iL2oIp2N+2$Hp{ycYd-ZCFbHxXC_#doNP1-PFIu~byt8)qpJVdW~N1L zW1`->Qu#)2wgP!9|3rgFZ3iSPJ-v!yJ6Aamq0{Io8-kt#3}^w1w%Z!J8Gr=%L#5pU zqqj)75&liFW_w@7)aSfSDC5?=|K zwMq7VM;V+SuN11O{(aFEnUB}pgN8ImP)Z|2KN3{9?wQ6`D~nfsWU9#)X=?&?ht<=a z?n;xsOwqAcfJ*Y^QUo$sk;B8o85L{8rCE#`6+aEUsbv$50YGL{kh;@l<#nRb;3$-l zdh;p<%e7|w+lsiFaPbh5rRIL&H1=wGprJ3uW zIlF-=W-=q`^2H_A%;N4X))&_(H4JuZVC&+-gkllhf0T*gPYp0H9&YGhnTeuG#Ag{a zhF^_sJk98U~VL0s4`>RXy2|V1((>fK|FHRU`cumC%4$tr|vea!WWeI+CI5;fkIPH~;%}MJ| zsGRR_tp14hDjQSQ+48-D{+dU~caWy7NLvj;>b%~Vpe!;$OXw|XCg?55>f$?rnEq;h z7>>lvzeYHS!-X&8YAUp>CmWUuYaLt?I8{v>ABv{B#bpR`_h031^*!h~TJ)&w3Sj%s zk14=Kjj6a$J8Ii6RpPv+j0k?Tm+iJbEJDym29m`l&xaH~rG!GU(yyVHf;&m#sZt6g zi;ugXm6cUb8{p{a2;Gb6YXxISa;q60=`)S3-@^~OgNjz2CI$BIQ``?Dc$AC*#iF>M zD-7>TcKx}%v!k!wzs2|v`nt7lb3vw|THhw1IjJ)K-d!->jIs~D^v zk&j1M)%`k6>2}&f(uHo;A4%n$h5u_1;Da+S@Kw?$Y@~}9wH*TJ1?AO5(kWLmyp(Go z3l#3=l0)U3le|_{qXoCByqKkHYAnK6CoGS6E1vw9h2gcX)s$K~npYp+**CP!}{Wga8J!rUy+IgiD{@~3^2{O;2WcsM8|m};CcmMW9v-9^F|DKOObDyC&y5eO5u+!Cl4Mi%0ssG~F*S|*`y}6^sv~vF2 zAUdBKrT;dFgwUb*e++u+Q2wuXmdR>E?v6x>R_|}}ayt%1nY&GUG%`*^bO#8bP1jtu z{g>$jWH)YfW-_&v(u*4m&&kDTuX~WUzACxuaLi7Xc^51SWC+V$k$Pz9Un9#EuX za<&R;QFu7YHS{g#TKLJb`#&b&QDn_Qiz~wTh^T@nz9}f2hTCHdGC+OzqAGL&VRFQXQ{mblZ*BOfVacc5Q^VZ7pkEvm9ra zGa43V3yIb>7mzph&|!*bFBWjK4Vkpv4qSSerYp?3YxjRWy9 zakWugqGvy3dDot;j8tBenk&3~^ScLlJcT#OQSBRFgXFMJip~nXTD-g9R+}Z${q_jsnjcx71P? z$D*v%&foEKbZqc!nCQ@P9=hu{7|cV)8rGBI@!h+6WUR9xMt3dpW{&JVw$8N~M`F8# zP}iX$j_zNwOHruGz!Yi9CtAr{!{I^GLkY>GMGx`aV-g=2SHTivV?lX~y>zKBYZMe> z@CkFQ%d)O-2wPVM?_>~J_t-4_KQ8QPH4<(Ek-MbeF(LUb8>P9D=aiLiuHUn z1f4f^6WEMot6TjbDr6wA&Ef53|1)r=2pOmjsMHvAPcd|~(|H9@Az|uxlDQ%Z48OxR zmP5QPjCxrL#uZT?c9Mre3_f$NGh3@^uB~K-d6=Bg2d1m)X~aO7X(9}x>6|6>YC{f& z*U1gYbZE}q?Y@-?i%E`YjS;Hp8Dq&CMcaAn}qxkAQ!#`XA$OEvN5oRUXOq zP=pa(doe71M>>nkO5y0aD0VbT-X{7{?oXlYiNiKLDI=|Nfm5!s&`l3$J(bm6e`6Se z6)T$UL#lpHag>Am6i&jL)9?}@;q1syvUC*#0;jtc8xD`mi(rV9t6h9MGSpdg-c?JP z39IKP8%_to#GGBO2kRcI#6FW&!9?t~lZh{A&1%<1D{Ez}rKAGsy;RFhqxV*Zy4zS_ znmbCb&zSqDFn?Wr&Zm6W;5B8z6pR)cgCl(_+9X&RPT8wWiTpx|Rd7ZRlN^9Bk0ov_ zJ2ufqL-((*22yu)Lsnd{WEqe6cp5DHZp=jJLW|PtyQPO6Y4Q)b{Td0Y8`K@zaHZhi z%?j%cfnko*uKUAAqwg`V2g?20oN_!EcZ&V}dNe1QGitj+amm{h4l1u!ypF3ymuXi3 zIyJqbQ|Al}y$5$&{5v= z{5aYbmablNm0lj3_~m=6;#*qIv#01lsDw8oSza``%2eEszR&^&!3uzi#dLcrqAA2p~Q>$%^5R) z%?#dn_~o_ggSDP`RAXb@jCLUffSL6~Gaqn|WD|8X63s67k5pe;BVY*q{*^!_rm0?C zHl%b6Losj*zd^xDYu>Th|Bhp?C}A~GT(N$udWwJteAM;9#Oi7UHS6G-NOv;7#c+uM z6EUC7w1`HHy-C2UKx>fO%`;&$Y%!0DZg!O@{=@VzI}` z{7~QDHtj?P){vyR;+1vg+G*rG?Gh{RjHVML|YlRWZ2kj?x?KO>s~C4(}5A&gR`R&2g-fI2K$GR z5BIp+)f+(eoDD-%Flw?kj%(;T5sWvu+Q;DQII4li)g_Bvcm?dcP7&*%n>Zt*Y&6k4^e<-)^r@O*V$VntA1Le`Au&T?^!t4w$$3 zc<5Uvv}61rer&e064aSU9G%`ao~aM`t36+YIh@utYj=N1dmrR$RCaaotRP;U_&e0% z5_43^+NA>MRAJajbl`53XoD4pqI*=9rcsuWy4Og_hHO0tDc*Rohn&}Ve#dAX^3};+ zQF>Rb+Hs^XV_2lcH9tJ{^&xurNniHeoP%Aej;n9i-#OBwh{-%@6`&!`3g?RT4ZvetVBo|s>*-jil|8O}PV&+_y`7)s<0%8Df4SJy8csj>C z&Utfu(1XpW3n%0l6-;tR3Nh-iHZl-Ucrw`A*!c3(Q=|c0nLY?I1PHG~%zL76VK(GC zac;L!8>g1RxlfAPBl^ByWNu$eGG*wB3!jVCWZ-#a8=u|$yV*a^NJiuw4;bT1)$JMB zEEMrl8S&C4?KmWN_!21fp5ha&=WzsDSw!j@d*7DqZu;ScuuQzF<%-h-Y@@~xofh)5+ft=cT!pXohg4eI=?3+wMHmWT_&%i z#X1jvJtSFtm|%MnEXtbrz6hPpD>4R98)z!W=D8{dKmE*NQ2%q~Q0`QLl3RV8xj*!i zUQ3lJ1X?f(OXPQR&AH5I17?(bx$M5FN_*L3f4hoK(aRqtKfCim%+SAoNrs%8rs*a+ zsdG?=(@Xt~Ly1CT_EGO%g%0(Y6Mgwc?sXum!twXk1Fezm*w0+wx6B5A@cee*ORYGl zGU^if8o+#zg^`HDLnns1OC}Q(-qu_znBY8Wq3^sna#tZkY-3L*6sk`6mNStjHrmy$ z(8TWjYGhcOY9wd4bS`aMv$%4ZuH#+}3HqFZZU}^su&XFJXUYNmGIONhVuE%_9{vs% zTyI~CDQ2R)ViMBYf@YKsDoWrzEs!*dxS($K8yS+U8is(bahJ4xrt$)r;H#;ngl zc4w*1c2P zd;iIoU)Ki?a=jCHYG~PH_^yCe-?T|3(&eNW>A>fDfPM3}qP&kWEYK$*(2u(B_S+<} z*q`g?bKGQqP{Y7`ui+=uU*o^LOcMrJ0$f}UBhenTZk;tJK6*cC;2nLB>Jpt*<bib_BqP-VHi`L;1c>wYl9MATQtZWZ_*#nCc5|*Dm?9GZv?Ra=r?{9m{HhRpsM3RNz+*~i; zjKE@K_6nEgyD~%r@L2(#@e3TN^|8M=*X8%K-%m9#W2f_`t|Ka0EubB?#AY*aJ)k0l z$$e!d@Br(mc^8EagwR_|(eo zkor@jh|rMBA+gMBY^LOE9COgjTY%|Ulnc3{2&|hT_go*_s(Djo0o;c+{7OWvq4L)5 zk0G6|KT|oN7F8WAA~jeXKvO_EQ|dPPqZs5>H6a$_te`k>x$7lv++Zl5wD^v%|I_{B zju1eDN=eVRkLL!j4sl!jC?lb+%pGO)f0diZGqLQK~+|V;Vwe%8S0F=a&f^pHMhbvG4Ce{>E zWngxi@Shb^<{?sXQq+6X-(_5?a!*d=@twhE%~l?9MtP0|RW|PL|7=mZFS?WK`uO^H z&+yQLAZ13w&a9Q4wQ4!L@t>wDA#`2KA*YYFMegQKW#AM4Jvo6Tjh1>rM&dTC#sCQO zFg1Y0ohL_>&TJ9Dt%NvW(xc4fdPpdl-~%Ht%AHbqScv-WG_7O7)Tg=^2r-Qo~MjK#Du=E-I}2%J_);;8o4TfrXvw zHN(z$gSNJ|!D>4rVjlbKS}RZ)bp-64x~XYyxy9(CPkGB&_w$?YQIOYZ%*JT;tLj|x&Q>(BlA zet2Z-?KCfX_5Y(ZI~qdDivX&b0-02Uju_bzP@N5eh(B_h*8nGXx3&}U`JEgKE>8c< zr-&*kUCI)edVqzoqtns;kD+&0=Rczz1ZqbA>$@wCK!6aXTKTpOrt+{DUA-M31qvN4 z`(9B3?5Lj-L8QEcVDa(m)(qgKrKQsRa{rZ+tHAH5gPLv8o2IdZp`I9a>Db>>D zU#K;QmBC>^6(}!rbC~}|@pJ}&$r*_U)oy`qt{EIw@TeZ71`&K2UCRpveRW;o0gZU$VZZZ@&y{Nity!(L9F>FZSm| zMrsy@aFFDyygqEFFGTDv#C%EynzuU}isIG(RdGH-rn&6QTfW799H)Gp%VH>BgOk%- zoo4xVmW?mJ5;0=SPZ=N4${_-3q?K^t>(Y!Sp<_CH{M$2l%Ib_o%|u|UF6)~jeNSH* z;KqN_1CHM9=%Xg}58x9pptl|~GBReaJ=3-lP8EY_;@e!(u_?Xtgm!Y313}vksjyfeBWvDj0js_!FhXp$B?|jHO>wd(9)uSuVU%<)t zH#9c98rIUgQ6+}XV5}KqP(2sX1AF^x3Fod`Hg^LoL7_UP|A$NR zXohTip>M=c2R(r4r5?c)ZwAn!h^|RkE0cUS)a%2>C5n)l*%MR0yvGAxr>b5~J+0|z zbkW<<{%bKy@(xEqX@BD$gH7VmXk+PYqo%%(q11#--uMOOt?(WiT%t}P{MRIH*tZoydgGrnLWNFV z{UBuZg((J&oK3+(BtIl7XNe1+T`cTqc@(viyIVD+4r{C~hSmP$oWW(nk~a(6ZK!%Q zgf7MwkSf+7gxDLJ?}E(%5^R)uh*ulo_Y$``GR8a!K0AT4qW;vWHaZP>^zh4?g8HKg zS^`a#>tl_vlv?9pE7pv6zKX4#?(l#0u;cLCv!~W|A_+{YYLoIyXeZ3S)i7yT*k1ZF zz$Yd_PUgzDtM5QwRZi4q(Qcs?=tq~p6UP~km5F>}bGEMgrSpgf4cRL}?ojJGE@4~} zm?I6c4 zA$ZOoj*@1oZeFk55ZE~i^t$yEkXZNz_N%||Knt$FOFG8QC( ztX)%uqa6Z;lPW0IzMAUKaWuw^j#^~h(n-@BjWZT4EGqwlYr6T+s+YJQFm zIp}*(ij=WZ91Z|#U}SpCzk7I1M?j;9WwPY-%7G86job5bX;_p=VeUX$IyPf88G7gdsUPX zkdH?z+iM$E1flyyN6)|Pd2o*g(tp|9-wS;b;CagLr34Kr z>o!Xk*jLZ=h*nwtl#;wq89Er_$*+NTZzTV5()K5Zxl*Emhk49oCPTZ!D99HQO&Z>f^RlB&>t4p}w{g zkX)QBV(anBnm9!FLH11;dpN<%-Z5X;RJ#w+VU_xHKjK|vFLR&>2X$eYyxH!JXrnQX-i3X9I$*h4GQ{k7*6QHyr^dx2B|G<> z(gqZZ)HnVz*;e_9Pt6iH(SfK6#%+yy2Uv@C$Bl{c&y!U(6v$#3Z-hmN3cM*m8Lqf- z_%Q*-ow0x$bJ8ir1TabPDG-u$YscwVS69z5U3=VU{=oIB+Fb2 z4W}D))|B{k`aK^Wv~T)K72Q959g;VP8;vU2SBru8?Zhs)TN-m%kkJijQ*jjns;ofa zxr}l(gqn&<9jNzL#RZSUlU(NG)(b_fK@x^8WGr8#n~h#O_!IQZCvwv9@dAf11B5W1V}kcM*1_i)O^~ z$0&CJrcMR^S z%>WNqb(v4W82Z)ZR`{SH6>?vGmau*gr<&;L|CwtODwkiP{In+#G~L^%cG1555KbmD};C+I`MZ6DpcHPcv#K*VwRwOrzx)!{DTk>7>R!73XyiReja!70>0vfnHH3@ ztQie`EyhJMu$Zg#JWdw(O{U~yrH5e&R+r)j0Ia1pfj|a+VKvz>-V#D;=5=v0xdyPR zZ6z_Cg!K{3eYe3g=4=9o^W6G>DD)ox+Y;7IX1cf4(G2uE00iQ1V}_vu!3e*##@K7Q z?bPpxZP{d_33E<3qn$E^>P=gaPX{ye{Aw!pv^E zL*x2?>zo|*Nk0Cc7)nkmTbF)HsO(8A|95=7p9!7RAy}C&M2Pwb(ZT?X<#LE$H;gb? zPT(lLUG~?n4C#Cz1wt;l3LY<#uK;qQIyB*5T%z0A@t$KB_d?YL=uANXG1mG8puzCAf??)}>AlX-jwveklFWWxTRn-YD12yXu% z2h@WPEvymeZ< zEk-vv6?UZ2BA}jk6sqPRp|fl}b3EA!^)kQMBD;7)sA>J4_}(;V->Dq6tnK8m98)!* zHU^DDXz5W$TN|{%Z4-HY?E}87wZSczUG!6lw@nWO+^gu*urq*h1?wt{Ho4IC$;QUD z-^EP^vC34vB?i(5#{|sUnhTU%a}`YA^)U<8zGnqvWoq8axTa}TNiTk{!z!y+jf3U! z5Rfy}38D9BBE;Akwi+HAyTFq!d5f|EL@8xYI2O)*-GebZxd4Yyf#Ynn!VWnKWLf)G z7yDKjtON1W)p9BNNys{xq6)k$qwZwDp0UQ_CUe=O(j&1MGq8<7|IK=5US~&3Twfvv z+45k{AQ`=MCvys;mXS(uyY=?yo41+#&)9njJogwEe0{(xqdkU)9LbJ!Sx7Ph(mUqj z^lh>wvP*mRwmL1Z?@nObS7{*kqcv^1zt(E?X;lN z2aUcDJ%JA5VO{=+ZsELIXnr0HG1W8n`>XfK4sF_d+Q-$UDs#iTh1*8?PL^Y`#a=Q3HJfyDk%RrPS=7u7RqDN>!Lo%bvXw>`bSRRV`bkd zx;oAD4SXfOUwHTG5#^tehhlc#uhd0eRk@`gRcC9r)+Z+@3OBp56e_61$FaGa<6cAb z9KVq>0x_;<-2=6*g@p{clL1}YyGuBbdfEbiXhF2YYLODPGsgDBR^2vAI zq3{=ISX?kG^g!pYDl8A9Go645Nf+J&kbq+tzgtbm)hvEnvJ`}?J4=tbW&FTeyMh{W zs>`rIcTDF}i$zf-W&A5WAR|3JN;PXV{=-#h0crYvZN9TPiZW%VE!U6GI|}hG_$)j9 zR95DP!^)MvWyl_96jf}u&rl6px8XgEkEsHBY_G7B1kGU6$>)v!PrqQYpv}lQi z(A(%_m@AHEhv+k{=zWfxsNqxO>-C{fjYA2W{9t~>h?Zw5&%yZI_RTLn66ct;H!cZR zk7eDK7-z$Pfl>q9i6!P7v{V?ViYl&bQX}_0tUwHK`QK82io)SsY=j1&d*n zuhGp}(Ui|=PZ`U{EZWKc>I?#AIz6q#0xVcl+(uY++&LONqPe=#EE~f^xJUHAwP`d0 z5MK2?f~T^w?D}=}H&VZBv~Z&K(993LAI2ZWT5ddr>gq^&N3z$si`#CmxCN-cR(M^U zW1X}NIH5@_kLFso7J)YaS{FZ;tx$U;zwGF6TM{10qhsjPCJtHy^gUz_U1ZiB%Z~(8 ztllGJI-CtZ0BvFv7S`pAE~i4oqf&!#D5~B|SReoJ!a88SgVRXL6jGh1QneKrSzuvg za>4ckv|cm>Q|(Hu4K+z3C=^(e8r}RdcI%KORDworTD(;rvm0aU6+;bm3%f79_?_!a z@NkNDr|?9hQ4-yXraB4~T)P(%p#g_P6_&+O54A#)20h#umV7%p`1a^u=NAv>ZEIHi zmGR}MKSACkWGd@ms{Q%$(^ksGQHtf!K%u7rb&@>{rg@W+YbTA{@^oG`7F9Mh_ZCjs zFkG4`S_e#))H*jmXC|yZp8W~cPfGW-#NRw(_?ukEGQRX$z0wiS+9p{%|&XB9t$*C$&`7loTp(PL&(zXK6^k;Gp-FK z^rx=;PD9d$a8kb7#z3>ofTFnpYKB$7SN;a_-6V{z1kUcWByKyZOJgn8%{$uL16`o8 zs2)+ZE;Rj(!sq2V{H-(+@x88GCw9zm3l2;DRB4lxah{(QsT+{tXNZh+j-f;@lYH74 z7H9G%p@}$_hlcF)MLz}zZEbMUZJ~Hb$6iJj&L(|sTcRu6kTCc=auQAc#cJHFV!irD z4qGk?m*d+K=>YA%iWC>K)PgoE6_(?sjVI$9VJLMPq_Q$TNgl-Pr{1_qjHc@hksnhV zrxQaADj_sjFn`rD+h06V*Jk(pJcfPF2Zo-NZwHidd+XhxQ4AC4fB9u@&>g3>mM^A%-}azb#yV<&w!Dz0MB9*xYsBn#@j%3dZD(<8qg5qwLzl23 zsoQqmE9__y!0Y`TsXSW#Y_gE-R&a7rP`h3N0_JaY8WXGI$qk6=*a*?HRpzA*t%~0c zcNHBu03#neMs=xIEpdiiOX&_M-RM+lk4CFm=^w)K7gd`mRo~X{>)B|Pso;~$q4$Fr z^p=NAzXu^fO^6M5in}}?PxB{g2L0V4SofC_zcF{B`+raDYw04X#~^E*Iq&Z1C=I}; z9`V0J&cMz609tT`qS}D*Uh>%Eb}reSNU0@yS6+ zdfuoyNat&DOkH3ImXDDIW>yVO6aF;F+(tm1v_zx{i#R90Itf&OH<966Ou8ft5;l5T zC8GN8{xu`p40gJcaxpf5DZB=HTgNGkus}WQ8&U0jjLUo*rYU(kh392lRNC|yd7Iwv z*NyS0miQ4>_Qp!t&Edqt9b?@~QSE0YY3nqx;8i2Rlen{a&PHg+J;XJrudl4s>#r}( zR@(~CLoS*(1_6FTuf%iG7}Q)xthiQ~uJPg+3pX!KV>^U8lVEW1JI1B372Qq!rCqIx zcJlnlGGy%~6XG5r<|RgX4yO+Qig=o3I0O^T*8*Al^ZF=MhIDLD$<2`DOQyyoMupoejZ>m;lx?`Y%KfsBtA2o$|NX2MX%(uT5MYxrhL6H@kuTPI)F zpZ+7>1>NeQB;0yVV>aRe4ntZ_Nt9GnPmuB(zoS%D4MbVKi`tHZVe%omfV~P z6>l>4>R|*tEG8z1c`%ZDl5eG?qyijjJlbiqlsW=x zfHG^Xi+6*exNBi&xX^Qtp7(6Gk6b|PfD^QY{D0;!9SA$;Gu6iHx-9>F%jlhM!AXIm z*+|$53fNqe<=uTj zc~4DEZQZ6FLZ6U-RtSn+(DGRTq;=BYUQ1k+a;0pH&}}P9|Ad7F&I+0=?=S!lk+Afw z0*OPvq=~bKrE-z&oRrx}SH)yn}7!ugt%%p`QqAHJ(OP4S$EshwXQ0?t}Up$6N{LsE4qC3!!u+htX~G- zV$uDIQ42hw6vAybTpV6rZy>q(pIs#xE6?2k@8RpA$l*NQ98druFN=c9SdWXcf4y+$ z%zEtrC+`4~A9P$};Sq^T1SB^Hc#s5aB`PQQnQb#DWk{KG{!2<%30O2Eqa=sdIST;m zc&|KLsP6)8L{+_yy8x|7QFTi}{>Q(LK1wQ+O3bh42X4e@3Dq18Jw9SYC;HW&7LsPr zYb0ecRBon1-S8sg4nCEPb)4?N4WQ!?_GHibu9Lh|jbQ$_rwER}Px?ZS=%sZ>1PVO< zqBi{ThqtduQ4}lx?i>L^0KAFU7Dd{Trtm#gkd<~6X0i>IwP<&40QLK&3<{m#7x0_Wyim0ws{o^K=`kNPTOFaFMI@R@UPGuNXqm74V<}c@GKo5FL zbgu^8pH7^M1NB`Nfq{CdKterTq4tk|IslYAD7kK9{|2Xb%1|AUl4#zbC6p`_B3z!@ zWmRqv!}+%}AiEWY=zSmtkhm}XjxROXkUHL;z^~*QSlNC7GVSiaGwGibAC5vdXvukQ z<8uc6PUN=J+)qN$&*{4Cimns#BuKQ1%3XjZqPQh|Ol;B0+*vGFFX zjhYNOWsd&or!cLC_@%PI#e<0q8jm`yfUA8`qJ>rgK<}x&4DA6;J-~1XpSiyW!uZu7(d8WHc$B1sa{e~l^{?-F1jKjVVLH*g#-{oMr>w|p|M7l3B_+Kss6poU zE$SUbLqgAfYz+R(XQ4k=|6;G6*-PP-C%UY7|38hPoLr~HzU8#v?PO;@bZ7Q&*U29p z(`T8d<$oGV(1lFl`bgcEhR7nr%SpR@$2&~7t&Xg-|2XiGT<%x`Sr;2_= z0C@?T|5_Qyi#<9!M|pT-;ga% zs2U>vU`76%U2uqsk;d!p$MZtN+K~lkiQn>kQZ4AN5>%z_DysK+Qo}z!M6T*@fVIEq zP7$0`uP|R~=A@_ZK(mL`1yhIa0%n7Vxc_d5kawB{9hIx!ZZenk_bZu=R^;ca7Jthp z<8vpgDOz_x1cD<{{S$aKhSy5O^DQu zG4QY#1kjKmM^}alEA6_tThCI$!gTpvcdak*0Ax1&`RNUK=Fnh+$H}LV93D#Nt|6DX z8%33x3KWR6g(IzcYw(bsP!sL~OD_AfU{Sr3=e@3Sa862snqJB%m%-zWK1?C#I?sgB zjNq0=tdYB{$N|;87}%sWG{$)!@Pp8eNW0URNR@5phhE)e%5ZZ2*E*0oJC?P)i0Oim z_ZtO#6|yIu|4%Dt9uMW-{&CgFGY>6B`@%_tA)>@lC{)(5X32VpWEm=B84PK4&S_;r zNR(`&vBX%CrpSr*>|+ed5@T#3#*F8>hdSr?dp+m%yq@3dH-F6^_qfg6_xJu@*XR0t z-T{O=k(IQkovx97yxBcNLF@_!19z21K5@<3e`BEDAlt~VA zU#Mf|YHW_hR48|9SXm19lb8h>~AsEIwZ#*QAdR`jdo5d`b{1C03>|m)9@^9V19aPdt!EdCJsZ|>0iob8Mf&zjW8Is-`mo9= zr!+V3^$SexGk{_rLEtQ^wzh_&HRn4Lh3&T+*8C=yie1raEtAjW_ZDw#m|%Yit9{1( zyb42M4?Vqp8m*1%6~{WtgO7RKgpjSMDDfD^m3fL+gZJM-jhHAu8hY`~52lp|K{aR{ zm$6?;Y5CZn$;J>q)~{q)%6#1<3%mAW+3LIIFM9CS5f##ysAJJ_qoivs=H35J2u?jP zIT9eK(7Ft_;~LMS@^;_W7}O6l`BvaQW?W#AbXF_Tztz=3FQ!V%DK>*@xM?Bh@-t;e z*?(efJ#HX&S^^h=xNG$r)9+}@_r+h6s$N6qju=;omhnorW9 zDJN2{-}n9ctG5+*fU+e#yseOH%a#Ym!>6sj&?g84x9eR*bAm}h&1kv#y@W%CI=()8 zH3io1#W|f-{IJcH(a3<_R&aYbiKtu&68cfCUL-2gpMI|bk+|z}<>f+1DI-Wk|2PbS zzk;#>*~I^w_dT(3P|N&8hd%LpeI)i@yk7{!2C8<+{3WvbqXI>uv0aPJvmo)hY_XnS zNY?(SxFKR8DE^R6_5b>Q!KnRRM?ea;|MVWh56bT;6KNR2rl6k(bRzfv&7fRk4N=P z%*;w)uW$c#tzyS4jAa;5(AR5AE?&eQG;}Fef9}j;A>rQ}WZvRtoYnZLzFm3SHahX^ zKsR3s9I>wxRi9%dB=SKEP~9r=Ka%)Z^Ta(TtwyI{xJL;Y>7+BTrz~;|Y;A30>&PWc zV1GI9(3F*}9gb?sJ=#ol)s?IJ%LQ?|_ZKTJod9}ENUwPM9(+e@)5Jxq&R}e$g<0S{ zpXU!xw&rww5j(*=4nZ{dkM-1AUNdp zaB%R2QV9UyJ%Xu6x!-6_tb{ZAu(yIR0&8f*4Q8U!ezc~2Z&G~|T!<$}r(nIaDaCKF zldbkNhM*&r(+XyLLw$AXo_@-y7aI-MBA>@NRe672?uiHMwY__l5Amq9Dop;nvRCO} z6jPY|W=|VxFUgZ|P5*EiEwQ7_w7}=WA|t|9=0R2(iCDvx$r)@72KmIEhG%vJdP^en zE%nM?f4RnO523xMGjdlv0bqxdS%IV|az+4(Ag{k+gBTp#y-^2viz)vQ>e3R1ja~;L z`%J%}P3P?6!n_APqd#p!u!x~uOSo-sNnYmKlWXKqWw<3RV0pR#NAF>dr_Ilu2%qOo zGk*`d?Ul5AIo6m+tVmAGw4=IYzNlFaf7U4r?3)-TUrjjCxj5g;jDTt;zT(RcoS01_ zi^mDMb^Ur5p9M-ScOL9yDH|>)jizOnk**scLR%8-iTV;zrMHmutx-+rK1-)6i zJOzo;1LX$X*xN&EwwRl0f9pCoB?S}V;15P}ZJ@uD;|^YkwVkqPgV0FX?G5Ta@yx*I zD`cCmfb;)hdEX}FObN=)YyfS9T)F6e_#^Rzmsf?tv!+DvV11QhwUZxY_CfoafA?;* zgowBTaETsTTZp?v@d#XC4|3F=LNr$p!!9Z=W=1+?-IX>_49{jGKabh{%*=98dXZ;? zam2az8eWl~mRvqhdWZ+fEq236KvzV<7={yNHnes2Oz=;u1FfT@CSGf#?7wXM2>G=R z9ts87#SiEwbu}55+mRV|XP=hv7$%>cUPQHo-)_9;H~w)sx$%%Sq-a&sF5GD|#_` zN!0*rn&PtNJ6%XKp3@T3ATZV$oh{QGq7<{CGNdz*w5NjggR+1Z8mx$7WR9I8BOf0%@FEYo~{48q;~sGcQAE4JZxN5w4~=kT6Q{?YF$6Iv?ivgvVPVFb^qO)n@yIt zFQAq+Zu=^c@nq*T#E}V!$@{~KxQE3o#J|OE%3bOi34V&>8W{8ehb_>oT$#I`oIFJ8 zjevlKaffSDrUMZ9w(6-T!-}ogtaDg*{gN$I%BY08jqp~jAo;P0y$ANdLz2m&KAEit zFMQvuQm75#}?tQKjF5lJ^6s6Ts8yx9`M0)|k&<-No7Ua(daApKlt#DrPMJUsrHv(>!e06MR? zzrT_I4YtyxlR$pf4VVE5-kx(N3>HY6z{k&J0YekHou)?S`6Iz_l^M_{8f!-Zu7EM^ z${$ZCd;1YQHXg_rDnImX&{dU+0cp5~r!$8qkZHWYX|s0Cn$dKi`799{)IbDpEBSI0 z9Ih16@`q_GJTx_>;FS@s{R-3Rf&)LfA$K#Pq49@V{MYEfL$cqfQ9R!qZhg3NA!IbT zuLDTdKJyrwZT>L_#1sfjAR3~U0a(D^cmNCG=WCKXC$)Sr=pjTd*GZ#(n97O#Vq)R> ztGWQ{Te8yAhRmxP%+1TdOJE;JQXh~1>L}-si$!1k>I6m!&iwo=b-oDZ`E{~WD!;Tu z2Ef2LiCVrNEeX~l-dw*fO^P>g1Xl{kQc;?VgPn^0u=WTjZv!=4cy^^I%jipA;~i0_nndUA?8$mfmSDb2!I3tAh6!T2Jwoa_@0#X~l9;W;M+jum`Cq z<73q`eaU4qq2SNqJZW(We~qRYFSFSp{cJaVUkE2CV?V$h60{S6<; zsi1y*H4u?*L05g>!HO~uyQ4pha&I=cAYGgP^h>$4GM@M5SRdH&V?T9NhEN%}wk``a z|G5<34Vb<~fCgx0a-bKlWIhf%W7i{XGn>J^rQ*uDWBrUuDX)WJ-vEbId}5WtX%u28Ym1h1;ZD_EfKnORyL-WaygFEZ$ruC`PcXU>@m7-c$`LV~Ux z^|C%4*5;W|F6Qmx;_?c^PCWUkdr)3L^E_aa9dbZ?;Zx@)tJxs$1ovAMbwJ$QiV-tq%8Y1@EsfC-HZYThKR6lu@PV5Jj^<jQo*V?thG|eA| z@j;B7-7cEo9Sh!-yctUu(588<9@oklE?Ws8nw(Rk`c>R{zR!j18rpB_opy}cFC@4Y zE;n!7=!X7ULCkZa@3r`D`i*zyll9S^#G!mT0WcpN)!CeCX^;!bfp`Zd&dNF+a9nXp zYjCv5WA5axz_2;EtJlOIX)?cLT!6BpJ>T8Mm(x?y_HDtlRy zMX)1u;O5s?D?V46K~%ZTwR-Bb!T1O76XgZIi;esZ?J;98ue`r!bUfb+zbLr>qCfmF{%RtZ-iY8tmowh?qlQ!9T z*-vKVnjBrHzD||=NMNOCOe3&IrtQ&GErEp3DLowU&bP@!J)QxGh>qDJ8G9w5i;=htR>h~r&=&z! zleV!QHaiJnvS{MmPFe?shBE0B0hgs#!>?rKBlji9e<>90b1){?v~cjQ z>`eDPz4L0l^R$q@tuh7>O-l}K#56g}w@sqCIi6v7>Nnw-x+;)bl zkhqvo+8-WI{GJVP&U8*2zfe{yJxyCb6C0tpFOjFZ(f}&v%W#g>bRg8h?r;DuU^Ie; nhtCN~!^Zk|2mIRu=Q@{QiMuvD=pNTZwq&D2ID?0JZZZD?qAHrG literal 0 HcmV?d00001 diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-quant-cpu.png b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-quant-cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..41edfb439bd421de8c1302817c266a948de0128e GIT binary patch literal 24771 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 z zl&71!&Wa}mhz_26Mxm5xGAo}1e+ZT6e!{2IieAwxlb(WTU@E6F#^c$abl9E!ej{tt zBvbBL-wVB*6hk14Y<}NIjewH%Nsmj~rXj5oo)Q{5-2YA3;_PJqe?X4IxbgY3gj*7*<)q#?v zA~4|aInsK-kHaw|Emza~9lwAiSgH^a!&F*VY5$Op3sYD>A_eQ!OT^SG%7kz}oFM&>$4J59*XGyTx)xXUnJR!&J+uRBa; zz-TmX;m$I-2WUNAi}gX!ne{rhS;j<@q09o}$AMWWt{jQZlnVnl3adspRKLrNP&Y7> zdbN1aSd;UYCm{V4y(M}t1)tMh<4?51GRg$#IdJRqkz4Nq(7y-x7%+{i0XC5gR{H6F z6aZthWIh-87rSyT6u03!hX+1t6dUYPfAG(9$bX_mla#8u+mZGq--x7Ufk6Iy*S>^SkGg!($#Heqz7|T3md0CmPwHnMs_{ z4;8+iG-+`E@J}2aiKlrT?xVqAHH8MH)$~jN*d4)3S-p8R{dHSm-Tdn1NX~A|)1X!Ly8T|og7`-J!a*!$S9 zvvn3_O50%vt0-`3PmMce%6fH%#9o{v?E7UtP26wrvi?-?I1aH2V8HYDpe$$~5E*6= z%2*lr@$TbC?#lj_I0yOJ0UYiKdS-5d*xu&@D-U~)2E}P|hpRmopLi))<}@sUDCB7% z4cQsP8Ng*a2R0dq@*W`Z6a>@N!+TZ^t&(m9ZBnuQ;(N;(MfOKUlMuQQo>)>MTWfM) z>uK%ryM)%UPp^9Sl@-FnQ)SVx0o+$OLbl705pp@BuWFAB`qV@32R5@^Hl9_i+JNa2 z9D5d5_&F)Y3GGD+UK|#;tVCh8z#j^eayGwQ%C9+AW(MRA9R>@gxcTEq7ljt!WLJA} zm|@Abht)rU9bl!}U8JahgA=pM6P$uP)IcP}`qGYLo-G4#*TT$fP@D}z z2bvGn!^ArdT?Yy#+1gQPR?sd=1bu#fciUXJbn1PeG(v{}JMm>KtpbXA%MD&+PLayS z%su3J$IVB@_c-4OTAY4ua#e~oBp3*-fW72oAjMU)VK=tY*S|_|HYmpMiEDKSJ@3#! zY) zurLK6i~|=E!7M;b@9nzgW^tf7FpI(0w?59n)KDnSVRCxAanc*5yUoXp&Ym$Snq_;? z9=@VUs9}=JAnoxOGbpM z7!g+>12}$h7LYhP6E{De%?t*sF569I9U@%X_jpU&aNsLeUst{l=D~D8BzvHrc1L-`l@;sr8MF|$4vUV*Cyh91p;lEZq1vMkw7Q;1U)LQP8d?#pt*sq7rtJD5g*!F6kwT$V z_yvMWLxjwUsbI~I8VhJGE;vj2okXXOhKw1@m1$~fo;i|Pe8a!f&x1r|p3&y-odc+Ws*$og1B}>2Zp?Ap*>yP{+vGZ^`{OMVvW){d zr=C1{a&3}8Ae?tRbVib5R?)j?jWXRsrVI(wv$L~DK9#Ocv1qF{i5{R*ZRQqLU1*Dx z$zV0SCgTq4q=90Q%{nI5{fX^8e|mIO>B@t<9u z3x@HV$PIy{kXDg>9g-y^H?_L! zr++CVJ$$&=q>5xeHV!NCtP z6effN9u5u|m4ib7BJ5U3wBc}$|Mh`?{NSA80_V=blX-8lx^0lKY;efrV1b?k{yzl^ BJuUzM literal 0 HcmV?d00001 diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-quant-size.png b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/lite-quant-size.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1a3807a54eb50536eec7cf8d2daf401b49220c GIT binary patch literal 24293 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 E0ekAF(EtDd literal 0 HcmV?d00001 diff --git a/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/params.png b/TensorFlow/contrib/cv/Efficientnet-Condconv_ID2074_for_Tensorflow/g3doc/params.png new file mode 100644 index 0000000000000000000000000000000000000000..b95e059b919bc0e3772ca7d285ee16004f98cb23 GIT binary patch literal 243107 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%0D>xwuGXfL_0(^Tzsj^OxFYN{o&6M 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