首都大学東京 情報学科3年 2016年度の夏インターン
2016年 夏のインターンシップで取り組んだ出来事についてごくかんたんにまとめました
1. Chainerを使った画像生成
参考にさせていただいた記事:?? https://github.com/mattya/chainer-DCGAN
DCGANというニューラルネットワークアルゴリズムがChainerにて実装されていたので、
これをnVidiaのGTX1080を積んだ計算機で走らせた。
DCGANは、多数の画像を読み込んでその特徴を学習し、似たような特徴を持ちながらも学習本とは異なる画像を生成するアルゴリズムである。
今回は女の子のイラストの顔部分の特徴を学習し、キャラクターの画像を自動生成するという使い方を行っている。
自分はニューラルネットワークの予備知識はなかったが、理論的にではなくプログラムのソースコードと実行結果に触れることで感覚的にアルゴリズムを理解しようと努めた。
ChainerはPythonで実装されたニューラルネットーワークフレームワークである、
大まかな環境構築の流れ
- 仕様するOSはUbuntu14.04
- ドライバはnVidia367.44 これがインストールされていないとGPU越しの画面出力ができないため、GPUを外した状態でインストールする。
- nVidia製のGPUに向けた開発環境であるCUDAをインストールする。バージョンは8.0RC。
- Pythonはpyenvを使ってインストール。DCGANのプログラムが2kで実装されているため、2.7.11をインストールして使った
- Chianerやその依存関係にあるPythonモジュールは全てpipでインストールした。いずれも最新バージョン。
学習素材の収集
プログラムの実装を書いてくださった人と同様に、自分もsafebooru.co.jpからイラスト画像を収集し、顔部分を切り抜いて学習素材として利用した。
大量の画像を短期間で集めるためにPythonを使ってスクレイピングを行った。しかし、予想以上に時間がかかり、当初の予定であった20万枚には届かず、2万枚程度の画像をダウンロードするにとどまった。
さらに前処理として、顔部分のみを切り出す必要が合ったが、これもopenCVによる画像認識を使うことで自動化が可能になった。ただし、アニメ顔の捕捉率は7割程度である。
学習結果
2万枚以上もの画像を用いて、4日間ほど連続で学習を行った。プログラムは1epochごとに、学習されたモデルを用いてランダムな特徴で画像を生成してくれる。面白いのは、学習時間が長ければ長いほど良い結果にはならないということである。ある程度の学習回数を超えると素材の特徴が強く出過ぎた画像が出たり、妙なノイズが入り込む。ドライバの不具合で計算値に以上が発生している可能生が考えられる。
2. Wikipediaの文章を係り受け解析
ある有名人の名前を入力すると、その人物がどこの出身でどのような職業、肩書を持つのかという情報を取得するプログラムを作ろうとした。
Wikipediaの人物に関してのページの最初の文は、誰々がどこの出身の〇〇である。というような1文で構成される。Cabochaという係り受け解析器を使って文を解析することで、人物名にかかっている名詞句などを割り出して、職業、出身地を特定できると考えた。
しかし、wikipediaのダンプデータには多数の固有定義されたタグやマーカーなどが混入しており、これをプログラムで取り除くのに難儀したため予想したほどの精度には至らなかった。