マスクのせいで顔がとにかく分からない
コロナ禍で、マスクはもはや必需品となった。新しい生活様式というやつだ。
日頃お世話になっているマスクをもてなしたりもした。
当たり前だが、マスクをすると顔の下半分が隠れてしまう。もともとマスク(=mask)には「仮面」という意味や「隠す」という意味がある。マスクで顔が隠れるのは自然なことだ。
確かに、本来のマスクといえば、こっちのような気がする。(こーだいさん: 野菜に仮面をかぶせると心があるように見えるより)
何が言いたいかというと、感染予防のためにマスクをつける「新しい生活様式」では、人々はマスクという仮面をつけたままコミュニケーションをとるということだ。
仮面は顔を隠すだけでなく心も隠す。これではコミュニケーションが取りづらい。これは非常に大きな問題である。
マスクを着用した石川さんと安藤さん。目もとは笑っているが、マスクの下では口をとんがらせているかもしれない。ああ怖い。マスクこわい。(「言葉の住所「what3words」を使って「ここはどこでしょう?」をやる」より)
マスクの下に隠れた部分をAIで補完する
そこで、マスクの下に隠れた部分をAIで補完するツール「人類マスク補完ツール」を作った。まずは見てください。
顔を枠に合わせて撮影すると、AIが自動的にマスクの下の顔を補完してくれる!すごい!!
候補は合わせて10枚表示されるので、お気に入りをあとから選ぶこともできる。
ちなみに、実際のマスクの下はこうなっている。AIは顔の上半分の情報だけで下半分を勝手に想像しているので、全然違うこともある。
どうだ!すごくないですか?
AIを使って何の役にも立たないツールができた!やった~。
みんなの顔を補完する ~人類マスク補完計画~
編集部におじゃまし、編集部やライターの方々のマスク姿もAIで補完することにした。
マスクの部分はクロマキーの原理で切り抜いているので、できるだけマスク以外の白色が映りこまないよう、モニターの前で撮影している。そういうズルはどんどん取り入れていく。
いつも知っている古賀さんとはちがうが、なんとなくはまっている感がある。でもちょっと個々のパーツがでかい。
ちなみにこれが合成ではなく本物の古賀さん。やっぱりこっちのほうが納得感がすごい。
パリッコさん。これは違和感がぜんぜん仕事をしていない。すごい!ぴったりだ!
パリッコさん「自分の肌と言われても違和感ないですよ」
ただしご本人のほうが何倍もさわやかな感じがします。こっちだなぁ。
解析には1分ぐらいかかるので、そのあいだ話をもたせる必要がある。(話が何も浮かばず解析中の画面を無言で見つめている様子)
思ったよりうまくいっている。すごいぞAI!うまく当てはまっても本人とはちがう顔になるところが面白い。
新人賞2020で優秀賞のナミノリさん。輪郭がぴったり当てはまっている。
ナミノリさん「赤ちゃん系ですね」
AIが「幼い」と判定したのかもしれない。でもあまり違和感がない。いい感じだ。
マスクを取ってもらった様子。こうして見ると違うなぁ。
安藤さんはうまく当てはまらなかった。実際、AIが算出する「しっくりくる度」のスコアも低かった。AIでは解析できない漢・むかない安藤。
実際のマスクの下はめっちゃ笑顔でよかった~。
ITベンチャーの取締役にいそうな姿に補完された石川さん。
本物。我々の知っている石川さんだ。安心感がすごい。
石川さんは、マスクだけでなく首や肩もクロマキーが反応してしまった。しかし、輪郭がものすごく当てはまっている。AIの「しっくりくる度」のスコアも見たことのない高さを示していた。メガネも違和感が全くない。すごい。
ここまで、女性には女性っぽい画像が当てはまったし、男性には男性っぽい画像が当てはまった。安藤さんを除いては輪郭もだいたい合っていて、違和感がなかった。思ったよりうまく行ったなぁ。
盛り上がった。
どうやって作ったか
ここからはおまけ。どうやってこのツールを作ったかを簡単に紹介する。さっきからAI、AIといっているが、先に謝っておくとそんなにAIっぽくないです。単純な画像処理と、ニューラルネットワークと呼ばれる機械学習のモデルで実現している。
人類マスク補完ツールの仕組み。マスクの下をクロマキーで切り抜いて、1,000枚の顔写真に当てはめて、一番しっくりくる画像を採用する。
マスクの白色でクロマキー
クロマキーでは緑や青を切り抜くことが一般的だが、今回は(マスクの色である)白を切り抜くように設定している。なお、黒マスクの場合は、切り抜き対象が黒となるようプログラムを書き換えればよい。
四分割された枠のうち、下半分の領域がクロマキーが効く領域となっている。この領域内の白色が切り取られる。認識に成功すると赤色に光る。
ちなみに、クロマキーの仕組みを実装するためには「画像の特定の部分にだけ処理をする」という処理が必要となり、そのことをマスク処理と呼ぶ。マスクの部分を切り抜くためにマスク処理をするのだ。これはダジャレだ!そもそもこの企画はこのダジャレを言いたいがために始めたのであった。
大量の顔写真に当てはめる
マスクの切り抜きができたら、今度は1,000枚の顔写真に当てはめる。顔写真のデータセットはここから取得した。ほとんどの写真が正面を向いており、また、多様な肌の色・表情を含んでいるので、使いやすい。
マスクの切り抜き画像を1,000枚の顔写真に当てはめた様子。
ちなみに、当てはめた顔写真の肌の色は、マスク着用者の肌の色にできるだけ合うように、補正している。筆者は、肌の色での偏見や差別は絶対にあってはならないと心から思っている。しかし、だからこそ、多様な肌の色をデータセットに含めているし、うまく扱うことが重要だと思う。
色の補正によって肌色が自然になった。いいぞ〜。(補正アルゴリズムが雑なのでそんなにうまく補正できないときもあります。)
しっくりくる画像を選ぶ
1,000枚の当てはめた画像の中には、しっくりくるものもあれば、そうでないものもある。
顔の向きや画角などによって「しっくりくるかどうか」が違ってくる。
1,000枚の中から、「最もしっくりくる画像」を選ぶ。しかし、「しっくりくる」の基準をプログラムで書くのは難しい。そこで機械学習を用いる。コンピュータに事前に大量のデータを学習させることで、細かいルールを伝えなくても自動的に処理してくれるというやつだ。機械学習は、今回のような漠然とした問題を解くのに向いている。
1,000枚の当てはめた画像の1枚1枚に対して「しっくりくる度」のスコアを機械学習で算出する。
「しっくりくる度」を機械学習で算出する仕組み。顔の上半分と下半分の無理やりな合成で作成した画像は0点であると学習させ、普通の画像は100点であると学習させる。すると、新しい画像に対して自動で点数をつけることができる。(かなり簡略化して説明しています。)
ちなみに、学習用の0点の画像1,000枚と、100点の画像1,000枚と、当てはめ用の画像1,000枚は、全部異なる画像を用いている。元のデータセットには70,000枚もの画像が含まれているので、じゃぶじゃぶ使っていく。
1,000枚の当てはめた画像の1枚1枚に対しスコアを算出する様子
最終的に、ツールではスコア最大の画像を表示する。また、スコア上位10の画像をフォルダ「top10」にコピーする。これにより、候補の10枚の画像の中から、あとからお気に入りを選べるというわけだ。
ちなみに、1,000枚の当てはめた画像に対して、スコア上位10の画像と、スコア下位10の画像を並べるとこうなる。
全体的に、上位10にはしっくりくる画像が多く、下位10には角度のずれた画像が多く存在する。
主観だが、全体を比べるとある程度うまく判定できている気がする。ただし、スコア上位10の左上の画像は若干横を向いているのでそこまでしっくりこない。(鼻だけは完璧にぴったりはまっている!) 一方、スコア下位10の右上の画像はけっこうきれいにはまっており、スコア下位なのにしっくりくる。まだまだAIの判定と人間の主観の間にズレがある。学習のさせ方には改善の余地がありそうだ。
もっとうまくやる余地はある
思ったよりうまくできたし、うまくできないときもそれはそれで面白かった。でも、もうちょっとうまくやる余地はある。
まず、今回は撮影される人が頑張って顔の位置をうまく調整する必要があるが、顔認識を使えば本来は自動で調整できる。ただ、マスクをした状態での顔認識はけっこう難しい。顔認識には鼻や口などの特徴も利用しているので、マスクで隠されてしまうと認識できないのだ。今回はあきらめたが、調べてみると、マスク検出データセットというものがあるので、これを使えばできるかもしれない。
あと、今回は単純にクロマキーで合成していたが、ちゃんとしたAIを使えばもっと自然に合成できるはずだ。今回はそこまでの気力がなかったので、今度試します。