當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.image.stateless_sample_distorted_bounding_box用法及代碼示例


確定性地為圖像生成一個隨機扭曲的邊界框。

用法

tf.image.stateless_sample_distorted_bounding_box(
    image_size, bounding_boxes, seed, min_object_covered=0.1,
    aspect_ratio_range=None, area_range=None, max_attempts=None,
    use_image_if_no_bounding_boxes=None, name=None
)

參數

  • image_size 一個Tensor。必須是以下類型之一:uint8 , int8 , int16 , int32 , int64。一維,包含 [height, width, channels]
  • bounding_boxes Tensor 類型為 float32 。 3-D,形狀為[batch, N, 4],說明了與圖像相關的 N 個邊界框。
  • seed 形狀 [2] 張量,隨機數生成器的種子。必須具有數據類型 int32int64 。 (使用 XLA 時,僅允許使用 int32。)
  • min_object_covered float32 類型的張量。默認為 0.1 。圖像的裁剪區域必須至少包含所提供的任何邊界框的這一部分。此參數的值應為非負數。在 0 的情況下,裁剪區域不需要與提供的任何邊界框重疊。
  • aspect_ratio_range floats 的可選列表。默認為 [0.75, 1.33] 。圖像的裁剪區域必須具有此範圍內的 ratio = width / height 方麵。
  • area_range floats 的可選列表。默認為 [0.05, 1] 。圖像的裁剪區域必須包含此範圍內提供的圖像的一小部分。
  • max_attempts 可選的 int 。默認為 100 。嘗試生成具有指定約束的圖像的裁剪區域的次數。 max_attempts 失敗後,返回整個圖像。
  • use_image_if_no_bounding_boxes 可選的 bool 。默認為 False 。如果未提供邊界框,則控製行為。如果為真,則假設一個隱式邊界框覆蓋整個輸入。如果為 false,則引發錯誤。
  • name 操作的名稱(可選)。

返回

  • Tensor 對象的元組(開始、大小、bbox)。
  • begin 一個Tensor。具有與 image_size 相同的類型。一維,包含 [offset_height, offset_width, 0] 。作為輸入提供給 tf.slice
  • size 一個Tensor。具有與 image_size 相同的類型。一維,包含 [target_height, target_width, -1] 。作為輸入提供給 tf.slice
  • bboxes Tensor 類型為 float32 。 3-D,形狀為[1, 1, 4],包含扭曲的邊界框。作為輸入提供給 tf.image.draw_bounding_boxes

在圖像識別或對象定位任務中,除了 ground-truth 標簽之外,通常還提供邊界框注釋。訓練這種係統的常用技術是在保留其內容的同時隨機扭曲圖像,即數據增強。這個操作,給定相同的 seed ,確定性地輸出對象的隨機失真定位,即邊界框,給定 image_size , bounding_boxes 和一係列約束。

這個 Op 的輸出是一個單一的邊界框,可以用來裁剪原始圖像。輸出作為 3 個張量返回:begin , sizebboxes。前 2 個張量可以直接輸入 tf.slice 以裁剪圖像。後者可以提供給tf.image.draw_bounding_boxes 以可視化邊界框的外觀。

邊界框以 [y_min, x_min, y_max, x_max] 的形式提供和返回。邊界框坐標是 [0.0, 1.0] 中相對於底層圖像的寬度和高度的浮點數。

在給定相同的 seed 的情況下,此操作的輸出保證相同,並且與調用函數的次數無關,並且與全局種子設置(例如 tf.random.set_seed )無關。

示例用法:

image = np.array([[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]])
bbox = tf.constant(
  [0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4])
seed = (1, 2)
# Generate a single distorted bounding box.
bbox_begin, bbox_size, bbox_draw = (
  tf.image.stateless_sample_distorted_bounding_box(
    tf.shape(image), bounding_boxes=bbox, seed=seed))
# Employ the bounding box to distort the image.
tf.slice(image, bbox_begin, bbox_size)
<tf.Tensor:shape=(2, 2, 1), dtype=int64, numpy=
array([[[1],
        [2]],
       [[4],
        [5]]])>
# Draw the bounding box in an image summary.
colors = np.array([[1.0, 0.0, 0.0], [0.0, 0.0, 1.0]])
tf.image.draw_bounding_boxes(
  tf.expand_dims(tf.cast(image, tf.float32),0), bbox_draw, colors)
<tf.Tensor:shape=(1, 3, 3, 1), dtype=float32, numpy=
array([[[[1.],
         [1.],
         [3.]],
        [[1.],
         [1.],
         [6.]],
        [[7.],
         [8.],
         [9.]]]], dtype=float32)>

請注意,如果沒有可用的邊界框信息,設置 use_image_if_no_bounding_boxes = true 將假定有一個隱式邊界框覆蓋整個圖像。如果use_image_if_no_bounding_boxes 為假且未提供邊界框,則會引發錯誤。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.image.stateless_sample_distorted_bounding_box。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。