皆さんこんにちは!
今週のAKARI Tech Blogは、DX Solution 事業本部 Dev Antaresの大迎が担当します。
今回は第66回 AKARI Lightning Talks でも紹介した『GSDiff』の論文についてお伝えしようと思います!
GSDiffとは、一言で言うと拡散モデルでグリッドに沿った点を生成して間取り図を生成する手法です。
TL;DR
- これは何?
- GSDiffは、拡散モデルを用いて間取り図を生成する新たなフレームワーク。
- Node generation→Transformerを用いたEdge prediction→ループ検出の3段階によって間取り図を生成する。
- GSDiffは、拡散モデルを用いて間取り図を生成する新たなフレームワーク。
- 貢献
- 個人的に一番の工夫だと思う点は、Node generationにおいて、新たにアラインメントに関する損失関数を定義してグリッドに沿った2次元座標上の点を生成できるようにしたこと。
- 課題
- GSDiffは、複雑なノードとエッジの依存関係を学習するために、品質の良い学習データに依存する。
- 大規模なプロジェクトにおけるスケーラビリティの課題など制限がある。
- この論文で考慮している部屋数が間取り用の7種類の部屋と少ないため、建築における平面図となると10以上の室など、大きな数に対応する必要がある。
- background nodeの数もN=53とデータセット中の最大ノード数で固定されているので、実データに対してはあらかじめあたりを付けておく必要がある。
- 感想
既存研究
House Diffusion
HouseDiffusion (Shabani, Hosseini, and Furukawa 2023)は、間取り生成への拡散モデルの応用を示した論文。
間取り図は部屋やドアを分類するような頂点を持つポリゴンとして描かれます。
ざっくりいうと、部屋の接続を表現したグラフを入力に、1つの部屋やドアを1つの図形とみなして拡散モデルでそれぞれの図形を生成する。
House Diffusionの課題
House Diffusionでは主に以下4点課題があります。
部屋の位置合わせの問題: House Diffusionでは、生成される部屋同士の位置合わせに課題があり、部屋間に隙間が生じたり、逆に部屋が重なってしまうことがあると指摘されています。
事前指定の必要性: 部屋のカテゴリ(種類)や数を事前に指定する必要があるという制限があり、各部屋ポリゴンの頂点数も事前に指定する必要があるため、生成される部屋の形状の多様性が制限されるとされています。
境界の位置合わせと壁構造: House Diffusionは座標の最適化に2進数表現を用いていますが、その限界から境界がうまく揃わず、良好な壁構造を得ることが難しい場合があるとされています。
トポロジー制約の不満足: 生成された結果の多くが、部屋のトポロジー制約(部屋間の接続関係など)を満たしていないことがあると指摘されています。

GSDiff
既存研究との差分
ざっくりいうと、そもそも間取り図の部屋をポリゴンの集まりでなく、壁の接合部を頂点、壁を辺とみなしたグラフと見立ててグリッドに沿った点を生成、点の間に辺(壁)があるかを予測するようにしたモデル。
- ベクトル間取り図を直接生成して部屋を区別することで、ギャップやオーバーラップが生じない。
- あらかじめ定義された部屋のカテゴリや数量を必要とせずに、同じ入力から多様な結果を生成する能力を持つ。

手法概要
間取り図生成をグラフ生成に変換し、ベクトル形式の間取り図を構造グラフG = (V, E)として表現する。構造グラフP(G)を直接生成するのはかなり複雑であるため、構造グラフ生成をノード生成とエッジ予測の2段階に分離します。
最後に、構造グラフのすべての最小多角形ループを部屋として抽出し、最終的なベクトル形式の間取り図を得る。GSDiffは、間取り図の境界などの設計制約を入力とし、高品質なベクトル形式の間取り図を生成するというものです。

グラフの表現
GSDiff論文におけるグラフ表現について概要を説明します。この論文では、ベクトル形式の間取り図を構造グラフ (structural graph) として表現し、その生成を行います。
主なポイントは以下の通りです。
- グラフの構成要素:
- ノード (Nodes / V): 間取り図における壁の接合点 (wall junctions) を抽象化したものです。
- エッジ (Edges / E): 壁の接合点間をつなぐ壁セグメント (wall segments) を表現します。
- ノードの属性:
- 位置座標 (
) : 各ノードは (x_i, y_i) の2次元座標を持ち、通常 [-1 , 1)の範囲に正規化されます。
- 部屋のセマンティクス (
): ノードがどの部屋タイプに属しているか、または隣接しているかを示す情報です。論文の実験では7種類の部屋カテゴリ(リビング、寝室、キッチン、浴室、バルコニー、収納、外部エリア)が考慮されており、ノードが各カテゴリに属するかどうかを多重ホットベクトル(0または1)で表現します。
- 背景属性 (
): ノードが実際の壁の接合点か、あるいはパディング用の背景ノードかを区別するための属性です(0が接合点ノード、1が背景ノード)。
- 位置座標 (
- グラフ構造の特徴:
- 固定ノード数: 学習や生成の効率化のため、データセット内の間取り図が持つ最大のノード数を考慮して、グラフのノード数は固定値(論文では N=53 )に設定されます。実際のノード数がこれより少ない場合は、背景ノードでパディングされます。
- 間取り図の抽出:
- 生成された構造グラフ
から、最終的な間取り図は、グラフ内の最小のポリゴンループ (minimal polygonal loops) を部屋として抽出することによって得られます。
- 各部屋のカテゴリは、その部屋を構成するポリゴンループ上のノード群が共有する部屋セマンティクスに基づいて決定されます。もし複数のカテゴリが候補となる場合は、最も頻繁に出現するカテゴリが選択され、それでも決まらない場合は定義された優先順位(例:収納 > 浴室 > キッチン > ...)に従います。
- 生成された構造グラフ
このように、GSDiffでは間取り図を、幾何学的な位置情報と部屋の種類といった意味情報を持つ属性付きのノードと、それらを繋ぐエッジで構成される構造グラフとして捉え、このグラフを生成することで間取り図合成問題に取り組んでいます。
Node generation
主なポイントは以下の通りです。
- 拡散モデル (Diffusion Model) の採用:
- ノード生成のコア技術として、拡散モデルが用いられています 。拡散モデルは、元データに徐々にノイズを加えていく「順方向プロセス」と、ノイズから元データを復元していく「逆方向プロセス」から構成されます 。
- 順方向プロセス (Forward process): オリジナルのノード情報(座標、部屋のセマンティクスなど)に段階的にガウスノイズを付加していき、最終的には純粋なノイズに近い状態にします 。
- 逆方向プロセス (Reverse process): ノイズ状態から出発し、学習済みのニューラルネットワーク(ノイズ除去ネットワーク)を用いて段階的にノイズを除去し、元のノード情報を復元します 。このプロセスを経て、最終的なノード群が生成されます。
- ネットワークアーキテクチャ:
- 逆方向プロセスにおけるノイズ除去ネットワークには、Transformerベースのアーキテクチャ (Node Transformer) が採用されています 。
- このNode Transformerは、あるタイムステップ t におけるノイズが付加されたノードセット V_t とタイムステップ t 自体を入力とし、付加されたノイズ epsilon_theta を予測することで、1ステップ前のよりノイズの少ないノードセット V_t−1 を推定します 。
- ノード埋め込み (Node Embedding):
- Node Transformerへの入力として、各ノードの特徴量が埋め込みベクトルとして表現されます。この埋め込みは主に以下の3つの要素から構成されます 。
- 座標埋め込み (
): ノードの (x, y) 座標を位置エンコーディング(例: Transformerで用いられるsin/cosベースのもの)を用いて埋め込みます 。
- セマンティクス・背景属性埋め込み (
): ノードの部屋のセマンティクス(どの部屋に属するかなど)と背景ノードであるかどうかの属性を、全結合層などを用いて埋め込みます 。
- 時間埋め込み (
): 現在の拡散プロセスのタイムステップ
(ノイズレベルを示す)をフィードフォワードニューラルネットワーク(FFN)などで埋め込みます 。
- 座標埋め込み (
- これら3つの埋め込みが融合されて、各ノードの初期埋め込み
が作成されます 。
- Node Transformerへの入力として、各ノードの特徴量が埋め込みベクトルとして表現されます。この埋め込みは主に以下の3つの要素から構成されます 。
- 損失関数 (Loss Function):
- 学習時には、主に再構成損失 (Reconstruction Loss)とアラインメント損失 (Alignment Loss / MixAlg)の2種類の損失関数が用いられます。
アラインメントに関する損失関数を定義(ここが個人的に一番の工夫だと考えています。)
お気持ちとしては、大きな誤差に対しても小さな誤差に対してもうまく効くような関数を定義したい。
まずは整列したノード生成のため、離散座標表現を導入します。
離散座標表現の導入:
連続的な座標空間を離散化することで、より精密な学習を目指しました。具体的には、座標値を2進数表現に変換して回帰を行うというアイデアです。
混合基数表現による最適化
しかし、自然言語や画像とは異なり、構造グラフは、完全な水平壁や垂直壁のような、正確な幾何学的関係を持っており、実数値座標を直接回帰するとこの精度を捉えることができない課題があり、2進数のような離散表現のみに頼ると、上位ビットの予測誤差が大きな実数値の誤差を引き起こすリスクがあります。例えば、2進数表現で[1,0,0,0,0,0,1,1](10進数で131)という座標があった場合、4ビット目に予測誤差が生じると[1,0,0,1,0,0,1,1](10進数で147)となり、座標が大きくずれてしまう可能性があります。
この問題を軽減し、大きな誤差と小さなずれの両方に対応するために、GSDiffでは混合基数アラインメント損失 (Mixed-base Alignment Loss, MixAlg) を提案しています。これは、実数表現に加えて、2進数、4進数、8進数、16進数といった複数の基数表現におけるアラインメント誤差を組み合わせるものです。これにより、大きな誤差には実数表現で適切にペナルティを与えつつ、小さなずれには離散表現で敏感に反応するという、両方の利点を活かしたバランスの取れた最適化を目指します。
Edge prediction

Edge Predictionは、先に生成された壁の接合点(ノード)間に壁セグメント(エッジ)が存在するかどうかを決定する、構造グラフ生成の第二段階です。
主なポイントは以下です。
- 目的:
- ノード生成ステップで得られたノード群を元に、どのノード間にエッジ(壁セグメント)が存在するべきかを予測し、完全な構造グラフを構築します。
- ネットワークアーキテクチャ:
- エッジ予測には、Transformerベースの予測モデル (Edge Transformer) が使用されます。
- このモデルは、候補となる各エッジ(ノードのペア)に対して、エッジが存在する(True)か存在しない(False)かの二値分類を行います。
- 入力埋め込み (Input Embedding):
- 損失関数 (Loss Function):
- エッジ知覚向上戦略:
- この戦略は、モデルがエッジの幾何学的情報をより深く理解できるようにするためのものです。
- 具体的には、各候補エッジ上にランダムな補間点 (interpolation point) を導入します。
- モデルは、この補間点がエッジ上のどの位置にあるかを示す補間係数 (
) を予測するように学習します。 補間点の座標 [tex: c{\lambda} ] は、[tex: c{\lambda}={\lambda}c{i}+(1−\lambda)c{j} ]のように定義されます。
- これにより、モデルは単に2つの端点を見るだけでなく、エッジ全体としての連続性や中間構造をよりよく捉えることが期待されます。
- 最終的なエッジ予測の損失関数は、[tex: \mathcal{L}{edge} = \mathcal{L}cls+\mathcal{L}_{\lambda} ]となります。
このエッジ予測ステップを経て、ノード間にエッジが張られた構造グラフが完成し、次の間取り図抽出ステップへと進みます。
Floorplan extraction
ノード生成とエッジ予測によって構築された構造グラフ G=(V,E) から、最終的なベクトル形式の間取り図を生成する最後のステップです。
主なポイントは以下の通りです。
- 入力:
- このステップの入力は、壁の接合点(ノード V)とそれらを繋ぐ壁セグメント(エッジ E)から成る構造グラフです。
- 部屋の抽出方法:
- 構造グラフから部屋を抽出するために、グラフ内の最小のポリゴンループ (minimal polygonal loops) を特定します。 各最小ポリゴンループが、間取り図における一つの部屋に対応します。
- 論文の補足資料では、このポリゴンループを見つける具体的な手順として、あるエッジから出発し、定義された順序(例:番号の小さい端点から大きい端点へ)と一定の回転方向(例:常に時計回りの最大角度)で次のエッジを選択していき、出発点に戻るまで辿る方法が示唆されています。
- 部屋のカテゴリ(セマンティクス)の割り当て:
- 抽出された各ポリゴンループ(部屋)のカテゴリは、そのループを構成する全てのノードが共有する部屋のセマンティクス属性に基づいて決定されます。
- 曖昧さの解決: ニューラルネットワークによる予測には誤差が含まれる可能性があるため、ループを構成する全てのノードで部屋カテゴリが一致しない場合があります。 このような場合、以下のルールでカテゴリを決定します。
- 最も頻繁に出現するカテゴリをその部屋のタイプとして選択。
- もし複数のカテゴリが最も高い頻度で出現した場合、カテゴリの希少性などを考慮した優先順位(例: 収納 > 浴室 > キッチン > 寝室 > バルコニー > リビングルーム)に基づいて最終的な部屋タイプを決定。
- 出力:
- このプロセスを経て、各部屋がポリゴンとして定義され、それぞれに部屋カテゴリが付与された、最終的なベクトル形式の間取り図が得られます。
間取り図抽出ステップでは、完成した構造グラフから幾何学的な部屋の形状を特定し、そこに意味的な情報を割り当てることで、最終的な間取り図とします。
制約付き生成もサポートしている!!


論文では主に、境界制約とトポロジー制約の2種類の制約付き生成に焦点を当てています。
主なポイントは以下の通りです。
- 基本アプローチ:
- 制約エンコーダの学習:
- 境界制約付き生成 (Boundary-constrained generation):
- トポロジー制約付き生成 (Topology-constrained generation):
学習データ
GSDiffの学習と評価には、「RPLANデータセット」(Wu et al. 2019)が使用されています。このデータセットは、
- 8万件以上もの豊富な住宅間取り図を収録。
- 各間取り図には詳細なアノテーションが付与。
という特徴を持っています。この大規模で質の高いデータセットを、
- 学習用: 大部分(7万4千件以上)
- 検証用: 3,000件
- テスト用: 3,000件
という形で分割し、モデルの学習と評価を行っています。これにより、多様な間取りパターンを学習し、汎用性の高い生成モデルの構築を目指しています。
生成速度
GSDiffは、NVIDIA GeForce GTX 4090で学習されています。そして、気になるベクトル形式の間取り図の平均生成時間は以下の通りです。
- 制約なし: 平均0.17秒
- 境界制約あり: 平均0.67秒
- トポロジー制約あり: 平均0.86秒
特に制約がない場合は1秒を大幅に下回る速度で間取り図が生成されており、これは設計支援ツールとしての応答性を考えると非常に魅力的です。境界や部屋のつながりといった条件を指定した場合でも1秒弱という速度は、実用レベルと言えるのではないでしょうか。
既存手法との比較とか



1. 評価指標: 表の読み方としては小さいほど良い性能!です。
- 分布比較 (Distribution comparison): 生成された間取り図の品質と多様性を、実際のデータ分布と比較して評価します。
- FID (Fréchet Inception Distance): 実データと生成データの特徴量空間における分布間の距離を測り、画像の品質と多様性を評価します 。値が小さいほど、実データと生成データの分布が類似している(=生成データの品質が高い)
- KID (Kernel Inception Distance): FIDと同様に生成データと実データの類似度を測る指標ですが、FIDよりも計算コストが低く、少量のデータでも安定した評価が可能 という特徴があります。
- トポロジー制約評価:
- GED (Graph Edit Distance): 入力されたバブルダイアグラム(部屋の接続関係を示したグラフ)と、生成された間取り図から再構築されたバブルダイアグラムとの間の距離を計算し、制約の満足度を評価します 。
- 統計的比較 (Statistics comparison): 生成された間取り図に含まれる各部屋タイプ(リビング、キッチンなど)の量を統計的に分析し、実際のデータセットの統計と比較します(1に近いほど良い) 。これにより、実用性の観点から品質を評価します。
2. 比較対象手法:
- 境界制約付き生成: Graph2Plan, WallPlan
- トポロジー制約付き生成: House-GAN++, House Diffusion
3. 主な結果:
- 境界制約付き生成: GSDiffは、FID、KIDの全ての指標においてGraph2PlanおよびWallPlanを上回り、視覚的特徴や幾何学的特徴が優れていることが示されました 。部屋タイプの統計的比較においても、GSDiffは多くの部屋タイプで実際のデータセットに近い結果を示しました 。
- トポロジー制約付き生成: GSDiffは、FID、KID、GEDの全ての指標においてHouse-GAN++およびHouse Diffusionを上回り、幾何学的な一貫性、視覚的な魅力、実用性、制約満足度の全てにおいて優れた結果を示しました 。部屋タイプの統計比較でも、多くの部屋タイプでGSDiffがより現実に近い結果を生成しました 。
- 全体として、GSDiffは既存の最先端技術と比較して、生成される間取り図の品質、多様性、制約遵守性、実用性の全ての面で優れていることが示されています(Table 1参照 )。
Ablation Study
GSDiffフレームワーク内で提案されたノードのアラインメント強化とエッジの知覚向上の2つの戦略が、実際に性能向上にどの程度貢献しているかを検証しています。
1. 検証対象:
- ノードのアラインメント強化 (Alignment enhancement for node generation): 混合基数表現におけるノードの位置合わせ誤差を最適化する戦略です 。
- エッジの知覚向上 (Perception enhancement for edge prediction): エッジ予測モデルの幾何学的知覚能力を高める戦略です 。
2. テストされた構成:
- アラインメント強化なし (Node_None)
- 実数値のみのアラインメント誤差最適化 (Node_Real)
- 2進数のみの離散アラインメント誤差最適化 (Node_Binary)
- エッジ知覚向上なし (Edge_None)
- GSDiffの全手法適用 (Node + Edge) これらを様々に組み合わせて評価しています(論文のTable 2参照)。
3. 評価指標:
- FID、KID: 前述のとおりです。
- FE (Fake Edge / 誤分類されたエッジの割合): 構造的な完全性と精度を評価します。
- AE (Alignment Error / ノードアラインメント誤差): 幾何学的な一貫性と精度を評価します。
4. 主な結果:
- GSDiffの提案する全ての幾何学的強化戦略を適用したモデル (Node + Edge) が、評価された全ての指標(FID, KID, FE, AE)において最も優れた性能を示しました 。
- これは、ノードのアラインメント強化とエッジの知覚向上の両戦略が、生成される間取り図の品質(視覚的忠実度、分布の整合性、構造的完全性、幾何学的精度)向上に効果的に寄与していることを実証しています 。
これらの定量的評価とアブレーションスタディを通じて、GSDiffフレームワークの有効性と、提案された各技術要素の重要性が示されています。
課題感
- GSDiffは、複雑なノードとエッジの依存関係を学習するために、品質の良い学習データに依存する
- 大規模なプロジェクトにおけるスケーラビリティの課題など制限がある
- 考慮している部屋数が間取り用の7と少ないため、建築の平面図となると10以上などより多い数に対応する必要がありそう
- background nodeの数もN=53とデータセット中の最大ノード数で固定されているので、実データに対してはあらかじめあたりを付けておく必要があるなどハイパラが多そう
まとめ
これまで見てきたように、GSDiffはベクトル形式の間取り図を自動生成するための有用なフレームワークです。
House Diffusionも革新的な試みでしたが、 - 生成される部屋同士の位置ずれや重なりが生じやすい。 - 部屋のカテゴリや数、さらには各部屋を構成するポリゴンの頂点数まで事前に指定する必要があり、生成される形状の多様性に限界がある。 - 座標最適化の特性から、壁の境界がうまく揃わず、精密な壁構造の表現が難しい。 - 指定された部屋の接続関係(トポロジー制約)を必ずしも満たせないことがある。 といった課題がありました。
これに対し、GSDiffは以下のような工夫で課題にアプローチしています。
- 構造グラフ生成: 間取り図を「壁の接合点(ノード)」と「壁セグメント(エッジ)」からなる構造グラフとして捉え、段階的に生成することで、幾何学的な整合性を根本から高めています。
- 革新的なアラインメント損失: ノード生成時に導入された「混合基数アラインメント損失」は、壁の水平・垂直性といった精密な位置合わせを実現し、House Diffusionで見られた位置ずれや壁構造の問題を効果的に抑制します。
- エッジ知覚向上戦略: エッジ予測の精度を高めることで、より妥当な壁のつながりを実現し、トポロジー制約の満足度向上にも貢献しています。
- 柔軟性の向上: 事前に部屋のカテゴリや数を厳密に固定せずとも、より多様な間取り図を生成できる柔軟性を持っています。
GSDiffは、学習データへの依存性や大規模案件へのスケーラビリティといった今後の課題も残されていますが、これらのアプローチにより、幾何学的にも意味的にも整合性の取れたベクトル間取り図の自動生成を行っています。
個人的な感想
- 大きな間取りや平面図を生成するときは、最初に大枠の間取りを生成してその後に各部分ごとに間取り図を生成するような、入れ子にするとよさそう。
- 複数の箇所に境界の制約を課して、それぞれの箇所でトポロジーの制約を課して点を生成するともう少し大きな平面図を生成できるかもしれません。
- 例えば、マンションの1階分であれば、各部屋ごとに間取り図を生成できそうな予感がします。
参考資料
- HouseDiffusion: https://openaccess.thecvf.com/content/CVPR2023/papers/Shabani_HouseDiffusion_Vector_Floorplan_Generation_via_a_Diffusion_Model_With_Discrete_CVPR_2023_paper.pdf
- https://arxiv.org/abs/2408.16258
- https://github.com/SizheHu/GSDiff
- 2025/2/18時点では実装はまだ公開されていない。
- 2025/5/8時点ではデータは公開されていないが、実装が公開されている!!(←New!!)
- ライセンスはGPL-3.0
- AAAI 2025に採択
We’re Hiring!
燈では、最新論文を社会実装するAIエンジニアを募集しております!
興味がある方は、ぜひカジュアル面談でお話しましょう!🔥 akariinc.co.jp
この記事を書いた燈メンバー🙌 www.wantedly.com