ぺんぎんさんのおうち

日記です。たまに日記じゃないこともあります。

01.01.2018

2018を2017に書き間違えて歪な修正跡が云々みたいなツイットをみて, 僕も01.01.2017にしたかも..と思って確認したときに投稿忘れに気づいた.

 

新年なので頑張ろうと思った.

毎日草を生やすぞ!!と意気込んでいたのに普通に忘れてた.

 

留学満了まで43日

学習し、予測(分類)する---それが機械学習!

海に生き、海を守り、海を往く---それがブルーマーメイド!

ハイスクール・フリート 通称"はいふり"
2016年4月に第一話が放送され, 放送終了後も各動画サイトで再放送されたりOVAが発売されたり, 来年にははいふりのゲームが配信されるなど, <ここにそれっぽい言葉が追加されます>


今回はPythonで使用できるオープンソースソフトウェアであるところのChainerを使ってはいふりキャラクターの判別をやっていきます.
はいふりを見たことがある方はご存知かと思いますが, 本編には30を超える女の子たちが登場します. 流石に全員の分類は骨が折れるので艦橋メンバー(主要キャラ)6人とそれ以外, で分類ということにしました.

先に言い訳をしておきますが機械学習について超詳しいというわけではないので所々おかしな部分があります. 許して.
機械学習Hello WorldであるところのMNISTはおそらく多くの人がやってると思います. が, その後何すりゃええんや??ってなる人も少なくないはずです. 僕もそうでした.
データセットはどうやって作るの..?とか, 公式ドキュメント読んでも何もわからんやないかーいと匙を投げた時期もありました. 需要があるようなら今後少しばかりの解説を加えます.
(僕が解説しなくとも皆さん各自でやったほうが効率いいと思いますが..)

Chainerと機械学習

特に説明はしません. 鉞が飛んでくるのは怖いですし僕はファッション機械学習erなので.

はじまり


ふとはいふりが見たくなって, ただ見るだけではつまらないしやるか〜って感じではじまりました.

下準備

さらっと顔画像集めてるツイートを上記にあげましたが, これはOpenCV(&カスケード認識)を使いました.
[参考] OpenCVによるアニメ顔検出

OpenCVを使えば動画をフレーム毎に処理できるので便利です.
各フレームからキャラクターの顔を思われる部分を切り出して保存しているわけですね.
本編見ながらコード書いて切り出してたらいい感じに1話が終わりました.

次は切り出した画像に対してリサイズしていきます.
画像のサイズは一定ではないのでこのままChainerに与えたら泣かれてしまいます.
100*100にしました.


動画から画像を切り出してリサイズした後は分類したいラベル毎にフォルダを作ってそこに画像を投げていきます(ここが辛い).
今回は艦橋メンバー6人+その他を分類したいので

Others ミケちゃん シロちゃん リンちゃん メイちゃん ココちゃん タマちゃん
img0 img1 img2 img3 img4 img5 img6

こんな感じになります. 1枚1枚確認ドラッグ&ドロップで分けていくのは大変なのでコードを書きました.
0を押したらimg0へ1を押したらimg1へ..のように 画像をプレビューしながら0~6をタイプするだけにしました(それでも3500枚ほどあるのでやばい)


分類後です.
頑張りました. 2時間くらいかかりました.

下準備はこれで終わりです. あとはChainerを使ってネットワークを定義して学習させるだけですがその前におさらいしましょう!!

1. 動画から顔部分を取り出した画像を集める

2. 集めた画像をリサイズ(n*nが理想?)

3. リサイズした画像をラベル毎に分類

とりあえず下準備はこれで終わりです.

データセットの取得

学習させる用の画像はあるけれど, これからどうしよう...?と行き詰まったところである記事に出会いました.
chainerのデータセットの作り方
mnistからデータ取ってきてそれがどのような構造をしているのかを確認する事でChainerに渡すためのデータが作れるようになります.
他の機械学習ライブラリでも同じだと思うので覚えておきましょう(誰目線).

超えられない嵐はないんだよ!!

(ここから超適当になります)
下準備も学習・テスト用のデータセット取得もできたので後は学習させるだけです.
"学習させるだけ" Chainerについての説明は避けてるのでこの一言で片付けています.

させました. 以下結果

この時点で90%程度の精度が出ていました.
なかなか良いですね. (良いのか?) 画像数に結構偏りがあったので(タマちゃんがかなり少ない), 反転画像を追加するなど対策する必要があります.

これからどうしよう

1割誤分類はするものの, 概ねちゃんと学習できています.
さらに精度を上げるには画像データセットを増やしたりパラメータを調整したりする必要があります. パラメータに関しては値を変えては学習し..を繰り返さなければなりませんしなによりCPUで戦うには心もとないです. ですのでデータセット増強を目的としましょう.
次は2話から画像を抽出します. また手作業で分類するのかって?

とんでもない. 私たちには強力な分類器があるじゃないですか.

3500枚もの画像を人力で分けるよりは, 9割の精度でも自動化した方が楽です.
誰しもミスはあるのでちゃんと許してあげましょう. 次から間違えなければ良いんです. 間違えて分類されたものをそのままにしておくと学習に悪縁強を及ぼすので, そこは人力でちゃんとしたフォルダに戻してあげます.

以下がはいふり2話までの画像で学習させた結果です.
f:id:ushiromiya3:20171231145139p:plain f:id:ushiromiya3:20171231145322p:plain
どう考察していいかわかりませんが, 少し過学習した感じがします. (少し過学習って変な感じ)

一度データセットを作って学習させれば, それを使って新しくデータを取得し, また更に学習...を繰り返せるようになります. これって素敵なことやないですか.

まとめ

今はエポック数や層の数, いわゆるハイパーパラメータを変えて遊んでいます. 誤分類した画像がある程度集まってきたらそれを使って学習させるなど, 様々な改善手法が考えられますね. 楽しいです.


それでは良いお年を!!ハッピーバースデー僕

2017年の歩み

まとめ的なのはもうやったけど、振り返ってはいなかったので流行りに乗っかるよ。

3月以降は自分の過去エントリ読み返せばいいんだけどここに書くよ。

 

 

1月

留学することを決める。

学年末試験期間中、人生初のインフルエンザに感染する。

パスポートを取った。

 

2月

4年間住んでいた寮を出た。

なんかめっちゃ怒られた。ふええん。

ドイツへ出発、初海外。果たして生きて日本に帰ってこられるのだろうか。

 

3月

みんなが何を言ってるのかわからない。死にそうだった。

インターネットを手に入れ無敵になった。

HannoverMesseのなんかよくわからん展示会に行った。

サマータイムが始まった。

 

生きた。

 

4月

4月だというのに雪が降った。

はいふりドイツの聖地巡礼をした。

HannoverMesseで県知事に逢った。

 

生きた。

 

5, 6月

会話が少しできるようになってきた。

特に何もなかったと思う。

 

生きるのを頑張った。

 

7月

戦車博物館に行った。

寮の排水溝が詰まって大変なことになった。

帰国。

ハノーファーからの飛行機が遅延したり、パリで乗り換える時にごたごたがあったりして帰りの飛行機に乗れなかった。

 

月末から名古屋に滞在。

 

8月

日本にいた。

ロボカップ世界大会に参加したり、ctf4b Hiroshimaに参加したり。

コミケに行った。夜行バス乗る前に財布落とした。

ガルパン聖地巡礼した。

ラーメンをたくさん食べた。

 

9月

ドイツへ帰還、冬セメスターの始まり。

ドイツ語が少しわかるようになった。

生きた。

 

10月

高専セキュリティコンテストに参加した。惨敗した。

サマータイムが終わった。

 

生きた。

 

11月

持って来た本を消化し始める。

12月にプレゼンがあるのでスライド資料を作る。

 

生きた。

 

12月

ミュンヘン旅行、ドイツのトリの聖地巡礼

授業でドイツ人の前でプレゼンテーション、他の人は全員ドイツ語でやってた。

SECCON2017予選、なんもわからん。

 

編入試験の勉強をし始める。遅くない?

 

2017年を生き延びた。

 

 

まとめ

来年は人権のある生活をして精進、強くなりたい💪