MemoryBody: デジタルな記憶を身に纏う
コンセプト
SNS上の過去の投稿データは、その人自身のアイデンティティ・行動・次の投稿を静かに縛り付けます。 ユーザーに過去のSNS投稿データを文字通り「身に纏わせる」ことで、デジタルな記憶と自己の関係を身体的に体験させるインタラクティブ作品です。


技術的アプローチ
本作品の核心となる技術は、Facebook AI Research (CVPR 2018) の DensePose(Dense Human Pose Estimation In The Wild)とそれを利用したテクスチャトランスファーです。
DensePoseによるIUVマッピング
通常のポーズ推定がキーポイント(関節座標)を推定するのに対し DensePose は画像中のすべての人物ピクセルを 3D 人体サーフェスモデル(SMPL モデル)上の座標に対応付けます。この対応付けをRGBのように表現するのが IUV 画像と呼ばれる 3 ch 画像です。
| チャネル | 意味 |
|---|---|
| I(部位インデックス) | 体の 24 パーツのどれに属するか(背面・前面の胴体、上腕・下腕、大腿・下腿など) |
| U | そのパーツ表面上の横方向座標(0〜255 にスケーリング) |
| V | そのパーツ表面上の縦方向座標(0〜255 にスケーリング) |
モデルには ResNet-101 + FPN(Feature Pyramid Network) をベースにした DensePose-RCNN を使用しています。
テクスチャアトラスとの対応付け
テクスチャ素材の基盤として SURREAL データセット付属のテクスチャアトラス(texture_from_SURREAL.png)を使用します。これは 24 パーツそれぞれに対応する 200×200 px のテクスチャ画像を 4×6 の格子状に並べた 1 枚の画像です。以下のように分解して 24 枚のパーツ別テクスチャとして扱います。
TextureIm = np.zeros([24, 200, 200, 3]) for i in range(4): for j in range(6): TextureIm[6*i+j, :, :, :] = Tex_Atlas[(200*j):(200*j+200), (200*i):(200*i+200), :]
TransferTexture 関数は IUV マップの各ピクセルが示す (I, U, V) 座標をもとに、テクスチャアトラスの対応ピクセルを元画像へ書き込みます。SNS 投稿テキストや画像をこのアトラス形式に変換して与えることで、ユーザーの身体表面に「過去の記憶」を投影できます。
処理フロー
- カメラ撮影(Google Colab + JavaScript で Web カメラから取得)
- DensePose 推論(ResNet-101 FPN モデルで IUV 画像・INDS 画像を生成)
- テクスチャ準備(SNS 投稿データ → 24 パーツ対応のテクスチャアトラス)
- テクスチャトランスファー(IUV 座標で人体表面にテクスチャを投影)
- 合成画像の出力・表示
使用技術
- DensePose (Facebook AI Research, CVPR 2018) — 人体の密なポーズ推定・IUV マッピング
- ResNet-101 + FPN — DensePose のバックボーンネットワーク
- Detectron / Caffe2 — DensePose の推論フレームワーク
- SURREAL テクスチャアトラス — 人体 24 パーツへのテクスチャマッピング基盤
- OpenCV — 画像の読み書き・処理
- Google Colaboratory — GPU 環境での実行
実装
ソースコードはGoogle Colabで公開しています。