1

У меня есть модель CNN, которая обучается с использованием набора из 120 изображений. Изображения преобразуются в TFR записи и помечены с помощью этого методаКак использовать обученную модель CNN для идентификации объекта в Tensorflow

def write_records_file(dataset, record_location): 
    """ 
    dataset : dict(list) 
     Dictionary with each key being a label for the list of image filenames of its value. 
    record_location : str 
     Location to store the TFRecord output. 
    """ 
    writer = None 

    # Enumerating the dataset because the current index is used to breakup the files if they get over 100 
    current_index = 0 
    for breed, images_filenames in dataset.items(): 
     for image_filename in images_filenames: 
      if current_index % 100 == 0: 
       if writer: 
        writer.close() 

       record_filename = "{record_location}-{current_index}.tfrecords".format(
        record_location=record_location, 
        current_index=current_index) 

       writer = tf.python_io.TFRecordWriter(record_filename) 
      current_index += 1 

      image_file = tf.read_file(image_filename)   
      image = tf.image.decode_jpeg(image_file) 
      grayscale_image = tf.image.rgb_to_grayscale(image) 
      resized_image = tf.image.resize_images(grayscale_image, 250, 151) 

      image_bytes = sess.run(tf.cast(resized_image, tf.uint8)).tobytes() 

      image_label = breed.encode("utf-8") 

      example = tf.train.Example(features=tf.train.Features(feature={ 
       'label': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_label])), 
       'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) 
      })) 

      writer.write(example.SerializeToString()) 

write_records_file(testing_dataset, "./output/testing-images/testing-image") 
write_records_file(training_dataset, "./output/training-images/training-image") 

Вся модель + обучение сценарий заканчивается train_prediction = tf.nn.softmax(final_fully_connected) и я получаю 2 .tfr файлов в качестве выходного (подготовки и тест) ,

Теперь предположим, что у вас есть фотография и вы хотите узнать, какая более похожая картина образца 120 pic, чтобы идентифицировать ее. Как я должен действовать?

тензор train_prediction имеет следующий формат shape=(3, 120), dtype=float32 120 является общее количество категорий

В книге, которую я читаю, к сожалению, не существует каких-либо указаний и глава конца этой обученной модели, что я не знаю как использовать в реальном приложении и искать в Интернете есть много подобных образцов, которые заканчиваются в одной точке.

ответ

0

Я не понял ваш вопрос. На 120 образцов, вы имеете в виду, что существует 120 классов с несколькими примерами изображений в классе? В этом случае это проблема классификации, в которой вы готовите модель для классификации со входом как изображение и вывод, так как вероятность того, что вход будет принадлежать одному из 120 классов (+ дополнительный класс, который он не принадлежит ни одному из них). В этом случае полностью подключенный слой подается в функцию softmax, которая выводит эту вероятность для 120 классов, которая по существу является вектором длины 120. Но для этого вам нужно несколько примеров обучения для каждого класса.

Если у вас всего 120 изображений, и вам нужно знать, есть ли другое сходство с одним из этих изображений, вы можете просто взять выходной вектор слоя перед полностью подключенным слоем для этих 120 изображений для нейронной сети, которая уже обучаемый на более крупном образце изображений (например, в начальной модели), а затем просто сходство вектора тестового изображения с этими 120 векторами.

У меня была простая в использовании демоверсия, использующая вышеуказанный метод here. Проверьте, работает ли вы, иначе вы более подробно уточните проблему.

+0

120 - количество папок, а не количество изображений, имеется 120 папок, в которых каждая папка относится к категории. Я вообще понял, как работает классификация, что я не понимаю, как использовать именно эту обучаемую модель в Tensorflow. несколько кодеков, связанных с моим кодом, чтобы показать мне, как извлечь обученные возможности модели для простого сравнения с другим изображением - это то, что я ищу. – AndreaF

+0

@AndreaF В этом случае train_prediction будет тензором длины 120, где индекс с наибольшим значением (вероятностью) является самым близким изображением из 120. output = sess.run (train_prediction, feed_dict = {image_file: img}) должен возвращать правильный результат , Перед этим вам нужно импортировать экспортированный граф. Следуйте инструкциям в тензорном потоке, все это хорошо объяснено. – pratsJ