LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

間取り図をディープラーニングで解析して3Dモデルをつくる

AI戦略室の椎橋です。弊社で取り組んでいるディープラーニングの活用事例を紹介します。

空飛ぶホームズくん

空飛ぶホームズくんとは、平面の間取り図から3Dの部屋を生成する技術を用い(※特許取得済み)、バーチャル内見できるVRサービスです。詳細は以下のリンクに書いてあります。 lifull.com

平面の間取り図から3Dの部屋を生成する技術では主にディープラーニングを使っていて、今回はその計算処理について紹介します。

先行研究

間取り図の画像解析の先行研究では"Deep Floor Plan Recognition Using a Multi-Task Network with Room-Boundary-Guided Attention"があります。 https://openaccess.thecvf.com/content_ICCV_2019/papers/Zeng_Deep_Floor_Plan_Recognition_Using_a_Multi-Task_Network_With_Room-Boundary-Guided_ICCV_2019_paper.pdf

これは間取り図のセマンティックセグメンテーションタスクの研究で、論文の資料を抜粋すると下図で(a)の入力画像に対して(b)が正解ラベルがになり(c)が推論結果として出力するディープラーニングモデルをつくるというものです。

f:id:LIFULL-shiibass:20201111120051j:plain
論文の添付画像から抜粋

ニューラルネットワークの構築の考え方は下図にあるように部屋の種別(room type)か部屋を構成する境界(room boundary)かで2つの出力層を設けることできれいに壁とドアの位置を推論できるというものです。

f:id:LIFULL-shiibass:20201111120055j:plain
論文の添付画像から抜粋, ニューラルネットワーク構築の考え方

LIFULLでの実装

LIFULLでは上記の先行研究のベースのアルゴリズムを踏襲しつつ、3Dモデルを作るためにいくつか変更を加えました。最も大きな変更は部屋の種別(room type)と境界(room boundary)に加えて、キッチンカウンターやトイレなどのiconを第3の出力層として新たに追加しました。下の画像だと左が元画像、中央がroom typeとroom boundaryのラベル、右がアイコンのラベルになります。セマンティックセグメンテーションではピクセル単位に分類タスクを行うので、画像の中央と右は各ピクセルにラベルを0,1,2,...と割り当てて可視化のために対応するRGB値で塗ってある画像になります。セマンティックセグメンテーションタスクの出力データ、すなわち、ピクセル単位にラベルを割り当てたデータのことを本記事ではセマンティックデータと呼ぶことにします。

f:id:LIFULL-shiibass:20201111120037p:plain
LIFULLでのニューラルネットワーク構築の考え方

その他の変更点については本記事の最後に添付するslideshareをご覧ください。

推論後の後処理

後処理としてセマンティックデータから輪郭抽出して3Dモデルの生成に必要なデータ形式に変換します。opencvのfindcontours関数で輪郭抽出します。下の画像で左がセマンティックデータで1ピクセルごとにラベルが割り当てられていて、右が輪郭抽出後のデータで、白点で表したポリゴンの端点情報のみから可視化したデータになります。セマンティックデータは画像サイズ数の値を保持していて、変換後では白い点の数だけの値を保持していることになります。

f:id:LIFULL-shiibass:20201111120011j:plain
推論結果(左)と輪郭抽出結果(右)

輪郭抽出することで間取り図のどこに何があるかをデータに落とし込むことができました。そこから平易な計算をすることで人間が間取り図をみて解釈できる情報を得られます。具体的には以下の項目です。

アイコンの向き

下図でキッチンカウンター、トイレ、洗面台を使うときに人間が位置する方向に白丸をつけました。これがないと3Dにしたときに違和感のある配置になってしまいます。

f:id:LIFULL-shiibass:20201111120016j:plain
アイコンの向き判定結果

導線生成

人間が部屋間を行き来するための導線を計算できます。google mapにあるようなウォークスルーを実現するのに必要です。

f:id:LIFULL-shiibass:20201111120020p:plain
導線生成

バルコニーの壁と室内の壁の判別

画像で見るとバルコニーの壁と部屋の壁は区別がつきませんが、常識的に考えてバルコニーは外の景気がみられるように高さが低くなっています。一方で室内の壁は天井まで高さがあります。下図でバルコニーの壁(緑)と室内の壁(赤)を色分けできています。

f:id:LIFULL-shiibass:20201111120045p:plain
バルコニーの壁と室内壁の判定(右)

グラフ構造

下図で廊下(corridor, 黒で囲ったノード)からldk(DK),west(洋室),out(家の外),bath_toiket_washing_room(洗面所)にエッジが引かれているように部屋がどのように結合されているかをグラフ構造にして知ることができます。2LDKの間取りで1つの部屋がリビングとつながっていないほうがいい、バルコニーに行き来できる部屋が2つある、などの2LDKよりもさらに細かい条件を検索できるようになります。

f:id:LIFULL-shiibass:20201118153154p:plain

その他

その他としては縮尺を概算できたり、窓とドアの区別ができたりして、これらの人間が解釈できる要素を取り出していくことでより現実に近い3Dモデルの生成が可能になります。

f:id:LIFULL-shiibass:20201111120005j:plain

最後に

間取り図のディープラーニング活用事例を紹介しました。間取り図の解析は機械学習界隈では頻繁に出てくるテーマではないので目新しさがあったと思います。弊社ではレコメンドやチャットボットなどの汎用性の高い技術でなく不動産のドメインに特化した研究開発も行っています。ドメイン特化の研究開発は世界で事例が少ないこともあり、難易度は低くないですが、その分やりがいはあるかと思います。

弊社では、執筆日(2020年11月)時点で機械学習エンジニアを募集しています。カジュアルな面談で弊社の様子をお伝えすることもできます。興味ありましたらご覧ください。 hrmos.co

LTechでも発表しました

www.slideshare.net