La mise en œuvre du Pytorch de la moule de la parole par Dosovitskiy et al.
Ce référentiel est une mise en œuvre de la torche de Flownet, par Alexey Dosovitskiy et al. à Pytorch. Voir la mise en œuvre de la torche ici
Ce code est principalement inspiré de l'exemple officiel d'imaget. Il n'a pas été testé pour plusieurs GPU, mais il devrait fonctionner comme dans le code d'origine.
Le code fournit un exemple de formation, en utilisant l'ensemble de données Flying Chair, avec augmentation des données. Une implémentation pour les ensembles de données de flux de scène peut être ajoutée à l'avenir.
Deux modèles de réseau neuronal sont actuellement fournis, ainsi que leur variation de norme par lots (expérimentale):
Grâce à Kaixhin, vous pouvez télécharger une version pré-entraînée de Flownets (de Caffe, pas de Pytorch) ici. Ce dossier contient également des réseaux formés à partir de zéro.
Fournit directement le réseau téléchargé sur le script, vous n'avez pas besoin de les débarrasser même si votre environnement de bureau vous le dit.
Ces réseaux s'attendent à une entrée BGR (par rapport à RVB dans Pytorch). Cependant, l'ordre BGR n'est pas très important.
Ces modules peuvent être installés avec pip
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
ou
pip install -r requirements.txtTout d'abord, vous devez télécharger l'ensemble de données The Flying Chair. Il est ~ 64 Go de gros et nous vous recommandons de le mettre dans un lecteur SSD.
Les hyperparamètres par défaut fournis dans main.py sont les mêmes que dans les scripts de formation CAFFE.
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownetsNous vous recommandons de définir J (nombre de threads de données) à High si vous utilisez DataAugation comme pour éviter le chargement des données pour ralentir la formation.
Pour plus d'aide, vous pouvez taper
python main.py -hTensorboard-Pytorch est utilisé pour la journalisation. Pour visualiser le résultat, tapez simplement
tensorboard --logdir=/path/to/checkpointsLes modèles peuvent être téléchargés ici dans le dossier Pytorch.
Les modèles ont été formés avec des options par défaut, sauf si spécifiées. La déformation des couleurs n'a pas été utilisée.
| Cambre | taux d'apprentissage | taille de lot | Taille de l'époque | nom de fichier | Validation EPE |
|---|---|---|---|---|---|
| Avals | 1E-4 | 8 | 2700 | FLONETS_EPE1.951.PTH.TAR | 1.951 |
| FLOWNETS BN | 1E-3 | 32 | 695 | FLONETS_BN_EPE2.459.pth.tar | 2.459 |
| Pilote | 1E-4 | 8 | 2700 | FLOWNETC_EPE1.766.PTH.TAR | 1.766 |
Remarque : Flownets BN a mis plus de temps à s'entraîner et a obtenu des résultats pires. Il est fortement conseillé de ne pas l'utiliser pour le jeu de données de chaises de vol.
Les prédictions sont faites par des avion.
Code exact pour le flux optique -> La carte couleur peut être trouvée ici
| Saisir | prédiction | Verrouillage |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Si vous devez exécuter le réseau sur vos images, vous pouvez télécharger un réseau pré-entraîné ici et lancer le script d'inférence sur votre dossier de paires d'images.
Votre dossier doit avoir toutes les paires d'images au même endroit, avec le modèle de nom
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained Quant au script main.py , un menu d'aide est disponible pour des options supplémentaires.
Afin d'avoir des transformations cohérentes entre les entrées et la cible, nous devons définir de nouvelles transformations qui prennent à la fois l'entrée et la cible, car une nouvelle variable aléatoire est définie chaque fois qu'une transformation aléatoire est appelée.
Pour permettre une augmentation des données, nous avons envisagé la rotation et les traductions pour les entrées et leur résultat sur la carte d'écoulement cible. Voici un ensemble de choses à prendre en charge afin d'obtenir une augmentation des données appropriée
Si vous appliquez une transformation sur IMG1, vous devez appliquer la même carte à l'écoulement, pour obtenir des points d'origine cohérents pour le flux.
Étant donné une traduction (tx,ty) appliquée sur IMG2, nous aurons
flow[:,:,0] += tx
flow[:,:,1] += ty
Une échelle appliquée sur IMG1 et IMG2 avec un zoom paramètres alpha multiplie le flux de la même quantité
flow *= alpha
Une rotation appliquée sur les deux images sous un angle theta tourne également des vecteurs d'écoulement ( flow[i,j] ) par le même angle
for_all i,j flow[i,j] = rotate(flow[i,j], theta)
rotate: x,y,theta -> (x*cos(theta)-x*sin(theta), y*cos(theta), x*sin(theta))
Considérons une rotation par l'angle theta du centre d'image.
Nous devons transformer chaque vecteur d'écoulement en fonction des coordonnées où elle atterrit. Sur chaque coordonnée (i, j) , nous avons:
flow[i, j, 0] += (cos(theta) - 1) * (j - w/2 + flow[i, j, 0]) + sin(theta) * (i - h/2 + flow[i, j, 1])
flow[i, j, 1] += -sin(theta) * (j - w/2 + flow[i, j, 0]) + (cos(theta) - 1) * (i - h/2 + flow[i, j, 1])