Dosovitskiy等人的Pytorch實施Fownet。
該存儲庫是Alexey Dosovitskiy等人的Flownet的火炬實施。在Pytorch。在此處查看火炬實施
該代碼主要來自官方Imagenet示例。它尚未對多個GPU進行測試,但是它應該像原始代碼一樣工作。
該代碼使用飛行椅數據集提供了一個培訓示例,並提供了數據增強。將來可能會添加場景流數據集的實現。
目前提供了兩個神經網絡模型,以及它們的批處理規範變化(實驗):
多虧了Kaixhin,您可以在此處下載驗證版的Flownets(來自Caffe,而不是來自Pytorch)。該文件夾還包含從頭開始訓練的網絡。
直接將下載的網絡饋送到腳本中,即使您的桌面環境告訴您,您也無需取消壓縮。
這些網絡期望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(數據線程數)將j設置為高,如果您使用數據指導以避免數據加載以減慢培訓。
為了進一步的幫助,您可以輸入
python main.py -hTensorboard-Pytorch用於記錄。要可視化結果,只需鍵入
tensorboard --logdir=/path/to/checkpoints模型可以在此處下載在Pytorch文件夾中。
除非指定,否則對模型進行了默認選項的培訓。不使用顏色翹曲。
| 拱 | 學習率 | 批量大小 | 時期尺寸 | 文件名 | 驗證EPE |
|---|---|---|---|---|---|
| 飛彈 | 1E-4 | 8 | 2700 | flownets_epe1.951.pth.tar | 1.951 |
| FOWNETS 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 |
注意:Fownetts BN花了更長的時間來訓練,並獲得了更糟的成績。強烈建議您不要將其用於飛行椅子數據集。
預測是由Fownets做出的。
光流的確切代碼 - >顏色地圖可以在此處找到
| 輸入 | 預言 | 地面圖 |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
如果您需要在圖像上運行網絡,則可以在此處下載驗證的網絡,並在圖像對文件夾上啟動推理腳本。
您的文件夾需要在同一位置將所有圖像對配對,並具有名稱模式
{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])