Générez de manière déterministe un cadre de délimitation déformé de manière aléatoire pour une image.
Les annotations du cadre de délimitation sont souvent fournies en plus des étiquettes de vérité terrain dans les tâches de reconnaissance d'images ou de localisation d'objets. Une technique courante pour entraîner un tel système consiste à déformer aléatoirement une image tout en préservant son contenu, c'est-à-dire l'augmentation des données . Cette opération, étant donné la même « graine », génère de manière déterministe une localisation déformée de manière aléatoire d'un objet, c'est-à-dire un cadre de délimitation, étant donné une « image_size », des «bounding_boxes » et une série de contraintes.
La sortie de cette opération est une seule boîte englobante qui peut être utilisée pour recadrer l'image originale. La sortie est renvoyée sous forme de 3 tenseurs : `begin`, `size` et `bboxes`. Les 2 premiers tenseurs peuvent être introduits directement dans tf.slice
pour recadrer l'image. Ce dernier peut être fourni à tf.image.draw_bounding_boxes
pour visualiser à quoi ressemble le cadre de délimitation.
Les boîtes englobantes sont fournies et renvoyées sous la forme `[y_min, x_min, y_max, x_max]`. Les coordonnées du cadre de délimitation sont des flottants en `[0.0, 1.0]` par rapport à la largeur et à la hauteur de l'image sous-jacente.
La sortie de cette opération est garantie d'être la même étant donné la même « graine » et est indépendante du nombre de fois que la fonction est appelée, et indépendante des paramètres globaux de graine (par exemple tf.random.set_seed
).
Exemple d'utilisation :
>>> 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 ) >>> # Génère une seule boîte englobante déformée. >>> bbox_begin, bbox_size, bbox_draw = ( ... tf.image.stateless_sample_distorted_bounding_box( ... tf.shape(image),bounding_boxes=bbox, seed=seed)) >>> # Utiliser le cadre de sélection pour déformer l'image . >>> tf.slice(image, bbox_begin, bbox_size) Notez que si aucune information sur le cadre de délimitation n'est disponible, la définition de « use_image_if_no_bounding_boxes = true » supposera qu'il existe un seul cadre de délimitation implicite couvrant toute l'image. Si `use_image_if_no_bounding_boxes` est faux et qu'aucun cadre de délimitation n'est fourni, une erreur est générée.
Classes imbriquées
classe | StatelessSampleDistortedBoundingBox.Options | Attributs facultatifs pour StatelessSampleDistortedBoundingBox |
Constantes
Chaîne | OP_NAME | Le nom de cette opération, tel que connu par le moteur principal TensorFlow |
Méthodes publiques
statique StatelessSampleDistortedBoundingBox.Options | AreaRange (Liste<Float> AreaRange) |
statique StatelessSampleDistortedBoundingBox.Options | aspectRatioRange (Liste<Float> aspectRatioRange) |
Sortie < TFloat32 > | bboxes () 3D avec la forme « [1, 1, 4] » contenant le cadre de délimitation déformé. |
Sortie <T> | commencer () 1-D, contenant `[offset_height, offset_width, 0]`. |
static <T étend TNumber > StatelessSampleDistortedBoundingBox <T> | |
statique StatelessSampleDistortedBoundingBox.Options | maxAttempts (Long maxAttempts) |
Sortie <T> | taille () 1-D, contenant `[target_height, target_width, -1]`. |
statique StatelessSampleDistortedBoundingBox.Options | useImageIfNoBoundingBoxes (booléen useImageIfNoBoundingBoxes) |
Méthodes héritées
Constantes
chaîne finale statique publique OP_NAME
Le nom de cette opération, tel que connu par le moteur principal TensorFlow
Méthodes publiques
public static StatelessSampleDistortedBoundingBox.Options AreaRange (List<Float> AreaRange)
Paramètres
zonePlage | La zone recadrée de l'image doit contenir une fraction de l'image fournie dans cette plage. |
---|
public static StatelessSampleDistortedBoundingBox.Options aspectRatioRange (List<Float> aspectRatioRange)
Paramètres
aspectRatioRange | La zone recadrée de l'image doit avoir un rapport hauteur/largeur = largeur/hauteur compris dans cette plage. |
---|
Sortie publique < TFloat32 > bboxes ()
3D avec la forme « [1, 1, 4] » contenant le cadre de délimitation déformé. Fournissez en entrée à tf.image.draw_bounding_boxes
.
sortie publique <T> début ()
1-D, contenant `[offset_height, offset_width, 0]`. Fournir en entrée à tf.slice
.
public static StatelessSampleDistortedBoundingBox <T> créer ( Scope scope, Operand <T> imageSize, Operand < TFloat32 >boundingBoxes, Operand < TFloat32 > minObjectCovered, Operand <? extends TNumber > seed, Options... options)
Méthode d'usine pour créer une classe encapsulant une nouvelle opération StatelessSampleDistortedBoundingBox.
Paramètres
portée | portée actuelle |
---|---|
taille de l'image | 1-D, contenant « [hauteur, largeur, canaux] ». |
boîtes de délimitation | 3-D avec la forme `[batch, N, 4]` décrivant les N cadres englobants associés à l'image. |
minObjectCouvert | La zone recadrée de l'image doit contenir au moins cette fraction de tout cadre de délimitation fourni. La valeur de ce paramètre doit être non négative. Dans le cas de 0, la zone recadrée n'a pas besoin de chevaucher l'un des cadres de délimitation fournis. |
graine | 1-D avec la forme `[2]`. La graine du générateur de nombres aléatoires. Doit avoir le type `int32` ou `int64`. (Lors de l'utilisation de XLA, seul « int32 » est autorisé.) |
choix | porte des valeurs d'attributs facultatifs |
Retour
- une nouvelle instance de StatelessSampleDistortedBoundingBox
public statique StatelessSampleDistortedBoundingBox.Options maxAttempts (Long maxAttempts)
Paramètres
tentatives maximales | Nombre de tentatives de génération d'une région recadrée de l'image des contraintes spécifiées. Après l'échec de `max_attempts`, renvoyez l'image entière. |
---|
taille de sortie publique <T> ()
1-D, contenant `[target_height, target_width, -1]`. Fournir en entrée à tf.slice
.
public static StatelessSampleDistortedBoundingBox.Options useImageIfNoBoundingBoxes (booléen useImageIfNoBoundingBoxes)
Paramètres
useImageIfNoBoundingBoxes | Contrôle le comportement si aucun cadre de délimitation n'est fourni. Si c'est vrai, supposez une boîte englobante implicite couvrant l'intégralité de l'entrée. Si faux, génère une erreur. |
---|