Extrait des fonctionnalités à l'aide de la pré-formation (Tensorflow) CNN

L'Apprentissage en profondeur a été appliquée avec succès sur plusieurs grands ensembles de données pour la classification d'une poignée de classes (les chats, les chiens, les voitures, les avions, etc), avec des performances en battant de plus simple descripteurs comme les Sacs de Caractéristiques sur les EIPD, la couleur des histogrammes, etc.

Néanmoins, la formation d'un tel réseau nécessite beaucoup de données par classe et beaucoup de temps de formation. Cependant, très souvent, on ne dispose pas de suffisamment de données ou s'il veut juste avoir une idée de la façon dont un réseau de neurones à convolution peut faire, avant de passer du temps l'un de la conception et de la formation d'un tel dispositif et de la collecte des données de formation.

Dans ce cas particulier, il pourrait être idéal pour disposer d'un réseau configuré et formés à l'utilisation de certaines données de référence utilisée par l'état de l'art des publications, et tout simplement s'appliquent à un certain ensemble de données que vous pourriez avoir comme un extracteur.

Il en résulte un ensemble de caractéristiques pour chaque image, que l'on pourrait nourrir un classique de la méthode de classification comme SVM, de la régression logistique, les réseaux de neurones, etc.

En particulier lorsque l'on ne dispose pas de suffisamment de données pour former le CNN, je peut s'attendre à surperformer un pipeline où le CNN a été formé sur quelques échantillons.

J'ai été à la recherche à la tensorflow tutoriels, mais ils semblent toujours avoir un clair de la formation /phase de test. Je ne pouvais pas trouver un cornichon fichier (ou similaire) avec une pré-configuré CNN extracteur.

Mes questions sont les suivantes: faire de telles pré-formés réseaux existent et où puis je les trouver. Sinon: cette approche a du sens? Où pourrais-je trouver un CNN+poids ?

MODIFIER
W. r.t. @john le commentaire que j'ai essayé d'utiliser 'DecodeJpeg:0' et 'DecodeJpeg/contents:0' et vérifié les sorties, qui sont différentes (: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())

Donc le max de différence en valeur absolue est 1.27649, et en général de tous les éléments différents (surtout depuis que la valeur moyenne de la arr0 et arr1 eux-mêmes se situe entre 0 et 0,5).

Je voudrais également s'attendre à ce que 'DecodeJpeg:0' besoin d'un jpeg-chaîne, pas un tableau numpy, sinon, pourquoi est-ce le nom contient 'Jpeg'. @john: Pourriez-vous dire comment
assurez-vous que vous êtes sur votre commentaire?

Donc je suppose que je ne suis pas sûr de ce qui est ce, que je m'attendrais à un réseau neuronal formé pour être déterministe (mais chaotique au plus).

  • Canard en caoutchouc: quand googleing sur "CNN formés sur ImageNet", j'ai trouvé ceci: vlfeat.org/matconvnet/pretrained
  • J'ai pu compiler et exécuter ce réseau sur mon ordinateur portable, et d'utiliser la webcam pour identifier et classer les images github.com/sermanet/OverFeat
InformationsquelleAutor Herbert | 2015-12-09