Wait a moment...

機械学習ログ①:Youtube動画を自動でスクショし学習素材を取得

nem11.10xem (3)
379
7
2019-09-10 00:04:20
機械学習ログ①:Youtube動画を自動でスクショし学習素材を取得

 

◆筆者

 

 

かわいい赤ちゃんだよ。

 

かわいいね。

 

 

 

◆あらすじ

 

人の顔写真を入れると、かいあおりポケモンかどうかを教えてくれる『ポケモンけんしゅつマシン』をつくりました。

けんしゅつマシンのテストプレイについてはこちらのリンクから。

またマシンの詳細については、他プラットフォームで恐縮ですがALISの記事をご参照ください。

 

リンクも記事も面倒だという方は下記ツイートの動画を見るとおおよそ雰囲気がつかめます。

 

 

 

 

◆nemlogでやりたいこと

 

誤解を恐れず言うと、マシンのアップデートメモを記すにあたって、肩の力を抜いて記事を投稿できるクリプト系サービスがnemlogでした。

普段はALISで記事を書いているのですが、『信頼できる記事と人々を明らかにする全く新しいソーシャルメディア』を標榜するALISの精神性に愛着ないし偏執があるからなのか、自分の中にある「信頼のおける記事」のハードルを超えない記事はなんとなくALISに投稿しづらいような気持ちがありました。

プログラミング1年生なので、謎のエラーに出くわしてChromeのタブをいっぱい開いてまったく整理がつかないまま何故かエラーが消えて次へみたいなことを繰り返しているのですが、そういったことを記事に落とし込んでいくとちょっとは頭に入ってくれるかなという思いです。

 

前置きが長くなりました。本編にいきましょう。

 

 

======

 

 

◆学習失敗

 

なんとか公開した『ポケモンけんしゅつマシン』ですが、期待するような精度が出ていません。

精度を上げるにあたり、いまいまの学習モデルには3点の大きな問題があるとわかりました。

 

問題1:trainデータtestデータの絶対量が少なすぎる

問題2:trainデータとtestデータに重複する画像が多く含まれている

問題3:顔の検出という目的に対して、2層構造では層が少ない

 

このうち、問題1および問題2については、素材の収集方法に原因があると判断しました。

素材集めに際して、まだAPIを叩くという概念がいまいちよくわかっておらず、API不要のクローリングとして「Google検索で指定ワードに合致する画像を上から1000枚保存する」という方式を採用した結果、不要な画像を大量に収集してしまい、また画像の重複も多く見られるという状態になってしまっていました。

結局集まった素材は重複分を含めて2〜300枚程度しかなかったのですが、それの何が問題かをよくわかっていないまま学習を進めてしまい今に至っています。これはよくない

 

いっぽう問題3については、現状学習部分のコードが殆どコピペであるため、対応に少し時間を要しそうです。

 

ということで、まずはtrainデータとtestデータから重複する画像を間引き、また新規で素材を大量に集めることに着手してみましょう。

 

 

 

◆データを集める

 

ありがたいことに、今回検出する3名のいずれも、動画という形で素材を提供してくれています。

「…ということは、一定間隔で動画をキャプチャし保存すれば、正確かつ確実な素材が大量に取得できるんじゃないかな?」と思い立ちました。

 

pyautoguiを利用してキャプチャ奴が作れるようなので、この記事を参考に写真奴を作り奴しました。

 

AutoGetPic.py (github)

# 今回必要なや〜つ
import pyautogui
import time

# このフォルダに素材をブチ込む、をこちらで指定してやる
output_path = "./scammer_pic/"

# 1000枚写真を撮る
for i in range(1000):
    # スクショ撮るや〜つ
    s = pyautogui.screenshot()
    # 上で定義したoutput_pathフォルダに4桁の連番数字がついた画像が入っていく
    s.save(output_path + 'scammer_{0:04d}.png'.format(i))
    # 0.5秒ごとに撮影される と勝手に理解している
    time.sleep(0.5)

 

pyautoguiがpyenvやtensorflowやその他よくわからない色々なところにインストール済のため正常に起動しない、という散らかり環境ハマりが発生し、だいたい全部アンインストールして再度インストールしなおすを行いスクショが撮れるようになりました。

アンインストール→再インストールについてはこちらの記事を参考にしています

 

というわけで、なんとかデータを集め直す準備ができました。

 

実際に動画を流しながら起動させると…

 

 

ちゃんと撮れていますね。

背景がずっと同じで、表情もそこまで変わるわけではないので、これらが学習データとして適切かどうかは今の自分だと判断しづらい部分があるのですが、とりあえず1000〜2000枚の学習用画像は確保できそうです。

 

 

 

◆次のステップ

 

今回のスクショ撮り奴のコードですが、jpg形式で撮りたかったところが何故かうまくいかずpng形式で撮影するという形になっているので、学習に際してpng→jpg変換が必要なのかを調べて、もし変換が必要ならまた調べながら変換ソフトを作ってみて…という形で動かしていこうと思います。

 

 

 

前後の記事:

その①:【ご挨拶】Youtube動画を自動でスクショし学習素材を取得 ←★イマココ!

その②:【前処理】大量の不要素材を人力で間引く

その③:【顔検出】フォルダ内の画像ファイル全てに顔検出を実行

その④:【お休み】次の手を考えながら焼肉を堪能しました

その⑤:【ハマり】TensorFlowのインストールに8時間を費やす

 

 

 

Comment
仮想通貨の赤ちゃん
仮想通貨の赤ちゃん
2019-09-10 23:25:49ID:146502

>>目指せ北海道::さん
転移学習も検討していますが、いまいち全体像がつかめていないので、現行のやり方で手詰まりを感じたらチャレンジしてみようと思っています!

目指せ北海道
目指せ北海道
2019-09-10 08:03:19ID:146332

僕も、深層学習では苦労しています。昨日も、サンプルが少なくても済むという転移学習で、過学習になってしまいガックリしたところです。背景から顔だけ抽出するなら、OpenCVですかねー。

二児の父
二児の父
2019-09-10 07:46:25ID:146329

>>仮想通貨の赤ちゃん::さん
画像解析の場合、標本をいかにクリーニングするかも
精度に大きく影響します。
ガンバ!!^_^

仮想通貨の赤ちゃん
仮想通貨の赤ちゃん
2019-09-10 07:43:17ID:146328

>>二児の父::さん
はじめまして!
前処理という工程があまり頭になかったので、考慮しながら先へ進めます!ありがとうございます!
(背景が白くなく、光量が安定しない素材も多数あります)

仮想通貨の赤ちゃん
仮想通貨の赤ちゃん
2019-09-10 07:41:34ID:146326

>>matsuno@漆黒の::さん
はじめまして!素人の手習いですので、ご参考となるなら幸いです!

二児の父
二児の父
2019-09-10 00:50:41ID:146289

背景白いし、光の量も一定に近い気がする。
これなら、前処理殆どせず認識かけてもいけそうな気がしますが…

matsuno
matsuno
2019-09-10 00:06:19ID:146268

初めまして!私も記事を見て勉強させていただきます!

この記事を書いた人
2017年12月に仮想通貨取引をスタートした、ちいさなちいさな赤ちゃん。 小さなお手手で、投げ銭をたくさん集めているよ。かわいいね。