RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Python

[Python:Predict Gollira]2枚の画像でどちらがゴリラっぽいかを人間が予想する。

投稿日:

「あーこの人ゴリラっぽい。」と思うことはありませんか?
ゴリラっぽさってどこから来るんだろうかと悩んでいました。

前回、[Python] ディープラーニングのモデル「VGG16」を使って画像認識をし、判断した理由の可視化をする。を行っていた際もその疑問がつきませんでした。

1.

2.

どちらの画像の方がゴリラっぽいかを知りたくありませんか?

今回実装したのは、「ゴリラっぽさ(ゴリラであると予想される確率)をディープラーニングの画像認識システムで認識し、2枚の画像の予測値はどちらが高いのか?を人間が予想する。10組用意して正答率を出す。」です。
名前は「Predict Gollira」
Golliraのスペルミスを何度したかわからない。(これも合っているかどうかも!)

この技術の応用としては、
「人間の写真を撮って、どっちの方が犬・猫っぽいかを比べるアプリ」
「そもそもあなたは犬?猫?どっち系の人間?」

みたいな女子高校生向け・・・おっさんがやってたら怖いアプリになります。

使い方

  1. 下記のURLからzipファイルをダウンロードして解凍します。
  2. Predict Gollira

  3. app.pyの46行目にあるMySQLの接続設定をしてください。
  4.  データベースは「predict_gollira」になっていますが、別に他の名前でもOKです。

  5. MySQLに下記コードのテーブルを追加してください。
  6. CREATE TABLE image_pred (
    id INT NOT NULL,
    pred double,
    PRIMARY KEY(id)
    ) ENGINE = INNODB character set utf8mb4;
    
    CREATE TABLE list (
    no INT NOT NULL AUTO_INCREMENT,
    comp_array VARCHAR(2000),
    PRIMARY KEY(no)
    ) ENGINE = INNODB character set utf8mb4;
    
  7. ターミナルで下記コマンドを実施してください。遊べます。
  8. python app.py
    

※必要に応じてモジュールをインストールしてください。
※Pythonの環境構築はAnacondaでやれば5分もかからない。おすすめだ。

構成

ディープラーニングモデル:VGG16
Python:Keras+Flask+MySQL
HTML5とCSS、JavaScriptもちょっぴり使ってたりする。
※FlaskとMySQLdbはほぼ初見なので、「動けばいい」との考えで作っています。
※MySQLなしでも良い。ただ、画像の予測に時間がかかるので、予測値をMySQLに入れて1画像1回切りの計算にとどめている。あらかじめ全ての予測値を計算しておくのも良いかと思ったが、今回はコンペごとに分散させた。

遊び方

知人と同じ番号のコンペで正答率を競ったり、
毎日の日課として、自分のゴリラの判別精度を高めたり、
画像を追加(static/imgフォルダ)して、写真(例:人間)のゴリラっぽさを試したり・・・。

初見で頑張ったら6割でした。ランダムで選ぶよりマシだ。

んー0.4%低いですねー。(わかるのか・・・?)


影や日の光が強いと見えにくくなるから、これだ!と判定されにくくなる…。
これは機械学習の大きな問題~。って言っても人間もだけど。


これ右チンパンジーの親子だね。かわいいね。

まとめ

疑問だったゴリラっぽさを学ぶ環境ができました。
ただ、モデルによってゴリラっぽさの基準が違うようです。(今回はVGG16だが、他にもたくさんある。)
もしかしたら複数のモデルの平均を取ったほうが良いかもしれない。それとも多数決か。
なんにせよまだまだ発展は可能だ。発展させる人がいるかどうかは別だが。

ゴリラ画像を集めるときにはpixabayがすべての役割を担った。感謝します。

-Web制作, Python

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[Meisyo]今後やっていきたいこと

Meisyoで今年中にやっておきたいこと これさえやればDAU(日ごとのアクティブユーザ)が100人を超えるのでは?と思います。 まずは目的・内容を書いて、理由と考察を書きます。 目的 ユーザがゲーム …

[SQL]URLから正規表現でホストの抽出

他のサイトの説明が釈然としなかったので投稿。 以下のref0~2番のホストを抽出したいとする。 ref[0] = "http://www.other.com/path1/index …

(VPSでつくる) Python仮想環境venvの導入

連載第五回目です。 前回の4. Pythonのバージョンを3.Xにする記事で、Pythonのバージョン管理をディレクトリごとに行えるようになりました。 ただし、アプリごとにモジュールのバージョンは変え …

[Meisyo]ver0.03へのアップデート

名将と呼ばれた者達、アップデートを行います。 大幅な変更をしたため、バージョンを0.02から0.03へ変更します。 変更点 1・各種表示の不具合の修正、改善 2・投手起用方法の不具合の修正 3・試合の …

Jupyter Notebook「7ブロック」でかんたん複数動画のフレームの切り出し(Movie To Image)

はじめに 機械学習のために、動画から画像のデータセットを取り出す必要がありました。 動画 → 画像の変換には多くのフリーソフトはありますが、 今回使おうとした「MOV」ファイルが読み込めるまともなフリ …