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
Vous devez vous connecter pour publier un commentaire.
La TensorFlow équipe a récemment publié une profonde CNN formés sur le ImageNet dataset. Vous pouvez télécharger le script qui récupère les données (y compris le graphique du modèle et de la formation de poids) à partir de ici. Les associés Image didacticiel de Reconnaissance a plus de détails sur le modèle.
Tandis que le modèle actuel n'est pas spécialement emballé pour être utilisé dans une formation ultérieure étape, vous pouvez explorer modifiant le script de réutiliser des parties du modèle et de la formation de poids dans votre propre réseau.
softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0')
au lieu desoftmax_tensor = sess.graph.get_tensor_by_name('softmax:0')
pour obtenir des fonctionnalités.feed_dict
de ce réseau a une'DecodeJpeg/contents:0'
(je pense que cela est défini dans le fichierclassify_image_graph_def.pb
), sauriez-vous comment faire pour trouver ce possible feed_dict configurations sont possibles? Je peux également jeter un numpy-tableau avec l'image là?DecodeJpeg:0
, mais comparé avec le code d'origine (viaDecodeJpeg/contents:0
). Si je prends le max-absolue de la différence entre le 2048-élément sorties, c'est de l'ordre de 1 à 10. Cela semble assez grand, donc je ne suis pas trop sûr si elles sont équivalentes. Il émet aussi étrange queDecodeJpeg:0
s'attend à une crue de tableau, et non jpeg-données.classify_image.py
.