--google colaboratory (runtime: GPU) (tensorflow 2.0) (Google Chrome)
Suivez les étapes suivantes
Ignorer si vous avez déjà collecté des images Si vous ne l'avez pas encore collecté, google_image_download (URL de référence) est pratique. Il télécharge des images en spécifiant des mots-clés, des extensions, des tailles, le nombre de feuilles, etc.
Divisez les images en bons sentiments pour l'entraînement et les tests (80% d'entraînement: environ 20% de test?) Plus précisément, créez un dossier avec la structure suivante images ├train │└A │ └a01.jpg │ └aslfdjk.png │ ... │└B │ └ba.jpg │ └dskrup.png │ ... │└C │ └ba.jpg │ └sdddrrd.png │ ... │ ├validation │└A │ └fwwqd.jpg │ └qiita.png │ ... │└B │ └sddd.jpg │ └reag.png │ ... │└C │ └vtet.jpg │ └fhyr.png │ ...
Créez le modèle en suivant les étapes suivantes
Axé sur la simplicité, le code qui a détourné le tutoriel fourni par tensorflow est [(URL de référence) * google colaboratory s'ouvre soudainement lorsque vous appuyez sur l'URL](https://colab.research.google.com/drive/ 1p-MY8C_H238TWffWrRjC8cc20alZACSD) Pour savoir comment utiliser google colaboratory, reportez-vous à Official HP.
Cette partie du code source
from google.colab import drive
drive.mount('/content/drive')
PATH = '/content/drive/'+'Chemin d'accès à votre ensemble de données sur Google Drive'
Si vous entrez ceci, voulez-vous autoriser l'accès à Google Drive? Il vous sera demandé de le certifier. Personnellement, je m'en fiche, donc je m'authentifie sans y penser, mais si cela vous intéresse, vous devriez arrêter de charger votre propre ensemble de données avec google colaboraotry.
Cette partie du code source
Après cela, vous pouvez entraîner le modèle en exécutant les cellules de code suivantes dans l'ordre.
history = model.fit_generator(
train_data_gen,
steps_per_epoch=total_train // batch_size,
epochs=epochs,
validation_data=val_data_gen,
validation_steps=total_val // batch_size
)
seulement ça
saved_model_dir = base_dir+'Où vous voulez économiser'
tf.saved_model.save(model, saved_model_dir)
Suivez les étapes suivantes
seulement ça
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
with open(base_dir+'Nom du modèle.tflite', 'wb') as f:
f.write(tflite_model)
Téléchargez le modèle enregistré et enregistrez-le localement.
Tout d'abord, installez Android studio (URL de référence), Comme d'habitude, le démarrage rapide fourni par tensorflow est utilisé. URL de référence Si vous suivez les étapes, un dossier nommé example sera créé dans l'environnement local, alors ouvrez le projet Android dans le chemin suivant. \examples\lite\examples\image_classification\android
Suivez les étapes ci-dessous
Placez-le dans le dossier suivant. \examples\lite\examples\image_classification\android\app\src\main\assets Il y a des .tflite au même endroit.
Dans ce cas, écrivez les classes A, B et C comme suit et enregistrez-les au même emplacement que le fichier .tflite.
mylabel.text
A
B
C
Premier, \examples\lite\examples\image_classification\android\app\src\main\java\org\tensorflow\lite\examples\classification\tflite\ClassifierFloatMobileNet.java 56e ligne
return "mobilenet_v1_1.0_224.tflite";
Est réécrit comme suit
return "Nom du modèle.tflite";
prochain, \examples\lite\examples\image_classification\android\app\src\main\java\org\tensorflow\lite\examples\classification\tflite\Classifier.java 110e ligne
public static Classifier create(Activity activity, Model model, Device device, int numThreads)
throws IOException {
if (model == Model.QUANTIZED) {
return new ClassifierQuantizedMobileNet(activity, device, numThreads);
} else {
return new ClassifierFloatMobileNet(activity, device, numThreads);
}
}
Est réécrit comme suit
public static Classifier create(Activity activity, Model model, Device device, int numThreads)
throws IOException {
//if (model == Model.QUANTIZED) {
//return new ClassifierQuantizedMobileNet(activity, device, numThreads);
//} else {
return new ClassifierFloatMobileNet(activity, device, numThreads);
//}
}
Enfin, exécutez un projet de création dans Android Studio. Après cela, connectez le smartphone au PC et exécutez Run'app '. Ensuite, une application nommée TFL Classify est installée et exécutée sur le smartphone. Au bas de l'écran, la confiance de A, B et C (indiquant la probabilité de la classe en%) est affichée.
Je vais partager quelques-unes des histoires d'échec (?) Sur lesquelles l'auteur est tombé et qui peuvent être utiles.
J'ai essayé de convertir le modèle pytorch en modèle tensorflow LITE et j'ai fini par être frustré. J'ai principalement fait référence à ces deux sites Web, mais URL1, URL2 -keras-models-to-android-avec-tensorflow-mobile-a16a1fb83f2) J'ai eu une erreur peu claire dans les deux cas et je me suis arrêté. Quand j'y pense maintenant, cela peut être dû à l'existence à la fois de keras et de tf.keras. Pouvons-nous le vérifier la prochaine fois?
Cette fois, je voulais déplacer mon propre modèle avec l'application Android dès que possible.J'ai donc fini par créer un modèle à l'aide du tutoriel tensorflow et j'ai converti le modèle keras en modèle tensorflow LITE comme décrit ci-dessus.
Comme décrit dans [URL1] ci-dessus (https://qiita.com/lain21/items/9f9f9707ebad4bbc627d)
Pendant ce temps, les avantages évidents de TensorFlow par rapport à PyTorch sont les suivants.
Peut apprendre en utilisant TPU Des API riches telles que TFLite et TensorFlow.js qui facilitent le déploiement sur le front-end
Actuellement, tensorflow semble avoir plus de support pour faciliter la conversion en applications.
Lors de la collecte de divers codes, keras et tf.keras ont été mélangés. Du milieu, je l'ai réécrit sur tf.keras comme un homme qui efface absolument les keras.
Je ne remarque pas que la sortie du modèle est celle du code du tutoriel par défaut, et il n'y a pas assez de sortie dans le studio Android! J'ai fait une erreur en disant. Je pensais que la cause de l'erreur était de créer un fichier .tflite à partir de keras en utilisant TFLiteConverter, alors j'y ai passé beaucoup de temps ... Après tout, sur cette URL, en essayant d'évaluer mon propre modèle, c'est devenu "quelque chose ne va pas avec la forme de la sortie?" J'ai remarqué que la forme de
J'ai essayé de quantifier le modèle, mais j'ai abandonné car il ne pouvait pas être lu par le studio Android. Après tout, j'ai utilisé le modèle de flotteur. Je l'ai essayé car la taille du modèle serait plus petite et le traitement serait plus rapide s'il était quantifié, mais je ne pouvais pas. La cause de ceci est encore inconnue.
Au début, je n'avais pas décidé quoi utiliser pour la reconnaissance d'objets, et je pensais utiliser yolo avec darknet, mais je ne savais pas comment utiliser mon propre modèle, alors j'ai abandonné parce que je ne savais pas comment le faire. D'une connaissance, pytorch est facile! Cela a conduit à l'échec 1. N'abandonnez pas dès que vous pensez de cette façon. .. ..
Vous pouvez facilement collecter des images en utilisant google_image_download avec [Collecter des images de classe A, B, C](# Collecter des images de classe A, B, C)! J'ai écrit cela, mais c'est assez difficile. Bien sûr, des images inappropriées sont également téléchargées, il est donc difficile de les jeter ou de les rogner, puis le travail de classification attend. Je comprends pourquoi les annotations sont un travail dans le monde, mais je ne veux pas faire grand-chose parce que les vrais députés sont susceptibles de diminuer. .. .. Il existe un apprentissage actif en tant que mot associé, et il semble que ce soit une méthode qui sélectionne automatiquement une image qui augmente le taux de reconnaissance. Ce serait pratique si possible. Je me demande?
Après avoir commencé à écrire cet article, j'ai remarqué que le contenu du didacticiel tensorflow avait changé. En fait, j'ai utilisé le didacticiel d'apprentissage par transfert, mais comme il était difficile de publier mon code, je n'avais pas d'autre choix que d'utiliser le didacticiel de classification d'images pour l'explication. Je pense que l'apprentissage par transfert, qui est censé améliorer la précision avec un petit nombre de données, est plus pratique que de créer un modèle par vous-même. Le didacticiel actuel d'apprentissage du transfert est conçu pour lire les données à partir de tf, et il est compliqué de les modifier et de les écrire, alors j'ai renoncé à l'utiliser pour expliquer. Je veux utiliser mes données pour l'apprentissage par transfert! S'il y a une demande, vous pouvez avoir envie de faire de votre mieux. .. ..
Recommended Posts