September 2018 – nibuiroフラグメント β

Archive September 2018

Compile OpenCV3 with CUDA on Windows for python

Spec

  • i5-4210U
  • 8GB RAM

Waht’s Need? / env

Commands

 スタートメニューから「VS____ 用 MSBuild のコマンド プロンプト」を開き、Pythonのインタプリンタへのパスが通っていなければ通し、以下もSETしておく。
 適宜変更して~。

Result

  • Output(13行目)

  • Size
    About 6GB.

  • Check


Reference:

素人の音楽用語メモ

逐次更新。

Instruments

  • クラビネット
     電気式のキーボードである。略してクラビと呼ばれることもある。
  • ガムラン
     東南アジアのインドネシアで行なわれている大・中・小のさまざまな銅鑼や鍵盤打楽器による合奏の民族音楽の総称である。

DAW feature

  • Automation
     DAWなどでミキサーやソフトシンセのフェーダー、その他ツマミの操作などを記憶し、再生時に自動的に動かす機能。

Effect

  • Lo-Fi(Low-Fidelity、Lo-Fi music)
     音楽のレコーディングの際の録音状態、録音技巧の一つで、極端に高音質なものではない録音環境を志向する価値観。

  • Echo
     こだまのように減衰した音が遅延して流れてくるもの 反響。

  • Reverb
     音に余韻を残すもの、残響。 エコーとは似ているようで違う。

  • Deray
     音をわざと遅らせることにより反響音を再現する。

  • Bit Crusher
     意図的に少ないビット深度に落とす事でローファイ、レトロな感じを演出する。

  • Sustain
     音が消えて行く際の伸びを指す場合がある。「サスティンの長い音」と言えば例えば鐘の音のように長く響きが残る音の事を指す。ピアノで踏んでいる間だけ発音が伸びるペダルであるダンパーペダルの別名がサスティンペダル。

  • Release
     コンプレッサーでは、圧縮動作の復帰の速さのパラメータが「リリース」と呼ばれ、開始動作の速さを指す「アタック」と対で使われている。

Articulation

 アーティキュレーションとは、音楽の演奏技法において、音の形を整え、音と音のつながりに様々な強弱や表情をつけることで旋律などを区分すること。 フレーズより短い単位で使われることが多い。強弱法、スラー、スタッカート、レガートなどの記号やそれによる表現のことを指すこともある。

  • レガート
     ある声部において、連続する2つの音を途切れさせずに滑らかに続けて演奏することである。楽譜では通常スラーで指示されるが、legatoのように文字で書かれることもある。

  • シェイク(a.k.a. リップ・トリル)
     金管楽器で音をシェイクしているように聴かせるテクニックで、呼び名は違えどリップ・トリルもほとんど同じテクニック

  • グリッサンド
     一音一音を区切ることなく、隙間なく滑らせるように流れるように音高を上げ下げする演奏技法をいう。演奏音は滑奏音とも呼ばれる。

  • フォール
     下に向かうグリッサンド)

Slang

  • 白玉
     二分音符、全音符など、白丸で書かれる音符のこと。
  • メロウ
    耳障りがよく、甘くうっとりするような旋律。

DenseNet

DenseNet

Point

 すべてのレイヤを直接接続することによって、

  • 勾配消失の削減
  • 特徴伝達の強化
  • 特徴の効率的な利用
  • パラメータ数の削減
  • 正則化効果の期待

を実現している。すなわち、各レイヤへの入力は以前のすべてのレイヤから与えられ、直接接続数は$\frac{L(L+1)}{2}$となる。

What’s different from Resnet ?

$$x_l=H_l(x_{l-1})+x_{l-1}$$
 Resnetにおいてレイヤlの出力はレイヤl-1の出力にレイヤl-1の非線形変換を加えたものでチャンネル数(depth)は一定だが、
$$x_l = H_l([x_0,x_1,\cdots,x_{l-1}])$$
DenseNetにおいてはレイヤlの出力はレイヤ$0,\cdots,l-1$の出力をチャンネル方向に連結したものとなる。こうしてみると全くもって異なることが明白になる。

What’s Dense block

 難しいことはなく…実装しようとするとPadding祭りになったりするのだが、BN-ReLU-Conv(1 x 1)-BN-ReLU-Conv(3 x 3)から成るレイヤをトップ画像の様に密結合させたもの。このレイヤ毎のチャンネル(depth)増加数を$k$をgrowth rateと呼んでいる。

DenseNet Families

 で、「DenseNet-B」?「DenseNet-C」?「DenseNet-BC」? 何よソレ。という話なんだがね?

Bottleneck layers.
Although each layer only produces k output feature-maps, it typically has many more inputs. It has been noted in [37, 11] that a I x I convolution can be introduced as bottleneck layer before each 3×3 convolution to reduce Lhe number Of input feature-maps, and Lhus 10 improve computational efficiency. We find this design especially effective for DenseNet and we refer to our network with such a bottleneck layer, i.e., to the BN-ReLU-Conv(l x 1)-BN-ReLU-Conv(3 x 3) version of H_l, as DenseNet-B. In our experiments, we let each 1 x 1 convolution produce 4k feature-maps.
Compression.
To further improve model compactness, we can reduce lhe number Of feature-maps al transition layers. If a dense block contains m feature-maps, we let the following transition layer generate 19m] output feature-maps, where O < 9 1 is referred to as the compression factor. When 0 — 1, the number of feature-maps across transition layers remains unchanged. We refer the DenseNet with 0 < 1 as DenseNet-C, and we set 0 = 0.5 in our experiment. When both the bottleneck and transition layers with O < 1 are used, we refer to our model as DenseNet-BC.

(θがOやら0やらになっていたり、他にもいろいろと間違いあるので気を付けて)

  • DenseNet-B
     特徴マップ数の削減、計算の効率化のためConv(3 x 3)レイヤの前にBottleneck layerとして、Conv(1 x 1)レイヤを導入した。これはチャンネル方向での圧縮操作(和)となる。
  • DenseNet-C
      DenseBlockがm個の要素を持つ特徴マップを出力する場合、より簡潔に表現するために$0 < θ\leq 1$のもと、$\lfloor θm \rfloor$に要素数を削減するためTransition layerとして、BN-ReLU-Conv(1 x 1)-AvgPool(2 x 2, stride 2)から成るレイヤをを導入した。
  • DenseNet-BC
     上記二つの工夫を取り入れた版。

Performance


よさげ。


実装:
https://github.com/sheep02/2D_DenseNet_Keras.git
 これ自体の動作確認はしていないのですが、これをもとに別のモデルを組みましたので恐らく動作します。


Reference:

NN構築の失敗談

逐次更新…(笑 えない。

Pytorch

ResidualNet

RuntimeError: Given groups=1, weight of size [16, 3, 3, 3], expected input[30, 16, 101, 101] to have 3 channels, but got 16 channels instead

 BCHW: ネットワークの頭、中間のレイヤでsumの操作を加えるときにショートカット側で畳み込みしておかないとチャンネル数(フィルタ数)が合わずにエラーが吐かれる。
 

ValueError: Target and input must have the same number of elements. target nelement (16384) != input nelement (65536)

 BCHW: ネットワークの出力がターゲットのサイズと合致していないと吐かれる。適当なサイズ/数でPoolingするなどしてダウンサンプリングする。

Keras (TF backend)

DenseNet-BC

TypeError: __init__() got multiple values for argument 'axis'

 BHWC(恐らく): 畳み込みレイヤの出力をConcatenateを用いて連結させようとしたところ吐かれた。詳細は確認していないがconcatenateを代用することで解決。
 

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'pool4/AveragePooling2D' (op: 'AveragePooling2D') with input shapes: [?,1,1,64]

 BHWC: Transition layerを含むDense blockを重ねすぎて(プーリング層を入れすぎて)吐かれた。Dense block(本質的にはプーリング層)を減らして解決。Dense blockをさらに重ねたければDenseNet-Bを採用すべし。
 

setup.py install⇒uninstall

アーインストール♪ アーインストール♪
こーのー星の無数の…

 はい、ということでsetup.pyから直接インストールしてしまった場合についての対処法です。pipというすばらしいパッケージ管理システムを通さずにインストールしてしまうとまぁ大変。次からはやめましょう。

Windows(オプション必要かも<(_ _)>):

Linux:

こちらのコマンドでアンインストールできないこともないですが、強引な操作となる為、意図しないファイルを削除してしまうことがあります。使用には十分気を付けてくださいねー。


setup.pyから直接インストールしない方法

Anacondaとjupyter notebook

話自体は昔のことなんですがね?
WindowsであるAnaconda環境からjupyterを立ち上げたいと思うじゃないですか?
ググりますね?

「Anacondaから開いたプロンプトでjupyter notebookうてばいけるよ!」

「できました!」

「I can not! Ahhhh!!!」

…ということで、スクリプトを直接実行してみましたらできました。

Spyderについても同様です。
パスは(ry

…が、しかしね?この話にはまだ続きがありまして、

--name ipykernel(IPython Kernel for Jupyter)のインストールディレクトリの名称を設定。IPythonってのは対話型CLI。
--display jupyter notebookでの表示名

こちらの方法でもイケるのですよ。…むしろこっちが正しい(笑)。
ただ「IPython-notebook-extensions」がエラーを起こす…かもしれない。

ほいでは。ノシ

【WPF】【戯言】この私が…

【WPF】【戯言】この私が…

 「’mainwindow.xaml’ をプロパティ ‘StartupUri’ に割り当てることができません。値が有効な範囲にありません。」
 …Umm. 名前は変更していないのだけどねぇ。App.xamlを確認しても文字列は間違っていない。
ネットでググってちらほら出てくるようなありふれた原因ではないのか。フっ、この私が…愚民共と同じと思うなよ!?Google殿!!

 ま、まぁ完全一致ではない(汗)。
 MVVMフォルダ構成に整理したため「StartupUri=”View/MainWindow.xaml”」なのだよ。

終幕っ!!!

wordpressのユーザパスワードを忘れて焦った話

wordpressのユーザパスワードを忘れて焦った話

 メールアドレスからリセットできると思っていた…だがしかし、迷惑メールボックスを見ても受信していない。設定をしくじった。ということでググるとまずヒットしたのが「phpMyAdmin」。どうやらパスワードをDBで管理しているらしい、けれども残念なことにインストールしていない上にするにしても恐らく「apt upgrade」しなけりゃならんだろうし、そうなると初回インストール時同様、性能不足からインスタンスを一度有料プランにしなければならない。それは面倒。
 ということでコマンドラインから直接DBにアクセスすればいいだろうと。

mysqlと入力しているがMariaDBの場合でもこれでイケる(現在は)。

無事変更終了。いやー焦った。

MVVM on WPF

MVVM on WPF

View

  • Modelの公開しているデータとコマンドを操作しやすいようにViewをつくる

 UIのことでありXAMLで記述される。Datacontextにクラスを指定してリソースとして利用するなどする。またCommandをバインディングする、ホットキーのバインドなどもxamlに記述される。viewが「UI/UXについて」、と考えればここでホットキーがバインドされることになんら問題はない。

Model

  • WPFで組んでいるものをFormsに変更することになると考えた場合に、変わらない部分をまとめるとモデルになる。

 a.k.a.エンジンで良いのではないかと。
 入力の検証はViewが変わったとしても変更されるわけではないのでModel側。Modelは変更通知機能を有することが許されていて、View側がModelからデータを直接受けとることはタブーではない。

ViewModel

  • ModelとViewで合わない部分を合うように変換する機能を作るとViewModelになる

 INotifyPropertyChanged、Command(ICommnad)などは基本的にここの枠組みに実装する。難読化が懸念されるほどのコマンド量が想定されれば適切な粒度で分類してファイルに分ける。Modelを継承したクラスに機能を追加してViewModelとしてもいい。役割はView専用の保持データの管理だと広く認知されている。ViewによってはModelに直接接続できない部分の変換を行う。言い換えると、View専用の表示に合うようにデータ整形する。逆に入力をModelに合うように整形する。
 表示することが目的のアプリの場合はページそのものがモデルで管理されるデータであるからViewModelでは管理しない。

識者によると、

「VMが注目されすぎて、Modelに実装すればいい機能までVMに実装してしまって、VMにMが混ざってしまうのが混乱する原因だと思う。」

「「Modelを継承してViewModelにしてやれば違いを意識せずに使えるよね」「後でVMにするならModelにINotifyPropertyChangedを実装してしまえ」という実装が楽ちんなのでよくやります。」

とのこと。

gcloudコマンド.log

随時追加していきます。

ファイル転送