[PYTHON] Un modèle qui identifie la guitare avec fast.ai

À cette époque, vous pouvez acquérir de nouvelles compétences grâce à des cours en ligne. J'ai récemment terminé la spécialisation Deep Learning enseignée par Andrew Ng à Coursera, ce qui a été une excellente expérience d'apprentissage. Il existe de nombreuses explications mathématiques, et le premier modèle est entièrement réalisé avec python / numpy. Au fur et à mesure que vous poursuivez la leçon, vous pouvez également utiliser Tensorflow et Keras. Ce sera un style d'apprentissage pour étudier fermement la base de la théorie et l'utiliser.

Cependant, fast.ai, qui est un sujet brûlant depuis plusieurs années, est exactement le contraire. C'est une approche «faisons-le d'abord». C'est passionnant d'essayer de voir à quel point il est facile de créer un modèle d'intelligence artificielle avec la bibliothèque de base fast.ai.

Sur la base des accords de la leçon 1 de fast.ai, j'ai créé un modèle qui peut identifier la guitare. Désolé pour ceux qui ne connaissent pas grand-chose aux guitares, mais cet exemple ne sera probablement pas très utile!

Tout d'abord, avant de préparer le modèle, nous avons collecté des données d'image de quatre types de guitares.

La raison du choix de ces quatre types est que les guitares ont une forme de corps et une forme de tête distinctes. De plus, comme ce sont des guitares très populaires, il était facile de collecter des images. Merci pour votre recherche Google. J'ai créé des dossiers pour chaque type de guitare et j'en ai rassemblé des centaines.

Tout d'abord, importez fastai.vision. Définissez le chemin où vous avez enregistré les données et définissez la classe. Le nom de la classe correspond au nom du dossier.


from fastai.vision import *

path = Path('data/guitars')
classes = ['gibson_les_paul', 'fender_telecaster', 'fender_stratocaster', 'explorer']

fast.ai fournit une méthode pour préparer facilement les données. Avec une méthode, vous pouvez définir les modifications à refléter dans l'image (par exemple, la rotation pour l'augmentation des données), le redimensionnement et le ratio des ensembles de données d'entraînement et de validation. Pour plus d'informations, veuillez consulter la page de détails de l'API.


data = ImageDataBunch.from_folder(path, train=".", valid_pct=0.2,
                                 ds_tfms=get_transforms(), size=224, num_workers=4, bs=16).normalize(imagenet_stats)

Il est également possible d'afficher des exemples de données!


data.show_batch(rows=3, figsize=(7,8))

Images.png

L'apprentissage lui-même est très facile. Il peut être formé sur la base du modèle CNN formé en deux lignes de code.


learn = cnn_learner(data, models.resnet34, metrics=error_rate)
learn.fit_one_cycle(4)

Le résultat de l'apprentissage est le suivant. 90% système! N'est-ce pas l'état de l'art du moteur d'identification de guitare? C'est peut-être le seul modèle.

TrainingDone.PNG

Vous pouvez également consulter les problèmes de formation et les résultats des ensembles de données de validation.


interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()

ConfusionMatrix.PNG

Ceci est la matrice de confusion! Telecaster et Stratocaster sont certainement les plus mixtes. Vous pouvez également afficher des images que le modèle n'a pas correctement prédites.


losses,idxs = interp.top_losses()
interp.plot_top_losses(9, figsize=(15,15))

Guitars.PNG

Il existe certainement de nombreuses images difficiles à juger. L'image en haut à gauche est un étui de guitare en premier lieu. L'extrême droite au milieu est probablement la Stratocaster, mais l'image est trop recadrée et difficile pour le modèle. L'image en bas à droite est difficile à juger pour les humains. C'est une autre guitare. Autrement dit, il y a du bruit dans les données d'apprentissage et de validation. "Garbage in, Garbage out". En tant qu'amélioration future, nous rendrons les données plus propres et apprendrons. Vous pouvez également en savoir plus en débloquant les paramètres du modèle importé, mais cela prend bien sûr du temps.

Faisons une prédiction avec un modèle.


img = open_image(path/'gibson_les_paul'/'00000059.jpg')
pred_class,pred_idx,outputs = learn.predict(img)

Cette guitare.

download.png

Le résultat de la prédiction est: Catégorie gibson_les_paul

: v: Pipong Pipong: v:

Pour utiliser le modèle créé dans My App, vous pouvez exporter le modèle et le convertir en API avec un code Python simple.

La plupart du contenu ci-dessus provient de la leçon 1 de Fast.ai. C'est incroyable comme il est facile d'obtenir de bons résultats si rapidement. De plus, les cours sont gratuits! c'est recommandéCliquez sur ce lien pour les leçons Fast.ai!

Recommended Posts

Un modèle qui identifie la guitare avec fast.ai
Une histoire qui a eu du mal avec l'ensemble commun HTTP_PROXY = ~
Un mémo que j'ai touché au magasin de données avec python
Calibrer le modèle avec PyCaret
[Golang] Un programme qui détermine le tour avec des nombres aléatoires
Analysez le modèle thématique pour devenir romancier avec GensimPy3
Créer un itérateur de modèle avec PySide
Validez le modèle d'entraînement avec Pylearn2
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
L'histoire de la création d'un module qui ignore le courrier avec python
À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch
Tweet la météo avec bot
[Python] Un programme qui crée des escaliers avec #
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
Classe qui atteint l'API de DMM
Affinons les hyper paramètres du modèle avec scikit-learn!
Le panneau Web LXC qui peut faire fonctionner LXC avec un navigateur était merveilleux
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
Attention Seq2 Exécutez le modèle de dialogue avec Seq
Rechercher le labyrinthe avec l'algorithme python A *
Un monde typé qui commence par Python
Implémenter un modèle avec état et comportement
[Python] Un programme qui arrondit le score
Essayez TensorFlow RNN avec un modèle de base
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Un article qui essaie juste une petite requête HTTP avec la commande curl
Autour de l'authentification de PyDrive2, un package pour faire fonctionner Google Drive avec Python
L'histoire de la création d'une application Web qui enregistre des lectures approfondies avec Django
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
[Python] Récupérez les fichiers dans le dossier avec Python
Tweet les prévisions météo avec le bot Partie 2
Trouvez la position au-dessus du seuil avec NumPy
Mémo qui a fait un graphique pour animer avec intrigue
Présentation du modèle DCGAN pour Cifar 10 avec keras
Créer une page qui se charge indéfiniment avec python
Suivez le marqueur AR avec un servo à 2 axes
Prédire l'été chaud avec un modèle de régression linéaire
Programme pour rechercher la même image
Résolution du modèle Lorenz 96 avec Julia et Python
Enregistrer l'objet dans un fichier avec pickle
Chargez le fichier de modèle TensorFlow .pb avec readNetFromTensorflow ().
Implémenter un modèle de régression logistique en temps discret avec stan
Créez un outil de traduction avec Translate Toolkit
L'histoire qui s'inscrit dans l'installation de pip
Un programme shell qui affiche une séquence de Fibonacci
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
Une histoire qui a échoué lors de la tentative de suppression du suffixe d'une chaîne avec rstrip
Vérifiez l'effet du congé comme contre-mesure contre le nouveau virus corona avec le modèle SEIR
[Python] Ne laissez que les éléments commençant par une chaîne de caractères spécifique dans le tableau
Il semble qu'une nouvelle loterie avec un score total commencera dans la loterie sportive,
Essayez de créer une forme d'onde (spectre audio) qui se déplace en fonction du son avec python
Un script qui poursuit sa recherche jusqu'à ce que l'URL correspondante soit mise en signet avec Hatena Bookmark
Création d'une image trompeuse pour le modèle de génération de légende
Une histoire qui réduit l'effort de fonctionnement / maintenance
[Python] Un programme qui compte le nombre de vallées
Simulez une bonne date de Noël avec un modèle optimisé Python
Comment créer un sous-menu avec le plug-in [Blender]
Surveiller le modèle d'entraînement avec TensorBord sur Jupyter Notebook