Deep Learning был успешно применен на нескольких больших наборов данных для классификации нескольких классов (кошки, собаки, автомобили, самолеты и т.д.), с представлениями об избиении более простые дескрипторы, как Сумки Особенности более SIFT, цветовые гистограммы и т.д.функции Extract, используя предварительно обученный (Tensorflow) CNN
тем не менее, обучение такой сети требует большого количество данных в класс и много времени обучения. Однако очень часто не хватает данных или просто хочет получить представление о том, насколько хорошо может сверточную нейронную сеть, прежде чем тратить время на разработку и обучение такого устройства и сбор данных обучения.
В этом конкретном случае было бы идеально, если бы сеть была сконфигурирована и подготовлена с использованием некоторого набора данных, используемого современными публикациями, и просто применить его к некоторому набору данных, который может иметься как функция экстрактор.
Это приводит к набору функций для каждого изображения, которое можно было бы кормить с классическим методом классификации как SVM-х, логистической регрессии, нейронные сети и т.д.
В частности, когда один не имеет достаточно данных для подготовки CNN, я могу ожидать, что это превысит конвейер, где CNN обучается по нескольким образцам.
Я смотрел на tensorflow учебники, но они всегда, кажется, есть четкий этап обучения/тестирования. Я не мог найти файл рассола (или аналогичный) с предварительно сконфигурированным экстрактором функций CNN.
Мои вопросы: существуют ли такие предварительно обучен сети и где я могу их найти. Альтернативно: этот подход имеет смысл? Где я могу найти вес CNN +?
EDIT W.r.t. комментарий @ Джонсе я попытался с помощью 'DecodeJpeg:0'
и 'DecodeJpeg/contents:0'
и проверил выходы, которые отличаются (: S)
import cv2, requests, numpy
import tensorflow.python.platform
import tensorflow as tf
response = requests.get('https://i.stack.imgur.com/LIW6C.jpg?s=328&g=1')
data = numpy.asarray(bytearray(response.content), dtype=np.uint8)
image = cv2.imdecode(data,-1)
compression_worked, jpeg_data = cv2.imencode('.jpeg', image)
if not compression_worked:
raise Exception("Failure when compressing image to jpeg format in opencv library")
jpeg_data = jpeg_data.tostring()
with open('./deep_learning_models/inception-v3/classify_image_graph_def.pb', 'rb') as graph_file:
graph_def = tf.GraphDef()
graph_def.ParseFromString(graph_file.read())
tf.import_graph_def(graph_def, name='')
with tf.Session() as sess:
softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0')
arr0 = numpy.squeeze(sess.run(
softmax_tensor,
{'DecodeJpeg:0': image}
))
arr1 = numpy.squeeze(sess.run(
softmax_tensor,
{'DecodeJpeg/contents:0': jpeg_data}
))
print(numpy.abs(arr0 - arr1).max())
Таким образом, максимальная абсолютная разница является 1.27649
, и в целом все элементы отличаются (тем более, что в среднем значение arr0
и arr1
лежит между 0 - 0,5).
Я также ожидал, что 'DecodeJpeg:0'
нуждается в jpeg-строке, а не в массиве numpy, почему другое имя содержит «Jpeg». @john: Не могли бы вы указать, как уверены, что вы про комментарий?
Так что я думаю, я не уверен, что это то, что, как я ожидал бы, что обучение нейронной сети, чтобы быть детерминированным (но хаотический по большей части).
Резиновая утка: когда googleing на «CNN, обученном на ImageNet», я нашел это: http://www.vlfeat.org/matconvnet/pretrained/ – Herbert
Я мог бы скомпилировать и запустить эту сеть на своем ноутбуке - и использовать веб-камера для определения/классификации изображений github.com/sermanet/OverFeat –