tf-models-nightly 2.14.0.dev20231112__py2.py3-none-any.whl → 2.14.0.dev20231114__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,8 @@
13
13
  # limitations under the License.
14
14
 
15
15
  """Classification decoder and parser."""
16
+ from typing import List
17
+
16
18
  import tensorflow as tf, tf_keras
17
19
  from official.vision.dataloaders import classification_input
18
20
  from official.vision.ops import preprocess_ops
@@ -90,3 +92,19 @@ class Parser(classification_input.Parser):
90
92
  image = tf.image.convert_image_dtype(image, self._dtype)
91
93
  image = image / 255.0
92
94
  return image
95
+
96
+ @classmethod
97
+ def inference_fn(
98
+ cls, image: tf.Tensor, input_image_size: List[int], num_channels: int = 3
99
+ ) -> tf.Tensor:
100
+ """Builds image model inputs for serving."""
101
+
102
+ image = tf.cast(image, dtype=tf.float32)
103
+ image = preprocess_ops.center_crop_image(image)
104
+ image = tf.image.resize(
105
+ image, input_image_size, method=tf.image.ResizeMethod.BILINEAR
106
+ )
107
+
108
+ image.set_shape(input_image_size + [num_channels])
109
+ image = image / 255.0
110
+ return image
@@ -23,11 +23,11 @@ from official.core import export_base
23
23
  from official.projects.yolo.configs import darknet_classification
24
24
  from official.projects.yolo.configs import yolo
25
25
  from official.projects.yolo.configs import yolov7
26
+ from official.projects.yolo.dataloaders import classification_input
26
27
  from official.projects.yolo.modeling import factory as yolo_factory
27
28
  from official.projects.yolo.modeling.backbones import darknet # pylint: disable=unused-import
28
29
  from official.projects.yolo.modeling.decoders import yolo_decoder # pylint: disable=unused-import
29
30
  from official.projects.yolo.serving import model_fn as yolo_model_fn
30
- from official.vision.dataloaders import classification_input
31
31
  from official.vision.modeling import factory
32
32
  from official.vision.serving import export_utils
33
33
 
@@ -22,6 +22,16 @@ from typing import Callable, Optional
22
22
  import tensorflow as tf, tf_keras
23
23
 
24
24
 
25
+ _GS_PREFIX = r'gs://' # Google Cloud Storage Prefix
26
+
27
+
28
+ def safe_normpath(path: str) -> str:
29
+ """Normalize path safely to get around gfile.glob limitations."""
30
+ if path.startswith(_GS_PREFIX):
31
+ return _GS_PREFIX + os.path.normpath(path[len(_GS_PREFIX):])
32
+ return os.path.normpath(path)
33
+
34
+
25
35
  def _id_key(filename):
26
36
  _, id_num = filename.rsplit('-', maxsplit=1)
27
37
  return int(id_num)
@@ -84,7 +94,7 @@ class ExportFileManager:
84
94
  {base_name}-{id}. Then the file manager will manage
85
95
  {base_name}-{id}/{subdirectory} files.
86
96
  """
87
- self._base_name = os.path.normpath(base_name)
97
+ self._base_name = safe_normpath(base_name)
88
98
  self._max_to_keep = max_to_keep
89
99
  self._next_id_fn = next_id_fn or _CounterIdFn(self._base_name)
90
100
  self._subdirectory = subdirectory or ''
@@ -100,7 +110,7 @@ class ExportFileManager:
100
110
  """
101
111
  files = _find_managed_files(self._base_name)
102
112
  return [
103
- os.path.normpath(os.path.join(f, self._subdirectory)) for f in files
113
+ safe_normpath(os.path.join(f, self._subdirectory)) for f in files
104
114
  ]
105
115
 
106
116
  def clean_up(self):
@@ -119,7 +129,7 @@ class ExportFileManager:
119
129
  def next_name(self) -> str:
120
130
  """Returns a new file name based on `base_name` and `next_id_fn()`."""
121
131
  base_path = f'{self._base_name}-{self._next_id_fn()}'
122
- return os.path.normpath(os.path.join(base_path, self._subdirectory))
132
+ return safe_normpath(os.path.join(base_path, self._subdirectory))
123
133
 
124
134
 
125
135
  class ExportSavedModel:
@@ -17,6 +17,7 @@
17
17
  import os
18
18
 
19
19
  from orbit import actions
20
+ from orbit.actions import export_saved_model
20
21
 
21
22
  import tensorflow as tf, tf_keras
22
23
 
@@ -220,6 +221,10 @@ class ExportSavedModelTest(tf.test.TestCase):
220
221
  reloaded_model = tf.saved_model.load(file_manager.managed_files[-1])
221
222
  self.assertEqual(reloaded_model(), 7)
222
223
 
224
+ def test_safe_normpath_gs(self):
225
+ path = export_saved_model.safe_normpath('gs://foo//bar')
226
+ self.assertEqual(path, 'gs://foo/bar')
227
+
223
228
 
224
229
  if __name__ == '__main__':
225
230
  tf.test.main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tf-models-nightly
3
- Version: 2.14.0.dev20231112
3
+ Version: 2.14.0.dev20231114
4
4
  Summary: TensorFlow Official Models
5
5
  Home-page: https://github.com/tensorflow/models
6
6
  Author: Google Inc.
@@ -775,7 +775,7 @@ official/projects/yolo/configs/decoders.py,sha256=NRtd96kfDWgyxzZtd_zvbJ-UZWC_ra
775
775
  official/projects/yolo/configs/yolo.py,sha256=S3Ct_MQOeMvs5PqE6_RSizk6BRSVuQbMq4rwdOqX1CY,18648
776
776
  official/projects/yolo/configs/yolov7.py,sha256=ZjoMQSeBdESO8QirKSW9n4q0Is3toah0jTxlTwVAprY,12932
777
777
  official/projects/yolo/dataloaders/__init__.py,sha256=wrNoNRP6wGQBFDLVCYB01k1HgwOGlQ8iZnfqimxlDyk,610
778
- official/projects/yolo/dataloaders/classification_input.py,sha256=SJdhTMawIQX1MiJwYC6ZyiiAZjaU1lKcsw3YL093b88,3289
778
+ official/projects/yolo/dataloaders/classification_input.py,sha256=LrSjUFywNn4r2q9BDg3-mg5QQ2uU0Tud7bDBsPTxw08,3800
779
779
  official/projects/yolo/dataloaders/tf_example_decoder.py,sha256=NFmXcEJEHB9y_pr6VHNupwzXkhZnaWBqaf7Raypt-9E,4820
780
780
  official/projects/yolo/dataloaders/yolo_input.py,sha256=1Jhw5pOOdonZyMlEA2JzCoWJ2g6MhZ4vEN3NG4_uaig,14616
781
781
  official/projects/yolo/losses/__init__.py,sha256=1ToRMjre4mErL4Ek4_dMVxMjXNPossNXggV8fqbISao,609
@@ -827,7 +827,7 @@ official/projects/yolo/optimization/configs/__init__.py,sha256=1ToRMjre4mErL4Ek4
827
827
  official/projects/yolo/optimization/configs/optimization_config.py,sha256=kl0F8qjqtgNbeuDH4mFxwna0Unm6bl49a6dfE4Z_s8A,2084
828
828
  official/projects/yolo/optimization/configs/optimizer_config.py,sha256=F5qE0kaUxGk9dW5R_I3Ofp-Myd_T3i1-p1eJ58-O6KM,2283
829
829
  official/projects/yolo/serving/__init__.py,sha256=1ToRMjre4mErL4Ek4_dMVxMjXNPossNXggV8fqbISao,609
830
- official/projects/yolo/serving/export_module_factory.py,sha256=fGoMMnJvBT8h4XpI2uaoArk0BhoD6ecdW5fTHlggVNw,9948
830
+ official/projects/yolo/serving/export_module_factory.py,sha256=jx0LyHEaUNDv9IkjUN_uY1XTwhc5UlImWLuk5V0YkLw,9955
831
831
  official/projects/yolo/serving/export_saved_model.py,sha256=wFjN6wAJ-ckNEtSTwMY6Kj4jDz7CSAytOqFy1AVCt7w,4584
832
832
  official/projects/yolo/serving/export_tflite.py,sha256=Pt1rkKu9TxVYB8HtLadJQ_buWzNXqWL8Zp0TFDPUXzw,902
833
833
  official/projects/yolo/serving/model_fn.py,sha256=_T28osfXUtnBU9GqULbJ6HMd44pJMRWYZfitjrhWnlo,3018
@@ -1134,8 +1134,8 @@ orbit/standard_runner_test.py,sha256=iNd9TJiZu0r74ukZhqBHrgfiXMhSbk2nTqT-369Vugg
1134
1134
  orbit/actions/__init__.py,sha256=F3js6WTEprpgwo0mqJlGiaXJok85A1bZgRr0HZSGP0E,3327
1135
1135
  orbit/actions/conditional_action.py,sha256=cEDxd3d61kmCjhOKxlPO7XE41W6chidW7VP0VvS0-aU,1988
1136
1136
  orbit/actions/conditional_action_test.py,sha256=vjLolfB6qEHfu1JnC3LCqpZjRgdJG4XLsTVwbtsy6eA,1335
1137
- orbit/actions/export_saved_model.py,sha256=c80Rtra2YOJTU3NnPY-IgwWvit20xh6ewreCwVjI--s,5550
1138
- orbit/actions/export_saved_model_test.py,sha256=FrvTAhPjucZXuft4GTDVhxibcGQNFaHzyM7VxyvmYA4,8531
1137
+ orbit/actions/export_saved_model.py,sha256=fyGHRyD_b8vsj5qE5vclFNyEU9rbEsdGhBVI7OF4ITM,5834
1138
+ orbit/actions/export_saved_model_test.py,sha256=Xee3ZnaK3cFEwAFgu6JyPh9nL6I2JHnfgVwBD9BYvUY,8716
1139
1139
  orbit/actions/new_best_metric.py,sha256=JgExcdxrUuFyoCYwZIkERfbYwbYrmDskfUNNnIpy1mA,8489
1140
1140
  orbit/actions/new_best_metric_test.py,sha256=_FBHlxLHXNRMCpDbzJSorZUC4Jt93VeYjSMsh_Hz9lg,4024
1141
1141
  orbit/actions/save_checkpoint_if_preempted.py,sha256=VdbCldR8qW7jvJndgebSBAw_Ss4DRqzo8JmmjGxklYw,2329
@@ -1158,9 +1158,9 @@ tensorflow_models/__init__.py,sha256=Ciz_YBke6teb6y42QyQTUBDdXJAiV7Qdu1zOoZvYiKw
1158
1158
  tensorflow_models/tensorflow_models_test.py,sha256=qUBLFZg7rmKkVQ3cHJVlkoid8cPqjjyc2ZiWtjQO5_o,1395
1159
1159
  tensorflow_models/nlp/__init__.py,sha256=3dULDpUBpDi9vljpXadq6oJrWH4y6z42Bz2d3hopYZw,807
1160
1160
  tensorflow_models/vision/__init__.py,sha256=4y77XkHaH8qLls3-6ta4tMp3Xj8CLbB0ihH91HsQ9z4,833
1161
- tf_models_nightly-2.14.0.dev20231112.dist-info/AUTHORS,sha256=1dG3fXVu9jlo7bul8xuix5F5vOnczMk7_yWn4y70uw0,337
1162
- tf_models_nightly-2.14.0.dev20231112.dist-info/LICENSE,sha256=WxeBS_DejPZQabxtfMOM_xn8qoZNJDQjrT7z2wG1I4U,11512
1163
- tf_models_nightly-2.14.0.dev20231112.dist-info/METADATA,sha256=FGW5RfNpmU8VZnQMEfBMph5ZdSbT3a72OF-8YjIaCPM,1414
1164
- tf_models_nightly-2.14.0.dev20231112.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
1165
- tf_models_nightly-2.14.0.dev20231112.dist-info/top_level.txt,sha256=gum2FfO5R4cvjl2-QtP-S1aNmsvIZaFFT6VFzU0f4-g,33
1166
- tf_models_nightly-2.14.0.dev20231112.dist-info/RECORD,,
1161
+ tf_models_nightly-2.14.0.dev20231114.dist-info/AUTHORS,sha256=1dG3fXVu9jlo7bul8xuix5F5vOnczMk7_yWn4y70uw0,337
1162
+ tf_models_nightly-2.14.0.dev20231114.dist-info/LICENSE,sha256=WxeBS_DejPZQabxtfMOM_xn8qoZNJDQjrT7z2wG1I4U,11512
1163
+ tf_models_nightly-2.14.0.dev20231114.dist-info/METADATA,sha256=iapp0upkgITxQsnBFx0Rfb0AYSu-OVgytPfKrv6Etdw,1414
1164
+ tf_models_nightly-2.14.0.dev20231114.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
1165
+ tf_models_nightly-2.14.0.dev20231114.dist-info/top_level.txt,sha256=gum2FfO5R4cvjl2-QtP-S1aNmsvIZaFFT6VFzU0f4-g,33
1166
+ tf_models_nightly-2.14.0.dev20231114.dist-info/RECORD,,