機械学習でオバマとスモーリングを判別したい-前編-

機械学習
Nishipy
ある界隈で似ていると評判のオバマとスモーリングを、機械学習を使って判別します。前編では、訓練データを用意していきます。

1. はじめに

1.1. 背景

遡ること2014年、ブラジルでサッカーW杯が開催されていました。サッカーの母国イングランド代表チームも、もちろん出場しています。強豪マンチェスターユナイテッドでいじられキャラとして人気のDFクリス・スモーリング選手も、イングランド代表のメンバーの一人でした。
W杯特需を狙ったお土産製造会社は、当然のようにこの人気者のグッズを製作しました。

W杯おみやげ製造会社、スモーリングとオバマ大統領を間違えマグ2000個にプリント | サッカーキング
 クリス・スモーリングとバラク・オバマの肩書はかなり違う。前者はマンチェスター・Uに所属するイングランド代表DF、後者はアメリカ大統領である。  ワールドカップ···

Google画像検索でスモーリング選手の検索し、それをプリントしたマグカップを商品化したようです。しかし、なぜか当時のアメリカ大統領であるバラク・オバマの写真を印刷してしまいました。この凡ミスは、当時日本のサッカーメディアでも多く取り上げられており、私自身爆笑していたのを覚えています。

1.2. 今回やりたいこと

このような悲劇は、二度と繰り返されてはなりません。
私は強い使命感を覚え、スモーリング/オバマ判別器を実装することに決めたのでした。
イメージはこちら。今回は、学習の準備として、画像収集と顔の検出を行います。

1.3. 補足

本項で言うスモーリングとオバマについて、補足しておきます。

スモーリング

クリストファー・ロイド・”クリス”・スモーリング(Christopher Lloyd “Chris” Smalling, 1989年11月22日 – )は、イングランド出身のサッカー選手。ポジションはセンターバックでありマンチェスター・ユナイテッドに所属し、イングランド代表にも選出されている。…[Wikipwdia]

オバマ

バラク・フセイン・オバマ2世(Barack Hussein Obama 、1961年8月4日 – )は、アメリカ合衆国の政治家である。民主党所属。上院議員(1期)、イリノイ州上院議員(3期)、第44代アメリカ合衆国大統領を歴任した。アフリカ系[注 1]としてアメリカ合衆国史上3人目となる民選上院議員(イリノイ州選出、2005年 – 2008年[注 2])。また、アフリカ系、20世紀後半生まれ、ハワイ州出身者としてアメリカ合衆国史上初となる大統領である。…[Wikipedia]

2. 画像収集

まずは、訓練データとしてスモーリングとオバマの画像を収集します。
Google画像検索で表示された画像を、それぞれ500枚ずつ収集することにします。

2.1. スクレイピング

Qiitaにあったこちらの記事を見れば、すぐに出来ました。ありがとうございます。
[Qiita]API を叩かずに Google から画像収集をする→
以下のコードは、引用です。


2.2. 収集した画像

以下のように、保存されます。何らかの理由でダウンロード出来なかったものはスキップされます。
本人の写真が多いですが、別人の写真もあります。

スモーリング

オバマ

2.3. 別人の画像を取り除く

別人の画像は、仕方ないので手作業で取り除きました。
かなり枚数が減ってしまいました。
ダウンロード出来なかった画像と、ダウンロード出来たが別人だった画像を取り除いた結果、それぞれの画像数は以下のようになりました。

  • オバマ:394枚
  • スモーリング:390枚


3. 顔検出

収集した画像から、顔を検出し、その部分だけをトリミングして訓練データとします。
OpenCVを使いました。こちらの記事が参考になります。

大量の画像から顔の部分のみトリミングして保存する方法
OpenCVを使った顔抽出 こんにちは。 AI coordinatorの清水秀樹です。 前回の記事で、OpenCVを使った顔認識を紹介しました。 今回は大量の画像から顔の部分だけをトリミングして保存する方法を紹介します。 機械学習用画像の準備としても使えると思いますので、ぜひ参考にしてみてください。 テスト環境 mac...

3.1. トリミングして、保存

先ほど収集した画像から、人の顔だと認識されたもの全てをトリミングして保存していきます。

上記のような関数を定義して、トリミングしました。
実行すると、トリミング後の画像が保存されます。

3.2. トリミング後の画像

トリミングした後の画像は、以下のようになります。
別人の顔や、顔以外のものを抜き取っているため、取捨選択が必要そうです。

スモーリング

オバマ

3.3. 不要な画像を取り除く

別人の画像や、顔以外のものは仕方ないので手作業で取り除きました。
ここでも、かなり枚数が減ってしまいました。残った画像数は、以下の通りです。

  • オバマ:272枚
  • スモーリング:231枚

4. 最後に

4.1. 今回できたこと

  • スクレイピングで画像を収集しました
  • 収集した画像から顔を検出し、訓練データを作成しました
  • 一部根性で解決しました

4.2. これからやりたいこと

  • CNNを実装して、オバマ/スモーリング判別器を完成させる

後編に続く。

機械学習でオバマとスモーリングを判別したい-後編-
Nishipyある界隈で似ていると評判のオバマとスモーリングを、機械学習を使って判別します。後編では、前編で用意した画像を用いて、CNNを学習していきます。1. はじめに1.1. 背景詳しくは、前編の記事をご覧ください...


以上

コメント