Ich habe versucht, Bilder unterschiedlicher Größe in tf-records zu speichern. Ich habe festgestellt, dass die Bilder zwar unterschiedliche Größen haben, ich sie aber trotzdem mit FixedLenFeature
laden kann.
Wenn ich die Dokumente auf FixedLenFeature
und VarLenFeature
überprüfe, scheint mir der Unterschied zu sein, dass VarLenFeauture
einen dünnen Tensor zurückgibt.
Könnte jemand einige Situationen illustrieren, sollte man FixedLenFeature
oder VarLenFeature
benutzen?
Sie können Bilder wahrscheinlich laden, weil Sie sie mit dem Feature-Typ tf.train.BytesList()
gespeichert haben und die gesamten Bilddaten ein großer Byte-Wert in einer Liste sind.
Wenn ich recht habe, verwenden Sie tf.decode_raw
, um die Daten aus dem Bild zu holen, das Sie von TFRecord geladen haben.
Zu Anwendungsbeispielen:
Ich verwende VarLenFeature
zum Speichern von Datensätzen für die Objekterkennung.
Es gibt eine variable Anzahl an Begrenzungsrahmen pro Bild (entspricht dem Objekt im Bild). Daher benötige ich ein weiteres Feature objects_number
, um die Anzahl der Objekte (und Bboxen) zu verfolgen.
Jede Bounding Box selbst ist eine Liste von 4 Float-Koordinaten
Ich verwende folgenden Code, um es zu laden:
%Vor%Beachten Sie, dass "image_raw" eine feste Länge Feature (hat ein Element) und enthält Werte vom Typ "Bytes", aber ein Wert von "Bytes Typ" kann selbst variable Größe haben (es ist eine Zeichenfolge von Bytes und kann viele haben) Symbole darin). Also "image_raw" ist eine Liste mit einem Element vom Typ "Bytes", das sehr groß sein kann.
Um weiter zu erläutern, wie es funktioniert: Features sind Listen mit Werten, diese Werte haben einen spezifischen "Typ".
Datentypen für Features sind Teilmengen von Datentypen für Tensoren, die Sie haben:
Sie können hier Tensoren Datentypen überprüfen.
Sie können also Daten mit variabler Länge ohne VarLenFeatures
speichern (eigentlich tun Sie es), aber zuerst müssen Sie es in Bytes / String-Features konvertieren und dann dekodieren.
Und das ist die üblichste Methode.
Tags und Links python tensorflow