Python
Instagram
Azure
Bluemix
PUX
OriginalNextremerDay 19

年齢・性別判定APIを比較しました(その2)

NextremerのAdventカレンダー19日目の記事です。

結論を言うと、年齢判定Face APIが最も良かったです。
※あくまで今回取得した画像に対してです。ご承知おきください。

お詫び

Nextremer Advent Calendar 2016で書いた年齢・性別判定APIを比較しました(その1)の続きです。

1年越しの記事であり、現時点で各APIがバージョンアップされ使用可能なパラメータや精度が異なる恐れがあります。Instagramの画像やご本人の年齢も異なっており、本記事の内容は真に受けないでください。また、PUX Developers Site2017/12/28をもってサービス終了とのことです。残念です。

前回のおさらい

前回はInstagramの816枚の画像を用いて、下記4つのAPIによる性別判定を行い精度を比較しました。

Instagram画像は下記サイトを参考に性別と生年月日が分かる有名人の画像を用いました。

結果、性別判定はFace APIが使い易いとお伝えしました。

今回は、これらAPIについて年齢判定の精度を比較した記事となります。

スクリプトの準備

各APIを使うPythonスクリプトを準備しました。
詳しくは前回をご覧ください。

データの準備

Instagramから検証用の画像を準備しました。
性別等の内訳は前回をご覧ください。

データ内訳

実年齢

今回は21歳以上の画像を集めたため、20歳以下は存在しません。

■年齢分布
スクリーンショット 2017-12-15 18.30.55.png

スクリーンショット 2017-12-15 18.29.18.png

スクリーンショット 2017-12-12 18.54.49.png

スクリーンショット 2017-12-15 17.56.09.png

検証方法

検証した年齢判定APIは、実数か区間を返す2種類のAPIに分かれます。

1)実数の推定

  • 被写体が何歳なのか、値を1つ返すAPIです。

    • FaceAPI:小数第1位まで
      • 内訳:19.3、25.2、40.4、45.5、、、、
    • PUX顔検出(評価版):整数(5つ刻み)
      • 内訳:8、13、18、23、、、、
  • 推定値と真値の差から精度を検証しました。

2)区間の推定

  • 被写体が何歳なのか、属する区間(最小値と最大値)を1つ返すAPIです。

    • Visual Recognition:7区間から1つ
      • 内訳:〜17、18〜24、25〜34、35〜44、45〜54、55〜64、65〜
    • フリーの年齢・性別モデル:8区間から1つ
      • 内訳:0〜2、4〜6、8〜12、15〜20、25〜32、38〜43、48〜53、60〜100
  • 推定区間(最小値と最大値)と真値の差から精度を検証しました。

実験結果(年齢判定)

1)実数の推定

推定結果

スクリーンショット 2017-12-18 16.41.34.png

実数推定.png

実年齢との差分

スクリーンショット 2017-12-18 16.25.59.png

スクリーンショット 2017-12-18 16.43.21.png

  • FaceAPI: 推定年齢±5歳に実年齢が存在する割合は約35%。全体的に実年齢より低く推定された。
  • PUX: 推定年齢±5歳に実年齢が存在する割合は約23%。全体的に実年齢より低く推定され、実年齢との差分が大きい傾向がある。

2)区間の推定

推定結果(Visual Recognition)

スクリーンショット 2017-12-18 20.22.34.png
V0:〜17、V18:18-24、V25:25-34、V35:35-44、V45:45-54、V55:55-64、V65:65〜

スクリーンショット 2017-12-18 20.20.06.png

推定結果(フリーモデル)

スクリーンショット 2017-12-18 20.21.32.png
F0:0-2、F4:4-6、F8:8-12、F15:15-20、F25:25-32、F38:38-43、F48:48-53、F60:60-100
(推定区間が網羅的でないことに注意してください)

スクリーンショット 2017-12-18 20.17.08.png

推定結果(区間の適合率)

スクリーンショット 2017-12-18 20.55.15.png

実年齢との差分

スクリーンショット 2017-12-18 20.27.36.png
(推定区間の最大値、もしくは最小値からの実年齢との差分を出しています)

スクリーンショット 2017-12-18 20.27.45.png

  • Visual Recognition: 推定区間±5歳に実年齢が存在する割合は約32%。全体的に実年齢より低く推定された。
  • フリーモデル: 推定区間±5歳に実年齢が存在する割合は約28%。全体的に実年齢より低く推定されたが、実年齢との差分が大きい傾向がある。

考察

  • Face API:推定年齢±5歳に実年齢が存在する割合が35%と最も高く、差分のグラフも−5歳ほどを中心に狭い正規分布を描いている。
  • Visual Recognition:推定区間±5歳に実年齢が含まれる割合が32%と高く、差分のグラフも-5歳ほどを中心に正規分布を描いている。
  • PUXの顔検出(評価版):推定年齢±5歳に実年齢が存在する割合が23%で、差分のグラフは0歳ほどを中心にやや広い分布を描いている。
  • その他のフリーの年齢・性別モデル:推定区間±5歳に実年齢が含まれる割合が28%で、差分のグラフは0歳ほどを中心にやや広い正規分布を描いている。

まとめ

  • Face APIが最も実年齢と推定年齢の差が少ない

どのAPIも実年齢に比べて推定値が低い結果となりました。これは日本の芸能人のInstagram画像を使ったためだと思われ、普通の写真で試したら結果が異なるかもしれません。

また、フリーのモデルで黒○徹子さんが推定年齢0〜2歳になり驚きました。5枚中3枚。お若い。