HealthML / self-supervised-3d-tasks

Apache License 2.0
185 stars 39 forks source link

Questions about parameter, top architecture, in json file #22

Closed lokeycookie closed 2 years ago

lokeycookie commented 2 years ago

Hello! I am new to self-supervised learning and I am trying to understand some theory. While I am trying to run the rpl algorithm by using this command: train.py rpl_3d.json, when I set the parameter top architecture to "unet_3d_upconv" , I got the following error.

Traceback (most recent call last): File "train.py", line 4, in main() File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/train.py", line 78, in main init(train_model) File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/utils/model_utils.py", line 67, in init f(**args) File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/train.py", line 57, in train_model model = algorithm_def.get_training_model() File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/algorithms/jigsaw.py", line 68, in get_training_model model = self.apply_model() File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/algorithms/jigsaw.py", line 46, in apply_model return self.apply_prediction_model_to_encoder(self.enc_model) File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/algorithms/jigsaw.py", line 60, in apply_prediction_model_to_encoder include_top=False) File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/utils/model_utils.py", line 193, in apply_prediction_model kwargs) File "/home/svu/e0310071/self-supervised-3d-tasks/self_supervised_3d_tasks/utils/model_utils.py", line 99, in get_prediction_model assert algorithm_instance is not None, "no algorithm instance for 3d skip connections found" AssertionError: no algorithm instance for 3d skip connections found

When I set the top architecture to "big_fully", there doesn't seem to be an error and the code is able to run. Thus, my question is what is the difference between all the top level architecture ('big_fully', 'simple_multiclass', 'unet_3d_upconv', 'unet_3d_upconv_patches' )? And why "unet_3d_upconv" can't be used for rpl algorithm?

aihamtaleb commented 2 years ago

Hi @lokeycookie , unet_3d_upconv is an architecture used for image / scan segmentation. So it doesn't work with self-supervised algorithms, it requires segmentation masks/labels. This also applies to 'simple_multiclass' and 'unet_3d_upconv_patches'. However, the 'big_fully' architecture is just a fully connected (MLP) network, which can of course work with all self-supervised methods.