2020年02月17日

DAIN githubレポジトリの実装方法


映像の中間フレームを作成してフレームレートを上げる事が出来るDepth-Aware Video Frame Interpolationですが、ダウンロードして実行出来る形式のwindows用等アプリケーションでは、実行するためにはGPU環境が必須です。
Linux環境ではどうやって実行したら良いでしょうか?

git clone https://github.com/baowenbo/DAIN.git
cd DAIN
まず、内容をビルドする必要があります。
cd my_package
./build.sh
これには時間かかると思います
cd ../PWCNet/correlation_package_pytorch1_0
./build.sh
これは、my_package よりは早く終わるのではないかと思います。
cd DAIN/
mkdir model_weights
mkdir MiddleBurySet
cd model_weights
wget http://vllab1.ucmerced.edu/~wenbobao/DAIN/best.pth
cd ../MiddleBurySet
wget http://vision.middlebury.edu/flow/data/comp/zip/other-color-allframes.zip
unzip other-color-allframes.zip
wget http://vision.middlebury.edu/flow/data/comp/zip/other-gt-interp.zip
unzip other-gt-interp.zip
cd ..
これは、ダウンロードして展開するだけなので、上のbuildに比べれば早いと思います。


中間フレームを生成するには、チュートリアルではこうする事になっています。
CUDA_VISIBLE_DEVICES=0 python demo_MiddleBury.py
Traceback (most recent call last):
 File "demo_MiddleBury.py", line 13, in
  from scipy.misc import imread, imsave
ImportError: cannot import name 'imread'
コードの方に間違いがあり、このimreadは、 cv2のimreadを使うべきだそうです。

このDAINレポジトリは、環境によって実行出来たり実行できなかったり、2月前半頃に何回かコードが変わっています。なので、今後やり方が変わるかもしれません。


実行出来ると、このようになると思います。

revise the unique id to a random numer 8746
Namespace(SAVED_MODEL=None, alpha=[0.0, 1.0], arg='./model_weights/8746-Wed-Feb-12-09:08/args.txt', batch_size=1, channels=3, ctx_lr_coe=1.0, datasetName='Vimeo_90K_interp', datasetPath='', dataset_split=97, debug=False, depth_lr_coe=0.01, dtype=, epsilon=1e-06, factor=0.2, filter_lr_coe=1.0, filter_size=4, flow_lr_coe=0.01, force=False, log='./model_weights/8746-Wed-Feb-12-09:08/log.txt', lr=0.002, netName='DAIN', no_date=False, numEpoch=100, occ_lr_coe=1.0, patience=5, rectify_lr=0.001, save_path='./model_weights/8746-Wed-Feb-12-09:08', save_which=1, seed=1, time_step=0.5, uid=None, use_cuda=True, use_cudnn=1, weight_decay=0, workers=8)
cudnn is used
The testing model weight is: ./model_weights/best.pth
The unique id for current testing is: 28058
Walking
.....................
.....................
*****************current image process time 9.5407395362854s ******************
interpolation error / PSNR : 12.7644 / 18.4611
The average interpolation error / PSNR for all images are : 12.7644
.....................
.....................

結果は、MiddleBurySet/other-result-author/乱数/の下
などに出力されます。

チュートリアルの画像は、こんな感じです。
DogDanceWalkingBeanbags


中間フレームを順に複数生成するには、こうします。
CUDA_VISIBLE_DEVICES=0 python demo_MiddleBury_slowmotion.py --netName DAIN_slowmotion --time_step 0.125

FcKwnQMw9Q4a6CA3bm5A1581907805-1581907905

続きを読む

tak_tak0 at 23:43コメント(0)サーバ この記事をクリップ!

2020年02月11日

宝くじ仮説の理論的証明:枝刈りだけによるネットワーク学習の可能性

ニューラルネットワークの初期状態の中に、有益な部分ネットワークが含まれている事があって
このサブネットワークだけが全体の性能を決定し、他のネットワークは必要ない
...と言うのが、宝くじ仮説です。
宝くじ仮説に関連する情報は、観察事例のみに基づいていましたが、本研究では、この実験結果に理論的証明を与えることを目指しました。



Proving the Lottery Ticket Hypothesis: Pruning is All You Need
Eran Malach, Shai Shalev-Shwartz  Hebrew University
Gilad Yehudai, Ohad Shamir  Weizmann Institute of Science
arXiv preprint arXiv:2002.00585 (2020).


本研究では、(十分に大きければ)任意のネットワーク内に、学習無しでも全体を近似できるサブネットワークが含まれる事を証明します
..................
最近の研究では、
計算量の削減と精度向上のために、効果的な枝刈りの研究がされて来ましたが、
この研究では驚くべきことに、初期ネットワークの枝刈りで、重み学習に匹敵する結果が得られました。
このような枝刈りの理論的な研究は、これまでにありませんでした
Theorem 2.1.

Equivalence Between Pruning Neurons and Random Features
深さlのターゲットネットワークFに対して、次のようなG内のサブネットワーク~Gが存在する
Approximating ReLU Networks by Pruning Weights

~Gの、ゼロ以上の重みの数は、O(dn + n2l)
この定理は、 有限の深さlを持つ全てのターゲットネットワークについて、
深さ2l で、 多項式幅のランダムネットワークが、
ターゲットネットワークに近いサブネットワークを高確率で含むことを示しています


...ランダムネットワークの幅は、入力次元d、ターゲットの幅n、深さlに多項式依存します。

指数的に増大したりはしない、と言う事です。


ニューラルネットワークは任意の関数を近似する事が出来るため、
ランダムな重みを持つネットワークの枝刈りが、任意のネットワークに近似出来るならば、
ランダムネットワークの枝刈りも普遍的な近似スキームであることを意味します




.................
...完全な証明は B Proofs of Section 3 に在りますが、 直感的な理解は、
  • 幅 n = k・m の2層ニューラルネットワークを初期化するとします。 (mは大きな数です)
幅 k の、 m個ネットワークを初期化するものと考え、
  • このネットワークには、ランダムな特徴に対して小さな損失を実現するモデルがおそらく存在します。
  • これらネットワークのそれぞれについて、2層で初期化された重みが、対応するランダム特徴の重みから遠い場合は、枝刈します。
  • このような枝刈りされたネットワークの平均化は、ランダム特徴に近づき、損失も小さくなります。
...ここから拡張して、2l層のネットワークでl層を近似します...

.................

...多項式記憶量で、任意のネットワークを再現出来る、と言う所が最も重要な所だと思います。
ただし、枝刈り効率的なアルゴリズムは未解決です。

4 Discussion/Future Work
ネットワークの重み学習には多大な計算量が要りますが、枝刈り学習ではモデルの容量と計算量を削減できると言うメリットがあります。
重み最適化に対し、 枝刈りアルゴリズムは、勾配法のpitfallを回避できる可能性があります。
...課題として、 枝刈り前のネットワークサイズの多項式依存性の改善と、 CNNやResNetなどその他のネットワークへ一般化する事などがあります。

tak_tak0 at 15:23コメント(0)研究 この記事をクリップ!

2020年02月05日

レーダー画像からの、機械学習による降水量予報

提案手法の本質は、降水量の予測を、画像から画像への変換問題として扱う事です。

Machine Learning for Precipitation Nowcasting from Radar Images.
Shreya Agrawal, Luke Barrington, Carla Bromberg, John Burge, Cenk Gazen, Jason Hickey Google Research
arXiv preprint arXiv:1912.12132 (2019).

現在の気象予測は、降水量を予測するために大気の動きをモデリングしていますが、これをシミュレーションする事には大きなコストが要ります。代わりに、データ駆動型の入出力問題として捉えます


The multi-radar multi-sensor (MRMS) system は、1km×1kmの分解能で2分毎の降水量を記録しています。今回は、2017年7月から2019年7月までのデータを使用しました。
機械学習のために、MRMSデータを以下のように変換します。
機1時間あたりの降水量を4つに量子化します 0〜0.1 0.1〜1.0 1.0〜2.5 2.5〜 (mm/h)
米国を256km×256kmのタイルに分割し、各タイルを個別に予測します。掘,曚箸鵑匹離織ぅ襪榔が降っていないため、タイルの80%に少なくとも1ピクセルの雨が含まれるように、雨の多いタイルをオーバーサンプリングしました。
掘,曚箸鵑匹離織ぅ襪榔が降っていないため、タイルの80%に少なくとも1ピクセルの雨が含まれるように、雨の多いタイルをオーバーサンプリングしました。


本研究の学習モデルは U-Net です。
3ブロックは、次のように構成されています。
Basic Block: Conv2D→BN→LeakyReLU→Conv2D
DownsampleBlock: BN→LeakyReLU→MaxPooling→BN→LeakyReLU→Conv2D
Upsample Block: Upsample→BN→LeakyReLU→Conv2D→BN→LeakyReLU→ Conv2D
BNはバッチ正規化
ダウンサンプルブロックとアップサンプルブロックはそれぞれ7ずつ
ダウンサンプリングは、 2×2maxプーリング カーネルサイズが3×3の2D畳み込み

...各ダウンサンプルブロックは、対応するアップサンプルブロックにロングスキップで接続します。

................

1時間後の降雨量予測を、提案手法と他のモデルで予測して比較して最良であるとの事です。

提案手法は、HRRRモデル等のように予測に時間がかかるモデルに比べて高速で直近の予測が出来ますが、(手法から想像出来る事ですが)長時間先の予測が不正確になります。
予測が約5時間先まで伸びると、HRRRモデルの方が提案手法を上回ります。

しかし1時間から18時間の降水量を予測する、とも書いてあるのですが、 論文中には1時間後の PR曲線しか書いておらず、他の比較したデータがありません。

提案手法が本当に既存手法よりも優れているのか、組み合わせが良いのかは未解決の課題です。

...評価を米国でしか行っていないなど、提案手法は、地域ごとの予測モデルでしかなく、また、データに強く依存しそうなモデルになりそうな気がします。
突発的な天候急変や、気象変動には対応しきれないのではないでしょうか?
海上はデータが無いので予測が出来ないとか、論文中にも書いてありますが


tak_tak0 at 00:46コメント(0)研究 この記事をクリップ!
サイト内検索
にほんブログ村 科学ブログへ
にほんブログ村
adsense
Archives
amazon
blogchart
QRコード
QRコード
Recent Comments
o