J'ai précédemment formé un modèle resnet34 à l'aide de la bibliothèque fastai et j'ai enregistré le fichier weights.h5. Avec la dernière version de fastai, ai-je encore besoin d'avoir un train non vide et des dossiers valides pour importer mon apprenant et prédire sur l'ensemble de test?
De plus, je parcourt actuellement chaque image de test et j'utilise learn.predict_array
, mais existe-t-il un moyen de prédire par lots sur un dossier de test?
Exemple de ce que je fais actuellement juste pour charger/prédire:
PATH = '/path/to/model/'
sz = 224
Arch=resnet34
tfms = tfms_from_model(resnet34, sz, aug_tfms=transforms_side_on, max_zoom=1.1)
data = ImageClassifierData.from_paths(PATH, tfms=tfms, bs=64)
learn = ConvLearner.pretrained(Arch, data, precompute=False)
learn.unfreeze()
learn.load('224_all')
imgs = sorted(glob(os.path.join(test_path, '*.jpg')))
preds = []
_,val_tfms = tfms_from_model(resnet34, 224)
for n, i in enumerate(imgs):
im = val_tfms(open_image(i))[None]
preds.append(1-np.argmax(learn.predict_array(im)[0]))
Il doit y avoir un moyen plus propre de le faire maintenant, non?
Dans fastai, vous pouvez désormais exporter et charger un apprenant pour faire des prédictions sur l'ensemble de test sans avoir à charger un ensemble de formation et de validation non vide. Pour ce faire, vous devez utiliser la méthode export
et load_learner
fonction (les deux sont définis dans basic_train).
Dans votre situation actuelle, vous devrez peut-être charger votre apprenant à l'ancienne (avec un train/ensemble de données valide), puis l'exporter et vous pourrez utiliser load_learner
pour faire vos prédictions sur votre poste de test.
Je vais laisser un lien vers la documentation:
- https://docs.fast.ai/basic_train.html#Deploying-your-model
Cela devrait clarifier toutes les questions de suivi.
data = ImageClassifierData.from_paths(PATH, tfms=tfms, bs=64)
learn = ConvLearner.pretrained(Arch, data, precompute=False)
learn.unfreeze()
learn.load('224_all')
preds = learn.predict(is_test=True)