brownvc / fast-synth

Public code release for our CVPR 2019 paper "Fast and Flexible Indoor Scene Synthesis via Deep Convolutional Generative Models"
Other
54 stars 20 forks source link

Training NextCategory #1

Open KamranAlipour opened 3 years ago

KamranAlipour commented 3 years ago

Hi, When you train the NextCategory model, are you training only based on full rooms? I'm asking because when I follow the algorithm, seems like you are setting the cat_only flag to True, and that leads to:

https://github.com/brownvc/fast-synth/blob/863213bedee078cf531d1518708515ca3928bf63/scene-synth/latent_dataset.py#L371

when then leads to output_node being None which leads to only full scenes with t_cat = \<STOP> labels.

LemonMi commented 3 years ago

Hi, When you train the NextCategory model, are you training only based on full rooms? I'm asking because when I follow the algorithm, seems like you are setting the cat_only flag to True, and that leads to:

https://github.com/brownvc/fast-synth/blob/863213bedee078cf531d1518708515ca3928bf63/scene-synth/latent_dataset.py#L371

when then leads to output_node being None which leads to only full scenes with t_cat = labels.

Hi, I meet the same problem with you. How do you deal with this? Thank you!

KamranAlipour commented 3 years ago

Hi, I ended up replacing that line with scene, input_nodes, output_node = self.get_scene_partial(index, stop_prob=0.1)

where I defined get_scene_partial as something like this: def get_scene_partial(self, index, stop_prob=None): i = index+self.scene_indices[0] scene = RenderedScene(i, self.data_folder, self.data_root_dir) object_nodes = self.order_object_nodes(scene.object_nodes) if stop_prob is not None and random.random() < stop_prob: input_nodes = object_nodes output_node = None else: split_idx = random.choice(range(len(object_nodes))) output_node = object_nodes[split_idx] input_nodes = object_nodes[0:split_idx] return scene, input_nodes, output_node

LemonMi commented 3 years ago

Hi, I ended up replacing that line with scene, input_nodes, output_node = self.get_scene_partial(index, stop_prob=0.1)

where I defined get_scene_partial as something like this: def get_scene_partial(self, index, stop_prob=None): i = index+self.scene_indices[0] scene = RenderedScene(i, self.data_folder, self.data_root_dir) object_nodes = self.order_object_nodes(scene.object_nodes) if stop_prob is not None and random.random() < stop_prob: input_nodes = object_nodes output_node = None else: split_idx = random.choice(range(len(object_nodes))) output_node = object_nodes[split_idx] input_nodes = object_nodes[0:split_idx] return scene, input_nodes, output_node

Thank you! And how you deal with the second-tier objects? It seems lack of the "relation" files..

kwang-ether commented 3 years ago

Hi, I ended up replacing that line with scene, input_nodes, output_node = self.get_scene_partial(index, stop_prob=0.1)

where I defined get_scene_partial as something like this: def get_scene_partial(self, index, stop_prob=None): i = index+self.scene_indices[0] scene = RenderedScene(i, self.data_folder, self.data_root_dir) object_nodes = self.order_object_nodes(scene.object_nodes) if stop_prob is not None and random.random() < stop_prob: input_nodes = object_nodes output_node = None else: split_idx = random.choice(range(len(object_nodes))) output_node = object_nodes[split_idx] input_nodes = object_nodes[0:split_idx] return scene, input_nodes, output_node

this is correct. somehow these lines were commented out for the version we used to prepare the code release and I simply removed those comments :)

kwang-ether commented 3 years ago

Hi, I ended up replacing that line with scene, input_nodes, output_node = self.get_scene_partial(index, stop_prob=0.1) where I defined get_scene_partial as something like this: def get_scene_partial(self, index, stop_prob=None): i = index+self.scene_indices[0] scene = RenderedScene(i, self.data_folder, self.data_root_dir) object_nodes = self.order_object_nodes(scene.object_nodes) if stop_prob is not None and random.random() < stop_prob: input_nodes = object_nodes output_node = None else: split_idx = random.choice(range(len(object_nodes))) output_node = object_nodes[split_idx] input_nodes = object_nodes[0:split_idx] return scene, input_nodes, output_node

Thank you! And how you deal with the second-tier objects? It seems lack of the "relation" files..

Relation files were included in certain versions of the dataset release. If those are not available, they need to be manually computed.