tianbaochou / NasUnet

170 stars 45 forks source link

Is experiment/train.py really searching architectures or just training a chosen architecture? #11

Closed sayandevmukherjee closed 5 years ago

sayandevmukherjee commented 5 years ago

In the README.md your instruction is to run experiment/train.py with a specified configuration file in order to search for architectures on the dataset specified in that configuration file.

However, experiment/train.py does not seem to do any searching over architectures at all, and it seems to me that it only trains the architecture specified by 'training | geno_type' in the configuration file and models/geno_searched.py.

The architecture search seems to be actually performed by experiment/search_cell.py and it seems to me that you put the best-performing models that came out of this search into the file models/geno_searched.py.

Is my understanding correct about experiment/train.py, experiment/search_cell.py, and models/geno_searched.py?

tianbaochou commented 5 years ago

In the README.md your instruction is to run experiment/train.py with a specified configuration file in order to search for architectures on the dataset specified in that configuration file.

However, experiment/train.py does not seem to do any searching over architectures at all, and it seems to me that it only trains the architecture specified by 'training | geno_type' in the configuration file and models/geno_searched.py.

The architecture search seems to be actually performed by experiment/search_cell.py and it seems to me that you put the best-performing models that came out of this search into the file models/geno_searched.py.

Is my understanding correct about experiment/train.py, experiment/search_cell.py, and models/geno_searched.py?

you are right, we search the best cell architecture in search_cell.py and then train the stacked cells in train.py. It means two-stages!

sayandevmukherjee commented 5 years ago

Thanks for the clarification!

zirakkk commented 1 year ago

**Nice work. I have a quick question. Out of all the searched architectures mentioned in geno_searched.py. Which one gave you the best results or the results you mentioned in your paper ?

Thanks**

enhance

NAS_UNET_V1_En = Genotype(down=[('down_conv', 0), ('down_dil_conv', 1), ('down_dep_conv', 0), ('down_dep_conv', 1)], down_concat=range(2, 4), up=[('cweight', 0), ('up_cweight', 1), ('conv', 0), ('up_cweight', 1)], up_concat=range(2, 4))

enhance + sharing

NAS_UNET_V1_En_sh = Genotype(down=[('down_cweight', 0), ('down_cweight', 1), ('down_dep_conv', 0), ('down_cweight', 1)], down_concat=range(2, 4), up=[('dep_conv', 0), ('up_cweight', 1), ('cweight', 0), ('up_cweight', 1)], up_concat=range(2, 4))

enhance

NAS_UNET_V2_En = Genotype(down=[('down_dep_conv', 0), ('down_dil_conv', 1), ('down_cweight', 0), ('down_dep_conv', 1), ('down_dep_conv', 1), ('down_dep_conv', 0)], down_concat=range(2, 5), up=[('identity', 0), ('up_dep_conv', 1), ('cweight', 0), ('up_cweight', 1), ('conv', 2), ('up_cweight', 1)], up_concat=range(2, 5))

NAS_UNET_V2 = Genotype(down= [('down_conv', 1), ('down_dep_conv', 0), ('down_cweight', 1), ('down_dil_conv', 0), ('down_dil_conv', 1), ('down_conv', 0)], down_concat=range(2, 5), up=[('identity', 0), ('up_cweight', 1), ('identity', 2), ('up_cweight', 1), ('cweight', 3), ('up_conv', 1)], up_concat=range(2, 5))

NAS_UNET_V3 = Genotype( down=[('down_dil_conv', 1), ('down_cweight', 0), ('down_cweight', 0), ('down_cweight', 1), ('down_cweight', 0), ('conv', 3), ('down_cweight', 0), ('conv', 4)], down_concat=range(2, 6), up=[('cweight', 0), ('up_cweight', 1), ('conv', 2), ('up_cweight', 1), ('up_cweight', 1), ('conv', 3), ('up_cweight', 1), ('conv', 4)], up_concat=range(2, 6))

enhance + no sharing

NAS_UNET_V3_En_sh = Genotype(down=[('down_dep_conv', 0), ('down_cweight', 1), ('conv', 2), ('down_cweight', 1), ('identity', 3), ('down_cweight', 1), ('down_dil_conv', 1), ('conv', 3)], down_concat=range(2, 6), up=[('cweight', 0), ('up_conv', 1), ('cweight', 2), ('up_conv', 1), ('cweight', 3), ('up_conv', 1), ('cweight', 0), ('up_cweight', 1)], up_concat=range(2, 6))

NAS_UNET_NEW_V3 = Genotype(down=[('down_dep_conv', 0), ('down_cweight', 1), ('down_conv', 1), ('max_pool', 0), ('max_pool', 1), ('cweight', 2), ('down_dil_conv', 0), ('down_dil_conv', 1)], down_concat=range(2, 6), up=[('dep_conv', 0), ('up_conv', 1), ('shuffle_conv', 0), ('up_cweight', 1), ('identity', 2), ('up_cweight', 1), ('dil_conv', 3), ('up_cweight', 1)], up_concat=range(2, 6))

NAS_UNET_NEW_V2 = Genotype(down=[('down_dil_conv', 1), ('down_dep_conv', 0), ('max_pool', 0), ('down_conv', 1), ('down_conv', 1), ('down_dil_conv', 0)], down_concat=range(2, 5), up=[('identity', 0), ('up_dil_conv', 1), ('identity', 0), ('up_dil_conv', 1), ('dil_conv', 3), ('up_cweight', 1)], up_concat=range(2, 5))

NAS_UNET_NEW_V1 = Genotype(down=[('down_dil_conv', 0), ('down_conv', 1), ('max_pool', 1), ('down_conv', 0)], down_concat=range(2, 4), up=[('conv', 0), ('up_dil_conv', 1), ('conv', 2), ('up_cweight', 1)], up_concat=range(2, 4))