kedzkiestの日記

普段の発見や開発の進捗について書いていきます。

2023年の振り返り

はじめに

お久しぶりです。修士1年のkedzkiestです。

2022年の7月にこのブログを開設して以来、丸一年以上経ちました。時間の流れがとても早く感じます。今年はせっかくなので、去年はやらなかった1年の振り返りをしてみようと思います。


良かったこと
悪かったこと(あれば)

という構成です。各項目はクリックして展開できます。

1月

ポートフォリオサイトを更新した それまではHTML、CSSJavaScriptで書いた自前のWebサイトをGitHub Pagesでホスティングして、制作したゲームや映像作品を公開していたのですが、サイトの見た目をモダンな感じにしたいという悩みがありました。
かつてのポートフォリオ
そこでWixというノーコードサービスを使用し、グラフィカルにデザインを決めるだけで、達成したかったモダンな見た目を実現しました。
現在のポートフォリオ。よく見たらクビにされた青い鳥がいる・・

ABCのD問題をコンテスト時間中に解いた AtCoderという会社が主催する、AtCoder Beginner Contest (ABC) という競技プログラミングコンテストがあるのですが、2021年の10月に開催されたABC 223にて、私は競技プログラミングを初体験しました。

ABCではA問題からG問題まで7つの問題があり、後ろに行くほど難しくなっていきます。ABCのBはBeginnerのBですが、情報系の大学生でも競技プログラミングに慣れていないとC問題を解くのに苦戦したりします。

そういった背景があり、私のABCでの目標は「D問題を解く」ことでした。高い目標とは言えませんが、競技プログラミングの雰囲気を知るには十分かと思います。

2022年の8月に初めてコンテスト時間中にC問題を解くことができ、2023年の1月にD問題を解くことができました。そこで満足してしまい以降ABCには参加していませんが、自分の成長を実感できたエピソードとして自信につながりました。

当時私が解いたD問題のリンクを貼っておくので、よかったら挑戦してみてください! atcoder.jp

フロムのプログラミングコンテストで好成績を取った Track Jobという、コーディングテストを受けることで選考を有利に進められるサービスがあるのですが、そこでフロム・ソフトウェアさん主催のコンテストをやっていたので参加しました。

AtCoderでの競技プログラミング経験が活きたのか、結果的に112人中9位の成績を残しました。
受験結果へのリンク↓
フロム・ソフトウェア プログラミングコンテスト!! - Track Job

今見たら238人中11位になってました。

学部卒論の原稿を完成させた それまでの研究結果を基に、いよいよ学部卒論の原稿を書き始めるぞ、という時期でした。

LaTeXを用いて2週間ほどでAbstract ~ Reference (Appendix) までのすべてのセクションの草案を作成し、その後2回ほどのフィードバックを元に草案を修正し、提出用の原稿を完成させました。

2月

各バンドの初回練習を行った 私は大学のサークルの中で主に軽音楽部で活動していますが、学部1年生の頃からずっとボカロのコピバンをやりたいと思っていました。

早い・ムズい・人間が歌えないなどの理由でなかなか叶いませんでしたが、ついにボカロ系バンドを結成し、初回練習を行いました。はじめに練習したのは以下の3曲です。 youtu.be youtu.be youtu.be

探せば意外とできる曲はあるものです。

また、同時期にぼっち・ざ・ろっく!の結束バンドのコピバンにも誘われました。当時ものすごく流行っていた(今も人気だけど)コンテンツだったので、こちらもメンバーになれてとても嬉しかった思い出があります。はじめに練習したのは以下の3曲です。 youtu.be youtu.be youtu.be

こちらもボカロに負けず劣らず難しい曲たちでした・・

初見のリズムなぎなたに参加してやり通した 私は高校の部活でなぎなた部に所属していたため、今でも大会の手伝いに参加したりするのですが、2月のある日、初見のリズムなぎなたに参加することになりました。

リズムなぎなたというのは、音楽に合わせてなぎなたを振る種目で、演技(あるいは型)のカジュアル版です。もしかしたらローカルの文化かもしれません。

最後に選手として活動してからもう3年以上も経っているので参加を打診されたときは不安でしたが、意外と体が覚えているものでした。

初めてベースエフェクターを買った 私は軽音部でベースを担当していますが、それまではベースから直接ヘッドアンプに接続して演奏していました(いわゆるアン直、直アン)。

しかし、ずっとエフェクターを使ってみたかったのと、バンドでこれから演奏していくなかで必要な機会もあるだろう、ということでZOOMのMS-60Bを購入しました。 zoomcorp.com

とても使い勝手がよく、今ではこれなしでの演奏は考えられないくらいです。

ただ、MS-60Bはマルチエフェクターといって様々なエフェクトを1つにまとめたものなので、音質に満足できないこともあります。そのため、コンパクトエフェクターを買い揃えてエフェクターボードを構築したい気持ちも最近は出てきました・・

学部卒論の発表を行った 提出した学部卒論の原稿をもとにプレゼン資料を作成し、英語で発表を行いました。

発表とそれに次ぐ質疑応答まで問題なく進行できました。

3月

自前のリズム練習アプリを完成させた 軽音部員として自前のリズム練習アプリを持ってたらカッコいいし、あわよくば他の部員にも使ってもらえるかも?という思いつきで制作を始めました。

ただのメトロノームではなく、YouTubeショートやTikTokで流行っていた「音符の書かれたカードを次々と交換し、正しいリズムで演奏する遊び」から着想を得ました。

参考映像↓
youtu.be

3日ほどで完成したものがこちらです↓ youtu.be youtu.be

ダウンロードはこちらから↓
Rhythm Practice by kedzkiest

イベントスタッフとして多くのお客さんを相手にした 新学期が始まるまでの間暇だったので、短期アルバイトをすることにしました。

10日ほどの期間で3000人を超える来場者の方を相手に展示物の説明、体験コーナーのインストラクター、準備や片付けを行いました。

学位を授与された 提出した学部論文や2月の発表の評価が終わり、卒業式にて学位を授与されました。

また、同日に大学院入学許可書を受け取り、4月からの大学院生としての新生活が現実的なものになりました。

安物買いの銭失いを体験した 私は大学からベースを始めましたが、ハードオフに売っていた中古の1万円のBacchusのベースを大学入学から学部卒業まで使い続けました。この1代目のベースはとてもいい子で、状態も良く、同じく軽音部の友人からも弾きやすいと評判でした。

とはいえ、そろそろ2代目のベースが欲しいなと考えていました。ある日、Squireの5万円くらいのベースをAmazonで見つけ(!)、見た目に一目惚れしました。

そして、試奏もせずに買ってしまいました。

いざ届いて弾いてみるとどうもフィーリングが合わないというか、1代目のベースを弾いているときより楽しくありませんでした・・

1代目のベースをそれまで長く使っていたため、別なベースに乗り換えることへの違和感はあったでしょうが、それを加味しても自分に合わないように感じました。仕方がないので結局、届いてから2週間ほどでメルカリに出品することになってしまいました。

Squireさんの悪口を言っているわけではなく、単に自分に使いこなす技量がなかっただけです。試奏しに行くのにかかるお金をケチったことも含めて、安物買いの銭失いという言葉が脳裏に浮かびました。

しばらくの間罪悪感に苛まれましたが、父もかつて同じような経験をしたことを聞き、少し救われました。この経験があったからこそ、後述する新・2代目のベースを念入りに検討した上で購入できたと思っています。

4月

新歓ライブに出演した この年の新入生はぼっち・ざ・ろっく!を知っている人が多かったので、入学式後に次々と声をかけて「ぼざろみたいな感じでライブやるのでよかったら来てね」という文言で沢山勧誘し、結果新歓ライブの会場となったライブハウスは新入生40人ほど+上級生20人以上でぎゅうぎゅうになりました。

私はボカロ系コピバンと結束バンドコピバンの2バンド分出演し、大学から楽器を始めてもこれくらいのレベルにはなれるよ、大丈夫だよ、という安心感を与えようとしました。

その意図がうまく伝わったかは分かりませんが、新入生の中からベーシスト志望の子が何人か出てきてくれたので、それまでのベーシスト不足の状況がやっと改善されそうで安心しました。

ちなみに演奏はとてもうまくいきました。
ボカロ系コピバンで披露した曲は以下の4曲です。 youtu.be youtu.be youtu.be youtu.be

結束バンドコピバンで披露した曲は2月に練習していた3曲です。

学部時代の勉強が大学院で活きてくることを実感した 大学院での授業は学部時代の知識を前提として進行するので当然のことではありますが、学部のときにどう使えばよいのか分からなかった定理やアルゴリズムが大学院の授業で輝き始めるのを見ると、そういうことだったのか、と理解できます。

また、学部時代の授業だけではなく、自主的に行っていたプログラミングの経験も活きています。ひとつ例を挙げると、まず過去にPythonを使ってお絵かきをするプログラムを書いていました。

手前味噌ですが・・ kedzkiest.hatenablog.com

そして大学院の授業で、手書き文字のデータ(筆圧、方向、時間、その他いろいろ)を入力として文字が書かれる様子を視覚的に再現せよ、という課題がありました。

当然他の学生はデータをもとにどのようなプログラムを書けばよいか四苦八苦するわけですが、私にはこのPythonお絵かきのアイデアがあったため、比較的すぐに解決することができました。

研究室ミーティングについていけない 4月に入り大学院生になってから、週1で研究室ミーティングをやることになりました。そこでは、各学生が研究の進捗や最近気になった論文などを共有するわけですが、初回のミーティングで私は全く話についていけませんでした。

ミーティングに参加しているのは修士と博士の学生に加え教授で、最新の研究動向や投稿された論文の特定のポイントについて英語でディスカッションをしているため、何もわからない状態で進んでいきます。なんとか意味を解釈しながらどうしても分からないところだけ質問することを繰り返していくうちに、自然と会話に混ざれるようになってきましたが、未だに苦手です。

5月

新・2代目のベースを購入した 3月の反省をもとに、新しく買う2代目のベースは必ず試奏した上で購入することを決めていました。

そこでゴールデンウィークを利用して東京まで友人と一緒に行き、楽器店巡りついでに聖地観光をしてきました。

楽器の街・御茶ノ水をはじめとして、秋葉原、浅草橋などを訪れ、計10件以上の楽器屋さんを見て回りました。

ベース遠征当日の御茶ノ水付近の移動経路

自分のために一緒に東京の街を歩き回ってくれた友人には本当に感謝しています・・

最終的に、最後に立ち寄った渋谷の楽器屋さんで現在のベースと巡り合いました。

FENDER / Player Jazz Bass Maple Polar White

ぼっち・ざ・ろっく!の聖地をバックに、記念撮影もしてきました。

アー写を撮ろう!

新しいベース弦とシールドを試してみた せっかく良いベースを買ったのに、周辺機材が安物のままではベースのポテンシャルが発揮されないかも・・と不安に思い、ベース弦とシールドも新調することにしました。

ベースの弦はElixerを使ってみることにしました。

1セットで5000円くらいしますが(!)、コーティング弦なので寿命が長く、トータルのコスパは標準的なはずです。使ってみた感想としては、手触りがよく、音も良い印象です。

シールドはEx-pro FLのLSプラグの3mを2つ買いました。(ベース - エフェクター間とエフェクター - アンプ間)

こちらも1セットで5000円くらいしますが、以前使っていたシールドよりもノイズへの耐性が強く、また音も劣化しにくい印象を受けます。

どちらもよい買い物でした。

GPUのメモリ不足エラーを起こした 入力されたテキストをもとに3Dモデルを生成する、OpenAI社のShap-Eというモデルをローカルで実行するために色々やっていたところ、どうもVRAMが足りないせいでプログラムの実行が失敗しているらしいことに気付きました。

研究室で自分に割り当てられた12GBのVRAMでだめならどうしようか困っていたところ、特別に24GBのVRAMをもつGPUの使用を許可され、なんとかローカルで実行することができました。

しかし、GitHubで公開されるAIモデルの中には非常に大きいサイズのものもあり、そういったモデルは実行ができないのでデモを見るだけにとどまってしまうこともあります。

技術的な制約だけでなく、時に予算的な制約によってプロジェクトが進行できなくなってしまうこともあるのだと実感した出来事でした。

6月

Shap-E-localがバズった 入力されたテキストをもとに3Dモデルを生成する、OpenAI社のShap-Eというモデルをローカルで動かすShap-E-localというプロジェクトをGitHubで公開したところ、多くの開発者の方からスターを頂きました。 github.com

記事執筆時点で113スター付いています。X (Twitter)のいいね!の感覚で言えば113くらい大したことないように思えますが、ユーザー数の違いと、Xのように情報が流れていくのではなく検索しないと出てこない仕組みなので、バズったと言ってよいと思います。

シャッフルライブに出演した 私の所属する軽音部ではシャッフルライブといって、普段とは違う楽器でかつ、普段と違う人とバンドを組んで出演するイベントがあります。このイベントの主な目的は新入生の初めてのライブを上級生がサポートすることです。

部にベーシストが足りない上、忙しくて練習時間が取れないという理由で私はいつも通りベースで出演することになりましたが、新入生とのバンド練習及びライブ本番はフレッシュで楽しく、私に初心を思い出させてくれました。

披露した曲は以下の2曲です。シャッフルライブの性質上、メンバーの実力を特に考慮して選曲しました。
ブレーメン
花に亡霊
(埋め込みが上手くいかなかったのでリンクを貼っています。)

もう暑い
異常
7月に近いとはいえ、6月とは思えない暑さの日もありました。私の住んでいる地域は暑いし寒いところなので、他の地域から来た友人は辛そうにしています。

7月

UnityとC#と設計を書籍で勉強し始めた それまでは趣味のゲーム開発をUnityとC#で行っていたのですがこれといったインプットはしておらず、とりあえずコードを書いてみて、だめだったら書き直して・・といった行き当たりばったり方式でやっていました。しかも設計もしていませんでした(!)。

このままでは将来プログラマとしてやっていけないということで、きちんと書籍での勉強をすることにしました。書籍で勉強することのメリットは、必要がある度に調べて虫食い的に知識をつけるのではなく、包括的にその分野をカバーできることです。

まずUnityとC#の学習のためにこの本を買いました。

次に、C#の学習のためにこの本を買いました。

最後に、設計の学習のためにこの本を買いました。

1冊目はすぐに読み終わりましたが、独習C#とキウイ本は半ば辞書のような使い方になりそうです。

知らない分野の論文を読み込んで発表した このころは大学院でコンピュータグラフィックスに関する授業を受けていた学期でしたが、その授業の最終課題が「自分の専門でないコンピュータグラフィックスに関する論文を1つ選び、要約してプレゼンせよ」というものでした。

私が選んだ論文はProcedural texturing of solid wood with knotsという論文で、節のある木材のテクスチャを自動生成するというものです。

まずは、木材の節のあるなしを見比べてみてください。節とは木の幹から枝が伸びた跡です。

節のない木材
節のある木材

節のない木のテクスチャを生成する技術は当時存在していましたが、この論文の研究者たちの貢献ポイントは節のある木のテクスチャを生成することでした。

私が普段扱っているAIとかフェイシャルの技術とはまた違う分野なので、論文を読み込むのにいつも以上に時間がかかりましたが、なんとか完成できました。

プレゼンに使用したスライドはこちらです↓

BASE BREADを頼んでみた BASE FOOD社から出ているBASE BREADは、完全栄養食と謳うだけあってからだに必要な栄養素が詰まっています。 basefood.co.jp

前々から興味があったので、この月についに買って食べてみました。

栄養満点にするためにどうしても味が悪くなってしまうのではないかと不安でしたが、そんなことはなく問題なく食べられます。それからというもの、2ヶ月に一回くらいのペースで定期購入しています。

食生活が偏りがちな私のような人にオススメしたい商品です!

Turbo Djangoがよく分からない この時期は、Turgo Djangoを使ってWebアプリをなにか作るというプロジェクトベースの授業がありました。

もともとWebをそこまで触っていなかったのと、ただでさえ経験の少ないWebフレームワークであるDjangoをさらに発展させたTurbo Djangoを使うわけですから、もう分からないことだらけでした。

ゲーム開発の例で言えば、Unityをあまり使ったことのない人がいきなりUniRxとかUniTaskを使い始めるようなものです。

ともかくやるしかないので、教授やTAに質問を重ね、なんとか完成させました。この授業を受講していた中で、恐らく私が最も質問した学生だったと思います。

8月

スマホの機種変をした それまではXiaomi社のRedmi Note 9Tというスマホを使っていました。 www.mi.com

前のスマホが壊れたわけでもないのにどうして機種変したのか覚えていませんがともかく、新しくGoogle Pixel 7aを使い始めました。 store.google.com

ときどき画面がフリーズすること以外はRedmi Note 9Tに不満はあまりありませんでしたが、Pixel 7aを初めて使ったときの画面の滑らかさには驚きました(電力消費を懸念して後で90fpsから60fpsに戻しましたが・・)。

また、データの移行も爆速でした。Redmi Note 9TとPixel 7aをType C - Type Cケーブルで繋いで初期作業であるデータ移行を行うわけですが、20分もかからずに終わり、そんなにデータ少なかったっけ?と嬉しいようなさみしいような気持ちでした。

8時間くらいベースを練習した日があった ある時たまたま、家での練習2時間+部室での個人練2時間+Aバンド練2時間+Bバンド練2時間、といった具合で8時間以上練習した日がありました。

4時間ほど練習した時点で右手も左手も疲れてくるのですが、8時間ほど練習すると逆にランナーズハイではないですが、疲れを感じずに演奏できる瞬間があります。

ただやはり次の日に疲れが残るのと、ベースが汗と皮脂でベタベタになるので、大学のサークルでやっていくだけなら1日1時間くらいがちょうどよさそうです。

オープンラボに向けたプロジェクトを作成して展示した 夏休みに入り、オープンキャンパスが開催されました。同時にオープンラボも開催され、私が所属する研究室からもいくつか出し物をすることになりました。

私の研究室では主にゲームAI・感情・自然言語処理などをテーマとしているため、出し物もそれに関連したものにする必要があります。

私は昨今の流行りである生成系AIをUnityに取り入れ、「バーチャル空間でAIと会話してみよう」をテーマにプロジェクトを作成しました。

このときの経験は別のブログに残してあるので、よかったら見てみてください。 kedzkiest.hatenablog.com

Moisesに出会った 何か曲のコピーをするとき、その曲の譜面やTAB譜があればそれを暗記すればいいのですが、中には譜面のない曲もあります。

そんなときどうするかというと耳コピをするわけですが、原曲を何度も聞いたとしても音を正確に取るのはなかなか難しいものです。ましてやベースパートは周波数的にも人間に聞こえにくい帯域なので大変です。

もっと簡単に耳コピできたらいいのにな、と思っていた時、Moisesというアプリに出会いました。 play.google.com

このアプリはAIによる音声分離を売りにしており、入力された曲をボーカル、ドラム、ベース、その他に分離することができます。プレミアム版だともっと細かく分割できるようです。無料版でもベース音を分離できるということで、ベーシストとしては大変嬉しい機能でした。

それ以来、耳コピが難しい曲をバンドでやることになった際などは、まずSpotifyなどで音声ファイルをダウンロードして、その音声ファイルをMoisesにアップロードして、分離された音源を聞いて練習する、という流れで効率的に練習できるようになりました。

サークル合宿を楽しんだ 8月末に軽音部のサークル合宿があり、ライブ演奏と会食、花火などを楽しみました。

私はボカロ系コピバンとバンドリのコピバンの2バンドで出演しました。

バンドリのコピバンで披露した曲は以下の2曲です。 youtu.be youtu.be

また、夜に友人とDetective Xというボードゲームで遊びました。 www.scrapmagazine.com

公式曰く「超リアルな捜査資料をもとに未解決事件の謎を解く、本格犯罪捜査ゲーム」で、私達は4人でプレイしてクリアまでに5時間ほど要しました。

ネタバレになりそうなので内容については何も言えませんが、普段ボードゲームをやらない私にはとても新鮮な体験でした。私達がプレイした御仏の殺人はDetective Xの第一作目なので、続編が待ち遠しいです。

9月

10年前の自分からの手紙が届いた 2013年の夏に開催された、サマーキャンプ2013 in クロスヴィレッジというイベントに参加した際に私が書いた「10年後の自分へ」という手紙がこの月に届きました。 www.jrc.or.jp

郵便受けの中にある手紙を見た時、はじめは何のことだか思い出せませんでしたが、すぐに記憶がよみがえってきました。

10年前、私はそのイベントに参加するために北海道に行き、同じく被災者の子どもたちとフィールドワークやラフティング、乗馬、マウンテンバイクなどを体験してきたのです。

当時の写真を見返して懐かしい気持ちになるとともに、復興のために活動してくださる団体・大人の方々に改めて感謝しました。

人形供養のアルバイトに従事した 友人からアルバイトの人手が足りない旨の連絡を受け、臨時で人形供養祭というイベントのスタッフを務めました。

このイベントでは供養・お祓いをしたい人形やぬいぐるみなどをお客さんから受け取り、それらをお祓い用に綺麗に並べ、祈祷の儀式が終わったらトラックに詰め込むという一連の作業を行いました。

なんとなく憚られたので現場の写真は撮っていませんが、和洋の大小様々な人形やぬいぐるみが部屋を覆い尽くす様は壮観な眺めでした。

東京観光を楽しんだ 9月22日から25日までの3泊4日で、東京観光をしてきました。主な目的は23日に予約したIb謎解きミュージアムと、24日に予約した東京ゲームショウでした。 ibnazotoki.jp expo.nikkeibp.co.jp

大まかな流れとしては 池袋->御徒町->浅草->銀座->神保町->文京区->幕張メッセ->秋葉原->新宿 といった順で回っていき、行きたかったお店やスポットを巡っていました。

以下ちょっとした写真集です。

ビックカメラ池袋にてゲームソフトの品揃えの良さに驚く
池袋 東武百貨店でやっていた秋の大北海道展のほたてラーメン
池袋のエフェクター専門店。宝の山!
御徒町の甘味処みつばちにて頂いたわさんぼん
台東区で見つけたホットソース専門の自販機
銀座のパン屋さん。雰囲気がいい!
Ib謎解きミュージアムより「無個性」(写真撮影OKの場所です!)
Ib謎解きミュージアム エンディング
TGSのP3Rのコーナー
TGSのR6Sのコーナー。憧れのBeaulo選手と会えた!
ホテルの近くで食べたタイ料理
来たぜ秋葉原
たまたまアトレ秋葉原アイドルマスターのコラボをやっていた

東京観光の写真集は以上です。

余談ですが、東京観光の前日の時点であと1GB使ったらデータ制限がかかる状態だったため、東京に着いた後は一瞬だけデータ通信ON->Googleマップを開く->すぐにデータ通信OFF、のようにして凌いでいました・・

10月

短大の文化祭で音響の手伝いをした 私の所属する大学の近くには短期大学部もあり、そこの文化祭のステージ発表にて、スピーカーを使ったダンス発表やバンド演奏があるため、音響のお手伝いとして参加しました。

イベントの際の音響や照明はライブハウス側に任せる軽音部も多いと思いますが、私の所属する軽音部は音響も照明も自分たちでやるスタイルなので、普段の経験を活かして機材セッティングを行い、計3日間にわたって文化祭をサポートしました。

FLAMEのWebGLデモを80%ほど再現した FLAMEは軽量かつ表情豊かに表現できる顔モデルで、SIGGRAPH 2017にて発表されました。
顔の形、表情、姿勢、色を柔軟に変更できるモデル

FLAMEのデモはこちらから体験できます↓ flame.is.tue.mpg.de

私の大学院生としての研究テーマにはAIを利用した感情生成が含まれており、このデモは非常に興味深いものでした。

FLAMEのデモはUnityのWebGLビルドで作られているようなので、自分でも作れるかも?と思い、80%ほど制作しました。
それがこちらです。 kedzkiest.itch.io

自分の環境でもFLAMEを使った表現を再現できることが分かったので、今度はこれを使ってどのように人を感動させるのかを考える必要がありますね。

シャニマス5.5thライブのアーカイブを観た もともとアイドルマスターシリーズのことはあまり知らなかったのですが、8月くらいからアイマスのコピバンを組む話が出ており、それをきっかけに予習のためにデレステシャニマスを始めました。

その矢先に、シャニマスのライブを観ないかと誘われたので、いい機会だと思いライブのアーカイブを観ました。ここで言うライブとはゲーム内のライブではなく、リアルの会場で声優さんが歌って踊るライブです。

2日間に分けてday1とday2を観ましたが、全く飽きることなく楽しめました。やっぱりいい曲ばかりですね。

食わず嫌いをしている人にもまずこのあたりを聴いてみてほしいです↓
無自覚アプリオリ
Give me some more...
シャイノグラフィ (2023 Version)
(埋め込みが上手くいかなかったのでリンクを貼っています。)

また、規模感こそ違いますが、同じくステージに立って観客を楽しませる者として、声優さんたちのステージ上での振る舞いは勉強になるものばかりでした。最高にアイドルしてるなぁ、と感じました。

授業課題を解くための方針が立たない この時期は自然言語処理と画像認識と統計の3つの授業を取っていましたが、とりわけ画像認識と統計の授業の課題は一筋縄でいかないものが多く、提出期限を伸ばしてもらうこともありました。

画像認識の課題は学部時代の知識をフル活用した上で海外のサイトなどを参考にして完成させましたが、統計の課題は提出こそしたもの、自信を持って正解と言えるのは半分もありませんでした。

11月

大学の学園祭で4バンド分出演した 11月になり、大学の学園祭が開かれました。例年、軽音部は学園祭でステージと講堂を使ってバンド演奏をしています。

私はヨルシカコピバン、ボカロ系バンド、結束バンドコピバン、アイマスコピバンの4つで出演しました。

ヨルシカコピバンで披露したのは以下の4曲です。 youtu.be youtu.be youtu.be youtu.be

ボカロ系バンドで披露したのは以下の4曲です。 youtu.be youtu.be youtu.be youtu.be

結束バンドコピバンで披露したのは以下の4曲です。 youtu.be youtu.be youtu.be youtu.be

アイマスコピバンで披露したのは以下の3曲です。
いつだって僕らは
ストリート・ランウェイ
パンとフィルム

アイマスコピバンで演奏した曲に関しては、埋め込みが上手くいかなかったのでリンクを貼っています。)

ライブのアーカイブを見返すともっと上手くできたなと思うのですが、練習でうまくできなかったところが本番ではできていたりするので、トータルで見ると自分の実力通りなのだろうと思います。

本番まで待機中・・謎ポーズ。

Cady Heronの元ネタを偶然知った kedzkiest.hatenablog.com 上の記事にて、NPCの人格や背景を決めるためにChatGPTに適当な人物の名前と背景を出力するよう頼んでみたところ、Cady Heronというアフリカ生まれの女性のプロフィールが出力されました。

私は何も疑わずそのデータをオープンラボ用のプロジェクトに一部加工して使ったのですが、11月にたまたま観た「ミーン・ガールズ」という映画の主人公の名前がCady Heronで、バックストーリーもほぼ同じでした。 filmarks.com

これが元ネタだったのね、と驚いた瞬間でした。

ベースのメンテナンスを行った 楽器というものは生き物なので、ベストな状態でいい音を出すためには適切なメンテナンスが必要です。

5月に2代目のベースを買ってからメンテナンスらしいメンテナンスをしてこなかったので、とりあえず状態を確認するために地元の楽器屋さんに足を運び、ベースを見てもらうことにしました。

結果的にいくつか修正が必要な箇所が見つかったので3日ほどベースを預け、帰ってきたときには購入した当時のような、弾きやすくてよく鳴る状態でした。

ちなみにこの楽器屋さん、サービスがいいのにも関わらず軽音部員の中でも認知されていないため、もしかすると私が最初に発見したのかもしれません。

自転車の泥除けが壊れた 高校生の時から使っている自転車があり、大学院卒業まで使い続ける予定だったのですが、11月に泥除け部分が根本から折れてしまいました。

瞬間接着剤で一時的にくっついたものの、いざ乗って走ろうとしたときに一瞬でまた折れたので、パーツの交換を検討しています・・

12月

マーダーミステリー「狂気山脈」を完登した 殺人事件を題材にした体験型の推理ゲームであるマーダーミステリーの中でも、屈指の難度とボリュームを誇る「狂気山脈」シリーズをGM、登山家、記者、調査員、医者、大学教授の6名で踏破しました。

ネタバレを避けるため内容については何も言えませんが、私は大学教授として、疑念渦巻く狂気の舞台で推理を行い、その後の自分と世界の運命を決定しました。

プレイしていく中で、Detective X以来の衝撃を受けました。それほど完成度の高い作品なので、ぜひ第一部から始めてみてください・・ booth.pm

ライブハウスでのラストライブに出演した 私が学部1年から修士1年までずっとお世話になってきたライブハウスさんが、今年で営業を終了することになりました。理由は建物の老朽化による移転です。

私はヨルシカコピバンとして出演し、以下の4曲を披露しました。
雨とカプチーノ

youtu.be youtu.be youtu.be

来年2月に移転が完了するとのことだったので、今から新天地でのライブを楽しみにしています!

体がなまっていることに気づいた 軽音サークルの交流会が企画され、体育館でおしゃべりしながらバスケやバレー、バドミントンを楽しみました。

当日は良かったのですがその翌日から3日間ほど、全身筋肉痛に悩まされました。異なる種目を代わる代わるやったので、全身をバランスよく使ったのだと思います。

歩き方がおかしくなりながら思ったのは、高校卒業からまともに運動していないせいでここまで体がなまってしまった、ということでした。

時間の流れが早い ジャネーの法則によれば、体感的な観点で20歳は人生の折り返し地点なのだそう。

ことの真偽はともかく、実際の感覚として時間の流れが早く感じるのは事実。

また、ジャネーの法則とは別に、楽しいことをしていると時間が早く過ぎる、というのは小学生の頃から思っていたこと。

時間の流れが早く感じる理由が、人生が充実しているからだったら嬉しいですね。

おわりに

1年を振り返ってみたら思いの外長くなってしまいました。

それでは、よいお年をお過ごしください。

convaiとARKitを組み合わせてAIと表情豊かな会話を楽しむ

はじめに

私の在籍している大学では夏にオープンキャンパスを開催するのですが、今年はオープンラボも同時に開催され、私が所属する研究室からもいくつか出し物をすることになりました。私の研究室では主にゲームAI・感情・自然言語処理などをテーマとしているため、出し物もそれに関連したものにする必要があります。

私は昨今の流行りである生成系AIをUnityに取り入れ、「バーチャル空間でAIと会話してみよう」をテーマにプロジェクトを作成しました。

今回作成したプロジェクトのポスター

使用技術

Unity

プロジェクトの最終的な見た目を作成するのに使用したゲームエンジンです。このプロジェクトではUIや画面効果、画面遷移、フレームワーク間の連携で活躍しています。

convai

youtu.be今回のプロジェクトの中核となったフレームワークです。ゲームの中に会話やアクションのできるNPCを導入できます。今回のプロジェクトではAIとの会話部分で活躍しています。

ARKit

iPhoneのフェイストラッキング機能を利用して3Dキャラクターのブレンドシェイプを制御するためのフレームワークです。今回のプロジェクトではプレイヤーとNPCの表情を活き活きとさせるのに活躍しています。

デモ

youtu.be

オープンラボ当日の光景

自分のプロジェクト"Meta-Meta"のセクション

モニター、キーボード、マウス、iPhone、マイクがセットアップされています。キーボードのスペースキーを押している間だけプレイヤー(画面左)の音声を認識し、それに対してAI(画面右)が返答します。

おわりに

convaiとARKitを使用してAIと表情豊かな会話を楽しめるプロジェクトを作成しましたが、「バーチャル空間でAIと会話してみよう」というコンセプトを来場者の方々に十分に伝えられる出来になったのではないかと思います。

Shap-Eを使ってローカル環境で3Dモデルを生成してみる

はじめに

OpenAI社が2023年の3月に論文を発表し、そこでShap-Eというモデルが登場しました。
論文へのリンク:
Shap-E: Generating Conditional 3D Implicit Functions


Shap-Eの概要(原文をDeepL翻訳しました)
我々は、3D資産のための条件付き生成モデルであるShap-Eを発表する。Shap-Eは、単一の出力表現を生成する3D生成モデルの最近の研究とは異なり、テクスチャメッシュと神経放射フィールドの両方としてレンダリング可能な暗黙関数のパラメータを直接生成します。Shap-Eの学習は2段階で行われます。1つ目は、3D資産を陰関数のパラメータに決定論的にマッピングするエンコーダの学習、2つ目は、エンコーダの出力に対して条件付き拡散モデルを学習します。3Dデータとテキストデータを組み合わせた大規模なデータセットで学習した結果、複雑で多様な3D資産を数秒で生成することができました。点群に対する明示的な生成モデルであるPoint-Eと比較すると、Shap-Eは高次元の多表現出力空間をモデル化しているにもかかわらず、収束が早く、サンプル品質も同等かそれ以上であることがわかります。モデルの重み、推論コード、サンプルは、以下のサイトで公開しています。


ここで紹介されている以下のサイトとはGitHub上に公開されているShap-Eのサイトのことです。
github.com


概要にある通り、実装やサンプルコードなどが紹介されています。

今回やることとして、サンプルコードのうち、指定したテキストをもとに3Dモデルを作成するものを試してみたいと思います!
また、GitHubの方では.ipynbファイルでサンプルコードが提供されており、クラウド環境でJupyter NotebookやGoogle Colaboratoryを使用してコードを実行することが想定されているようですが、今回はローカル環境pythonプログラムを実行して同じことをやってみたいと思います!

作成したプロジェクト

github.com

↑公開から2日で100スター以上付きました!!

環境

OS:Ubuntu 20.04.5 LTS
CPU:Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz
GPUNVIDIA GeForce RTX 3090
Cuda version:12.1
pip version:23.1.2
conda version:23.5.0

コード実行までの手順

shap-e-localの方にも英語で手順を書いていますが、こちらでは日本語での手順を載せておきます。

1. shap-e-localをzipフォルダとしてダウンロードし、解凍する

2. Anacondaを使用して仮想環境を作る
 作れたら仮想環境を起動

conda create -n shap-e python=3.10
conda activate shap-e

3. カレントディレクトリを解凍したフォルダに変更する

// 例
cd shap-e-local-main

4. 必要なライブラリをインストール

pip install -e .
pip install pyyaml ipywidgets fvcore iopath

5. testTorch.pyを実行してtorchがcudaを認識しているか確かめる

python testTorch.py

testTorch.pyの出力が下のようになっていれば、torchがcudaを認識できています!
PyTorch is using: cuda
PyTorch version: 2.0.1+cu117
Result of tensor operation: tensor([ 8., 15.], device='cuda:0')

6. pytorch3dPrep.pyを実行して適切なpytorch3dのバージョンを見つける

python pytorch3dPrep.py

pytorch3dPrep.pyは例えば"py310_cu117_pyt201"のような文字列を出力します。
この文字列を覚えておいてください。

7. pytorch3dのライブラリをインストール

pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/{output string}/download.html

// 例
pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py310_cu117_pyt201/download.html

8. 3Dモデルを生成する
下のコマンドを実行する前にtextTo3D.pyを編集することで、テキストプロンプトやバッチサイズを変更できます。

python textTo3D.py

指定したバッチサイズに応じて、いくつか.objファイルと.plyファイルが出力されます。

9. 生成された3Dモデルのプレビューを見たい方へ
まずは3Dモデルを表示するのに必要なライブラリをインストールします。

pip install vedo
pip install open3d

次に、下のコマンドを使って生成された3Dモデルのプレビューを見れます。
コマンドライン引数のfilenameは拡張子を除いたファイル名のことです。例えばpython displayPly.py example_mesh_0を実行すると、example_mesh_0.plyファイルのプレビューが表示されます。)

python displayObj.py {filename}
python displayPly.py {filename}

displayObj.pyやdisplayPly.pyといった実行プログラムはプレビューを見ようとしている.objファイルや.plyファイルと同じ階層にあるようにしてください(デフォルトでそうなっています)。

デモ

生成した3DモデルをBlenderに持ってきてみた

入力となるテキストインプットをそれぞれ"an apple"、"a shark"、"a table"としてりんご、サメ、机の3Dモデルを生成したあと、それらをBlenderにインポートして簡単なシーンを作ってみました。

床や壁はBlenderの平面オブジェクトです。

おわりに

Shap-E公式のGitHubサイトで提供されているtext-to-3dのサンプルコードを書き直して、ローカル環境で3Dモデルを生成することができました!

Shap-Eは従来の最適化ベースでの生成モデルに比べて非常に推論時間が短く、10~20秒ほどで指定した3Dモデルを作ってくれるので、試行錯誤を高速に繰り返せる点で優れていますね!

また、生成された3Dモデルをそのまま使うのではなく、Blenderなどで手直しする、別の最適化ベースの生成モデルの入力として使う、といった応用も考えられます。

最後になりますが、よろしければshap-e-localを試してみて、不具合報告や改善の提案などをissueにしていただけると嬉しいです!
github.com

3DアバターのファッションをAIに決めてもらう

はじめに

Ready Player Meというサービスを使うと、VRゲームやソーシャルVRに対応した3Dアバターを簡単に作成することができます。

Webカメラからの入力をもとに作成された著者のアバター

またアバターの衣装に関しても、すでに用意されている衣装セットの中から選択して変更できます。

用意されている衣装セットの数はかなり多い

今回はReady Player Meに、画像生成AIであるDall-Eを使用してファッションのテクスチャを生成する新機能が追加されたため、ご紹介します。

注意事項

今回取り上げる機能は試験段階のものであり、生成されたアバターを他のVRプラットフォームに送ることはできません。

現時点ではアバターの画像をダウンロードまたはSNSでシェアする機能だけが利用できます。

作ってみる

Ready Player Me LabsからAIファッション生成のサービスを利用できます。

設定画面

まずはシャツやジャケットなど服の外形を決定し、そのあとにキーワードを入力することで服のテクスチャだけが変更されるようです。(上の画像も服の外形の一つですが、ファッションに疎い私にはこの服を何と呼ぶのか分かりません・・)

テクスチャを指定できる部位はトップス、ボトムス、シューズの3つでした。

それでは、キーワードを入力してファッションを生成してみましょう!

イデア1

生成されたファッション

トップス、ボトムス、シューズのテクスチャはすべて、"black"というキーワード1単語のみで生成しました。

黒一色にならないことは想像できましたが、ここまで特徴的に白黒の模様が入るのは面白いですね。

イデア2

生成されたファッション

トップスのキーワードに"tops"、ボトムスのキーワードに"bottoms"、シューズのキーワードに"shoes"を指定しました。

ボトムスとシューズについてはよく分かりませんが、トップスは「トップス柄」になっているように見えます。

イデア3

生成されたファッション

トップス、ボトムス、シューズのテクスチャはすべて、"lava flows"というキーワードで生成しました。キーワードの日本語訳は「溶岩が流れる」です。

イデア4

生成されたファッション

トップス、ボトムス、シューズのテクスチャはすべて、"mystery of the universe"というキーワードで生成しました。キーワードの日本語訳は「宇宙の神秘」です。

解説と考察

キーワードの文頭はすべて小文字で統一しました。もしかしたら"black"と"Black"で生成結果が大きく変わるのかもしれませんが、これはDall-E側への関心であるため、今回その検証は行いませんでした。

「溶岩が流れる」のファッションに見られるように、非常に表現力の高いテクスチャを生成できる一方で、"black"というキーワードで黒一色にならないため、狙って思い通りのテクスチャを生成するのは難しいといえます。そのため、欲しいテクスチャを得るには同じキーワードで何度も生成するか、"black"と"BLACK"のように微妙にキーワードを変えることが有効かもしれません。

おわりに

今回はReady Player Meの試験的な機能である、AIによるテクスチャ生成を試してみました。

注意事項の項目で述べたように、生成したテクスチャを持つアバターをVRChatなどの他のプラットフォームで利用することはまだできません。

しかし、将来的に活用先が増えることが予想されるため、Ready Player Meがアバター作成のためのより魅力的な候補になるかもしれませんね。

Unityで3点ライティングを使って美しくキャラクターを照らす

はじめに

Unityでゲームやカットシーンを作っているとき、ただ環境の中にキャラクターを置くだけでは、ライティングのせいで魅力的に見えないことがあります。

今回は3点ライティングと呼ばれる手法を使い、キャラクターを美しく照らせるような工夫をしてみました。

3点ライティングとは?

3点ライティングの考え方自体は様々なブログ・記事で紹介されているため、ここでは簡単に説明します。

3点ライティングはその名の通り3つの光源で対象を照らす手法です。3つの光源はそれぞれキーライト、フィルライト、バックライトと呼ばれ、別々の役割を持ちます。

3点ライティングを上から見た例
キーライト

キーライトはキャラクターから見て右斜め45度あるいは左斜め45度の位置に設置し、また高さはキャラクターよりもやや高い位置にするのが一般的です。
キーライトは対象を照らすためのメインとなるライトで、表面の影や質感を強調するために使われます。

フィルライト

フィルライトは同じくキャラクターの前面かつキーライトの向かいに設置し、高さはキーライトよりも低い位置にします。
フィルライトはキーライトによってできた影を和らげ、ライティングのムラを減らすために使われます。

バックライト

バックライトはキャラクターの後ろ側かつキーライトから見たキャラクターの真裏に設置します。
キーライトやフィルライトとは違い、明るさを追加するのではなく輪郭を際立たせる目的で使われます。

以上の説明はすべてキャラクターが正面を向いており、さらに3つの光源以外に光源がないことを想定しているため、キャラクターの向きや環境光などにより3点ライティングのセットアップは変わってきます。

詳しくは下のサイトで解説されていますので、そちらをご覧ください。
lightingandgadgets.com

なぜ3点ライティングを採用するの?

3点ライティングでは異なる角度から複数のライトを当てているため、対象の立体感を強調することができます。

以下はUnityでキャラクターを照らす際に、ディレクショナルライトだけを使う場合とポイントライトによる3点ライティングを使う場合の比較画像です。

左:ディレクショナルライトのみ 右:3点ライティング

ちょっとしたカットシーンを作ってみる

3点ライティングを用いることで、キャラクターを魅力的に映したカットシーンになったと思います。
youtu.be

環境・使用アセット

OS:Windows 11, version 22H2
仮想環境:Unity 2021.3.14f1 Built-in RP
キャラクターの3Dモデル
assetstore.unity.com

街の3Dモデル
assetstore.unity.com

おわりに

Unityでポイントライトを使った3点ライティングを実現することでそのメリットを実感できました。ライティングで困った際には、まず3点ライティングをベースに考えてみても良さそうです。

とはいえ、対象の顔に影が差すほうが効果的な場面もあると思うので、目的に応じてライティングを使い分けましょう!

UnityのAnime Toolboxを使ってみる

はじめに

Unity Anime Toolbox は、Unityでアニメや映像を制作するための数々の機能を提供する包括的なパッケージです。(原文ママ

Unity 2020.3.41f1 以降のバージョンに対応しており、主にWindowsプラットフォームで動作するようです。今回紹介するプロジェクト群はすべてWindows上のUnity 2021.3.12f1で制作し、テンプレートは0.16.1-expのHDRP版を使用しました。

このパッケージの詳細な情報や使い方は、Anime ToolboxのGitHubリポジトリのREADMEを参考にしてください。
github.com

また、noteのマガジンで「今日からはじめるAnime Toolbox」という公式記事が公開されています。GitHubリポジトリよりも詳しい概要や実践的な使い方がまとめられていますので、ぜひご一読下さい。
note.com

サンプルプロジェクト1

「今日からはじめるAnime Toolbox」の第3回の内容を元に、3Dモデルと2D素材の合成を行いました。

完成したもの

立ち絵素材としてわたおきば様より「女性01(学生)」を、背景素材としてきまぐれアフター様より「街 通学路(昼)」をお借りしました。

Anime ToolboxではVisual Compositorというコンポーネントを使用し、最終的に出力されるシーンを様々な種類のノードの組み合わせで調節できます。

このサンプルプロジェクトでのVisual Compositorの外観

サンプルプロジェクト2

「今日からはじめるAnime Toolbox」の第4回の内容を元に、よりアニメらしいシーンを制作しました。
www.youtube.com
3DモデルとしてUnityアセットストアで公開されている「Banana Man」をBanana Yellow Games様よりお借りしました。

キャラクターを動かすだけでも、いくつか手法が考えられます。例えば以下はルートアニメーションのついていないキャラクターアニメーションを仮定していますが
①その場でキャラクターをアニメーションさせて背景をスクロールさせる
②背景は固定し、キャラクターを時間ベースでスライド移動+アニメーションさせる
③Timelineアニメーション記録でキャラクターのルートを動かす

上のような手法でキャラクターの移動は実現できそうです。動画では②の手法を採用しました。

おわりに

今回はAnime Toolboxを使い、シンプルな画像と映像を制作しました。

使ってみた感想としては、Unityの多くの機能がAnime Toolboxによってラップされていることで、各機能の詳細を知らずともGUIベースで簡単に色々試せる印象です。

とはいえ、”映える”画を作るためにはやはりそれなりの技術と知識が必要になるため、誰でも簡単に地上波で放送されているようなアニメを制作できるわけではありません。

しかし、今後さらにAnime Toolboxの機能が改善され、チュートリアル等も充実していくことが想定されるため、映像制作としてのUnityの立場がさらに強くなるかもしれません。

話題のChatGPTを試してみる

はじめに

TwitterでChatGPTの話題が流れてくることが多くなりました。ただ会話を楽しむだけでなく、何か問題に対して解決策を提案できる能力を有している会話モデルのようで、面白そうなので色々試してみました。

ChatGPTとは?

openai.comでChatGPTについて書かれているブログがありました。
openai.com
以下はその導入部をDeepLで日本語訳したものです。

ChatGPT: 対話のための言語モデルの最適化
我々はChatGPTと呼ばれる会話形式で対話するモデルを訓練しました。対話形式により、ChatGPTはフォローアップの質問に答えたり、間違いを認めたり、間違った前提に挑戦したり、不適切な要求を拒否したりすることが可能になっています。ChatGPTはInstructGPTの兄弟モデルで、プロンプトの指示に従い、詳細な応答をするように訓練されています。

フォローアップの質問とは、前の質問の答えに対しての質問ですね。

なお、注意事項として以下の3点があります。
・不正確な情報を生成することがある
・有害な指示や偏った内容を生成することがある
・2021年以降の世界や出来事に関する知識が乏しい

これらはChatGPTのホーム画面に記載されています。
では早速会話を始めてみましょう。

あいさつ

自分のことをプログラムだと認識している様子

ありがちな疑問

わかりやすく回答してくれる

何を話そうか

AIから会話のアドバイスを頂くとは・・

物事の良い側面を知りたいとき

レポートを書くときに参考になるかも・・?

物事の悪い側面を知りたいとき

本当にそうか?

フォローアップ質問を試してみる その1

前提を正しく理解していそう

フォローアップ質問を試してみる その2

同じことを繰り返していますが、確かにAAAタイトルはそれに従っていますね

間違った前提を試してみる その1

一蹴。スイカは野菜だと思っていましたが、どうなんでしょうか?

間違った前提を試してみる その2

一応医者にかかることを勧めてくれる

コードを書いてもらう

要件に沿ったものを出力できている

おわりに

自分でもChatGPTを使ってみることで、その素晴らしさを実感することが出来ました。

SiriやAlexaといったAIのテキスト版という印象を受けましたが、間違った前提を正して回答したり、コードまで出力してくれるあたりが優れていると感じました。

とはいえ、「サッカーは犯罪につながることがある」といった根拠のない情報を生成することもあるため、ChatGPTの注意事項にもあるように、生成された内容を鵜呑みにすることは危険です。

基本的には自分の頭で考え、補助としてAIを使うくらいがちょうどいいバランスだと感じました。