この記事について
僕は現在データサイエンティスト/機械学習エンジニアとして働いている。
この記事は、そんな僕がオードリーのテレビ番組に出演するための面談を受けてきた話である。
かれこれ1年ほど前の話になる。
オドぜひとは?
「オードリーさん、ぜひ会ってほしい人がいるんです。」というテレビ番組の略称である。
中京テレビで深夜にやってる番組であるが、Youtubeなどでも公式が配信してくれているため、案外知っている人も多いんじゃないかなと思う。
自分もオドぜひを知ったきっかけはYoutubeだった。
この番組では毎回「何かしらの特技を持った素人が出演し、オードリーの2人にそれを見せる」という流れに沿って進められる。
レギュラーで出演するのはオードリーの二人の春日、若林と中京テレビの女性アナウンサーであり、素人の枠は毎回変わる。(敬称略)
オドぜひの魅力
個人的にこの番組の面白いところは「すごい人と大したことない人が混じっている」ことだと思う。
例を挙げると
- 集中することで超人的な力を発揮できる"自称"スーパー人間
- オードリーの面白さを論文風にまとめてきた研究者
- ビンの牛乳を早く飲める人
- なんでも野球で例えることができる大学生
- 怒られた時の"反省顔"が上手い人
など。どちらかというとしょうもない特技の人の方が多い。
彼ら素人は親しみを込めて「ぜひらー」と呼ばれる。
「私は○○ができます!」と言って出演したぜひらーが、実際オードリーの前で披露しようとしたらまったくできなかったという例も多々ある。
その場合は若林から「全然できてねーじゃねーかよ」などとツッコミが入り無事終了する。
と思えばたまにほんと才能があるすごい人が出演もするから眼が離せない。
オドぜひへの憧れ
自分がオドぜひを見始めたのはちょうどコロナ禍真っ只中の2021-2022年ごろだったと思う。
Youtubeで手軽に見れて尺もちょうどいいため、気づけば公式に上がっている動画をほぼ全部見尽くしてしまっていた。
そして僕はこう思った
「オドぜひに出てみたい」
僕は思い立ったらすぐ行動にうつしてしまうタイプなので、気づけば僕は公式の募集フォームから応募していた。
正直特技はなんでもいいやと思ってたので適当に書いた。
ちょうどその頃「若林と似ている顔の猫がいる」というのがネット上で話題になっていたため、
「僕は天才データサイエンティストです。AIで若林と猫の顔が識別できます」
みたいな適当なことを書いて出した。
当然自分が通るはずないなと思っていたので、それから数日後にはすっかり応募したことすら忘れて普通の日常に戻っていた。
「面接に来てください」
一週間後、僕の携帯に電話がかかってきた。
僕は基本的に知ら合い人からの電話は出ないため最初はシカトしていた。
だが、最終的には
「オドぜひ担当の○○です。番組出演の件で連絡しました。」
とメッセージが届いたので急いで折り返したのを覚えている。
電話した結果、
「ぜひお話しを聞いてみたいので、面接にお越しください」
とのことだった。
オドぜひは中京テレビの番組なのだが、東京でもたまに素人の募集のための面接を行っているとのことだった。
当然二つ返事でOKしたのだが、自分が通ると思ってなかったため「どうしよう」という気持ちも強かった。
準備をしていなかったというのもあるが、そもそも僕は画像分析が専門ではなかった。
仕事で機械学習は日常的に使っていたが、自分が使ってたのはいわゆる「テーブルデータ」と呼ばれる形式についてであり、商品のレコメンドなどについては詳しかったが画像認識/生成についてはよくわかっていなかったのだった。
口コミの投稿時に書いた「若林と猫の認識ができます」というのもかなり適当に書いたものだった。
そんなわけで僕は第一回の面接までに「そもそも何を見せるのか?」から真剣に考える必要があった。
画像生成とGAN
仮に「若林と猫の画像を識別する」というテーマでいく場合、大量の学習データが必要となる。
そもそも元ネタがバズっていたのは「猫の顔が若林に似ていた」からであって、猫と若林の識別ができたところで面白いか?という至極当然の疑問が浮かんでしまった。
そもそも画像の認識、識別についてはすでに市場に高性能なアプリが出回っており、自分で実装する必要があまりないんじゃないかとも思った。
例えば顔を簡単に加工しておじいちゃんっぽくしたり、あるいは漫画調にしたり...
そういったアプリと差別化を図るのがすごく難しいなと思った。
そこで自分が思いついたのが
「AIに大量の若林の顔を学習させ、若林の顔をAIに描かせる」
というものだった。
若林の顔画像をすでにYoutubeに上がっているオドぜひから集めれば学習データを集めることは可能だ。
それに、学習データを自分で用意すればよくあるスマホアプリと違うこともできそうだ。
さっそく僕は画像系の学習に詳しい会社の同期に聞いてみた。
「AIに若林の画像描かせたいんだけど、何がいいかな?」
「うーん、今だったGANとか使うのがいいんじゃないかな?」
そんな感じのアドバイスをもらった。
僕はGANを使った画像生成の方法をいくつか試し、最終的には以下のPyTorchを使ったProgressive-GAN
という手法を使うことにした。
ちなみに画像に関連したDeep Learningの手法といえばStable Diffusionが思い浮かぶ人が多いかもしれないが、当時はまだStable Diffusionが世間を騒がす前だった。
GANって?
一口に機械学習で画像を扱うと言っても「物体識別」「分類」などさまざまだが、今回やりたいのは「画像生成」にあたる。
Generative Adversarial Networks (GAN)は敵対的生成ネットワークと呼ばれる技術で、学習したデータから「実在しないデータ」を生成することが可能だ。
例えば、「ベッド」の画像を大量に学習させることで、新しい「ベッド」の画像を生成させることが可能となる。
GANはDeep Learningの一種であるが、生成器(Generator)と識別器(Discriminator)の2つのニューラルネットワークが競い合う形で学習が進むという特徴がある。
訓練データをもとにまず生成器がデータを生成する。
もし完璧にデータを生成できれば訓練データと生成データを見分けることは困難なはずである。
識別器はあるデータが「生成器が生成したデータ」と「訓練データに存在するデータ」のどちらなのかを判定する。
もし簡単に当てられてしまった場合はまだまだ精度が微妙ということなので、生成器はより精度の高いデータを生成する。
ここではデータは画像にあたる。
こうやって競い合うことで精度を高めていくというのはGANの特徴である。
Progressive-GANはGANの一種であり、低い解像度から学習を始めて学習だんだん解像度を上げていくという特徴がある。
こういったプロセスを踏むことでより高解像度の画像の生成が可能となる。
ちなみに最近話題になっているStable DiffusionもDeep Learningの手法である。
「若林の顔」をひたすら学習する
そんなわけでProgressive-GAN使って若林の顔をAIに描かせてみることにした。
別に春日でもよかったんだけど、なんとなく若林にした。
1. 学習データの準備
まずは学習データを準備する必要がある。
Youtubeにはかなりの数のオドぜひの動画が上がっているため、若林の顔のスクリーンショットをひたすら撮っていく。
精度を上げるために数百枚のスクショを撮った。
オドぜひではオードリーとぜひらーが対面して会話しているため、カメラから見ると若林は横向きに写っていることが多い。
若林がカメラの方向を向いたところで一時停止し、スクショを撮る。
これがなかなか大変な作業だった。
「俺はいったい何をやっているんだ?」
と何回思ったかわからない。
2. Progressive-GANによる学習と生成
上に貼ったGitHubのリポジトリをforkし、学習データを読み込ませるだけで割と簡単に使うことができた。
ただやはりPCスペックの問題があった。
最初はMacbook (16GB RAM)のCPUでやろうと思ったが時間がかかりすぎるし普通にメモリが足りない。
そこでデスクトップPC (64 GB RAM)のGPUでやる方針に変更した。
今思えばGoogle Colabとか使えば無理に自分のPCでやる必要なかったかもしれない。
Progressive-GANは低解像度から学習を進めるごとにだんだん高解像度になっていく。
ここではその過程を見てみよう。
学習1回目:
まだ何もわからない。
複数の正方形の中に若林の"タネ"が生成された状態だ。
解像度も低い。
学習1000回目:
なんとなく肌の色っぽい箇所と髪の毛っぽい箇所が見えてきた?
まだまだよくわからない。
学習5000回目:
オドぜひのスタジオにおいて若林の背景は青いことが多いので、生成された画像にも青色っぽい背景が見え始めた。
学習125000回目 (最終形態):
そして最終形態がこれ。
丸一日PCを走らせることでついに生成できた。
ぐにゃぐにゃしてるけど、一応若林であることがわかる。
これは機械学習により若林の"特徴"をうまく学習できたということだ。
画像によっては背景に口コミらしきものが写っているものもある。
面接当日がやってきた
なんとか間に合ったーということで、うきうきで面接会場へ向かった。
その時僕が気にしていたのは
- Youtubeのスクショで勝手に学習しちゃったけど、著作権の関連とかオンエアにあたって大丈夫か聞かなきゃ
- 生成方法について質問されたときのためにGANについて答えられるようにしておかなきゃ
とかその辺だった。
今思えば僕が気にしていたこの点はずれていたと言える。
面接会場にはぜひらー候補が一人ずつ順番に呼ばれるスタイルだった。
部屋が同じだったので自分が待機中に前の人の面接を見ることができた。
面接ではディレクターや企画に関わっているであろうスタッフが何人か横一列に並んでおり、その前に候補者が座り、話すという形式だった。
例えば自分の前の人は
「僕は職質されやすい雰囲気を醸し出すことができます」
「へぇそうなんだ。どうやって?」
「警官の前でうろうろして、目があったら逃げます。特に何も悪いことしてないですが、僕はこれで何回も職質されました」
「面白いね。採用!」
と言った流れだった。
結構見てるだけでも面白かった。
僕の番
僕の番がやってきた。
以下、面接官の発言を"面"と表記する。
面「えっと、君はAIでいろいろできるんだっけ」
僕「はい、仕事では機械学習をやってます。今日は若林さんの顔をAIに描いてもらいました」
面「そうなんだ。面白いね。そのPCに入ってるの?よかったら見せてよ」
僕は持ってきたPCから先ほどの画像を見せた。
面接官の反応は僕が思っていたのと少し違っていた。
面「うーん。。これをオードリーの二人に見せてどうしたいの?」
僕「えっと、ただ見てもらいたかったというか、何か適当にツッコミ入れて貰えばよかったというか...」
面「これは、いわゆる"平均顔"とは違うの?」
僕「はい、平均顔は文字通り全ての画像の平均を生成するだけですが、これは学習データをもとにAIがゼロから画像を生成しているんです」
面「ふーん。。」
ここで僕は致命的な問題に気づいてしまった。
例えば「ホテル」の画像生成であれば「それっぽいけど実際には存在しないホテル」の画像が生成できて面白かったかもしれない。
だが、それは特定の人物には当てはまらないのだ。
なぜなら若林は若林であり、「実際には存在しないけどありそうな若林」なるものはないからだ。
自分も自分で何を言っているのかよくわからなくなってきたが、要は「平均顔みたいなもの」「ちょっと劣化した気持ち悪い若林」の印象を飛び出すことができなかったのだ。
僕「GANという技術を使っていて~ .. 学習データは~...」
僕の説明を一通り聞いた面接官は言った。
面「僕にはね。これの凄さがイマイチわからないんだよね」
面「今君の説明を聞いて、君がすごく頭の良いことはわかったよ。なんとなく凄いことをやっているだろうなっていうのもわかった」
面「でも、今僕が理解できないのに、テレビでオンエアを見た視聴者がこれの面白さを理解できるかな?」
ぐうの音も出なかった。
僕は画像生成の技術の凄さについては考えていたけど、視聴者がそれを見てどう思うかというところまでは考えていなかった。
相手は技術的なことは当然わからないが、テレビのプロだ。
指摘されたところは全て的確だった。
二回目の面接とその後
結局「なんか面白い内容もう一回考えてきてよ」と言われてもう一度面接を受けたが、最終的にはお蔵入りになった。
(LSTMを使って口コミの自動生成とかやったりした)
僕に最初に電話をくれたスタップさんはとてもいい人で
「せっかくいろいろ時間割いてやってもらったのに採用できなくてすみません」
と謝ってくれた上に、本来採用された人しかもらえない番組オリジナルTシャツとクリアファイルを送ってくれた。
逆に「二回も面接してもらったのにわかりやすいもの持っていけなくてすみません。。」といった気持ちだった。
現在の僕が思うこと
普段同じような境遇のエンジニアに囲まれて仕事をしていると、世間と感覚がずれてくるというのはよくあることだと思う。
普通の人はアルゴリズムや技術自体にそれほど興味がない。
キャッチーでわかりやすく、面白く、それでいて間違っていない情報を発信するのは難しいんだなーと思った。
それは自分にとって新しい発見だったし、良い経験になった。
機会があればまたチャレンジしてみようかな。
最後に
単なる体験談なので最初は「自分のブログとかに書くほうがいいのかなー」と思っていたが、技術的な内容も含むため、Qiitaに投稿することに決めた。
一年も経ってしまった理由としては、オンエアまでいけなかったのでなんとなく不完全燃焼感がありまとめる気力が湧かなかったというのがある。
ただせっかくいろいろやったし、どうせなら記事としてまとめようと思った次第である。
この記事を読んで少しでも面白いと思ってもらえたら嬉しい。