Skip to content

Graphic-Kiliani/Object-Retrieval-Layout2Scene

Repository files navigation

Layout2Scene Object Retrieval

This repository provides a simple and scalable pipeline for layout-to-scene object retrieval, focusing on matching 3D room layouts with relevant 3D objects and rendering them for visualization. This repo is part of our paper: M3DLayout-A-Multi-Source-Dataset-of-3D-Indoor-Layouts-and-Structured-Descriptions. If you find our work helpful, please consider citing

Method Overview

Our approach follows a straightforward workflow:

  1. Layout Parsing – Read the input layout file and extract room and object placement information.
  2. Object Retrieval – For each object category in the layout, retrieve candidate 3D models from a pre-built object index for shape similarity.
  3. Scene Composition – Assemble the retrieved 3D objects into a coherent scene according to the layout constraints.
  4. Rendering – Render the composed scene using Blender with specified resolution and camera settings.

This pipeline is designed to be lightweight, reproducible, and extensible, enabling researchers to quickly test layout-based scene generation and retrieval tasks.

Object retrieval flowchart

Installation

Clone our repo:

git clone https://github.com/Graphic-Kiliani/Object-Retrieval-Layout2Scene.git

Download Blender's latest version:

# Blender 4.5.3 
wget https://mirror.freedif.org/blender/release/Blender4.5/blender-4.5.3-linux-x64.tar.xz
tar -xzvf blender-4.5.3-linux-x64.tar.xz -C <path_to_target_dir>

Dataset

We use a curated dataset containing 3D objects categorized by type, designed to support layout-based retrieval tasks. Our retrieval dataset includes 95 types of objects which covers nearly all common indoor objects.

Category Objects (95 in total)
Lighting lighting, ceiling-lamp, pendant.lamp, floor.lamp, desk.lamp, fan
Tables table, coffee_table, console_table, corner_side_table, round_end_table, dining_table, dressing_table, side_table, nightstand, desk, tv_stand
Seating seating, chair, lounge_chair, chinese_chair, dining_chair, dressing_chair, stool, sofa, loveseat_sofa, l_shaped_sofa, multi_seat_sofa
Beds bed, kids_bed
Shelves & Book storage shelf, shelving, large_shelf, cell_shelf, bookshelf, book, book_column, book_stack, nature_shelf_trinkets
Cabinets & Wardrobes cabinet, kitchen_cabinet, children_cabinet, wardrobe, wine_cabinet
Appliances & Electronics appliances, microwave, oven, beverage_fridge, tv, monitor, tv_monitor
Kitchen & Tableware pan, pot, plate, bowl, cup, bottle, can, jar, wineglass, chopsticks, knife, fork, spoon, food_bag, food_box, fruit_container
Bathroom fixtures bathtub, shower, sink, standing_sink, toilet, toilet_paper, toiletry, faucet, towel
Doors, Windows & Coverings glass_panel_door, lite_door, window, blinds, curtain, vent
Hardware & Controls hardware, handle, light_switch
Decor plant, large-plant-container, plant-container, vase, wall_art, picture, mirror, statue, basket, balloon, cushion, rug, decoration
Containers & Waste bag, box, container, clutter, trashcan
Architecture & Elements counter, fireplace, pipe, furniture
Clothes clothes
Spaces kitchen_space
Gym & Misc gym_equipment

Category list of retrieval objects

You can also add your desired object category and 3D assets according to our dataset format. However, in order to correctly integrate with our object retrieval process, you should first uniform the orientation within specific category under your model's/platform's coordinate system, and index the size information for calculating shape similarity with following code:

# Processing the whole root dir
python build_glb_index.py --input-path <path_to_dataset_dir>

# Processing Single Category
python build_glb_index.py --input-path <path_to_added_category_dir>

Afterwards, you will obtain or see changes in glb_index.json file.

Test Input

We provide an example JSON file containing room layout information for testing and reproducing results.

  • Test JSON link: assets/test.json

Usage

Scene

After downloading the dataset and the test JSON file, modify the json path and dataset path in main.py, you can run:

See arguments'definition in main.py:

<path_to_blender> --background --python main.py -- \
    --input_json <path_to_room_json> \
    --out_dir    <output_dir_path> \
    --obj_folder <retrieval_assets_dir_path> \
    --glb_index  <glb_json_path> \
    --save_blend \
    --scene_id <num>
    --colorize

Besides, you can palette your favourite color in colors_mapping.json when you turn on --colorize to get pure colorful topdown images.

Rendering vis

Afterwards, you will obtain corresponding topdown.png and scene.blend according to your input scene info json.


Bedroom

Diningroom

Livingroom

Multiple Rendering choices

The first row displays the retrieved 3D scenes' renderings with pure color schemes. The second row shows the retrieved 3D scenes' renderings with original textures applied. The pure color renderings eliminate the influence of textures, making it easier to assess the layout's alignment and object retrieval accuracy using metrics like FID and KID. Meanwhile, the textured renderings offer a visually richer evaluation and applications for users.

Object retrieval visualization

Layout/Scene vis

We provide tools to visualize layout/Scene in image or gif form. Before that, you only need to convert your scene info json format into ours. (Check it in Test JSON link and parameters.json in the assets folder)

See arguments'definition in visualization_mlayout.py/visualization_scene.py

python visualization_mlayout.py <path_to_room_json> --scene_id <num> --label_small --small_thresh <num> --flipover --azimuth_offset <num>

Bedroom

Diningroom

Livingroom

About

This repo is part of our paper : M3DLayout-A-Multi-Source-Dataset-of-3D-Indoor-Layouts-and-Structured-Descriptions.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages