Implementasi FLOWNET PYTORCH oleh Dosovitskiy et al.
Repositori ini adalah implementasi obor dari Flownet, oleh Alexey Dosovitskiy et al. di Pytorch. Lihat implementasi obor di sini
Kode ini terutama terinspirasi dari contoh resmi Imagenet. Ini belum diuji untuk beberapa GPU, tetapi harus berfungsi seperti dalam kode asli.
Kode ini memberikan contoh pelatihan, menggunakan dataset kursi terbang, dengan augmentasi data. Implementasi untuk set data aliran adegan dapat ditambahkan di masa depan.
Dua model jaringan saraf saat ini disediakan, bersama dengan variasi norma batch mereka (eksperimental):
Terima kasih kepada Kaixhin, Anda dapat mengunduh versi FLOWNETS (dari Caffe, bukan dari Pytorch) di sini. Folder ini juga berisi jaringan terlatih dari awal.
Langsung beri makan jaringan yang diunduh ke skrip, Anda tidak perlu melepaskannya bahkan jika lingkungan desktop Anda memberi tahu Anda.
Jaringan ini mengharapkan input BGR (dibandingkan dengan RGB di Pytorch). Namun, pesanan BGR tidak terlalu penting.
Modul ini dapat dipasang dengan pip
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
atau
pip install -r requirements.txtPertama, Anda perlu mengunduh dataset The Flying Chair. Ini ~ 64GB besar dan kami sarankan Anda memasukkannya ke dalam drive SSD.
Hyperparameter default yang disediakan di main.py sama dengan dalam skrip pelatihan Caffe.
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownetsKami menyarankan Anda mengatur j (jumlah utas data) ke tinggi jika Anda menggunakan dataaugmentasi untuk menghindari pemuatan data untuk memperlambat pelatihan.
Untuk bantuan lebih lanjut, Anda dapat mengetik
python main.py -hTensorboard-Pytorch digunakan untuk logging. Untuk memvisualisasikan hasil, cukup ketik
tensorboard --logdir=/path/to/checkpointsModel dapat diunduh di sini di folder Pytorch.
Model dilatih dengan opsi default kecuali ditentukan. Warping warna tidak digunakan.
| Lengkungan | tingkat pembelajaran | Ukuran batch | Ukuran zaman | nama file | EPE validasi |
|---|---|---|---|---|---|
| Flownets | 1E-4 | 8 | 2700 | flownets_epe1.951.pth.tar | 1.951 |
| FLOWNETS 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 |
Catatan : Flownets BN membutuhkan waktu lebih lama untuk berlatih dan mendapatkan hasil yang lebih buruk. Sangat disarankan untuk tidak menggunakannya untuk dataset kursi terbang.
Prediksi dibuat oleh flownets.
Kode yang tepat untuk aliran optik -> peta warna dapat ditemukan di sini
| Masukan | ramalan | Landtruth |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Jika Anda perlu menjalankan jaringan pada gambar Anda, Anda dapat mengunduh jaringan pretrained di sini dan meluncurkan skrip inferensi pada folder pasangan gambar Anda.
Folder Anda perlu memiliki semua pasangan gambar di lokasi yang sama, dengan pola namanya
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained Adapun skrip main.py , menu bantuan tersedia untuk opsi tambahan.
Untuk memiliki transformasi yang koheren antara input dan target, kita harus mendefinisikan transformasi baru yang mengambil input dan target, karena variabel acak baru didefinisikan setiap kali transformasi acak disebut.
Untuk memungkinkan augmentasi data, kami telah mempertimbangkan rotasi dan terjemahan untuk input dan hasilnya pada peta aliran target. Berikut adalah serangkaian hal yang harus diurus untuk mencapai augmentasi data yang tepat
Jika Anda menerapkan transformasi pada IMG1, Anda harus menerapkan hal yang sama untuk mengalir peta, untuk mendapatkan titik asal yang koheren untuk aliran.
Diberikan terjemahan (tx,ty) diterapkan pada img2, kami akan memiliki
flow[:,:,0] += tx
flow[:,:,1] += ty
Skala yang diterapkan pada IMG1 dan IMG2 dengan parameter zoom alpha mengalikan aliran dengan jumlah yang sama
flow *= alpha
Rotasi yang diterapkan pada kedua gambar dengan sudut theta juga memutar vektor aliran ( flow[i,j] ) dengan sudut yang sama
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))
Mari kita pertimbangkan rotasi dengan sudut theta dari pusat gambar.
Kita harus tranform setiap vektor aliran berdasarkan koordinat tempat ia mendarat. Pada setiap koordinat (i, j) , kami memiliki:
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])