PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

データセットがなくても作れる。InstagramとPinterestから“姿勢提案AI”用データを集めた話

記事のキーポイント

この記事は何の話?

今回紹介するのは、「データセットがないなら、作ればいいじゃない」という、かなり実践的で気合いの入ったAI開発の話です。

元記事の著者は、ユーザーの背景に合わせて「この場所ならこのポーズが合うよ」と提案するAI、いわば Pose Suggester を作ろうとしました。
たとえばカフェ、公園、街中のような背景を見て、画面上に2Dの棒人間みたいな骨格を重ねて、自然なポーズのヒントを出す仕組みです。

で、ここが面白いところなんですが――こういう用途にぴったりな公開データセットが、見つからなかったんですね。
KaggleやHugging Faceに「ほら、はいどうぞ」と置いてあると思いきや、そう都合よくはいかない。機械学習あるあるです。

だから著者は、​InstagramとPinterestから画像を集めて、独自のデータセットを作ることにしました。これ、地味にすごいです。
AI開発ってモデル選びの話になりがちですが、実際には「何を学ばせるか」を決めるデータ作りが本丸なんだよな、と改めて思います。

image_0003.svg

まずは分類を決める。雑だとAIも雑になる

最初にやったのは、画像の分類ルールをちゃんと決めること。

著者は対象を次の3つの環境に分けました。

さらにそれぞれを、

image_0004.svg

の2種類に分けています。

つまり、
3環境 × 2構図 = 6カテゴリ です。

そして各サブカテゴリごとに、​高品質で違いのある画像を50枚ずつ集めることを目標にしたそうです。
合計でベースとなる参照画像は 300枚

この設計、かなり大事です。
データセット作りでよくある失敗は、「とりあえず集める」こと。けれど、分類の軸が曖昧だと、AIは平気で変なルールを覚えます。たとえば「公園っぽい背景=全部同じ」みたいな、使い物にならない学習をしてしまうわけです。

個人的には、この段階でしっかり「何を当てたいAIなのか」を言語化しているのがすごく良いと思いました。
モデルより先に、問題設定を固める。これは地味だけど強いです。

image_0005.svg

画像はInstagramとPinterestから集める

では、その画像をどこから持ってくるのか。

著者が選んだのは Instagram と Pinterest
理由はシンプルで、自然なポーズやおしゃれな構図がたくさんあるからです。たしかに納得感があります。普通の写真検索より、生活感や雰囲気がある画像が見つかりやすいです。

ただし、ここでの注意点もちゃんと書かれています。

1. 偏りを避ける

同じインフルエンサーばかり集めると、モデルがその人たち専用になってしまう。
だから、​体型・身長・服装の多様性を意識したそうです。

image_0006.svg

これは本当に重要です。AIは思っている以上に雑食ではありません。
一見「顔やポーズを理解している」ように見えても、実際には「よく出てきた見た目」に強く引っ張られます。だから偏りはあとで大事故になります。

2. 背景の種類を増やす

「Nature」といっても芝生だけではダメ。
森、海、ハイキングコースなども含めて、​自然の幅を持たせたそうです。

これもかなり筋がいいです。
もし緑の芝生ばかり学習させたら、AIは「自然=緑一色」と勘違いしてしまうでしょう。そうなると、海辺や岩場に出た瞬間に弱くなるはずです。

3. 主役がはっきり見える画像だけを使う

背景がごちゃごちゃしていると、姿勢推定が難しくなります。
なので、​人がはっきり見える画像を選んだとのこと。

これも地味ですが超重要。
AIは人間みたいに空気を読んで「たぶんこの人が主役だな」と勝手に判断してくれません。見づらいものは見づらいままです。

image_0007.svg

手作業を減らすために、MediaPipeで自動ラベル付け

データを集めたあとに待っているのが、ラベル付けです。
これが本当に面倒。特に骨格推定系のデータでは、17〜33個くらいの関節位置を画像ごとに付けることになります。正直、手作業はしんどいです。

そこで著者は MediaPipe Pose Landmarker を使い、画像から関節座標を自動抽出する仕組みを作りました。

ざっくり言うと、

  1. 画像を読み込む
  2. MediaPipeで人の関節位置を検出する
  3. 関節座標をJSONに保存する

という流れです。

image_0008.svg

これで、手で1枚ずつ点を打つ必要がなくなります。
しかも、抽出した座標は 体の大きさに対して正規化 して保存したとのこと。これは、身長差や写り方の違いに引きずられにくくする工夫です。

ここはかなり賢いです。
「人がやると大変だから自動化する」というだけでなく、​その後の学習で使いやすい形に整えているのがいい。単なる時短ではなく、データ設計としてちゃんとしている感じがあります。

300枚を1,800枚へ。データ拡張で水増しする

300枚の画像は、プロトタイプとしては悪くないけれど、深層学習には少し心許ない。
そこで著者は、​albumentations という画像加工ライブラリを使って、学習用データを約1,800枚まで増やす計画を立てました。

行った加工は主に次の3つです。

image_0010.png

これ、かなり実用的です。
たとえばカフェの暗い照明や、屋外の強い日差し、手ブレしたスマホ写真なんかは、現実には普通に起きます。だから、そういう揺らぎを人工的に再現しておくわけです。

左右反転の落とし穴

ただし、左右反転には罠があります。
人の左手が右手になるので、​ラベルも一緒に反転しないと破綻するんですね。

著者はここで、MediaPipeのキーポイントをちゃんと受け取り、左右の関節インデックスを入れ替える処理を入れたそうです。

これはとても大事なポイントです。
画像だけ反転してラベルをそのままにすると、AIは「見た目と正解がズレた」データで学ぶことになります。つまり、変なことを覚える。
データ拡張は便利ですが、​加工したらラベルも合わせる。この当たり前が、実は一番事故りやすいと思います。

image_0012.png

この話のいちばん大事な教訓

元記事の最後で強調されているのは、次の2点です。

1. データの質は、モデルの複雑さより大事

著者は、軽量な MobileNetV2 のようなモデルでも、きちんと作り込まれた高品質データなら十分に勝てると述べています。

これはかなり本質的です。
AI界隈では「もっと大きいモデル」「もっとすごいアーキテクチャ」に目が行きがちですが、雑なデータで豪華なモデルを回しても、たぶん結果は微妙です。
むしろ、丁寧に選別された小さめのデータのほうが、ちゃんと仕事をすることは多いです。

2. プロダクト視点でデータを考える

データ収集をすると、結局「誰が」「どんな場面で」「どう使うのか」を考えざるを得ません。
著者は、​Egocentric(自分視点、たとえばメガネカメラ)​Exocentric(第三者視点、たとえばノートPCのカメラ)​ の違いを早めに定義したことで、画像の選び方が大きく変わったと書いています。

ここ、かなりプロダクトっぽくて好きです。
AIを作るとき、技術だけ見ていると「どんな入力を想定するか」がぼやけがちです。でも実際には、ユーザーの使い方がデータの形を決めるんですよね。
個人的には、機械学習の難しさって、モデルよりもむしろこの「現実の使われ方」を先に固めるところにあると思います。

image_0013.png

いま進んでいる次の段階

この記事では、データセットの準備が完了し、次のフェーズとして以下に進むとされています。

KNNは、ざっくり言うと「近いものを探す」アルゴリズムです。
つまり、ユーザーの背景に近い例を見つけて、そこに合うポーズを提案するために使うのだと思われます。

この構成は、派手な生成AIというより、​きちんと設計された推薦システムに近い印象です。
実用上は、こういう堅実な作りのほうがむしろ強いのではないかと思います。

まとめ

この元記事の面白さは、AIモデルそのものよりも、​データをどう作るかに主眼があることです。

image_0014.png

こういう話は、派手さはないけれど、AI開発の現場感があってすごく好きです。
「モデルを作る」より「モデルが学べる土台を作る」ほうがずっと泥臭い。でも、その泥臭さこそが勝負どころなんですよね。


参考: No Dataset? No Problem. How I Curated a Custom AI Dataset From Instagram & Pinterest to Build a Pose Suggester

同じ著者の記事