[PYTHON] Reconnaissance d'image en temps réel sur les appareils mobiles à l'aide du modèle d'apprentissage TensorFlow

Le titre est écrit comme un article, mais le fait est que la page TensorFlow dit qu'il peut être exécuté sur Android / iOS, alors j'ai essayé quelque chose comme ça. Quand je l'ai essayé, j'ai pu le construire à la fois sur Android et iOS, alors j'aimerais écrire la procédure, etc.

Android

D'abord à partir de la version Android. https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android Suivez essentiellement ici. Une fois construit, il créera un TF Detect basé sur TF Classify, une détection d'objet évolutive utilisant des réseaux de neurones profonds en utilisant le modèle Inception de Google. De plus, il semble que TF Stylize qui convertit le style ait également été implémenté ... J'ai donc essayé de reconstruire à nouveau dans l'environnement suivant.

Construire TensorFlow

Tout d'abord, je vais cloner la dernière version. Il semble que TensorFlow était désormais r0.12.

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

Ensuite, installez l'outil de construction bazel.

brew install bazel

Vous avez besoin d'un NDK pour compiler votre code C / C ++. https://developer.android.com/ndk/guides/index.html Selon, recherchez sdk dans les Préférences et ouvrez l'onglet Outils du SDK. ici

Vous pouvez l'installer en cochant la case et en postulant. Vous pouvez installer le SDK à partir des plates-formes SDK voisines et j'ai installé tous les Android 5.0 et plus. new_screen_shot.png

Puis éditez le fichier / tensorflow / WORKSPACE. Corrigez la partie commentée selon vos propres paramètres.

 Uncomment and update the paths in these entries to build the Android demo.
-#android_sdk_repository(
-#    name = "androidsdk",
-#    api_level = 23,
-#    build_tools_version = "23.0.1",
-#    # Replace with path to Android SDK on your system
-#    path = "<PATH_TO_SDK>",
-#)
-#
-#android_ndk_repository(
-#    name="androidndk",
-#    path="<PATH_TO_NDK>",
-#    api_level=21)

+android_sdk_repository(
+    name = "androidsdk",
+    api_level = 25,
+    build_tools_version = "25.0.2",
+    # Replace with path to Android SDK on your system
+    path = "/Users/user-name/Library/Android/sdk/",
+)
+
+android_ndk_repository(
+    name="androidndk",
+    path="/Users/user-name/Library/Android/sdk/ndk-bundle/",
+    api_level=21)

Ci-dessous, nous allons déposer le modèle de formation TensorFlow et le placer au bon endroit. Vous pouvez voir que le modèle doit être placé dans le répertoire des actifs. Le graphe du modèle d'entraînement: tensorflow_inception_graph.pb était de 53,9 Mo. En outre, le graphe du modèle de détection: multibox_model.pb semble faire 18,6 Mo.

$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -o /tmp/inception5h.zip
$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1.zip -o /tmp/mobile_multibox_v1.zip

$ unzip /tmp/inception5h.zip -d tensorflow/examples/android/assets/
$ unzip /tmp/mobile_multibox_v1.zip -d tensorflow/examples/android/assets/

Maintenant que vous êtes prêt à construire, bazel construit dans le répertoire racine (où se trouve WORKSPACE).

$ bazel build -c opt //tensorflow/examples/android:tensorflow_demo

Cela prend environ 20 minutes, alors extrayons-le avec un expresso. Si cela réussit, je vais l'installer sur le terminal et l'essayer.

$ adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

Si vous obtenez l'erreur suivante, vous devez le mettre à jour, donc si vous le suivez, vous pouvez le créer correctement.

$ adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
It appears you do not have 'Android SDK Platform-tools' installed.
Use the 'android' tool to install them:
    android update sdk --no-ui --filter 'platform-tools'
new_screen_shot.png

La semaine dernière, j'avais l'impression qu'il était plutôt gluant, mais quand je l'ai reconstruit, il semblait un peu plus lourd ... peut-être à cause de mon esprit. Vous devez également avoir installé l'application de détection d'objet évolutive. Et la conversion de style a été très bien faite, il y avait un exemple de peinture en bas de l'écran, et c'était une interface utilisateur où vous pouviez choisir combien utiliser comme style. La résolution peut être sélectionnée de 32 à 1024, et bien qu'elle ne tourne pas en temps réel à partir d'environ 192, elle a pu générer des images.

new_screen_shot.png

En regardant les commits du code source, j'ai été surpris de voir que «StylizeActivity.java» et «TensorFlowYoloDetector.java» ont augmenté en une semaine seulement.

iOS

Vient ensuite iOS. Fondamentalement https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/ios_examples Suivez les exemples TensorFlow iOS dans. J'avais besoin de Xcode 7.3 ou version ultérieure, et j'avais augmenté iOS, j'ai donc mis à jour Xcode et j'ai pu construire dans l'environnement suivant.

Construire TensorFlow

Tout d'abord https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile Je vous demande de créer TensorFlow selon la section iOS de.

xcode-select --install
brew install automake
brew install libtool

Installer. Il semble que vous puissiez construire avec un seul coup avec le shell suivant.

tensorflow/contrib/makefile/build_all_ios.sh

Cela semble générer tensorflow / contrib / makefile / gen / lib / libtensorflow-core.a. Il semble que vous puissiez lier cela au projet Xcode. Cela prend environ 20 minutes, alors préparons du café. Si vous essayez de générer un par un au lieu de ce shell, téléchargez d'abord les dépendances.

tensorflow/contrib/makefile/download_dependencies.sh

Ensuite, compilez protobuf pour iOS.

tensorflow/contrib/makefile/compile_ios_protobuf.sh 

Et faites du ciblage iOS.

make -f tensorflow/contrib/makefile/Makefile \
 TARGET=IOS \
 IOS_ARCH=ARM64

Téléchargez le modèle Inception et exécutez le projet

À la racine du répertoire TensorFlow, effectuez le lien vers le modèle Inception v1. Téléchargez et décompressez.

mkdir -p ~/graphs
curl -o ~/graphs/inception5h.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
cp ~/graphs/inception5h/* tensorflow/contrib/ios_examples/benchmark/data/
cp ~/graphs/inception5h/* tensorflow/contrib/ios_examples/camera/data/
cp ~/graphs/inception5h/* tensorflow/contrib/ios_examples/simple/data/

Si vous regardez cela, vous pouvez voir qu'il existe trois exemples d'applications: benchmark, camera et simple. Bien sûr, c'est la "caméra" qui reconnaît les images. Il semble que le modèle de démarrage devrait être placé sous le répertoire de données de chaque application. Une fois cela fait, il ne vous reste plus qu'à ouvrir le fichier camera_example.xcodeproj dans le répertoire et à l'exécuter. IMG_0155.PNG

Contrairement à la version Android, il y avait une fonction pour arrêter l'acquisition d'image en bas de l'écran. Cela fonctionne de manière gluante sur votre iPhone SE. http://qiita.com/shu223/items/ce190ea6669b2636a8a7 Selon l'article, il y a eu un retard de quelques secondes sur l'iPhone 6, le modèle lui-même était-il plus petit qu'il ne l'était, ou supportait-il le GPU Accelerated mentionné dans l'article Accelerate.framework sur iOS 10? Le BNNS est-il ajouté (est-ce toujours le cas parce que le problème n'est pas clos ...) Au contraire, s'il n'est pas implémenté et que c'est cette vitesse, il semble qu'il ne sera pas possible d'augmenter davantage les fps s'il s'agit d'iPhone 6s ou supérieur.

Résumé

J'ai créé un exemple qui exécute le modèle d'apprentissage TensorFlow sur mobile. C'est assez gluant sur Android et iOS, et je me demande à quel point le modèle peut être lourd.

Recommended Posts

Reconnaissance d'image en temps réel sur les appareils mobiles à l'aide du modèle d'apprentissage TensorFlow
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Reconnaissance d'image en apprentissage profond 3 après la création du modèle
Reconnaissance d'image avec le modèle Caffe Chainer Yo!
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Reconnaissance d'image avec keras
[kotlin] Créez une application de reconnaissance d'images en temps réel sur Android
Essayez l'apprentissage en profondeur avec TensorFlow
Reconnaissance d'image par apprentissage profond 1 théorie
Reconnaissance d'image avec Keras + OpenCV
Défi la classification des images par TensorFlow2 + Keras 4 ~ Prédisons avec un modèle entraîné ~
Défiez la classification des images avec TensorFlow2 + Keras 9-Apprentissage, sauvegarde et chargement de modèles-
Principes de base du traitement d'image en temps réel avec opencv
Personnaliser le modèle / la couche / la métrique avec TensorFlow
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Exécutez l'image Docker de TensorFlow sur Python3
Utilisez Tensorflow 2.1.0 avec Anaconda sur Windows 10!
Validez le modèle d'entraînement avec Pylearn2
Créons un modèle de reconnaissance d'image avec vos propres données et jouons!
Essayez la reconnaissance d'objets en temps réel avec YOLOv2 (TensorFlow)
[kotlin] Trier les images sur Android (Pytorch Mobile)
Apprentissage automatique avec Pytorch sur Google Colab
J'ai essayé la reconnaissance d'image simple avec Jupyter
Essayez TensorFlow RNN avec un modèle de base
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow