SkyFoxの画像変換機能「顔写真の特徴推定」
こんにちは、セカンドサイト株式会社の益永です。
今回はSkyFoxの画像変換機能の一つである「顔写真の特徴推定」をご紹介します。
こちらの機能はディープラーニング技術を活用し、顔写真から、年齢や性別、ひげの有無や推定される感情など、15個の項目を推定し、数値化するものです。
このような非構造化データを活用することで、今まで見えていなかった何かが見えるかもしれませんよ!
顔画像変換の手順
まずは例としてこちらの特徴が出やすそうな2枚の写真を数値化してみましょう。
画像ファイルの準備
画像のファイル形式はjpgとpngに対応しています。
変換処理したい写真をひとつのzipファイルに格納します。
SkyFoxでの操作手順
ツール→データ変換→ 変換方法の選択→顔写真の特徴推定と進みます。
次に変換するzipファイルを指定し、「データを変換」をクリックします。
※サーバー上にデータを保存しない/したくない場合は、変換データの削除のところで”削除する”を選択するとデータ変換後に元データがサーバー上から削除されます。
変換処理が終わると変換結果が表示されます。
「結果をダウンロード」をクリックするとcsvファイルがダウンロードされます。
画像の変換結果
idにはファイル名が格納され、id以外に15個の項目が推定されていることがわかると思います。
higeより下の項目については数値が高いと赤く、低いと青く色づけしています。
写真と見比べてみると、なんとなく正しく表現しているように見えませんか?
それではこれらの15個の項目についてもう少し細かく説明していきます。
特徴量化した15項目
image_brightness(画像の明るさ)
明るいほど高く、暗いほど低くなります。
こちらの写真はimage_brightnessが低い例です。(image_brightness=21.3493)
こちらの写真はimage_brightnessが高い例です。(image_brightness=97.0563)
image_sharpness(画像のシャープネス)
輪郭がクッキリしているほど高く、ボケているほど低くなります。
こちらの写真はimage_sharpnessが低い例です。(image_sharpness=46.0298)
こちらの写真はimage_sharpnessが高い例です。(image_sharpness=95.5162)
age_range(年齢)
推定年齢がレンジでアウトプットされます。
こちらの写真はage_rangeの例です。(左=1-5、中=15-25、右=60-90)
写真のモデルさんの実年齢はわかりませんが、なんとなく当たってそうですよね。
実年齢がわかっているのであれば、レンジの中かもしくは下か上かといった変数を生成しても面白いかもしれませんね。
gender(性別)
Male(男性)かFemale(女性)かの2値でアウトプットされます。
何枚かいろんな写真で試しましたが人が見て男女どちらか迷わないような写真の場合の正解率は100%です。
某女性のみの劇団の男役の方もちゃんと女性と判断されますし、実際は男なのに女性にしか見えないような芸能人の方もちゃんと?女性と判断されます。
実際の性別と合致しているか否かといった変数を生成すると役に立つ場面もあるかもしれませんね。
hige(ヒゲの有無)
0から100の値で表現され、ヒゲがあると判断されるほど高くなります。
glasses(眼鏡の有無)
0から100の値で表現され、眼鏡をかけていると判断されるほど高くなります。
こちらの写真は上記2つが高い例です。(hige=97.7576、glasses=99.7305)
mouth_open(口を開けているか否か)
0から100の値で表現され、口が開いているほど高くなります。
smile(笑顔の度合い)
0から100の値で表現され、笑顔であるほど高くなります。
happy(幸福度合い)
0から100の値で表現され、幸せそうであるほど高くなります。
こちらの写真は上記の3つが高い例です。(month_open=99.9997、smile=99.9999、happy=99.7107)
sad(悲しさ度合い)
0から100の値で表現され、悲しい表情であるほど高くなります。
こちらの写真はsadが高い例です。(sad=85.6197)
angry(怒り度合い)
0から100の値で表現され、悲しい表情であるほど高くなります。
こちらの写真はangryが高い例です。(angry=50.1152)
confused(困惑度合い)
0から100の値で表現され、悲しい表情であるほど高くなります。
こちらの写真はconfusedが高い例です。(confused=84.179)
disgusted(うんざり度合い)
0から100の値で表現され、悲しい表情であるほど高くなります。
こちらの写真はsadが高い例です。(disgusted=65.9767)
surprised(驚き度合い)
0から100の値で表現され、驚いている表情であるほど高くなります。
こちらの写真はsurprisedが高い例です。(surprised=63.5543)
calm(落ち着き度合い)
0から100の値で表現され、落ち着いている表情であるほど高くなります。
こちらの写真はcalmが高い例です。(calm=96.7495)
特徴量を推定しにくい/できない事例
以下のような場合、上手く顔を検出できなかったり、検出できたとしても特徴量を推定できなかったりしますのでご注意ください。
横向き
横向きの画像であっても数値化はしてくれます。ただ所々精度が落ちるケースがあるようです。例えばこちらの写真では明らかに眼鏡をかけていますが、(glasses=20.5619)と低い値となっています。なのでできるだけ正面からの写真である方が望ましいです。
二人以上写っている
この場合一人しか検出できません。向かって左側に写っている人物を優先する傾向がありますのでご注意ください。
もはや誰も写ってない
人間が写っていない場合は、「Can't detect face」としてエラーが返されます。
まとめ
いかがだったでしょうか?
SkyFoxがあれば顔写真をサクッと数値化できてしまいますので、試してみてはいかがでしょうか?きっと何か面白い発見ができると思いますよ。
※トライアル版のSkyFoxはこちらのリンク( https://trial.skyfox.ai/signup )からご利用頂けます。どなた様もメールアドレスとパスワードを入力頂くだけで無期限・無料でご利用頂けますので是非試してみてください。宜しくお願い致します。
裏技① 任意の比率で学習データと評価データに分割する方法
SkyFoxのデータ分割は学習75%、評価25%で固定と書きましたが、これを任意の比率にする裏技があるので紹介させて頂きます。
その方法がこちら
アップロードするファイルに”__train__”という名前のカラムを用意しておき、学習として使いたい行には1、評価として使いたいものには0を入れておきます。
このカラムの位置の指定はありません。
こうすることでSkyFoxは自動での振り分けは行わず、このカラムの情報に従って振り分けてくれます。
事前にこのカラムを作っておかないといけないので手間は増えますが、どうしてもこの比率で行いたいといった場合や、学習データと評価データの指定がある場合には役立つ機能です。
良かったら使ってみてください!
FAQ【2021/12/08更新版】
- モデル作成について
- モデル作成やデータ変換を実行する準備として、すべきことはありますか?
- 教師なし学習によるモデル作成はどの様に活用すればよろしいでしょうか?
- 全体で10,000件、正解データがそのうち100件程度含まれているデータで、分類モデルを作ろうとしていますが、正解データが不足しているのではと懸念しています。
- データの数が少なく、モデル作成する度に精度が大きく変化し安定していないようですが、どの様な対応をすればよいでしょうか?
- 乱数シードの値はどういう時に変更すればよいでしょうか?
- アップロード用データを作成したのですが、数値データがカテゴリ情報として認識されてしまいます。
- 時系列分析の自己回帰アルゴリズムにはどの様なデータをアップロードすればよいでしょうか?
- モデル作成の前処理としてどんな処理を行っているのでしょうか?
- 2値分類予測時の目的変数がうまく認識されません
- 学習データのサマリについて
- モデルの性能評価・更新について
- 基本設定・課金情報について
- エラーへの対応について
- その他
モデル作成について
モデル作成やデータ変換を実行する準備として、すべきことはありますか?
アップロードするデータのクレンジング(空白データの処理や、データの型の認識から、分析精度を上げるための変換処理など)は、SkyFox側で最大限行っておりますので、特にご準備は不要です。今後も対応範囲を順次拡大してまいりますが、もし想定外のデータがアップロードされた場合には、エラーメッセージが表示されます。その際は、個別に対応いたしますので、担当者までお問い合わせください。
※個別に発生したエラーについては、本FAQに記載してまいります。
教師なし学習によるモデル作成はどの様に活用すればよろしいでしょうか?
教師なし学習は、「データ変換」で利用可能なアルゴリズムを用いたモデル作成となります。「データ変換」ではアップロードしたデータに対して、都度アルゴリズムを適用して結果を返しますが、教師なし学習では、アップロードしたデータからモデルを作成するため、「データ変換」と同等の結果を求めるためには、一度作成したモデルを元の学習データへ適用させる必要があります。
一度モデルを作成した後は、別のデータに対して、モデル適用を繰り返していくことで、最初の学習データの傾向を元にした、データ変換アルゴリズムの適用を行えるとご理解ください。
例1:クラスタリング
学習データを4つのクラスタに分解するモデルを作成すると、新規の適用データが、その分解した4つのクラスタのいずれに属するかを、モデル適用によって得ることができます。
例2:形態素解析
学習データに含まれる単語の出現数を取得するモデルを作成すると、新規の適用データに、元の学習データに含まれていた単語がいくつ登場するかを、モデル適用によって得ることができます。つまり、新規の適用データに新しく出現した単語は無視します。
全体で10,000件、正解データがそのうち100件程度含まれているデータで、分類モデルを作ろうとしていますが、正解データが不足しているのではと懸念しています。
データの内容や分類したい対象によるため、一概には言えませんが、全体のデータ数が1万件以上、正解データが100件以上が最小限のデータ件数の基準と見ていただいて問題ないと思います。ただ、正解データが少ないことや、データ項目の数、選択するアルゴリズムが影響して、過学習と呼ばれる現象が起こる可能性があります。過学習が起きると、一見精度の高いモデルでも実際に使用すると当てはまりが悪くなります。
また、データ件数が少ない場合、モデルの精度が安定しないことが多く、対応が必要な場合があります。
データの数が少なく、モデル作成する度に精度が大きく変化し安定していないようですが、どの様な対応をすればよいでしょうか?
SkyFoxでは、アップロードした全データのうち、75%を「モデル作成」用のデータとし、残りの25%を「モデルの性能を検証する」データとし、この検証用データによって、AUCなどのモデルの性能評価指標を計算します。データは特に指定のない限り、ランダムに選択されるため、どのデータが作成用として選ばれ、どのデータで評価するかによって、モデルの精度が変わります。
一般に、このような場合、安定的な性能を出すモデルを作成するのに十分なデータがない可能性が高く、データを増やすことが優先されます。しかし、データが増やせない場合などにおいては、交差検定(クロスバリデーション)という手法を用いて評価を行うことがあります。
<4モデルで交差検定する場合>
- まず、手元のデータを4分割します(正解データが少ない場合には、分割後のデータの正解が0件とならないように注意)
- 4分割したうちの3つを1まとまりにして、SkyFoxにアップロードし、モデルを作成します
- 残りの1つ使ってモデルに適用し、結果を取得します
- 1~3をデータを変えながら4回繰り返します
- 4つの適用結果を用いてモデルの性能を確認します
これにより、選択データによる不安定性を解消することができます。また、実際に利用する場合は、4つのモデルすべてに適用し、すべての平均値や中央値などを取る手法が知られており、一般的に単一のモデルより良い性能となります。
乱数シードの値はどういう時に変更すればよいでしょうか?
乱数シードの値は、モデル作成時、使用する学習データの選定などランダムに動作する際に作用するパラメータです。通常は、変更する必要はありませんが、上記のクロスバリデーションを簡易に行いたい場合などは、乱数シードの値を1~4などと変えながら4つのモデルを作成することで、それぞれモデル作成用のデータをランダムな4パターンで選定することができます。
アップロード用データを作成したのですが、数値データがカテゴリ情報として認識されてしまいます。
エクセルなどのソフトウェアを使用して、CSVファイルを作成する場合、%や¥などの文字列が入っていると、作成したCSVファイル上も、そのまま%や¥などの文字が残ってしまう場合があります。その場合、SkyFoxでは、対象の項目を文字列として認識する仕様となっているため、数値データとして扱われないという状況が発生します。モデル作成結果や、データサマリをご確認いただき、想定しているデータのタイプと異なる認識をしている際は、テキストエディタなどで、CSVファイルを開いていただき、どの様な形でデータが保存されているかをご確認ください。
時系列分析の自己回帰アルゴリズムにはどの様なデータをアップロードすればよいでしょうか?
自己回帰アルゴリズムでは、年月日を入力するカラムと、売上などの数値データを入力するカラムの2つを用意したCSVデータを準備してください。カラム名に制限はございません。サンプルデータは以下のリンクから取得できますので、データ準備の参考にしてください。
※サンプルデータに記載している日本語コメントは削除してお使いください
http://public.skyfox.sxi.co.jp/documents/autoregressive_sample_data.csv
モデル作成の前処理としてどんな処理を行っているのでしょうか?
※こちらの記事をご参照ください。
2値分類予測時の目的変数がうまく認識されません
2値分類予測(0/1かの予測)を行う際は、目的変数を0か1としてください。〇/×や、1/2などの値だと、多値分類と認識してモデル作成を実行する仕様となっておりま
す。
学習データのサマリについて
学習データのサマリではどの様な情報を確認できるのでしょうか?
学習データのサマリでは、各項目ごとに存在する値とその値ごとにどれだけ予測対象の発生率(予測対象が購入する/しないなどフラグの場合)、または予測対象の平均値(予測対象が購入金額など数値の場合)などをグラフ化した「データの分布」、各項目ごとのデータ件数や、最大値、平均値、分散などの基礎的な統計値一覧である「データの一覧」、そして各データ項目単独で、予測対象との関係度合いや予測力を確認できる「データの評価」の3つを確認することができます。
どの情報もモデル作成時に使用する項目の取捨選択に活用します。「データの分布」を見て、予測対象の発生率が他と比べて高い項目に注目したり、「データの評価」を見てAUC(予測対象が購入する/しないなどフラグの場合)や相関(予測対象が購入金額など数値の場合)の値が低い項目をあらかじめ確認しておくことで、モデルの性能評価とチューニングに活用します。
項目の評価で確認できる単一変数評価はどの様に活用すればよいでしょうか?
全て各データ項目が、予測対象の項目に対してどれだけの影響力を持っているかを示しています。分類モデルの場合は主にAUCを、回帰モデルの場合は主に相関を見ていただければ良いです。
AUCは0.51~0.9が、相関はその絶対値が0.3~0.9であれば正常な範囲と言えます。下限より小さな値の場合、そのデータ項目はほとんど意味をもちません。また、上限を超えるデータ項目は、非常に影響度が強い項目です。一般に、結果を反映した項目である可能性が高く、除外を考慮すべきデータ項目となります。
基礎統計にある「備考」には何が書かれますか?
データの異常性などを補足的に説明するコメントなどが表示されます。
モデルの性能評価・更新について
モデルの性能評価はどの様におこなっていますか?
データ件数が十分な場合、アップロードしたデータの75%を用いてモデルを作成し、残りの25%のデータを予測した結果に対して評価します。件数が少ない場合は、全データでモデルを作成し、同じく全データで評価します。また、この時に採用されるデータは、「乱数シード値」によって決定されます。
※詳しくはこちらの記事で紹介しております。
特に何も変更していないのに、「学習データの割合」が100%となってしまいました。原因として何が考えられるでしょうか?
選択したアルゴリズム(自動選択で選ばれた場合も同様)によって、学習データの件数が少ないと、自動的に全てのデータを用いてモデルを作成する仕組みになっております。この場合、乱数シードの値をどの様に設定していても、全てのデータをモデル作成用に使用するため、性能検証の値なども一定となります。
また、学習データの割合が100%の時は、性能評価にも同じデータを用いていますので、過学習が起きている可能性がありますので、ご注意ください。
モデルの詳細画面で表示されている、変数の影響度とは、どの様に理解すればよいでしょうか?
各データ項目が予測対象に与える影響度を数値化したものですが、モデル作成の際にデータ型や値の特徴を鑑みた変換処理を行いますので、必ずしもこの値が単純に2倍であれば、影響度が2倍になるという値ではありません。相対的なデータ項目の影響度が高い/低いを表すものとしてご理解ください。
モデル更新の際、性能評価の値などが変わらない様にするためにはどうすればいいですか?
学習用データと性能評価用データは、前述の通り「乱数シード値」によって決定されるため、モデル更新画面にて、乱数シード値を特定の値に固定することで、名称変更などモデルの性能に影響を与えない更新での性能評価の値は一定となります。
※現在デフォルト値として、1が設定されています。
モデル更新時に追加する学習データについて、気を付けておくべきことはありますか?
以下の2点に気を付けて、アップロードするデータをご準備ください。
- 元の学習データと同一のデータ項目にしてください
- idなどのキー項目に、元の学習データと重複するデータを含まない様にしてください(含む場合は追加でアップロードしたファイルのデータで上書きされます
「過学習」が起きている可能性があるのですが、どの様な対応をすればよいでしょうか?
過学習は、データの件数が少ない場合や、データの項目数が多すぎる場合などに発生することが多く、見た目の精度に対して、実際の当てはまりが悪くなってしまいます。
<データ件数が少ない場合>
ランダムフォレストや勾配ブースティング決定木などを用いたモデルであれば、データ件数は1万件以上必要なことが多いです。また、データ件数に対して設定された「木の数」が多すぎたり、「分岐の下限サンプル数」が小さすぎると発生しやすくなりますので、パラメータの調整をしてみてください。
<データ項目数が多い場合>
学習データのサマリなどから不要そうなデータ項目を省くのも良い方法です。ロジスティック回帰やエラスティックネットなど、「正則化」ができるアルゴリズムの場合は、正則化のパラメータを調整し、過度に学習しないように制御することもできます。
基本設定・課金情報について
ユーザは何人まで作れますか。また、ユーザ数を増やすことによる影響はなにかありますか?
管理者ユーザ1名と一般ユーザは無制限で作れます。なお、ユーザ数が増えたとしても、動作が遅くなるなどの影響はありません。
他のユーザは、どこまでの情報を閲覧できますか?
契約主体が同一であれば、作成したモデルや、データ変換の結果など全ての情報は共有することになります。
ユーザを変更(削除)した場合、元のユーザが作成したモデルはどうなりますか?
上記の通り、作成したモデルや、データ変換結果は作成・実行したユーザによらず、同一の契約主体に紐づくすべてのユーザで共有しているため、特定のユーザIDが変更・削除されても、その他のデータは、そのまま引き続きご利用いただけます。
エラーへの対応について
モデル作成やデータ変換時にエラーメッセージが表示されましたが、準備するデータで気を付ける点はありますか?
以下の点をご確認いただき、アップロードデータの修正をお願いします。
その他
APIキーを使ってVBAなどから、各種機能を使用できますか?
使用可能です。ご利用をご希望の場合は、必要な情報をお送りしますので、担当者にご連絡ください。
モデル情報のダウンロードデータの見方について
今回はモデル情報のダウンロードデータの見方について説明します。
決定木のモデル情報の見方
決定木のモデル情報の見方
決定木のイメージ
モデル情報の出力イメージ(分類)
モデル情報の出力イメージ(回帰)
線形回帰、エラスティックネットのモデル情報の見方
線形回帰、エラスティックネットのモデル情報の見方
線形回帰・エラスティックネットのイメージ
線形回帰、エラスティックネットでは、共に以下のような数式が導かれます。
モデル情報の出力イメージ
ロジスティック回帰のモデル情報の見方
ロジスティック回帰のモデル情報の見方
ロジスティック回帰のイメージ
ロジスティック回帰では、以下のような数式が導かれます。
モデル情報の出力イメージ
SkyFoxのアルゴリズムの自動選択機能について
今回はSkyFoxのアルゴリズムの自動選択機能について説明します。
自動選択の種類
自動選択には3種類があります。
アルゴリズムの選択でナビゲーションをクリックすると
- 自動
- ホワイトボックス
- ブラックボックス
が展開します。
ホワイトボックス
項目毎の影響度が可視化し易く、業務で利用する上で扱いやすいです。
ブラックボックス
モデルの中身が見えない反面、精度は高くなります。
自動
ホワイトもブラックの両方から自動で選択されます。
アルゴリズムの個別設定方法
アルゴリズムは自動選択以外にもマニュアルで選択可能です。
ナビゲーションの下にある分類やディープラーニングをクリックすると展開しますのでこちらから選択してください。
分類モデルでの選択肢
ロジスティック回帰
貸倒や購買、退職など0/1で表現される事象を予測します。
モデルが数式で表されるため項目ごとの影響が見やすく、精度も高いことから、最も広く使われています。
決定木(分類木)
貸倒や購買、退職など0/1で表現される事象を予測します。
最も古くからあり、データ全体を条件で分岐していくことで、事象が発生する条件を推定します。構造上モデルの理解が容易な反面、精度がやや低いです。
k-近傍分類器
貸倒や購買、退職など0/1で表現される事象を予測します。
事象毎にグループを生成し、どちらのグループに近い距離にあるかで判別します。
顧客セグメントの判別などに向きます。
サポート・ベクター・マシン分類器
貸倒や購買、退職など0/1で表現される事象を予測します。
分類するデータ間の距離が広くなるように境界線を作って分類するため、未知のデータに対する判別力が高いと言われています。
複雑な計算をするため、処理時間が長いの欠点です。
ナイーブ・ベイズ分類器
貸倒や購買、退職など0/1で表現される事象を予測します。
ベイズの定理を用いて、最も可能性が高いと判断されるカテゴリに分類します。
古くからあり、簡易でデータの分布に依らず使えます。
ランダム・フォレスト分類器
貸倒や購買、退職など0/1で表現される事象を予測します。
データや項目をランダムに選択しながら、多数の決定木を生成し、すべての決定木を用いて予測を行います。
精度は高い一方、多くのデータを必要とします。
また、作成される決定木は100を超えることも多く、モデル全体の特徴を捉え難くなります。
勾配ブースティング分類器
貸倒や購買、退職など0/1で表現される事象を予測します。
多数の決定木を生成し、すべての決定木を用いて予測を行います。
決定木を生成する度に、それまでに作成された決定木では予測不可であるデータに重み付けをするため、非常に精度が高い一方、多くのデータを必要とします。
また、作成される決定木は100を超えることも多く、モデル全体の特徴を捉え難いです。
順伝搬型NN分類器
ディープラーニングの1つである順伝搬型ニューラルネットワークを用いて、あり/なしやA,B,Cなどのクラスに分類します。
ネットワーク次第では高精度なモデルが構築できますが、どういう設定なら精度が向上するかの見極めが難しいため、玄人向きの手法と言えます。
回帰モデルでの選択肢
線形回帰
与信枠や購入金額、業績など数値で表現される事象を予測します。
全てのデータの中心を通る線を妥当な予測線とする手法です。
モデルが数式で表されるため、項目ごとの影響が見やすいのが特徴です。
エラスティック・ネット
与信枠や購入金額、業績など数値で表現される事象を予測します。
影響度の極めて弱い項目が含まれる場合、それらの重みを意図的に小さく(またはゼロ)にすることで、モデルの汎用性を上げる仕組みがあり、シンプルかつ高い精度のモデルが構築できます。
決定木(回帰木)
与信枠や購入金額、業績など数値で表現される事象を予測します。
古くからあり、枝分かれで事象を予測するため、モデルの中身の理解が容易な反面、精度がやや低いです。
k-近傍回帰
与信枠や購入金額、業績など数値で表現される事象を予測します。
事象毎にグループを生成し、グループとの距離を基に回帰を行います。
回帰のモデルとして利用されることは少ないです。
ランダム・フォレスト回帰
与信枠や購入金額、業績など数値で表現される事象を予測します。
データや項目をランダムに選択しながら、多数の決定木を生成し、すべての決定木を用いて予測を行います。
精度は高い一方、多くのデータを必要とします。
また、作成される決定木は100を超えることも多く、モデル全体の特徴を捉え難くなります。
勾配ブースティング回帰
与信枠や購入金額、業績など数値で表現される事象を予測します。
多数の決定木を生成し、すべての決定木を用いて予測を行います。
決定木を生成する際に、それまでに作成された決定木では誤ってしまうデータに重みを付けるため、非常に精度が高い一方、多くのデータを必要とします。
また、作成される決定木は100を超えることも多く、モデル全体の特徴を捉え難いです。
順伝搬型NN回帰
ディープラーニングの1つである順伝搬型ニューラルネットワークを用いて、金額などの連続した数値を予測します。
ネットワーク次第では高精度なモデルが構築できますが、どういう設定なら精度が向上するかの見極めが難しいため、玄人向きの手法と言えます。
最後に
いかがでしたか?
現段階では以上のアルゴリズムに対応していますが、今後新しいアルゴリズムにもどんどん対応していく予定です。
※トライアルサイトはSkyFoxの公式ページ(https://skyfox.ai)にあるリンクからご利用頂けます。