Nano Hash - криптовалюты, майнинг, программирование

Как создать файл TFRecords из изображений png

Я только начал работать с TensorFlow неделю назад, и у меня есть некоторые основные проблемы.

Главный из них заключается в том, что я не нашел способа создать TFRecords, содержащий все мои данные. Я понял, что этот процесс необходим для обучения моей собственной сети с несколькими миллионами изображений 32x32 пикселей.

Я нашел множество руководств и множество документации, относящихся к «input_pipeline», но ни в одном из этих руководств четко не объяснено, как мне создать свою собственную базу данных с моими собственными изображениями.

У меня есть несколько основных папок и несколько подпапок, ~ 300 000 изображений в формате png в каждой, где метка находится в имени изображения (0 или 1 - двоичная классификация).

Способ получить эти изображения через строки (glob):

"/home/roishik/Desktop/database/train/exp*/*png"
"/home/roishik/Desktop/database/train/exp*/tot*/*png"

Итак, мой вопрос:

Как мне создать файл TFRecords, содержащий эти изображения и их метки?

Я буду очень признателен за вашу помощь! Я застрял с этой проблемой почти два дня, и я нашел только действительно конкретные ответы о MNIT и ImageNet.

Спасибо!



Ответы:


1

Миллионы изображений 32x32? Звучит точно так же, как CIFAR. Ознакомьтесь с моделями TensorFlow, у них есть скрипт для загрузки CIFAR10 и преобразования его в TFRecords: download_and_convert_data.py. Если ваши данные не CIFAR, все равно ознакомьтесь с кодом, возможно, он вам поможет.

Код, загружающий CIFAR10, выглядит так:

with tf.Graph().as_default():
    image_placeholder = tf.placeholder(dtype=tf.uint8)
    encoded_image = tf.image.encode_png(image_placeholder)

    with tf.Session('') as sess:
        for j in range(num_images):
            [...] # load image and label from disk
            image = [...]
            label = [...]

            png_string = sess.run(encoded_image,
                                  feed_dict={image_placeholder: image})

            example = dataset_utils.image_to_tfexample(
                png_string, 'png', _IMAGE_SIZE, _IMAGE_SIZE, label)
            tfrecord_writer.write(example.SerializeToString())
            [...]

Функция image_to_tfexample() выглядит так:

def image_to_tfexample(image_data, image_format, height, width, class_id):
    return tf.train.Example(features=tf.train.Features(feature={
        'image/encoded': bytes_feature(image_data),
        'image/format': bytes_feature(image_format),
        'image/class/label': int64_feature(class_id),
        'image/height': int64_feature(height),
        'image/width': int64_feature(width),
    }))

А функция int_64_feature() выглядит так (функция bytes_feature() аналогична):

def int64_feature(values):
    if not isinstance(values, (tuple, list)):
        values = [values]
    return tf.train.Feature(int64_list=tf.train.Int64List(value=values))

Изменить

Еще несколько деталей:

  • TFRecordWriter создается так (это также создает файл):

    with tf.python_io.TFRecordWriter(training_filename) as tfrecord_writer:
        [...] # use the tfrecord_writer
    
  • В документации для tf.image.encode_png() говорится, что изображение должно имеют форму [height, width, channels], где channels = 1 для оттенков серого, channels = 2 для оттенков серого + альфа, 3 для цвета RGB и channels = 4 для цвета RGB + альфа (RGBA).

13.09.2016
  • Спасибо за Ваш ответ! Я использую свою собственную базу данных (изображения в градациях серого SEM). последняя строка tfrecord_writer.write(example.SerializeToString()) сохраняет файл TFRecords? где я даю файлу имя? + изображение должно быть загружено как тензор 32x32 или как вектор 1024? 13.09.2016
  • Не за что. Я добавил пару строк в свой ответ, это должно прояснить для вас ситуацию. 13.09.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..