← [ TECH / 技術部 ] に戻る
OBSERVATION · 其の7214 · 2026.07.23

GNM Head 導入記(1)|地形から拾った顔を、実在しうる人体3D統計モデルに投影する

GNM Head 導入記(1)|地形から拾った顔を、実在しうる人体3D統計モデルに投影する — GNM Head, 地形から顔へ, 3D人体モデル

こんにちは、パレイド技術部の夏目です。今回から数回の連載で、ひとつの技術を導入していく過程を記録します。

これまで技術部と辺境部では、地形の起伏から「顔」を検出する連載「日本人面地形」と、AITuberキャラクターの見た目や口調を記号として集めた「記号の記録」を、それぞれ別のものとして進めてきました。今回はこの二つを繋ぐ前段の技術を検証します。地形から拾った顔は、そのままではアバターの下絵に使えない——なぜそう言えるのか、というところから始めます。

地形をなぞって得た顔メッシュ(MediaPipe による 478 点の顔ランドマーク+奥行き)は、あくまで山肌の凹凸をノイズ込みで拾ったものです。人間の顔らしく見える瞬間はあっても、「実在しうる人間の顔」ではない。これをアニメ風アバター生成の下絵(ControlNet の入力)にする前に、いったん「実在しうる顔として最も近い形」へ寄せておきたい。その投影先として採用したのが、Google が 2026 年 7 月に公開した GNM Head です。今回は、GNM Head とは何か・なぜこれを選んだか・macOS でのセットアップまでを扱います。

本記事はローカル LLM による自動執筆パイプラインで生成されました。現段階ではクラウド AI(Claude 等)の補助や人間の編集が介在していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。

GNM Head とは何か

GNM Head は、Google が 2026 年 7 月に公開した parametric 3D human head model(パラメータで形を変えられる 3D 頭部モデル)です。リポジトリは google/GNM にあり、ライセンスは Apache 2.0。実在の人体 3D スキャンから学習した統計モデルで、これは外部の公開プロジェクトなのでそのまま参照できます。

このモデルで今回いちばん効くのが、個体差(identity)を表す空間が 253 次元・線形になっている点です。線形ということは、検出した顔の点群を目標に置いて最小二乗で 253 個の係数を解くだけで、「その点群に最も近い GNM の顔」が一意に決まる、ということです。ノイズだらけの地形メッシュを渡しても、出力は必ず「実在の顔から学んだ 253 次元の範囲内」に収まります。これが「実在しうる顔に寄せる」という言い方の中身です。

もう一つ、GNM Head のテンプレートは頭部だけでなく首・肩まで含んでいます。これは後の工程でアバターの構図(胸から上を映すバストショット)を安定させる伏線になります。顔だけのメッシュを下絵にすると、生成側が全身の動的なイラストに流れてしまいがちで、そこを土台の形状で押さえられるのは大きい。詳細は連載の後半で扱います。

未フィット状態の GNM Head 中立メッシュを自前レンダラで描いたもの

上の画像が、まだ何もフィットさせていない GNM Head の素の姿です。中立(平均)状態のメッシュを、後述する自前のレンダラで描きました。ここに地形由来の顔を最小二乗で寄せていくと、この平均顔が少しずつ「その山の顔」に変形していく、というのが連載全体の流れになります。

なぜ GNM に至ったか

最初から GNM Head を選んだわけではありません。手前に二つの案があり、どちらも隘路に突き当たって撤回した経緯があります。技術部としては、この却下の記録のほうが後で効くので残しておきます。

一つ目は、別プロジェクトで作った石材胸像の 3D モデルを、img2img の初期画像(init)に流用する案でした。これは一見早いのですが、「地形 → 胸像画像 → 3D 化 → また画像生成」と、生成物をもう一度入力に戻す循環参照になります。どこが元でどこが生成かが辿れなくなるため、下絵の素性を保てないと判断して却下しました。

二つ目は、Blender と MPFB(MakeHuman ベースの人体生成アドオン)で人体メッシュを手続き的に組み上げる案です。首・肩・胴を継ぎ足して構図を作る発想でしたが、過去の別プロジェクトで同種の手続き的メッシュ生成が実績不良だったため撤回しました。手で継いだ肩の曲線は人間らしくならず、下絵として渡すと生成側に別の形として誤読されがちです。

検討した案 中身 判定
石材胸像の 3D モデルを init に流用 別プロジェクトの生成物を再利用 × 地形→画像→3D→画像の循環参照になる
Blender/MPFB で手続き的にメッシュ生成 首肩胴を継ぎ足して構図を作る × 過去プロジェクトで実績不良・肩が不自然
GNM Head(実在スキャンの統計モデル) 253 次元・線形の identity にフィット ○ 軽量・実在範囲・首肩込みで構図も解決

GNM Head が決め手になったのは、この表の三点です。統計モデルなので実在しうる範囲から外れにくく、線形なのでフィットが軽い。実測でも identity フィットは線形最小二乗で CPU 数百ミリ秒、GPU 不要です。加えて首・肩まで含むのでバストショットの構図問題も同時に片付く。この後の重い処理(アニメ画像生成)だけに GPU を回せばよい、という切り分けができます。

macOS セットアップ(pyrender の罠)

導入自体は素直です。公式リポジトリを clone して、形状モデルのパッケージを仮想環境(.venv)に入れるだけです。

# 公式リポジトリを clone
git clone https://github.com/google/GNM.git

# 形状モデル (gnm.shape) を仮想環境に editable インストール
pip install -e /path/to/GNM/gnm/shape

ここまでは問題なく進みました。壁は描画のほうにありました。GNM Head の想定レンダラは pyrender ですが、これは macOS では動きません。原因は、pyrender がヘッドレス描画に使う OSMesa(画面を持たずにソフトウェアで 3D を描くためのライブラリ)が macOS では素直に入らないことです。ここでいったん手が止まりました。

対処として、描画をあきらめる代わりに計算と描画を切り分けました。GNM Head の本体(253 次元 identity のフィット計算)はレンダラに一切依存しないので、そこは公式のまま使い、メッシュを画像にする部分だけ、既に「日本人面地形」で顔メッシュを描くのに使っていた自前の z-buffer ラスタライザに差し替えました。z-buffer は、重なり合う面のうち手前のものだけを残して奥を隠す、ごく基本的な陰面消去の仕組みです。既存ツールにこれがあったので、OSMesa を用意せずに GNM メッシュを描けるようになりました。先ほどの中立メッシュの画像も、この自前レンダラの出力です。

この切り分けの効きどころは、重い処理と軽い処理でハードウェアの前提が変わることです。identity フィットも、その前段の MediaPipe による顔メッシュ再走査も CPU で完結し、GPU が要るのは最終段のアニメ画像生成(SDXL)だけ。手元の Mac で下絵づくりまでを完結させ、GPU はいちばん重いところに集中させられます。

まとめ / 次回に続く

今回のまとめです。GNM Head は、実在の人体スキャンから学んだ 253 次元・線形の統計モデルで、地形由来のノイズ入り顔メッシュを「実在しうる顔として最も近い形」へ投影する土台になります。macOS では想定レンダラの pyrender が OSMesa 不在で動かないため、計算はそのまま・描画だけ自前 z-buffer に差し替える形で回避しました。

次回は、地形の顔検出に使っている MediaPipe の点と、GNM Head 側の既知 68 点との対応表を、外部の未検証情報に頼らず自己検証的に導出する話に挑みます。公式にもコミュニティにも信頼できる対応表が見当たらなかったため、GNM 自身の点を描いた画像に MediaPipe をかけ直して実験的に作った、という工程です。その先(第 3 回)で、この投影結果を SDXL の ControlNet と img2img に繋いで、実際にアバターを生成するところまで進めます。

▶ 関連動画 · YOUTUBE
━━ 観るのを再開 ━━
前の記事を読む
技術部 · 【パレイドリア奇譚 04】秩父珍石館 ── テレビが拾った「人面石くん」、写真のない一件
動画を観る
YouTube
次の記事を読む
技術部 · AIで256倍楽しむ【女神転生】[FC] 第5回|迷宮を地図に起こして、図鑑ごと遊べるようにする
━━ 他の観測領域 ━━
TECH · 技術部
MacWhisper 14 を技術部目線で読む|エディタ刷新と、whisper.cpp 一択ではなくなった「Parakeet ローカル対応」
PHIL · 思想部
AI自動化ピラミッドの可視化(9)|稼働率は下がり続けていた――月次レビュー第2回
FRONT · 辺境部
【スーパーマリオ256W】世界56を歩く — ファミコンのバグ面 56-1〜56-4