Spec-Zone.ru › TensorFlow

tf.image.convert_image_dtype

Преобразует image в dtype, масштабируя его значения при необходимости.

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.image.convert_image_dtype

tf.image.convert_image_dtype(
    image, dtype, saturate=False, name=None
)

Используется в блокнотах

Используется в руководстве Используется в обучающих материалах
  • tf.data: Создание входных конвейеров TensorFlow
  • Обрезка для вычислений на устройстве с XNNPACK
  • DeepDream
  • Стилизация нейронных сетей
  • Интегрированные градиенты
  • Загрузка видеоданных
  • Перенос обучения для классификации видео с MoViNet

Операция поддерживает типы данных (для image и dtype) uint8, uint16, uint32, uint64, int8, int16, int32, int64, float16, float32, float64, bfloat16.

Ожидается, что изображения, представленные с помощью чисел с плавающей точкой, будут иметь значения в диапазоне [0,1). Данные изображения, хранящиеся в целочисленных типах данных, ожидают значения в диапазоне [0,MAX], где MAX - наибольшее положительное представимое число для типа данных.

Этот оператор выполняет преобразование между типами данных, масштабируя значения соответственно перед приведением типа.

Пример использования:

x = [[[1, 2, 3], [4, 5, 6]],
     [[7, 8, 9], [10, 11, 12]]]
x_int8 = tf.convert_to_tensor(x, dtype=tf.int8)
tf.image.convert_image_dtype(x_int8, dtype=tf.float16, saturate=False)
<tf.Tensor: shape=(2, 2, 3), dtype=float16, numpy=
array([[[0.00787, 0.01575, 0.02362],
        [0.0315 , 0.03937, 0.04724]],
       [[0.0551 , 0.063  , 0.07086],
        [0.07874, 0.0866 , 0.0945 ]]], dtype=float16)>

Преобразование целочисленных типов в типы с плавающей точкой возвращает нормализованные значения с плавающей точкой в диапазоне [0, 1); значения нормализуются по значению MAX входного типа данных. Рассмотрим следующие два примера:

a = [[[1], [2]], [[3], [4]]]
a_int8 = tf.convert_to_tensor(a, dtype=tf.int8)
tf.image.convert_image_dtype(a_int8, dtype=tf.float32)
<tf.Tensor: shape=(2, 2, 1), dtype=float32, numpy=
array([[[0.00787402],
        [0.01574803]],
       [[0.02362205],
        [0.03149606]]], dtype=float32)>
a_int32 = tf.convert_to_tensor(a, dtype=tf.int32)
tf.image.convert_image_dtype(a_int32, dtype=tf.float32)
<tf.Tensor: shape=(2, 2, 1), dtype=float32, numpy=
array([[[4.6566129e-10],
        [9.3132257e-10]],
       [[1.3969839e-09],
        [1.8626451e-09]]], dtype=float32)>

Несмотря на идентичные значения a и тип выходного данных float32, выходные данные отличаются из-за различных входных типов данных (int8 против int32). Это снова связано с тем, что значения нормализуются по значению MAX входного типа данных.

Обратите внимание, что преобразование значений с плавающей точкой в целочисленный тип может привести к потере точности. В примере ниже тензор изображения b типа float32 преобразуется в int8 и обратно в float32. Однако конечный результат отличается от исходного входного значения b из-за потери точности.

b = [[[0.12], [0.34]], [[0.56], [0.78]]]
b_float32 = tf.convert_to_tensor(b, dtype=tf.float32)
b_int8 = tf.image.convert_image_dtype(b_float32, dtype=tf.int8)
tf.image.convert_image_dtype(b_int8, dtype=tf.float32)
<tf.Tensor: shape=(2, 2, 1), dtype=float32, numpy=
array([[[0.11811024],
        [0.33858266]],
       [[0.5590551 ],
        [0.77952754]]], dtype=float32)>

Масштабирование от целочисленного типа (входной тип данных) к другому целочисленному типу (выходной тип данных) не будет отображать MAX входного типа данных в MAX выходного типа данных, но преобразование вперед и назад должно привести к отсутствию изменений. Например, как показано ниже, значение MAX int8 (=127) не отображается в значение MAX int16 (=32 767), но при обратном масштабировании мы получаем те же исходные значения c.

c = [[[1], [2]], [[127], [127]]]
c_int8 = tf.convert_to_tensor(c, dtype=tf.int8)
c_int16 = tf.image.convert_image_dtype(c_int8, dtype=tf.int16)
print(c_int16)
tf.Tensor(
[[[  256]
  [  512]]
 [[32512]
  [32512]]], shape=(2, 2, 1), dtype=int16)
c_int8_back = tf.image.convert_image_dtype(c_int16, dtype=tf.int8)
print(c_int8_back)
tf.Tensor(
[[[  1]
  [  2]]
 [[127]
  [127]]], shape=(2, 2, 1), dtype=int8)

Масштабирование вниз от целочисленного типа к другому целочисленному типу может быть потерей точности. Обратите внимание на пример ниже, что преобразование int16 в uint8 и обратно в int16 привело к потере точности.

d = [[[1000], [2000]], [[3000], [4000]]]
d_int16 = tf.convert_to_tensor(d, dtype=tf.int16)
d_uint8 = tf.image.convert_image_dtype(d_int16, dtype=tf.uint8)
d_int16_back = tf.image.convert_image_dtype(d_uint8, dtype=tf.int16)
print(d_int16_back)
tf.Tensor(
[[[ 896]
  [1920]]
 [[2944]
  [3968]]], shape=(2, 2, 1), dtype=int16)

Обратите внимание, что преобразование от входных данных с плавающей точкой к целочисленным типам может привести к проблемам переполнения/подпотока. Установите saturate в значение True, чтобы избежать таких проблем при проблемных преобразованиях. При включенном насыщении выходные данные будут ограничены допустимым диапазоном перед выполнением потенциально опасного приведения типа (только перед выполнением такого приведения, т.е., при приведении типа с плавающей точкой к целочисленному типу и при приведении от знакового к беззнаковому типу; saturate не влияет на приведения между типами с плавающей точкой или на приведения, увеличивающие диапазон типа).

Args
image Изображение.
dtype Тип DType для преобразования image.
saturate Если True, обрезать входные данные перед приведением типа (при необходимости).
name Имя для данной операции (необязательно).
Returns
image, преобразованный в dtype.
Raises
AttributeError Возбуждает ошибку атрибута, если dtype не является ни плавающей точкой, ни целым числом.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/image/convert_image_dtype

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API