2017-10-12 3 views
2

Je travaille sur un extracteur de fonctionnalités pour ce projet personnel d'apprentissage de transfert, et la fonction de prévision du modèle VGG16 de Kera semble assez lente (31 secondes pour un lot de 4 images). Je m'attends à ce que ce soit lent, mais je ne sais pas si la fonction de prédiction est plus lente qu'elle ne devrait l'être.Keras VGG16 prédire la vitesse lente

data = DataGenerator() 
data = data.from_csv(csv_path=csv_file, 
        img_dir=img_folder, 
        batch_size=batch) 

##################################################### 
conv_base = VGG16(include_top=False, 
        weights='imagenet', 
        input_shape=(480, 640, 3)) 

model = Sequential() 
model.add(conv_base) 
model.add(MaxPooling2D(pool_size=(3, 4))) 
model.add(Flatten()) 
###################################################### 

for inputs, y in data: 
    feature_batch = model.predict(inputs) 

    yield feature_batch, y 

Alors, mon intuition est qu'il est lent pour ces raisons:

  • mes données d'entrée est un peu grand (chargement (480, 640, 3) les images de taille)
  • Je cours sur un processeur faible (M3-6Y30 @ 0,90 GHz)
  • J'ai une opération d'aplatissement à la fin de l'extracteur de caractéristiques.

choses que j'ai essayé:

  • Autres messages stackoverflow a suggéré d'ajouter une couche de mise en commun max pour réduire la taille de fonction/retirer de zéro étrangers. J'ai fait je pense une assez grande fenêtre pool max (réduisant ainsi la taille de la fonction de manière significative, mais mon temps de prédiction augmenté.
  • Le traitement par lots n'améliore pas le temps qui est probablement évident en raison à l'utilisation de mon CPU M3) . Une taille de lot de 1 image prend 8 secondes, une taille de lot de 4 prend 32.

Existe-t-il des idées sur la façon d'accélérer la fonction de prédiction? J'ai besoin d'exécuter au moins 10 000 images, et en raison de la nature du projet, je voudrais conserver autant de données brutes que possible avant d'entrer dans le modèle (le comparer avec d'autres modèles d'extraction de caractéristiques)

Tous mes fichiers image sont enregistrés localement, mais je peux essayer de configurer un ordinateur cloud et de déplacer mon code là-bas pour qu'il fonctionne avec le support GPU.

Est-ce que le problème est simplement que je cours le modèle VGG16 sur un processeur dinky?

Des conseils seraient grandement appréciés.

+0

0.9GHz est très, très, très faible – OptimusCrime

Répondre

1

Votre modèle présente de nombreux problèmes. La question principale est bien sûr la machine vraiment lent, mais comme vous ne pouvez pas changer cela ici je vais dire quelques conseils sur la façon dont vous pouvez accélérer vos calculs:

  1. VGG16 est une architecture relativement ancienne. Le problème principal ici est que le soi-disant volume de tenseurs (surface des cartes de caractéristiques multiplié par le nombre de caractéristiques) diminue très lentement. Je vous conseille d'utiliser des architectures plus modernes comme par ex. ResNet50 ou Inception v3 car ils ont la soi-disant tige qui rend les tenseurs intérieurs beaucoup plus petits vraiment rapides. Votre vitesse devrait bénéficier grâce à cela. Il y a aussi une architecture très légère appelée MobileNet qui semble parfaite pour votre tâche.

  2. Sous-échantillonner vos images - avec une taille de (480, 640) votre image est 6 fois plus grand que l'entrée par défaut VGG.Cela rend tous les calculs 6 fois plus lents. Vous pouvez essayer de sous-échantillonner d'abord les images, puis utiliser un extracteur de caractéristiques.

+0

Ceci est un conseil utile, et aide, merci beaucoup! Je me suis également rendu compte que lorsque j'ai exécuté mon modèle depuis la console (au lieu de Python Notebook), j'ai reçu un avertissement concernant la configuration des instructions SSE avec ma machine pour accélérer le calcul de Tensorflow fonctionnant sur un processeur. Voici un lien StackOverFlow pour tous les autres intéressés: https://stackoverflow.com/questions/43134753/tensorflow-wasnt-compiled-to-use-sse-etc-instructions-but-these-are-availab#43135194 –

+0

Si cela ne vous dérange pas que j'apprécierais un upvote :) –