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.9GHz est très, très, très faible – OptimusCrime