Dosovitskiy et al。
このリポジトリは、Alexey Dosovitskiy et al。によるFlownetのトーチ実装です。 Pytorchで。こちらのトーチの実装を参照してください
このコードは、主に公式のImagenetの例からインスピレーションを受けています。複数のGPUについてはテストされていませんが、元のコードと同様に機能するはずです。
このコードは、フライングチェアデータセットを使用して、データ増強を使用してトレーニングの例を提供します。シーンフローデータセットの実装が将来追加される場合があります。
現在、2つのニューラルネットワークモデルが提供されており、バッチ規範のバリエーション(実験)があります。
Kaixhinのおかげで、こちらから(Pytorchからではなく、Caffeから)Flowenetsの前版をダウンロードできます。このフォルダーには、トレーニングされたネットワークもゼロから含まれています。
ダウンロードされたネットワークをスクリプトに直接送ります。デスクトップ環境がそう言っている場合でも、それを非圧縮する必要はありません。
これらのネットワークは、BGR入力を期待しています(PytorchのRGBと比較)。ただし、BGRの順序はそれほど重要ではありません。
これらのモジュールは、 pipでインストールできます
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
または
pip install -r requirements.txtまず、フライングチェアデータセットをダウンロードする必要があります。それは〜64GB大きいので、SSDドライブに入れることをお勧めします。
main.pyで提供されるデフォルトのハイパーパラメーターは、Caffeトレーニングスクリプトと同じです。
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownetsデータのロードを避けてトレーニングを遅らせることを避けるために、データを使用している場合は、J(データスレッドの数)を高に設定することをお勧めします。
さらにヘルプについては、入力できます
python main.py -hTensorboard-Pytorchはロギングに使用されます。結果を視覚化するには、単に入力します
tensorboard --logdir=/path/to/checkpointsモデルはPytorchフォルダーからダウンロードできます。
モデルは、指定がない限り、デフォルトオプションでトレーニングされました。色の歪みは使用されませんでした。
| アーチ | 学習率 | バッチサイズ | エポックサイズ | ファイル名 | 検証EPE |
|---|---|---|---|---|---|
| 飛行 | 1E-4 | 8 | 2700 | flownets_epe1.951.pth.tar | 1.951 |
| 飛行機bn | 1E-3 | 32 | 695 | flownets_bn_epe2.459.pth.tar | 2.459 |
| FlownetC | 1E-4 | 8 | 2700 | Flownetc_epe1.766.pth.tar | 1.766 |
注:Flowenets BNは訓練に時間がかかり、結果が悪化しました。空飛ぶ椅子のデータセットには使用しないことを強くお勧めします。
予測は飛行によって行われます。
光フローの正確なコード - >カラーマップはこちらにあります
| 入力 | 予測 | グラウンドトゥルース |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
画像でネットワークを実行する必要がある場合は、ここから事前に処理されたネットワークをダウンロードして、画像ペアのフォルダーで推論スクリプトを起動できます。
フォルダは、すべての画像を同じ場所にペアにし、名前パターンを備えている必要があります
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained main.pyスクリプトについては、追加のオプションにヘルプメニューを使用できます。
入力とターゲットの間にコヒーレントな変換を行うには、ランダム変換が呼び出されるたびに新しいランダム変数が定義されるため、入力とターゲットの両方をとる新しい変換を定義する必要があります。
データの増強を可能にするために、入力の回転と翻訳とその結果をターゲットフローマップで検討しました。適切なデータ増強を達成するために、世話をするもののセットがあります
IMG1に変換を適用する場合、フローマップにまったく同じを適用して、フローのコヒーレントな原点ポイントを取得する必要があります。
IMG2に適用された翻訳(tx,ty)を考えると、
flow[:,:,0] += tx
flow[:,:,1] += ty
ズームパラメーターを使用してIMG1とIMG2の両方に適用されるスケールはalphaに同じ量を掛けます
flow *= alpha
角度thetaによって両方の画像に適用される回転は、同じ角度でフローベクトル( flow[i,j] )も回転します
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))
画像センターからの角度thetaによる回転を考えてみましょう。
それが着陸する座標に基づいて、各フローベクトルをトランス形成する必要があります。各座標(i, j)には、次のことがあります。
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])