Pytorch -Implementierung von Flownet von Dosovitskiy et al.
Dieses Repository ist eine Fackelimplementierung von Flownet von Alexey Dosovitskiy et al. in Pytorch. Siehe Fackel -Implementierung hier
Dieser Code ist hauptsächlich vom offiziellen Bildnet -Beispiel inspiriert. Es wurde nicht für mehrere GPU getestet, sollte aber genau wie im Originalcode funktionieren.
Der Code enthält ein Schulungsbeispiel, indem Sie den Flying Chair -Datensatz mit Datenvergrößerung verwenden. In Zukunft kann eine Implementierung für Szenenflussdatensätze hinzugefügt werden.
Derzeit werden zwei neuronale Netzwerkmodelle sowie ihre Batch -Norm -Variation (experimentell) bereitgestellt:
Dank Kaixhin können Sie hier eine vorgezogene Version von Flownets (von Caffe, nicht von Pytorch) herunterladen. Dieser Ordner enthält auch geschulte Netzwerke von Grund auf neu.
Füttere das heruntergeladene Netzwerk direkt zum Skript. Sie müssen es nicht unkomprimieren, selbst wenn Ihre Desktop -Umgebung dies Ihnen sagt.
Diese Netzwerke erwarten einen BGR -Input (im Vergleich zu RGB in Pytorch). Die BGR -Bestellung ist jedoch nicht sehr wichtig.
Diese Module können mit pip installiert werden
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
oder
pip install -r requirements.txtZunächst müssen Sie den Datensatz von The Flying Chair herunterladen. Es ist ~ 64 GB groß und wir empfehlen Ihnen, es in ein SSD -Laufwerk zu stecken.
Standard -Hyperparameter in main.py sind die gleichen wie in den Kaffe -Trainingsskripten.
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownetsWir empfehlen Ihnen, J (Anzahl der Datenfäden) auf hoch zu setzen, wenn Sie DataAugmentation verwenden, um das Laden von Daten zu vermeiden, um das Training zu verlangsamen.
Für weitere Hilfe können Sie tippen
python main.py -hTensorboard-Pytorch wird zur Protokollierung verwendet. Um das Ergebnis zu visualisieren, geben Sie einfach ein
tensorboard --logdir=/path/to/checkpointsModelle können hier im Pytorch -Ordner heruntergeladen werden.
Die Modelle wurden mit Standardoptionen geschult, sofern nicht angegeben. Farbverzerrung wurde nicht verwendet.
| Bogen | Lernrate | Chargengröße | Epochengröße | Dateiname | Validierung epe |
|---|---|---|---|---|---|
| Flächen | 1e-4 | 8 | 2700 | FLOWDets_PE1.951.PTH.TAR | 1,951 |
| Flownets Bn | 1e-3 | 32 | 695 | FLOWDets_BN_EPE2.459.PTH.TAR | 2.459 |
| Flownetc | 1e-4 | 8 | 2700 | FLOWNETC_EPE1.766.PTH.TAR | 1.766 |
HINWEIS : Die Flownets BN dauerte länger, um zu trainieren, und erzielte schlechtere Ergebnisse. Es wird dringend empfohlen, Sie nicht für Flying Chairs -Datensatz zu verwenden.
Vorhersage werden von Flächen gemacht.
Genauer Code für den optischen Fluss -> Farbkarte finden Sie hier
| Eingang | Vorhersage | Bodenttr |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Wenn Sie das Netzwerk auf Ihren Bildern ausführen müssen, können Sie hier ein vorgezogenes Netzwerk herunterladen und das Inferenzskript auf Ihrem Ordner von Bildpaaren starten.
Ihr Ordner muss alle Bilderpaare am selben Ort mit dem Namensmuster haben
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained Für das main.py -Skript steht ein Hilfemenü für zusätzliche Optionen zur Verfügung.
Um kohärente Transformationen zwischen Eingaben und Ziel zu haben, müssen wir neue Transformationen definieren, die sowohl Eingaben als auch Ziel einnehmen, da jedes Mal eine neue zufällige Variable definiert wird, wenn eine zufällige Transformation aufgerufen wird.
Um die Datenvergrößerung zu ermöglichen, haben wir Rotation und Übersetzungen für Eingaben und deren Ergebnis auf der Zielflusskarte berücksichtigt. Hier finden Sie eine Reihe von Dingen
Wenn Sie eine Transformation auf IMG1 anwenden, müssen Sie dasselbe auf Flusskarte anwenden, um kohärente Ursprungspunkte für den Fluss zu erhalten.
Bei einer Übersetzung (tx,ty) die auf IMG2 angewendet wird, werden wir haben
flow[:,:,0] += tx
flow[:,:,1] += ty
Eine Skala, die sowohl auf IMG1 als auch auf IMG2 mit einem Zoomparameter alpha angewendet wird
flow *= alpha
Eine Rotation flow[i,j] die auf beiden Bildern durch einen Winkel theta angewendet wird
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))
Betrachten wir eine Rotation im Winkel theta aus dem Bildzentrum.
Wir müssen jeden Durchflussvektor auf der Grundlage der Koordinaten, in denen er landet, tranformieren. Bei jeder Koordinate (i, j) haben wir:
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])