natsuumeのblog

プログラミングの話とか趣味の話を書くかも

自動生成と創作支援:創作+機械学習 Advent Calendar 2021 20日目

はじめに

この記事は創作+機械学習 Advent Calendar 202120日目です。

当初はBART触って遊ぶ系の記事でも書こうと思っていましたが、思いのほか時間が取れなかったため、「創作支援」をテーマにフワッとした事を書く記事になりました。

本記事で記載している内容はあくまで私の個人的な考えであり、特に技術的な検証がされていたり論拠になる客観的な資料が存在するわけではありません。あらかじめご了承ください。 逐一「※個人の感想です」と注釈を入れるのは面倒なので以下では度々断定的な書き方をする場合がありますが、すべて雰囲気で書いています。

創作×機械学習というと大きく「自動生成」と「創作支援」の2パターンが存在します。 人によってどちらに興味があるかは様々だと思いますが、私は特に「創作支援」の方に興味があります。

自動生成に関する技術は画像系であればGAN、NLPであればGPT-3をはじめとした様々なモデルが日々登場し注目を集めています。 それと比べ創作支援の分野はまだまだ昨今のビッグウェーブに乗れていないように思います。 ここでは創作支援系分野の注目度が(自動生成と比べると)高くない理由として考えられる「創作支援の難しさ」と、隣接分野といえる「自動生成と創作支援の関係」について個人の考えを書いていきます。

創作支援の難しさ

結論から言ってしまうと、創作支援を考えるにあたって2つの壁が存在します。

第1の壁は「ユーザモデル・ユースケース」の壁、第2の壁は「データ」の壁です。

「ユーザモデル・ユースケース」の壁

創作支援と聞いたとき、どういった機能がイメージできるでしょう。 例としてイラスト制作における創作支援について(現時点で技術的に可能かどうかは一旦忘れて)考えてみると、それほど時間をかけなくても以下のように様々な機能が頭に浮かびます。

  • 線画への自動着色
  • 写真からイラスト背景等への加工
  • 設定ラフ等からいい感じのキャラクターデザインの提案
  • 完成したイラストに対する光や影の変更
  • 魅力的な構図の提案
  • ラフや下書きから線画の生成
  • キャラクターに合った背景、背景に合ったキャラクターの生成

...etc

このように一口に創作支援と言っても様々な方向性が存在します。 適当に思いついたまま列挙した機能ですが、考えなければならないことは、これらの機能はどのようなユーザがどのような時に使うのかということです。 当然のことながら背景の自動生成は背景イラストを描く人にはマッチしませんし、色や塗りにこだわりのある方は自動着色はあまり利用しないでしょう。 初心者にとってはラフからいい感じに線画やキャラクターデザインを生成する機能はありがたいかもしれませんが、構図の提案は難易度の高い構図ばかりが提案されて使えないかもしれません。

したがって最終的にアプリケーションとして提供することを想定している場合は、問題設定の段階でその機能のユースケースやユーザモデルを考える必要があります。 そうでなければ制作ツールの一つとしてではなく、一過性の話題の一つとして一時的に利用はされても継続的な利用には繋がらないでしょう。

つまり、機械学習を活用した創作支援には研究開発の能力だけでなくプロダクト開発や企画といった方面の知見が要求されると言えます。 それに加えて、創作支援に取り組む方がその道の専門家であることは非常に稀なため、(特に中級者や上級者・プロなどを想定した)ユースケースやユーザモデルを正確に考慮する事自体が難しいという問題もあります。

自力でできたら創作支援やろうとは中々思わないだろうから仕方ない

「データ」の壁

ユースケースやユーザモデルを考慮して問題を考えたあと、次にぶつかるのがデータの壁です。

世の中に溢れている様々な創作物のほとんどは最終的なアウトプットです。 しかし多くの創作支援のタスクは、その最終成果物が出来上がるまでの過程の一部に着目したタスクです。 自力でデータを作成するところから初めないかぎり、(特に一般の人が趣味や個人活動の一環として取り組む場合は)機械学習による創作支援のタスクとして実際に手がつけられるものは多くありません。

例えばイラストの色塗りでは、塗り方や人によって異なりますが、

  • 下塗り
  • 1影
  • 2影
  • 色トレス(線画の色を黒から周囲の色に合わせる事)
  • ハイライト
  • その他効果

などいくつかの工程に分けられます。 これらは一般にレイヤー分けされていますが、最終的な一枚のイラストではそういったレイヤー構成やレイヤーの種類などの情報は抜け落ちてしまっています。 実用的な制作支援機能として考えると上記のすべてが1枚にまとまった形で自動着色されるよりも、レイヤーごとに分かれて出力されるほうが圧倒的に有用なのは明らかです。

しかしこのタスクに取り組もうと考えると、まずはレイヤー情報が残っている状態のpsdファイルやclipファイルなどを大量に集める必要があり、個人ではまず不可能です。 仮に集められたとしてもレイヤー構成は人によって様々(細かく部位ごとに分ける人もいれば1枚のレイヤーで色々な作業をする人もいる)なので学習データとして利用するのは中々困難が伴いそうです。

これらの2つの壁を乗り越えたタスクだけが、ようやく技術的な課題へと目を向けることができるようになります。

自動生成と創作支援

前述のデータの問題は創作支援に限った問題ではなく、自動生成研究の多くがEnd-to-Endのタスクを想定しているのもこれに起因しているのではないでしょうか。 さて、End-to-Endのタスクにおいては自動生成は近年驚くほどの進歩を遂げています。 文章生成ではAIのべりすとが、創作×機械学習に興味がある人なら知らない人はいない、と言っていいほど話題になりました。

自動生成と創作支援はどちらも創作×機械学習の文脈で隣接分野として語られることが多いですが、自動生成は創作支援と言うことができるでしょうか。 言い換えると自動生成によって創作支援は達成されるのでしょうか。

思うに、これはイエスでもありノーでもあります。 この内容は前述の「ユーザモデル・ユースケース」の壁とほとんど同じです。 ある視点から見れば自動生成は創作支援ですが、また異なる視点からは創作支援ではありません。

AIのべりすとの話題を出したので文章生成を例に取りますが、小説の執筆支援という観点から見るとEnd-to-Endで最終的な文章自体を生成してしまっているため創作支援とは言い難い部分があります。しかし、少し視点を広げてゲーム制作など大きな枠組みで考えると、シナリオやフレーバーテキストといったものはあくまで「ゲーム」という最終成果物を構成するパーツの一つです。シナリオは書けないけどゲームを作りたい、という人にとっては仮に文章が完全にゼロからの自動生成であっても創作支援ということができるでしょう。

したがって、自動生成で達成できる創作支援もあるがそうでない場合もある、というのが私の考えです。 創作支援は自動生成や情報抽出、時系列データ、構造化データ、予測、強化学習などなどテーマによって関係する技術も様々です。

好きな技術とタスクを見つけて自分だけの創作支援を作ろう!

おわりに

本当はmBARTとか触ってみたかったのですが時間がなかったため、あえなくおきもちポエムの投稿となりました。

創作支援は色々考えていくと「データが……」とか「これ機械学習使わなくね?」とかなりがちですが、最近は自分の中で機械学習系よりもアプリケーション系への興味が強くなってきているので別にそれでもいいかなー、と思ったりもします。 機械学習使わなくてもいいので来年は何か1つ創作支援系のアプリケーションを作りたいところです。

おまけ

さすがに技術要素ゼロでポエムだけはアレかと思ったので、おまけとして機械学習モデルを利用したアプリケーションを提供する際の選択肢についていくつか紹介します。

なお、例によってこちらも特に調査をしたわけではなく記憶とうろ覚えの知識を頼りに書いているので、万が一下記の内容で気になるものがあった際は必ず公式のドキュメントをご覧ください。 また、私は普段AWSしか使ったことがないので、GCP他については記載しません。たぶんほぼ似たようなのあると思うのでいい感じに読み替えてください。

EC2/ECS/SageMaker リアルタイム推論

常時インスタンスを立てる一番(?)スタンダードな形。一番金もかかる。

複数モデル使う場合はマルチモデルエンドポイントにすると1エンドポイントに1モデルホスティングするよりは安くなる(Amazon SageMakerで複数のモデルを同じエンドポイントにホスティングしてみた

料金例Amazon SageMaker の料金

ちなみにSageMakerは直近の#reInventでSageMaker Inference Recommenderが発表された。

Amazon SageMaker Inference Recommenderは、最適な推論パフォーマンスとコストを実現するために機械学習モデルのデプロイに最適な利用可能なインスタンスタイプと構成を選択するサービスです。 Amazon SageMaker Inference Recommenderは推論のための適切なインスタンスタイプ、インスタンス数、コンテナパラメータ、およびモデルの最適化を自動的に選択します。これによりパフォーマンスを最大化しながらコストの最小化することができます。

SageMaker バッチ変換

S3に置いたデータをまとめてバッチ変換ジョブで推論する形(のはず)。 ユーザがリアルタイムで推論を使わない形のアプリケーション(事前に推論した機械学習の結果を表示するだけのサービス、ユーザアップロードから反映まで時間がかかっても問題ないサービス)向け。

料金例は上記のリンクを参照

AWS Lambda

ユーザに数十秒単位で待たせても問題ないなら選択肢に入る。 DockerImage全体で10GBまでの制限あり。 コールドスタートでなければせいぜい数秒~十数秒程度なので趣味プロダクトとしては許容できる範囲。コールドスタートだと30秒以上普通にかかるので実用上はきつい。

API Gatewayが30秒でタイムアウトするので、基本的にはLambdaを直接呼び出すのではなくStep FunctionsのAPI経由で呼び出す必要がある(【API Gatewayタイムアウト対策】Step Functionsを組み合わせて非同期処理にしてみる

SageMaker Serverless

直近の#reInventで発表された期待の星。現在プレビュー。

[速報] 機械学習モデルを簡単にデプロイできる Amazon SageMaker Serverless Inference が発表されました!(プレビュー) #reInvent

serverlessなのでコールドスタート時の実行時間がどうなるかは気になる所。使ったことないけどAWS LambdaとSageMakerリアルタイム推論の良いとこ取りができることを期待。

tensorflow.js

異色の存在。 フロントエンドで実行させられるので金銭面は(ほぼ)気にしなくて良い。

正直全然詳しくない。

本当におわり。