AI法廷の模擬裁判 技術的な演出について 中性的な合成音声、PV、ビジュアライザ、あくまでも非本質の話

初めに

5/13に開催された五月祭企画、AI法廷の模擬裁判にてPV動画、ビジュアライザ、AI裁判官の発する合成音声、配信オペの一部を担当しました。

NHKなどに取り上げられるなど、非常に盛況だったらしいです。よかったですね。

www3.nhk.or.jp

youtu.be

僕が作ったビジュアライザもニュースに載ってます。

この企画の本質はキャッチコピー「機械に人は、裁けるか」にもあるようにAI(ChatGPT-4)をプロンプトエンジニアリングによって裁判官に仕立て上げて、AIが論理的な判決を下すことができるのかを演劇の形式で実験する、という点にあります。そのため今回僕が担当したビジュアライザやPV、合成音声はこの企画における非本質部分となります。

本質の方が非本質な部分よりも議論されることは極めて当たり前の現象である一方で、このような非本質な取り組みに関しての議論に全く価値がないかというとそんなことはなく、いつか誰かのうちに生まれた「伝えたい本質」をより多くの人に届けるための(非本質な)手段について記録に残しておくことにはきわめて大きな意味があると考えています。

しかし残念ながら、他者の非本質な取り組みに対して熱心な姿勢で議論や記録を行おうとする人間は極めて少数であるため、その非本質的な要素を記録する役割は非本質的な取り組みの動作者その人に委ねられることになります。

というのは建前で、結構テクいやつやったんだけど客層が普段と違うせいで全然ウケなかったことを全部自分で解説することにします。

中性的な合成音声を作る

裁判官をAIで作られた「機構」であるとみなした際に、性別、発話者の個性などの概念は不要であると考えた我々は、中性的・無個性な合成音声*1によって裁判官を表現することを試みました。

技術選定の過程でいくつかの合成音声ソフトウェアと、hugging faceなどにて公開されている学習済みモデルを用いたtext-to-speechを試したのち、いくつかの問題がありそうということがわかりました。

問題1.適切な合成音声ソフトウェアの不在

AHSの開発するVOICEROIDに代表される既製の音声合成ソフトウェア(総称チェボボボココガやトウェアトなどと呼ばれる)はプロの声優によって収録されキャラクタの情報(名称、設定、キャラデザインなど)とセットで販売される都合上、強い個性を持っているものが多く、仮に中性的な音声と称されているパッケージであっても、強い個性を持っているという問題がありました。

要するに聞く人が聞けば結月ゆかりは結月ゆかりだし琴葉葵は琴葉葵だし春日部つむぎは春日部つむぎだとわかってしまうという話です。

また、Googleなどの(特にキャラ性を売りにしていない合成音声ソフトウェア)でも、中性的な音声というのは見つけることが出来ませんでした。

問題2.text-to-speechにおけるアクセント問題

素朴なtext-to-speechでは、テキストから最もそれらしい音素列や韻律などを生成することで音声波形データを生成します。一方で人名のアクセントや法曹用語については、一般的なデータ(日本語の発話全体)から計算される確率分布を無条件で信用することはできません。例えば「共犯」という単語は通常「きょう↓はん↑」と読むと思うのですが、法曹は「きょう↑はん↓」と読みます。ものすごく雑に主張すると、人類のうちほとんどは「きょう↓はん↑」と呼んでいるため、確率の高い読みを採用する機械学習モデルでは何らかの手段で事前分布の指定することなしに「きょう↑はん↓」という出力がなされることはないと考えられます。そのため、何らかの手法を用いてアクセントを指定できるシステムが必要となります

生成音声を中性的な声質に変換する

以上のことから、一括でテキストからアクセントなどを指定しつつ中性的な音声を生成するという全ての条件を満たした仕組みを作るのは難しいと考え、中性的な音声を生成する手法として、通常の音声合成を行ったのち、声質変換を通して中性的な音声に変換するというアプローチをとることにします。

まず、アクセントを指定可能なtext-to-speechの訓練済みモデルとして、kan-bayashi(https://github.com/kan-bayashi)氏のespnet/kan-bayashi_jsut_vits_accent_with_pause · Hugging Faceを採用しました。 実装としては以下の記事を大いに参考にさせてもらいつつ、辞書式でアクセントを一括修正出来る仕組みを作っています。

qiita.com

アクセントの指定 これがエンジニアの仕事か?

text-to-speechを利用して生成された音声データは、この時点では「有」性的*2なものです。中性的な音声合成を実現するには、何らかの手法でこの声を中性的なものに変換する必要があります。

発話内容を維持したまま、話者の持つ声の「個性」(以下、声質・話者性)を異なる話者のものに変換する技術のことを声質変換と呼びます。

基本的には発話内容を示す特徴量と声質を示す特徴量をうまく分離したのち、声質を示す特徴量のみを挿げ替えることによって声質変換を実現するというのが昨今の多くの手法に共通するコンセプトになっており、最近だとvits*3をベースとしたmany-to-many声質変換や、Retrieval-based Voice Conversion(以下RVC)によるany-to-many声質変換が話題になっている気がします。

以下に、上記の合成音声を中性的な音声に変換するために行った実験について記します。

実験1.StarGANv2-VCを用いたany-to-many voice conversion

StarGANv2-VC*4はMany-to-Many Voice Conversionの手法として知られているアーキテクチャの一つです。

StarGANv2-VCのアーキテクチャ

StarGANv2-VCは系譜としてはCycleGAN*5→StarGAN*6→StarGAN-VC*7→StarGANv2-VCと進化してきたモデルになっています*8。StarGANは一対一変換であったCycleGANを多対多に用いる場合、変換対ごとにモデルの学習が必要となる問題に対して提案された手法です。

CycleGANとStarGANの差異、StarGANは単一のモデルで全ての話者対の変換を担う
変換先idを変換器に渡すことで一つのモデルで複数の話者間の変換する手法であるStarGANはもとは画風変換のために提案された手法なのですが、同様の手法が声質変換にも応用可能であるとして提案されたのがStarGAN-VCとなります。

これに対し、さらに話者idという離散的なラベルを話者の特徴それ自体を表すベクトル表現(Style Vector)に置き換えることで、より多様な声質変換を実現可能にしたのがStarGANv2-VCです。

ごちゃごちゃ述べましたが、StarGANv2-VCというアーキテクチャの特徴として今回重要となるのは、以下の二つになります。

  • 声質変換の学習と同時に音声とStyleVector(話者性をベクトル空間に埋め込んだもの)の変換(Style Encode)を学習させる
  • StyleVectorはベクトルであるため、和積の演算を行うことが出来る

したがって次のことが言えそうです。

  • 十分な広がりを持った話者群を学習させると、未知の話者の音声に対してもある程度良い音声-StyleVector変換が可能である
  • 十分な広がりを持った話者群を学習させると、StyleVectorをベクトル空間上で合成することによって話者性の合成を行うことが出来る

つまり、十分な話者数をStarGANv2-VCに学習させ、ある程度の質の良いStyle Encoderを生成し、相当数の話者から抽出したStyleVectorの平均をとれば中性的な音声が得られるはずです

上記の仮説に基づいて、jvsコーパス*9の40話者を対象に、StarGANv2-VCを1200Epochほど学習させたものが以下になります。

音質はいまいちですが、中性的な音声を作るという目的自体は達成しているように聞こえます。

実験2.RVCにおけるモデルパラメータの合成

こちらは本番の1週間前くらいに、本企画のシンポジウムに参加してくださった安野貴博(https://twitter.com/takahiroanno)氏がブログで音声変換の記事*10をアップされてて、「StarGANv2-VCなどの古いアーキテクチャ*11使ってたら刺されんじゃねぇかな」と思って大慌てで検証した実験になります。 Retrieval-Based Voice Conversion*12はつい最近出てきたvitsベースの声質変換アーキテクチャになります*13。こちらについては僕もまだ全てを理解できていないのですが*14、事前学習させたモデルに対して任意の話者を対象に追加学習を行うことで、比較的高速で任意の話者からその話者への声質変換を学習する、という手法になっています。

Retrieval-Based Voice Conersionのアプリケーション的な特徴としてはモデルパラメータの合成を行う仕組みがある、という点があります。コードを読むと二つのモデルに対し単純に重みを線形補間しているだけに見えるのですが*15、これがかなり良いふるまいをします。*16これを使って男女の音声を混ぜれば、中性的な音声の生成が可能であると考えられます。 以下は後述する方法で選ばれた4人の話者を合成して作られた中性的な音声となります。

StarGANv2-VCで変換した音声に比べて音質が極めて向上しているのに加えて、目的であった中性的な音声の生成にも成功しているように聞こえます。

最終的に採用した手法

RVCの性能が非常に高かった点と、RVCの検証時点ですでに40話者分の学習を行ったStarGANv2-VCのモデルが存在していたことから、最終的には次のようなプロセスで合成音声を生成しました。

  1. kan-bayashi_jsut_vits_accent_with_pauseを用いて音声合成(text-to-speech)

  2. StarGANv2-VCを用いて40話者の間の声質変換を学習、40話者の中からランダムに男女話者2人計4人を選択し、それに用いてサンプル音声の声質変換を行う。それを100パターン用意する。

3.100ペアのうち良いものを選び、それらの話者についてRVCで再度学習を実施し、RVC版中性音声変換モデルを合成する。

4.合成したRVC版中性音声変換モデルで生成した手順1で生成した音声を変換する。

ということで実験も含めてそれなりにテクニカルなことをしたのですが、ちゃんと伝わっているのかは非常に怪しいです。悲しい。

PVの話

主にBlender,Houdini,AfterEffectsを用いて制作を行いました。イケイケの音楽はMaqμin(https://twitter.com/imodanshaku252)さん作曲です。AfterEffectsのプラグインに非常に救われた回でした。ありがとうpixel sorter2。個人的には危機契約PV*17ごっこが出来て楽しかったです。

お気に入りのシーンはコレです。

神経突起の成長をモデル化したもの*18をHoudiniでシミュレートしています。

また、以前からちょっとした交流のあったVtuberである山田コノハ(https://twitter.com/Yamada_Konoha88)さんに、冒頭の音声をお願いしました。コノハさんは歌ってみたの選曲や実況するゲームのチョイスが最高のセンスで前々から一緒になんかやりたいなと思っていました。この機会を活かせたのはよかったです。

ビジュアライザの話

ビジュアライザはUnityのHDRPで生成しました。 テクスチャのそれぞれをsubstance designer*19で生成した後VFXグラフにブチ込んでいます。

SubstanceDesigner
オーディオリアクティブな一部要素を覗いてVFXGraph内で完結させることが出来ています。VFXGraphは割と自由度が高くてうれしいですね。

合成した音声の再生UIなどもビジュアライザ内部に仕込んであり、配信時はそれに合わせてポチポチやっていました。 先週のVJの時も同じなのですが、昨年の秋ごろからfuqunaga(https://twitter.com/fuqunaga)さんのRosettaUI*20使っています。RosettaUIはコードベースのUI生成システムとして非常に使いやすく、重宝させてもらっています。

配信前日/当日

まず前提として、安田講堂の配信技術者に対する「人権意識」は極めて低く、前日リハ25分、当日設営15分(???)という異常にタイトなスケジュールで配信カメラ数台、配信機材、プロジェクタに投影するビジュアライザ等のセットアップを強いられました。

狂うぜ、せめて一度はランスルーさせろ。準備段階から配信に一緒にかかわったとろくま氏(https://twitter.com/torokumakun)と氏の所属するサークルのメンバー*21の辣腕によってかろうじて何とかなったのですが、過去一異常な現場だろ、というのは双方の合意するところだと思います。

本当に配信に成功したのは奇跡以外の何物でもないのですが、このヤバさを同業以外に伝える手段が無いのがかなしい… というかマジで限られた時間でカメラ運んで配線済ませて配信開始した彼らの異常な優秀さを布教したいです。雑に裏方で済ませて良い活躍度じゃないだろ。

あと当日にOBSのモノラル設定しないと片耳からしか音声流れない仕様教えてくれた実行委員の人ありがとう。あんたはマジで英雄です。本番でヒリついててごめんね。

企画それ自体に対する批評

先日AI裁判官に用いられたプロンプトに関する記事が公開されました。

note.com

せっかくですので当日の内容と公開された記事を踏まえて、工学的な観点から本企画の振り返りをやろうかと思います。

本企画は非常に衆目を集めることとなったのですが、その一方で工学的な観点できちんと実験として成立していたのかというのは少し怪しく、あくまでもエンタメ的な色が強かったのかなと思っています。

記事に含まれる主張に関してもいくつか気になる点はあって、例えば「LLMは決定的なので判決は事前に用意できる」という主張について、裁判というプロセスに人間の応答が含まれる以上どうしても非決定的な側面はあるんじゃないのとか、背景にある確率分布についてその実現値で代表し切ってしまうことの難しさ(裁判って別に有罪X%、無罪Y%を基にガチャをする、みたいな仕組みじゃなくない?)とか。そもそもプロンプト練る時点で今回の模擬裁判の判例を使ってたけど、それってTrainデータとTestデータが同じみたいな状態で汎化性能については全く議論できていなくて、過学習を起こしている可能性はあるよね*22、みたいな。

そんな感じで、個人的には本企画の工学的な視座での瑕疵・怪しい点は少なくないんじゃないかと思っています。一方で、法学部の学部生に対して情報工学系のトピックに対してそんな正確性を求めて激ツメするのが正しいのかというとそんなことはなくて、むしろ学生の仕事としては安田講堂で大々的にブチ上げただけで相当どころかメチャメチャに上等なはずで、その後のvalidationみたいなのは専門家を動員しやすいメディアの方々とかにぜひやって頂きたいなみたいなことを考えています。

その点だとプロンプト公開ってこちらからできる学術に対する最大限の誠実さだと思ってて(なんか全体的に辛辣な言い回しになっちゃって本当に申し訳ないんだけどこの点含めて諸々本当に偉いと思っています)、本企画のエンタメ的な側面に対し過度に浮かされることなく、ある程度落ち着いたらぜひこのプロンプトに対して冷静にアカデミックなチェックをやってほしいなと考えています。

…こうやって色々書いた時点でTwitterの反応とかを見てみると報道に対するセンセーショナルな印象がかなり先行してて、諸々の正確な肌感みたいなのってきっと伝わんねぇんだろうなという感じがして技術屋的には大分げんなりしてしまいました。我々はハイプサイクルとかいう勝手に期待されて落胆される謎の活動に加担して生きています。助けてくれ*23

おわりに

自分から手伝いを志願したとはいえ絶対一人でやる作業量じゃなかった…

最後に幾つか文脈から外れた個人的な感想を述べさせてもらうと、面白い現象を創発するのに十分なカオスさを持ったChatGPT-4を「正しい判決」という枠に押し込めてしまったのはちょっともったいなかったかもなとか、弊大については全体的にもうちょっと「泥臭くものを作る」という行為について理解をもってもらえると嬉しいなとか、そんなところでしょうか。とにかく各位お疲れ様でした。

*1:記事公開後に気づいたのですがこの中性的・無個性という言い方はあんまりよくないかもしれなくて、まぁとにかく「声である」以外の特性を可能な限り平滑化したものであると認識してください

*2:追記:これも何か特別な意味がある表記ではなく、あくまでなんの事前情報もなく聞くとどちらかの性別に聞こえる、といった意味合いです

*3:Jaehyeon Kim, Jungil Kong, & Juhee Son. (2021). Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech.

*4:Yinghao Aaron Li, Ali Asghar Zare, and Nima Mesgarani. StarGANv2-VC: A diverse, unsupervised, non-parallel framework for natural-sounding voice conversion. In Proc. INTERSPEECH, pp. 1349–1353, Brno, Czechia, Sep. 2021.

*5:Jun-Yan Zhu, Taesung Park, Phillip Isola, and Alexei A Efros. Unpaired image-toimage translation using cycle-consistent adversarial networks. In Proc. ICCV, pp. 2223–2232, Venice, Italy, Oct. 2017.

*6:Yunjey Choi, Minje Choi, Munyoung Kim, Jung-Woo Ha, Sunghun Kim, and Jaegul Choo. StarGAN: Unified generative adversarial networks for multi-domain imageto- image translation. In Proc. CVPR, pp. 8789–8797, Salt Lake City, USA, Jun. 2018.

*7:Hirokazu Kameoka, Takuhiro Kaneko, Kou Tanaka, and Nobukatsu Hojo. StarGANVC: non-parallel many-to-many voice conversion using star generative adversarial networks. In Proc. SLT, pp. 266–273, Athens, Greece, Dec. 2018.

*8:より正確にはCycleGAN-VCやStarGANv2など、菱形継承よろしく並列で様々な先行研究がベースになっているのですが、今回はわかりやすさのためにこのような説明をしています

*9:Shinnosuke Takamichi, Ryosuke Sonobe, Kentaro Mitsui, Yuki Saito, Tomoki Koriyama, Naoko Tanji, and Hiroshi Saruwatari. JSUT and JVS: Free Japanese voice 59 corpora for accelerating speech synthesis research. Acoustical Science and Technology, Vol. 41, No. 5, pp. 761–768, Sep. 2020.

*10:https://note.com/takahiroanno/n/naf00564d384b

*11:StarGANv2-VCだって2021年なので言うほど古くないはずなんですが…業界の進歩が異常に早いので…

*12:https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/tree/main

*13:倫理的な問題がちょっと話題になったりしていましたが、ここでは特に触れないことにします

*14:vitsまでは理解できたのですが、many-to-manyからany-to-manyにどうやって対応しているのかがわからない、誰か解説してください…

*15:https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/train/process_ckpt.py#L203-L258

*16:通常の深層学習って特徴量の取り方に一定の自由度があるので適当にLerpしてもブチ壊れると思うのですが、これはなぜかうまくいっています。事前学習のウェイトが大きいからかなと解釈しています。

*17:YostarとHyperGryphによるソシャゲ、Arknightsが定期的に出すむやみにオシャレな割に時間当たりの情報量がスッッッッッッッッカスカの謎PV 紹介の対象が玄人向けの高難易度コンテンツなので、新規に何かを説明する気が一切ない

*18:https://compneuro-julia.github.io/neuron-model/neurite-growth-model.html 神経突起のエロいビジュアライズがある

*19:シェーダーの感覚でテクスチャを作れるので、ジオメトリックな表現をやる際僕はsubstance designerを使うことが多いです

*20:https://github.com/fuqunaga/RosettaUI

*21:ちゃんとメンションしたいんだけどアカウント名がわからず、見てたら連絡ください

*22:AI「裁判官」という役職を名乗っている以上ある程度の汎化性能を期待されていることについては疑いの余地はないかと思っています。

*23:ところで、テクニカルアーティストの業務内容に本当にこういった『期待値の偽造』に類する行為が含まれていないと断言できるかというと…

初VJ後記

はじめに

CHANNEL#23にてumio(https://twitter.com/umio0o)さんのVJを担当しました。さいな(https://twitter.com/SainaKey)さんと二人で20分ずつ、私は後半部分の映像をやりました。人生初VJでしたが、何とか乗り切れてよかったです。

↑メチャカッコよく撮ってくださっていた

設計思想

今回のVJを行うに当たり私の能力上どうしようもないいくつかの制約として、次がありました。

  • 極度の運動音痴、あらゆるボールは俺の顔面が大好きで、机に置いてあるコーヒーはいつも俺にこぼされることを望んでいる。
  • VJ初挑戦 なーんもわからん!

俺VJ向いてなくない?至極当然の話として、初めての行為にパニクった運動音痴にボタンなんか触らせてはダメなんですよね。VJの話が回ってきた時点で最悪僕はブースで突っ立ってても動くものを作るつもりでした。ついでに使い慣れていないmidiコンも捨てて、本番はキーボードとマウスのみを持ち込むことにします。

また、VJによくあるわけわかんないなるくらいバキバキの演出とかも僕はあまり得意ではないです。

そもそも意味から離れたものを作るのが苦手なんですよね、根本となる部分がある程度ロジックに則ってないと可能でないと全く手が動かない…*1。 というわけで、今回のVJではオーディオリアクティブをベースとした創発的なプロセスに頼ることにしました。そこで今回提案したのが音声波形データを受けて創発的にビジュアルを生成するmodule-basedなVJシステムとなります。

コンセプト

モジュラーシンセ、神経回路*2、CPPN*3みたいな。簡易な信号処理モジュールの結合によって多様性のある画を出しましょう的なやつです。

基本的な構成を説明すると

  • モジュール群…任意の入出力系と内部状態を持つモジュールの集合
  • 入力モジュール…対応する周波数(入力音声波形をフーリエ変換したもの)の活性化(後述)を監視し、結線されたモジュールに信号を送る
  • 変調モジュール…入力信号を「加工」して次のモジュールに渡す
  • 出力モジュール…ビジュアライズをしたり、ポストプロセスのパラメータを変化させる
  • ケーブル群…任意のモジュールの出入力間で信号を受け渡す。光る。

みたいなモジュールが2次元グリッド上に配置されており、各モジュールの通信の様子に加えて、「ケーブル」経由で

Spectrum→入力モジュール→変調モジュール→出力モジュール→ポストプロセス

みたいな感じで処理・伝送された信号をパラメータとしたポストプロセスが加えられて画面が生成されている、といった感じになっています。

構成メモ

途中チャネルロゴをグチャグチャにグリッチさせてたんですが、あれはモジュール群の計算によって生じたエフェクトだったわけですね。モジュールの種類と接続の方法によって無限種類・把握不可能なエフェクトが生まれるはずで、このモジュール群を一定時間ごとに分布を変えてランダムに繋ぎ変えることで、全体の画を変化させる、というのが今回制作したプロトタイプの内容でした。

モジュールの分布A「ポルカドット」
モジュールの分布B「カラフル」
ちなみに左上に出てたパラメータも各モジュールの座標や機能を紹介しているものだったりします。

オタクに媚びるオタク

画づくり

Unity URPを使いました。最近はGPGPUレンダリング部分をVFXGraphで済ませるのが気に入ってます。VFXGraphはGraphicsBufferをSet出来るので複雑なGPU処理をする場合でも、レンダリングだけVFXGraph採用する、みたいなことが容易に出来て嬉しいです。GPGPU周りのコード量が6割ぐらいになったイメージ。

VFX全体像
GraphicsBufferのサンプリング部分
ケーブルのヒューズ表現はVFX GraphのGPUEventで前日にサッと作ったもの

シーケンスは5つ用意したのですが、20分持たせるのが本当に大変でした。

さいなさんとの合わせのために作ったCubeシーケンス 実はモジュール同士がちょっとめり込んでる

白砂さんがあのクオリティでアホみたいな量のシーン作ってたのが怖かったです。

波形データの事後処理

一般のオーディオビジュアライザと同様に、今回のソフトウェアも入力された音声波形データを短時間フーリエ変換*4したスペクトラムを元に映像表現を生成します。ただ、抽出されたスペクトラムはどうしてもガッタガタで、そのままビジュアライズすると映像もガタガタになってしまうという問題があります。

今回は各周波数の対数パワーの指数平滑移動平均を内部的な状態として保持し、各フレームの入力がそれに比べて一定の閾値倍を超えた時に活性化(Activation)が起こる、と定め、それを基準に様々なアクションが起こるとしました。また、活性化の後には一定の不応期を設け、極端にガタガタな波形に対し過剰な反応をしないように定めました。要するに、

  • 急に音量がデカくなったらそこを音のインパクトであるとし、ビジュアライザの各要素を起動
  • 一度起動した要素は一定時間応答しない

という特性を持たせるようにしています。

上から順に生の正規化済みスペクトラム、平滑化済みスペクトラム、Activation、ActivationColor(Activationの度に生成される乱数)
Activationの概念図
一応気持ち的には神経科学の事を考えながらこの辺実装していますが、あんまりつながりはないです。

今回のVJではカメラアングルの変化等についてもオーディオリアクティブにやっていたのですが、カメラのように画に大きく影響を与える一部のエフェクトに関してはUIからどのスペクトルを対象とするか決定出来るようにしていました(上図の緑)。今回はFFTの周波数方向の解像度は512としていましたが、周波数方向に鋭い音は拾いきれない等、ちょっと使いづらい感があったので、重要な動きに関しては多分max-poolingとかでダウンサンプリングしたほうが良いです。正直32ぐらい解像度があれば困らないんじゃないかな… また、ビジュアライズに使いたい音って基本的に低音域に集中しているので、今回の例では高音域をクリッピングしている(上図の青で区切られた範囲)のですが、そういう細かい前処理みたいなものが気持ちの良いリアクティブには不可欠であると考えています。

FFTGPUで行われている場合、CPUへのReadBackもあんまり早くない等の問題もあり、この辺は工夫の余地が無限にありそうです。

今回出来なかったこと

正直実装は全然間に合っていない

フィードバック的機構の実装

個人的には信号処理とか制御論の真髄て結局のところフィードバック機構にあると思っていて、その辺詳しくない人もある信号を次の単位時間に持ち込むことで自由度とか表現の幅はグッと増えるというのは、glslとかでbackBuffer使ったことがあれば経験的に感じているかと思います。

フィードバック機構自体の実装は全く難しくないというか、ランダムに入出力をつなげる今回のシステムだとむしろ勝手に生えてしまうのですが、今回は生成するモジュールの入出力系を絞ることで意図的にフィードバック機構の出現を抑制しています。真面目にアルゴリズムを練る時間的余裕が無くて(古典制御で言う)安定性を保証する仕組みの実装が出来なかったからです。

マイクとスピーカーを近くに置くとワンワンと唸りを上げて音が際限なく大きくなっていく「ハウリング」を皆さんも一度は経験したことのあると思いますが、あれが古典制御で言う不安定なフィードバックです。

N年前の講義ノートから持ってきたマイクとスピーカによる「悪い」フィードバックの一例 A倍されたスピーカの音声が1フレーム後にマイクに入る

より正確にはBIBO(有界入力有界出力)安定と呼ばれる安定性の規範があって、これは有限の大きさ*5を持つ入力 xを与えた時、その出力 yもまた有限となるというものです。詳しくはどっかの大学の制御論のレジュメでも見てください。

何が言いたかったかというと、場に存在する全てのモジュールの閉ループ系に対してBIBO安定を保証しないと、何か入力された時に信号が勝手に増幅されてビジュアライザがブッ壊れる可能性があるため、フィードバックの出現を絞らなきゃいけなかったという話です*6。BIBO安定自体は様々な判別法が知られているので、多分真面目にグラフ書いて解析すればある程度解決可能である気がしてます。まぁ目で見て壊れてたらリセットすればいいだけなんだけど

創発的仕草

今回だとモジュール群の表現力と、出力系の表現力の兼ね合いで「オ、創発をしとるな」というレベルの面白い画は出ませんでした。ちゃんと作ればスイッチングすら不要で無限の画が出力されるタイプの設計なはずなので、まだまだだなぁという感じですね。この辺はFuture workです。

ユークリッド空間

今回普通にユークリッド空間をベースに処理を進めてしまったのですが、その一方で最近は割とユークリッド空間は食傷気味だろ、という気持ちもあり、グリッド、立方体、矩形、そればっかじゃんお前、みたいな。とはいえ込み入ったトンチキな空間を採用しても伝わらない感じになっちゃうのはわかりきってるので、なんかガラの良い3次元空間への埋め込みが出来る多様体を探していきたいですよね。

オーディオの特徴量抽出

やっぱりFFTを後処理するだけのオーディオリアクティブだと結構限界があるのかなみたいなことを考えています。正直リアクティブさせたい対象って別に「ある周波数帯のパワーの動き」じゃなくて「kickの音」とかになるはずなので、理想としては一旦フィルタ通した波形からトラック分離してインパルス列に戻せると嬉しいですよね。そろそろこの辺をディープでポンするリサーチをしても良いよな、みたいな気持ちはあります。多分流転光速のブレイクビートパートみたいなことが出来ると嬉しい。

youtu.be 足立レイすき

この辺のトピックで言うとDJの展開をEmbeddingするとか、waveform2midiみたいなのを作ってみたい気持ちはあって、なんか適当なアノテーション付きのDJ音声波形データセットみたいなのがあればTransformerとかに食わせて特徴ベクトルを抽出出来たりしねぇかな*7みたいな、深層学習モデルのinferenceがフェイクドロップに引っかかったらウケるなみたいな。これもFuture workです。

まとめ

お疲れ様でした。まだプロトタイプというか、構想のPoCをやったみたいな段階なので、今度はこれを踏まえて更に面白いことを考えていこうと思います。

さいなさんには機材選定から本番の準備まで色々やってもらって感謝です、VJの手元見れて嬉しかったです。umioさんもリハで丁寧に切り替えの相談に乗ってくれて、本当に助かりました。ありがとうございます。

*1:これって結構致命的な気がしていて、プリレンダの映像とかは、高解像度の画面に対する情報量を充填するために論理とかじゃなくエフェクトを突っ込むみたいなのも割とあって、そういう「意味はないけど気持ち良い」、みたいな仕草が出来ないのはおそらく結構まずいんですが、それは別の課題。

*2:あんまり関係ないんだけど神経科学のテキストだとJuliaで学ぶ計算論的神経科学 — Juliaで学ぶ計算論的神経科学が丁寧ですきです

*3:Stanley, K. (2007). Compositional Pattern Producing Networks: A Novel Abstraction of Development. Genetic Programming and Evolvable Machines, 8(2), 131–162.

*4:Keijiro神のhttps://github.com/keijiro/Laspを使用

*5:ここでいう大きさは信号全体のパワーを積分したもの

*6:例えば、「2個の入力を合計して出力に流すノード」が存在するだけでももうダメ

*7:音「声」系の界隈は信号列と離散的なトークン列・特徴量の相互変換みたいなタスクを一生やっているのでこの辺と相性良さそう

2022年の振り返り

初めに

この一年も色々な方にお世話になり、無事生き残ることが出来ました。ありがとうございます。本記事を持って2022年のご報告、感謝、反省とさせていただきます。

一年の振り返り

案件・ご依頼など

この一年でお受けしたお仕事のうち公開可能で、時間的・精神的なウェイトが大きかったものについて以下に雑感を述べます。

IPSJホール

情報処理学会様からの依頼によってZoom画面から3D空間上のバーチャル会場にカメラ画像を転送、カメラスイッチングするシステム及びバーチャル空間上のパーティクル表現を開発しました。

www.ipsj.or.jp

  • Zoom画面のカメラ映像を切り抜く
  • Unity製のバーチャル空間にカメラ映像を配置する
  • midiコンからの入力を受けてバーチャル空間上のカメラスイッチングを実現する
  • カメラの合成結果をYoutube配信に載せる

という一連の流れをオペ卓側のPC一枚でどうにかするという負荷的にかなりハードなタスクではあったのですが、負荷調整などを頑張ることで実現に成功しました。開発する範囲が配信パイプラインのかなりの域に渡っておりスケジュール的にも相当タイトだった記憶があるのですが、配信全体の設計をやれたのは楽しかったです。

moment

デジタルアートやジェネラティブアートのプラットフォームを運営しているneortさんが馬喰町に物理ギャラリーであるneort++を立ち上げることになったということで、展示の第一弾として企画されたNFTプロジェクトのうち、会場側のビュー開発を担当しました。プロジェクトとしては、NFTとして用意された桜の花がmintされるたびに会場に描画された桜の木に対応する花が咲き、最終的に満開になるという会場-NFT連動型の作品で、ウェブ会場、neort++会場、また会期の後半ではアーツ千代田で行われたProof of Xにも展示が設けられるなど非常に大規模な企画になりました。

作品自体としては、浮世絵の現代における再解釈みたいなものがテーマとしてあって、リファレンスを元に浮世絵風のシェーダーや表現などをザクザク作り込んでいきました。版画刷り特有の太く線幅にムラがある線画やScreenSpace-likeなグラデーションなどを再現する一方で、エミッションなんかを積極的に使っていて、新旧が入り混じった表現を目指しました。

また、今回は物理ギャラリーにプロジェクションされるタイプの展示だったので、コンテンツの消費速度についても考察した記憶があります。「コンテンツの消費速度の話」というのは、コンテンツの提供速度はメディアよって異なるコンテンツの消費速度に合わせて変更する必要があって、例えばTwitterで流す動画は6秒かそこらで消費しきれる速度で動かすべきなのだけど、物理ギャラリーだと現地に鑑賞しに行くコストや会場にいる時間を考えるともう少しゆったりした速度でコンテンツを提供する(動かす)べきだよね、みたいな話です。

この辺の議論は無限に出来て、例えば展示の形態、視野角に対するコンテンツの比率(スマホ画面なのか、プロジェクションなのか)などコンテンツの体感速度に影響を与える要素は非常に多いのですが、ジェネラティブとかリアルタイムのコンテンツは割とこの辺の調整が得意で、周期のスケールが異なるイベントを複数回すことで画面に提示されるコンテンツのパターンを増やして消費に要する時間を長くすることが出来ます。今回の展示では桜吹雪、鳥、天候、昼夜の概念などを異なるタイムスケールで動かすことで絵のループ感を減らして長い間新鮮なビジュアルになるように調整しました。

実装面としては、普段あまり触らないwebglでの実装でフレームワークとしてThree.jsを採用したのですが、インスタンシング周りの挙動はUnity使っている時と大した変わらずサクサク触れたことを覚えています。この辺の企画からsubstance designerやblenderなどでテクスチャやらモデルやらを作ってプロジェクトに組み込むようになりました。用途に特化したツールを使うとこんなに楽なのか、と諸々驚いた記憶があります。あるツールの重要性って、実際にそのツールを使ってみて威力を体感するまで理解できないのがなかなかつらいところだと思います。一度使うと大概「なんで早く使わなかったんだ?」みたいな気持ちになるんですけど。好き嫌いせずに色んなツールを触ってみることの重要性を改めて認識しました。毎月のサブスク代については考えないことにします。

この企画のビジュアル側の開発は桜の花の作成を担当されたAyumu Nagamatsuさんと共同でやっていたのですが、Nagamatsuさんは本当に色々な知識と洞察を持っていて、一緒に仕事をさせていただくに際してエンジニア兼アーティストとしてあるべき振る舞いみたいなものを目の当たりにし、美麗で技術的に優れたものを実装するだけが仕事ではないというのを実感させられました。正直今年芽生えた危機意識(後述)とかは永松さんとの出会いの影響がかなり大きいと考えています。

moment.neort.io

proof-of-x.exhibit.website

(実はCGエンジニアリングの勉強を始めたばかりのころ、永松さんがメゾネットメゾンのVJやってる映像を食い入るように見ていた過去があったので一緒に仕事出来るとわかったとき非常にテンションが上がっていました 恥ずかしいので内緒です。)

メタバース工学部 トレイラー制作

東京大学メタバース工学部プロジェクトのトレイラーとして映像を作成しました。昨年からBlender触り始めて初のプリレンダ案件だったので非常に楽しかったです。来年はもっとプリレンダの方も力を入れていきたいですね。

PARCO P.O.N.D.

今年一番楽しかった案件は何かと聞かれたら間違いなくこれを答えると思います。shinimaiさんにお誘いいただいて渋谷PARCO全域で行われる展示会であるP.O.N.D.の中の、P.O.N.D. Arcadeというインディーゲームを取り扱った企画に属する作品の一つとして「仮想生態系」を展示しました。

これはGPUで遺伝情報、群れ、被食-捕食、繁殖の概念を各個体でシミュレートすることで個体が生存のために起こした運動が全景を構成する様子を表現する作品で、これが「ゲーム」であるかどうかについては私自身も非常に怪しいと感じるところではありますが、自分より優れたインディーゲーム開発者が沢山いる中で自分が呼ばれた意味を邪推して、「いつものヤツ」をお出しすることにしました。

個人的には2020年ごろにそれまで10年ほど続けていたインディーゲーム制作から手を引いてグラフィックエンジニアリングの界隈に転向した過去があり、それに関して逃げた罪悪感というか、敗北感というか、とにかくそういった感情があったのですが、またこういう形でインディーゲーム界隈とかかわりを持てたのが本当に嬉しかったです。今でもインディーゲームのことを愛しているので。才能の無さをうまく誤魔化す方法を思いついたらまたゲームを作りたいです。

さて、展示の話に戻ります。P.O.N.D.自体の展示構成を聞いた時からモールに訪れる色々な方が通り掛けに作品に触れるような偶発的遭遇を想定していて、ルックをカジュアルに寄せるのに加えてインタラクション周りの配慮、例えば展示に文字を配さないようにしたり、小さい子が触れるようにインタラクティブな部分を可能な限り下の方まで伸ばすなどの準備をしていました。結果的に想定はかなりいい感じに当たって、用意していただいたPARCO5階のスゴイデカイタッチパネルがまさに色々な人が通りかかるような立地だったので、先述の処理が効いているのを見て取れたのが非常に良かったです。(マジで異常なまでの好立地でした) 特にチビっ子共のウケが良くて、ディスプレイに吸い付く様をニコニコしながら眺める一般不審者を丸一日やったりしていました。脳から変な汁が出る。また色んな人がSNSで感想とか呟いてくれていたのも嬉しかったです。割と色んな人に見られているのがわかってビビりました。

また、今回の展示は1週間の会期中毎日N時間駆動する、という仕様だったので長時間駆動した場合の挙動はかなり慎重に検証しており、会期中にこのアプリ自体がクラッシュしたり、ビジュアルが破綻することはありませんでした。やはりどんなに丁寧に作っても実際に長時間放置する検証は必須だと思います。大体1カ月ぐらいの開発期間のうち終盤の1週間ぐらいは仕様をフィックスしてひたすら長時間放置とバグフィックスをやっていた気がします。開発初期は微生物が全滅したり一種が卓越しすぎて生態系がぶっ壊れたり流体が吹っ飛んだりといったことが常に起きており調整には非常に苦心しました。みんなは外乱入れ放題の時間発展する系を長時間展示しようなんて考えないようにしましょうね。ほかにも苦労した点は山ほどあるので、技術的な話はまたどこかでしたいです。

自主制作

特にプリレンダとBlenderのgeometry nodesがアツかった一年でした。適当に良かったものを並べておきます。

院試・卒論

今年に入って休学が明け、学部4年から学業を再開したので非常にバタついた一年になりました。一年の休学の果てにすべてを忘れてしまっていたので勉強をやり直す羽目になったのですが、なんとか第一志望の研究室に行けることになりました。引き続き東大の情報理工系でなんか色々やる予定です。

これを読んでいる学生さんに向けて一つ紹介しておきたい日常生活破滅人間の詰みどころとしてTOEFL受験があります。東大の情報理工学系研究科だと出願前のTOEFL絡みのタスクとして

  • 院試の出願にはTOEFLの成績の提出が必要
  • TOEFLの成績が提出出来るようになるまでには約2~3週間かかる
  • TOEFL受験には事前に出願と会場の予約が必要(東京の会場は大体2週間前ぐらいに全部埋まる)
  • TOEFL受験にはパスポートが必要
  • パスポート発行には1週間かかる

等のディレイがあるのですが、私は全て知らなかったのでパスポートを取得した時点で受験日は出願に間に合うギリギリ、受験会場は全滅、という有様でした。幸いTOEFLには自宅受験可能なシステムがあったため、急ぎ機材をそろえて受験をしました。部屋の片づけやPC周りの不正防止処理など色々と面倒なことが多すぎて体験としてはかなり悪かったので今後TOEFLを受ける方はしっかり受験会場を予約するのがお勧めです。

後は院試の試験日程が科目ごとに分かれているのを見落としていて、数学の試験日が2週間前倒しになっていることに気づく(気づいた時点で受験2週間前)などのトラブルがありました。今後院試を受けられる皆様におかれましては受験要綱をしっかり読むことをお勧めします。

あとは10月ぐらいから卒論研究が始まっていて、常にキャパシティが圧迫されています。弊学科は異常カリキュラムによってなぜか院試明け10月から卒研が始まり、2月とかその辺で卒論提出になります。なんで?

音声系の研究室にいるのですが研究自体は非常に楽しいです。自主制作に生かせそうな知見もあって良いです。

反省

2020年ごろからグラフィックエンジニアリングの界隈で勉強させてもらってから早3年目でしたが、少しずつお仕事をいただけるようになっていっているのが非常に嬉しいです。才能もなく出遅れてる三流のカスだけど皆様のおかげでなんとか生かしてもらっています。本当に。以下に今年の反省点を述べます。

言語化

これまで言語化を怠ってきたツケが回ってきた一年でした。

neortさんのmomentでtwitter spaceやったときも、P.O.N.D.つながりでDommuneに出た時もそうだったのですが、作意について聞かれた際全くと言って良いほど言語化が出来なかったことを非常に後悔しています。

これまで私は「碌なもの作れないカスの主張なんて誰が聞くんだ?」みたいな捻くれた考え方があったり、そもそもとしてごく一般の情報系の出自として美術に対する素養が全くなかったり、そもそも目指しているところがコンテクストに依存しない純粋な楽しさだったりするせいで私は「自分の制作に対し何らかの意味付けをする」といった行為を極力避け、口を動かすぐらいなら手を動かす択を選んできたのですが、最近では営み全体に対する作品の位置取りを説明出来たり、作品をコンテクストや言語で補強することが出来る人間の強さというか、安定性みたいなものを理解できるようになってきました。

私がなんとなくビジュが良い~とか言って作っているものは世間の価値観と少しでもズレた瞬間に無価値になるんですけど、コンテクストを把握できている人間はそれをアンカーに価値観をチューニングできるし、世間の価値観以外の評価指標で作品を測ることが出来るし、作品の意味付けや言語化をしっかり出来る人は雰囲気で作る部分を減らすことが出来るのでより素早く正確な制作が出来る。強いな~。

そもそもの性格が根暗オタクなのに加えて先述のような理由で人と創作について話すのがすごく苦手なのでこれまでは言語や意味づけを求めるような場を意図的に拒絶していたのですが、来年こそは創作について話すことへの嫌悪感を克服したいなと思っています。創作の話を気軽に振ってください。多分第一声は「微分方程式で全体が記述できると楽しいじゃないですか」とかになる気がしますが。

「誠実さ」について

誠実さを保つのがいかに難しいかについて実感した一年でした。

現実のものをモチーフにした作品を作るにおいて大切な観点としてモチーフに対してどれほど「誠実」であるか、というのがある気がしています。「モチーフの事をきちんと理解し、表現に臨むこと」をここでの「誠実さ」であると定義します。「誠実さ」が欠けた状態でモチーフに対して良く知らない部分を雑に補間することでその振る舞いはモチーフの対象から徐々に乖離していくことになります。

自分の例で言うと「ピタゴラ装置をモチーフに作品を作る、物理的整合性を保つ実装が思いつかなかったので適当な近似でお茶を濁す」「ある動物をテーマにした作品を作る、動物の事を良く知らないので雑に本を流し読みして適当に挙動を実装する」「プランクトンをモチーフにした作品を作る、よくわからないので架空のものってことで誤魔化す」といった所作をやってしまった時に「誠実さ」が失われてしまったと感じています。実のところ人はみな異なる専門分野を持ちそれ以外のことについてはそんなに詳しくないので、こういった「誠実さ」の欠如は意外とバレないものですし、制作コストとの釣り合いで意図的に適当な補間を導入することもあるとは思います。

その一方で何らかのモチーフを元に制作を行う以上、どのくらいの「誠実さ」を保ち続けようと試みるかは重要な決定であると考えられます。いざ「誠実さ」が求められる時、それは付け焼刃ではどう足掻いても得られぬものですし、意図的に近似を導入する場合にしても理解したうえで導入した補間と適当で雑な補間の間には取り回しに明白な差が存在します。短期的には適当な誤魔化しが通じても、こういった積み重ねは長い目で見ると制作のクオリティを大きく左右するものであると私は考えています。

資本主義的クリエイティブをやっている以上このような「誠実さ」を保つには実現に要する最小のコスト(これは要するに予算の事を指します)に更に上乗せする形での努力が必要となります。要するに「採算度外視」ということになってしまうため仕事のモチベだけでこれをやろうとするとなかなか大変で、今年は私も十分な「誠実さ」を保つことが出来なかったんじゃないかなと思っています。簡潔にまとめると常に学習を続けろ/下調べを怠るなという話なのですが、それが意外と難しい、というのを実感した一年でした。

制作速度

サッとやる、みたいなことが苦手なのが露呈した一年でした。

関わった作品数を見ればわかると思うのですが、私はいわゆる「筆が遅い」部類で、開発途中のものが動作している様子を眺めながら次に何をすれば良いのか、何をすればより良くなるのか、というのがわからずボーっと数時間経ってしまう、みたいなこともザラにありました。これはプログラムという回りくどい手法で映像を出す部類の制作であったり、そもそも僕自身の地頭が良くなかったりするのも原因としてあるとは思うのですが、先述した言語化や意味付けする力に対する怠慢も原因の一つではないかと考えています。どうにかします。

物量不足

まぁ単純に制作した作品の数が少なかったですね。院試とか卒論とかアルバイトとか言い訳のしようはいくらでもあるのですが、生存に足る物量を出せていないのは事実なので。この程度では遅かれ早かれついていけなくなって死ぬので来年はもっとガシガシにやっていきます。

体調には気を付けよう

12月にうっかりストレス起因の病気をやっており、早期発見で事なきを得たので結論としては無事だったのですが相当ヒヤっとしました。この手の病気は油断すると制作にかかわる部位を直接吹っ飛ばしてきます。皆さんも健康には気を付けて。

来年の目標

来年は人ともっとかかわりを持つことを目的としたいです。引きこもって鬱々としていてもいいことは無いので。あといい加減VRChatもやりたいです。気になっている人はいっぱいいるのに全然話かけられずにいます。あんまり人と話すのが得意ではないので、何か手土産にGPUを使ったワールドでも作ってお話に臨もうかな、と思っています。よろしくね。

おわりに

この一年に関しまして、お世話になった皆々様には返す返すお礼申し上げます。 来年は今以上に色々なことをやっていきたいです。 お仕事、遊び、なんでも良いのでお誘いをお待ちしています。常に大歓迎です。雑にDM飛ばしてください。