IMAGE_FEATURE_MAP = {
    'image/filename': tf.io.FixedLenFeature([], tf.string),
    'image/encoded': tf.io.FixedLenFeature([], tf.string),
    'image/object/bbox/xmin': tf.io.VarLenFeature(tf.float32),
    'image/object/bbox/ymin': tf.io.VarLenFeature(tf.float32),
    'image/object/bbox/xmax': tf.io.VarLenFeature(tf.float32),
    'image/object/bbox/ymax': tf.io.VarLenFeature(tf.float32),
    'image/object/class/text': tf.io.VarLenFeature(tf.string),
}
yolo_max_boxes = 100

def parse_tfrecord(tfrecord, class_table, size):

    x = tf.io.parse_single_example(tfrecord, IMAGE_FEATURE_MAP)
    x_train = tf.image.decode_jpeg(x['image/encoded'], channels=3)
    x_train = tf.image.resize(x_train, (size, size))
    class_text = tf.sparse.to_dense(
        x['image/object/class/text'], default_value='')
    labels = tf.cast(class_table.lookup(class_text), tf.float32)
    y_train = tf.stack([tf.sparse.to_dense(x['image/object/bbox/xmin']),
                        tf.sparse.to_dense(x['image/object/bbox/ymin']),
                        tf.sparse.to_dense(x['image/object/bbox/xmax']),
                        tf.sparse.to_dense(x['image/object/bbox/ymax']),
                        labels], axis=1)
    paddings = [[0, yolo_max_boxes - tf.shape(y_train)[0]], [0, 0]]

    y_train = tf.pad(y_train, paddings)

    return x_train, y_train


def load_tfrecord_dataset(file_pattern, class_file, size=416):

    LINE_NUMBER = -1

    class_table = tf.lookup.StaticHashTable(tf.lookup.TextFileInitializer(
        class_file, tf.string, 0, tf.int64, LINE_NUMBER, delimiter="\n"), -1)

    files = tf.data.Dataset.list_files(file_pattern)
    dataset = files.flat_map(tf.data.TFRecordDataset)

    result = dataset.map(lambda x: parse_tfrecord(x, class_table, size))

    return result

def main():
    load_tfrecord_dataset('../data/facemask2020_train.tfrecord', '../data/mask2020.names', size=416)


if __name__ == '__main__':
    main()

Ketika saya mencetak x ['image/filename'], saya hanya bisa mendapatkan bentuk dan tipe data tensor. Saya ingin mendapatkan catatan terperinci tentang nama file di file tf.record, tetapi saya tidak dapat melihat nilai spesifik dari tensor ini. Apa yang harus saya lakukan untuk memeriksa nilai spesifiknya? Saya seorang pemula, tolong bantu saya.

0
ming guang 9 April 2020, 13:52

1 menjawab

Jawaban Terbaik

Tidak ada print dalam kode yang Anda poskan. Tapi saya percaya iterasi melalui dataset harus bekerja:

def main():
    ds = load_tfrecord_dataset('../data/facemask2020_train.tfrecord',
                               '../data/mask2020.names', size=416)
    for r in ds:
         print(r['image/filename'])
0
pcarter 9 April 2020, 12:00