Sie können Bilder laden wahrscheinlich beacause Sie diese Feature-Typen unter Verwendung von gespeicherten tf.train.BytesList()
und ganzen Bilddaten ist ein großer Byte-Wert in einer Liste.
Wenn ich recht habe, verwenden Sie tf.decode_raw
, um die Daten aus dem Bild zu erhalten, das Sie von TFRecord laden.
In Bezug auf Anwendungsfälle: Ich bin kein Experte, aber ich verwende VarLenFeature
zum Speichern von Datensätzen für Objekterkennung Aufgabe. Es gibt eine variable Anzahl von Begrenzungsrahmen pro Bild (entspricht dem Objekt im Bild). Ich verwende objects_number
Funktionen, um die Anzahl der Objekte (und Bboxes) zu verfolgen. Jede Bounding-Box ist die Liste von 4 Schwimmers Koordinaten
I folgenden Code bin mit laden:
features = tf.parse_single_example(
serialized_example,
features={
# We know the length of both fields. If not the
# tf.VarLenFeature could be used
'height': tf.FixedLenFeature([], tf.int64),
'width': tf.FixedLenFeature([], tf.int64),
'depth': tf.FixedLenFeature([], tf.int64),
# Label part
'objects_number': tf.FixedLenFeature([], tf.int64),
'bboxes': tf.VarLenFeature(tf.float32),
'labels': tf.VarLenFeature(tf.int64),
# Dense data
'image_raw': tf.FixedLenFeature([],tf.string)
})
# Get metadata
objects_number = tf.cast(features['objects_number'], tf.int32)
height = tf.cast(features['height'], tf.int32)
width = tf.cast(features['width'], tf.int32)
depth = tf.cast(features['depth'], tf.int32)
# Actual data
image_shape = tf.parallel_stack([height, width, depth])
bboxes_shape = tf.parallel_stack([objects_number, 4])
# BBOX data is actually dense convert it to dense tensor
bboxes = tf.sparse_tensor_to_dense(features['bboxes'], default_value=0)
# Since information about shape is lost reshape it
bboxes = tf.reshape(bboxes, bboxes_shape)
image = tf.decode_raw(features['image_raw'], tf.uint8)
image = tf.reshape(image, image_shape)
Beachten Sie, dass „image_raw“ ist feste Länge Merkmal (hat ein Element) und hält Werte des Typs "Bytes", jedoch kann ein Wert von "Byte-Typ" selbst eine variable Größe haben (es ist eine Bytefolge und kann viele Symbole enthalten). Also "image_raw" ist eine Liste mit einem Element vom Typ "Bytes", die sehr groß sein kann.
weiter zu erarbeiten, wie es funktioniert: Merkmale sind Wertelisten, die Werte spezifischen „Typ“ haben.
Datentypen für Funktionen Teilmenge von Datentypen für Tensoren sind, Sie haben:
- int64 (64-Bit-Raum im Speicher)
- Bytes (belegt wie im Speicher viele Bytes, wie Sie wollen)
- Schwimmer (iDK nimmt 32-64 Bits im Speicher, wie viel)
Sie können prüfen, hereTensor s Datentypen.
So können Sie Daten mit variabler Länge ohne VarLenFeatures
überhaupt speichern (eigentlich gut tun Sie es), aber zuerst müssten Sie es in Bytes/String-Funktion konvertieren, und dann dekodieren. Und das ist am häufigsten Methode.
Welche Art Funktion u für das Speichern von Bilddaten verwenden? tf.train.BytesList? – Pietrko
Ja, ich bin mit tf.train.Byteslist – ZijunLost