4

Чтобы узнать больше о глубоком изучении и компьютерном зрении, я работаю над проектом по определению полосы движения на дорогах. Я использую TFLearn в качестве обертки вокруг Tensorflow.Проблемы с формированием входов/выходов Tensorflow/TFLearn для изображений

фона

Учебных входы изображение дорог (каждое изображение, представленное в виде 50x50 пикселей 2D массива, причем каждый элемент имеет значение яркости от 0,0 до 1,0).

Выходы для тренировки имеют одинаковую форму (массив 50x50), но представляют собой отмеченную полосу. По существу, пиксели без дорожного движения равны 0, а пиксели дороги равны 1.

Это не проблема классификации изображений с фиксированным размером, а вместо этого проблема обнаружения дорожных и внедорожных пикселей из изображения.

Проблема

Я не был в состоянии успешно формировать свои входы/выходы таким образом, что TFLearn/Tensorflow принимает, и я не знаю, почему. Вот мой пример кода:

# X = An array of training inputs (of shape (50 x 50)). 
# Y = An array of training outputs (of shape (50 x 50)). 

# "None" equals the number of samples in my training set, 50 represents 
# the size of the 2D image array, and 1 represents the single channel 
# (grayscale) of the image. 
network = input_data(shape=[None, 50, 50, 1]) 

network = conv_2d(network, 50, 50, activation='relu') 

# Does the 50 argument represent the output shape? Should this be 2500? 
network = fully_connected(network, 50, activation='softmax') 

network = regression(network, optimizer='adam', loss='categorical_crossentropy', learning_rate=0.001) 

model = tflearn.DNN(network, tensorboard_verbose=1) 

model.fit(X, Y, n_epoch=10, shuffle=True, validation_set=(X, Y), show_metric=True, batch_size=1) 

Ошибка я получаю это на model.fit вызова с ошибкой:

ValueError: Cannot feed value of shape (1, 50, 50) for Tensor u'InputData/X:0', which has shape '(?, 50, 50, 1)'

Я попытался сокращения ввода/вывода массивов выборок в векторе 1D (с длиной 2500), но это приводит к другим ошибкам.

Я немного потерял, как все это сформировать, любая помощь будет принята с благодарностью!

+0

Звучит как проблема с персоналом – boztalay

ответ

1

Посмотрите на обложку imageflow для tensorflow, которая преобразует массив numpy, содержащий несколько изображений, в файл .tfrecords, который является предлагаемым форматом использования tensorflow https://github.com/HamedMP/ImageFlow.

Вы должны установить его с помощью

$ pip install imageflow 

Предположим, что ваш массив NumPy, содержащий некоторые изображения «K» является k_images и соответствующие K этикетки (одна горячая закодированные), хранятся в k_labels, то создавая. tfrecords файл с именем «tfr_file.tfrecords» становится столь же просто, как написание линии

imageflow.convert_images(k_images, k_labels, 'tfr_file') 

Кроме того, модель Вводный Google, содержит код для чтения изображений в папке предполагающей каждую папку представляет одну метку https://github.com/tensorflow/models/blob/master/inception/inception/data/build_image_data.py

+0

Спасибо за ответ. Я понимаю, что обе ваши ссылки помогают сериализовать изображения в формате .tfrecords, но я не уверен, как это помогает (или подходит) с большей проблемой обучения модели. Если бы я мог сначала создать базовую инфраструктуру уровня (с равными массивами с плавающей запятой), я мог бы позже использовать одну из этих фреймворков, правильно? –

1

Ошибка указывает на то, что у вас конфликтующие формы тензора, один из размеров 4 и другой размер 3. Это связано с тем, что входные данные (X) не имеют формы [-1,50,50,1] , Все, что здесь необходимо, - это изменить форму X до правильной формы перед подачей в вашу сеть.

# X = An array of training inputs (of shape (50 x 50)). 
# Y = An array of training outputs (of shape (50 x 50)). 
# "None" equals the number of samples in my training set, 50 represents 
# the size of the 2D image array, and 1 represents the single channel 
# (grayscale) of the image. 

X = tensorflow.reshape(X, shape[-1, 50, 50, 1]) 
network = input_data(shape=[None, 50, 50, 1]) 

network = conv_2d(network, 50, 50, activation='relu') 

# Does the 50 argument represent the output shape? Should this be 2500? 
network = fully_connected(network, 50, activation='softmax') 

network = regression(network, optimizer='adam', loss='categorical_crossentropy', learning_rate=0.001) 

model = tflearn.DNN(network, tensorboard_verbose=1) 

model.fit(X, Y, n_epoch=10, shuffle=True, validation_set=(X, Y), show_metric=True, batch_size=1) 
Смежные вопросы