Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

機械学習を使ってニヤニヤしよう

994 views

Published on

OSC2017 広島で発表した内容です。

Published in: Software
  • Be the first to comment

  • Be the first to like this

機械学習を使ってニヤニヤしよう

  1. 1. 機械学習を使ってニヤニヤしよう! ~Twitterから二次元画像を集めてみる~ 1
  2. 2. 自己紹介 profile[‘Nickname’] = “赤西 真論” profile[‘Realname’] = “” profile[‘TwitterID’] = “marron_general” profile[‘GithubID’] = “marron-akanishi” profile[‘Language’] = [“C”, “C#”, “Python”] 2
  3. 3. 大切なのでもう1度 3 赤西 真論(あかにし まろん) @marron_general
  4. 4. URL 全部Twitterの固定ツイートに載せてます!  Ani-Face Detector for Twitter https://tpts.marron.work/  GitHub https://github.com/marron-akanishi/TPTS_web 4
  5. 5. 5 以上!!
  6. 6. 6 嘘です
  7. 7. 7 ちゃんと続きあります
  8. 8. 今回の内容 8 これ これ と
  9. 9. 1つ目の「これ」 9 これ
  10. 10. 「これ」とはなにか  Twitterから画像を収集、自動保存 • こっちは必要だけど、あんまり重要じゃない()  二次元画像の顔を検出 • こっちが一応メインテーマ • 顔検出→ただの物体検知  TPTS(Timeline Picture Tagging System) • こんな名前なのに、タグ付け出来ていない 10
  11. 11. 開発を始めた経緯  TLに流れてきた画像を回収するプログラムがあった • Java製  気になったので、それのPython版を書く • このとき、初めてまともなスクリプトを書いたような… • Tweepyを使用  でも、ただ単に回収するのは面白くない 11
  12. 12. 12 二次元画像だけ集めるようにしよう!
  13. 13. 初期バージョン  とりあえず、ググって手っ取り早く実装 • OpenCVとlbpcascade_animefaceを使用 • 超簡単に書けた • 2016年12月7日のこと 13
  14. 14. 問題点  若干精度が低かった 14
  15. 15. 改善へ  検出時の設定(パラメーター)を調整 • scaleFactor, minNeighbors, minSize  なんなら、自分でもモデル作ってみるかー 15
  16. 16. さて、どうするか  とりあえず、顔検出ではなく目の検出でいこう! • は? • 顔検出はlbpcascade_animefaceに任せる • 顔には目があるから、それで顔と識別出来るのでは?  どのライブラリを使用するか • lbpcascade_animefaceはOpenCV使ってるからOpenCV? 16
  17. 17. 学習開始  Dlibという別のライブラリを使用することに決定 • OpenCVは学習方法がよく分からなかった(知識不足) • Dlibの方は分かりやすい解説を発見  データに使う画像は回収した画像がある • ただ、ちょっと少ないのでアニメからの画像も使用  ここで問題発生! 17
  18. 18. メモリーが足りない!  学習を開始してみるとメモリーをアホみたいに食う • この時点では原因が分からなかった  しょうがないので、データセットを減らす • でも、精度下がるよなー  メモリーの増設を決定! • 16GB→24GB 18
  19. 19. 原因  一番の原因は範囲指定が悪かった • 正方形じゃない • 選択範囲が小さすぎる  メッセージはちゃんと読もう! • 最小サイズは学習開始時に表示されてた!  これにより、大幅に使用量低下 19
  20. 20. 学習完了  CPUぶん回して2時間ぐらい • 深層学習じゃないのでCPUパワーがいる • ちなみにサイズ指定をきちんと行うと30分前後で終わる  悪くないのでは? 20
  21. 21. ならば  顔も学習させてしまえ! 21
  22. 22. ついでに 22  DBに詳細を記録するように • 画像だけだとツイート本体が分からない • SQLite3使用  DBには以下の情報を記録 • 画像ファイル名 • 取得日時 • ツイートURL • ユーザーID • いいね・RT数 • ハッシュタグ • 顔検出位置
  23. 23. ビューアーも  DBと画像を同時に閲覧するツールがいる • とりあえずC#で 23
  24. 24. ほぼ完成  ここまでが大体今年の5月までの内容  ビューアーがC#製なのが気に食わない • 自分が使う分には問題ない • でも、すべてPythonで完結させたい 24
  25. 25. ならば  ビューアーもPythonで書いてしまえ • Flaskを利用してWebアプリケーション化 25
  26. 26. そして、サービス化  これ、改造したらWebで公開出来るんじゃね? 26
  27. 27. 2つ目の「これ」 27 これ
  28. 28. Ani-Face Detector for Twitter  開発名はTPTS_web  1日で改造して、ベースを作ってしまうヤバさ 28
  29. 29. 軽く使い方を  まずTwitterアカウントでログイン • 画像回収時にAPIを使用 • 読み取り専用だから安心 29 ここ
  30. 30. 軽く使い方を  メニューで回収方法を指定 • 画像を見たいだけなら、一番下のメニュー • PC版は通知許可してね 30
  31. 31. 軽く使い方を  指定後、少し待つ • 一番下はすぐ表示、他は枚数によって時間が異なる 31
  32. 32. 軽く使い方を  画像の一覧が表示される • PCなら回収終了時に通知が飛んでくるはず • サムネイルはスクロールと連動した動的読み込み • ハッシュタグを同時に表示 • 処理結果も少し表示 32
  33. 33. 軽く使い方を  画像クリックで詳細表示 • ツイート本体も埋め込みで対応 • Google画像検索や二次元画像詳細検索に画像を投げて検索可能 33
  34. 34. 問題点  精度がまだまだ低い • 正しい画像の大体6~7割だけ回収 • 回収した画像の1%ぐらいが不適切 • タイヤ • コスプレ  顔検出ではなく、画像全体で判定したい • 写真とイラスト  サーバー側の回線に依存 • どうにかしてクライアント側で判定したい 34
  35. 35. おまけ  Web版はサーバーに画像を保存しない • 容量・著作権等  家で動作させてる回収専用スクリプトの状態 • 2016/12/12からずっと走らせてる • ミスで2000枚消したり、11/12~11/17が回収できていなかったり • それでも35万枚ある  これの活用も考えないと • とりあえずタグ付け… 35
  36. 36. 36 ご清聴ありがとうございました
  37. 37. 37 以降、付録 (内容の正確さは保証しません)
  38. 38. LBP特徴量  輝度の分布(ヒストグラム)で特徴を捉える  計算方法 • 画像を分割し、その分割した中の1部分(3x3画素)を取り出す • 周りの画素の輝度を中心の画素の輝度と比較し、明るければ1、暗ければ0 としてバイナリデータにする • それを分割した範囲全体で行ってヒストグラムにする • 分割したデータを全て合体させて、ヒストグラムの集まりにする • 出来た集まりが特徴量となる  参考文献 • https://www.pro-s.co.jp/engineerblog/opencv/post_6256.html • http://compsci.world.coocan.jp/OUJ/2012PR/pr_15_a.pdf 38
  39. 39. カスケード検出器  LBP特徴量を用いて、オブジェクトを見つけ出す  だが、オブジェクト以外のものが見つかる可能性が高い  そのため、OpenCVでは識別器を複数連結(カスケード)させる  この時、順番に識別器にかけていくのだが、上流が緩く下流が厳しく なるように調節される  これにより高速で正確に判別出来る  参考文献 • http://gihyo.jp/dev/feature/01/opencv/0003?page=2 • http://opencv.jp/opencv-2.2/c/objdetect_cascade_classification.html 39
  40. 40. HOG特徴量  局所領域の輝度の勾配方向をヒストグラムで表したもの  計算方法 • 画像の各ピクセルから勾配強度と勾配方向を求める • セル領域ごとにヒストグラムを求める • ブロックごとに正規化し、特徴量を抽出する  参考文献 • https://qiita.com/mikaji/items/3e3f85e93d894b4645f7 • http://96n.hatenablog.com/entry/2016/01/23/100311 40
  41. 41. SVM  入力を正解か不正解かに分類する(当たり前  データとラベルの関係を学習、正解と不正解の境界を計算する  入力されたデータと境界線を照らし合わせて判定  分かりやすいし、強力  参考文献 • http://96n.hatenablog.com/entry/2016/01/23/100311 • http://s0sem0y.hatenablog.com/entry/2016/08/08/061746 41

×