Chainer概要と体感
・コンテンツを生成するタイプの人工知能として使える
・ニューラルネットワークを誤差伝播で学習するライブラリ
・Chainerは日本製ライブラリ
・環境構築が個人的に大変だった。
→Chainer周りのCUDA(クーダ)やcupy(くーぱい)
とかでなんかいろいろうまくいかず丸一日かかりました(汗)
CUDAはGPU向けの統合開発環境です。
cupyはpythonでよく使われている配列計算ライブラリ
・ちょっと試すだけなら、Colaboratory(完全にクラウドで実行される)
を使えば、はやい。ローカルで試すと学習に超絶時間がかかる。
Chainerができること
・超解像画像の作成
→解像度の低い画像に対して処理を行なって、高解像度の画像出力を得る技術
・画像の自動生成
→Generative Adversarial Nets(GAN)というデータを生成するタイプの
ニュラルネットワークを使う
・画像のスタイル変換
→教師データと入力画像から画像を出力する、いわゆる画風変換とか有名
・文章の自動生成
→RNN(回帰型ニューラルネットワーク)やマルコフ連鎖を使った方法など
・画像のキャプションの生成(Neurl Image Caption)
→画像認識からさらに進んだもの。写真などの画像に写っているものを、自然な文章で
説明する説明文(キャプション)を生成するニュートラルネットワーク
どんなことができるのか(文章自動生成)
●RNN
→回帰型ニューラルネットワーク
→音声や動画データが扱えるアルゴリズム
→時間や並びの順番に重要な意味を持つ時系列データを扱うことに適している
→サンプルリポジトリ(https://github.com/yusuketomoto/chainer-char-rnn)
●chainer+RNNを用いた実装の詳しい説明
https://qiita.com/GushiSnow/items/b34da4962dd930d1487a
●マルコフ連鎖
→Mecabを使って複数語からなる接頭語句と接頭語句に続く1語の接尾語に分割して、
オリジナルのテキストの統計に基づいて接頭語句の後ろにくる接尾語をランダムに選び、文章を出力する感じ
→元データを与えてマルコフ連鎖をやることで、元のデータとは異なるが大体意味の通じる
文章を生成することができる。
→ランダムに繋げている感じ
→こっちの方が精度マシだった。。。
●詳しい説明
https://kentarokuribayashi.com/journal/2004/04/15/20040415-1081998210
マルコフ連鎖で利用するデータ
例) このメールにはありったけの魔力を込めて送る。
Mecabを使って、その単語を1つずつずらしながら3つずつの
塊を作ります。これをDBに登録。このように、3つずつの塊を
作る
接頭語句 | 接尾語 |
---|---|
(開始) この | 魔力 |
の 魔力 | 。 |
送る | (終了) |
●1行目→ 「接頭語句 + ランダムに選ばれた接尾語」
●2行目→ 「直前の接尾語を含む接頭語句 + その接尾語から
ランダムに選ばれた語」
●3行目→ 「さらにまたその直前の接尾語を
含む接頭語句 + その接尾語から
ランダムに選ばれた語」…というふうに連鎖させていきます。
今回の例文は短いですが本来は当然もっと多くの種類の文章を対象にします。
出力結果
●学習した文章(中二病でも恋がしたい)
世界の果てはすなわちここ!だって地球は丸いもん!
このメールにはありったけの魔力を込めて送る
なかなかやるようデッスね!偽モリサマー
。。。など
●出力結果(ちょっと変だけど、それっぽい文章は生成されている)
邪王真眼が共鳴している!貴方を見つけるために、
幾星霜(いくせいそう)の時を経て此処(ここ)に来た。
うぅっ目が共鳴している。我の名はモリサマー。
ふっ、馬鹿言うなデス!うぅっ目が共鳴している。
●学習した文章(宮沢賢治の「雨ニモマケズ」の漢字バージョン)
雨にも負けず
風にも負けず
。。。など
●出力結果(ちょっと変だけど、それっぽい文章は生成されている)
行って看病してやり一日に玄米四合と
褒められもせず日照りの時は涙を流し
風にも夏の暑さにも負けぬ
どんなことができるのか(画風変換)
→用意されているモデルを使うとすぐに動かせます。
●処理の流れ
→元画像から、画像の形状を”ほどほど”に保存しているレイヤーを取得
→スタイル画像から、画像のスタイルを”いい感じ”に表現しているレイヤーを取得
→損失を計算して補佐を生成画像に逆伝播させる(誤差逆伝播法)
→誤差逆伝播法は、教師データと出力されたデータを比較していって、
重みとかバイアスを修正していくやつ。これで、モデルの精度を高めていく
→2つの画像(コンテンツ画像とスタイル画像)を組み合わせることにより、
画風を変換することができる。
●描画の流れ
まずスタイル画像の模様を全体に描いて、それを少しずつコンテンツ画像にマッチするように変化させていくという流れ。
スタイル画像については、後ほど説明があります。
→サンプルリポジトリ(https://github.com/pfnet-research/chainer-gogh)
→(詳しくは)
https://tech.preferred.jp/ja/blog/chainer-gogh/
https://www.renom.jp/ja/notebooks/tutorial/image_processing/neural-style-transfer/notebook.html
組み合わせる画像について
・スタイル画像とは・・・画風となるもの
・コンテンツ画像とは・・・形状が保たれるもの。これをベースに画風を変換したい
出力結果(推し注意)
感想
●chainerでできることはKerasでもできることが多い
●chainerでやってたら、なんかいろいろうまくいかないということが多かった。
●Keras(Deap learningのラッパーライブラリ)は
直感的にモデルを構築できるので、数学できないマンでもとりあえず動くものが作れる
●Kerasのほうが入門しやすいと思いました