bismex / MetaBIN

[CVPR2021] Meta Batch-Instance Normalization for Generalizable Person Re-Identification
70 stars 13 forks source link

Results of training without meta learning #10

Closed WentaoTan closed 2 years ago

WentaoTan commented 2 years ago

Hello. When I was reading your paper, I had a doubt: What would be the result if meta-learning was not used during training? So I went to study your code but didn't understand it. Could you please tell me the result without meta-learning or how to modify the code?

bismex commented 2 years ago

Thank you for your interest.

You can see this result is Table 3, Table 4, and Table 5, denoted by BN. The method specified as BN is a method of learning the existing BN-based backbone in multiple source domains without using meta-learning. Comparing the proposed MetaBIN method with the existing BN performance, there is a big performance difference with rank-1 accuracy of 65.7% and 50.9% in the large scale DG re-id benchmark.

In order to operate the BN-based model without using meta-learning in the code, please refer to the code modifications below. 1) In this code (MetaBIN/configs/Sample/DG-mobilenet.yml), put "BN" instead of "BIN_gate2" for the variable in MODEL.NORM.TYPE_BACKBONE. This means using BN instead of batch-instance normalization. 2) In this code (MetaBIN/configs/Base-DG.yml), put "" or '' (empty) instead of "DG" for the variable in META.DATA.NAMES. This means not using the meta-learning scheme. Instead of modifying this code (MetaBIN/configs/Base-DG.yml), you can add the META.DATA.NAMES variable in this code (MetaBIN/configs/Sample/DG-mobilenet.yml) and set the value to "" like this.

<DG-mobilenet.yml>
...

META:
  DATA:
    MTRAIN_MINI_BATCH: 80 
    MTRAIN_NUM_INSTANCE: 4
    MTEST_MINI_BATCH: 80 
    MTEST_NUM_INSTANCE: 4
    NAMES: "" # add this

...

MODEL:
  NORM:
    TYPE_BACKBONE: "BN" # change this

...

Please feel free to contact us if you have any questions.

Thanks, Seokeon Choi

WentaoTan commented 2 years ago

If I want to use BIN but do not want to update the balance parameter Gate by meta learning, how can I modify it?

bismex commented 2 years ago

Thanks for the re-comment.

You can modify the code by reflecting on my second answer if you want to exclude the meta-learning scheme.

In this code (MetaBIN/configs/Base-DG.yml), put "" or '' (empty) instead of "DG" for the variable in META.DATA.NAMES. This means not using the meta-learning scheme. Instead of modifying this code (MetaBIN/configs/Base-DG.yml), you can add the META.DATA.NAMES variable in this code (MetaBIN/configs/Sample/DG-mobilenet.yml) and set the value to "" like this.

And, there is one more variant for BIN methods. Our BIN method is different from the original BIN [1], so you can change the BIN variant in our code.

[1] Hyeonseob Nam and Hyo-Eun Kim. Batch-instance normalization for adaptively style-invariant neural networks. In Advances in Neural Information Processing Systems (NeurIPS), pages 2558–2567, 2018.

WentaoTan commented 2 years ago

Hello! I have another question. How to set the configs file for single domain experiments such as "Market1501 to DukeMTMC"? I simply set DATASETS parameters in MetaBIN/configs/Sample/DG-resnet.yml like:

DATASETS: NAMES: ("DG_Market1501", ) TESTS: ("DukeMTMC",)

But it reports an error:

Traceback (most recent call last): File "./tools/train_net.py", line 144, in args=(args,), File "./fastreid/engine/launch.py", line 72, in launch main_func(*args) File "./tools/train_net.py", line 132, in main return trainer.train() # train_loop.py -> train File "./fastreid/engine/defaults.py", line 564, in train super().train(self.start_iter, self.max_iter) File "./fastreid/engine/train_loop.py", line 144, in train self.run_step_meta_learning2() # update balancing parameters (meta-learning) File "./fastreid/engine/train_loop.py", line 659, in run_step_meta_learning2 opt['domains'] = data_mtest['others']['domains'] TypeError: 'NoneType' object is not subscriptable

WentaoTan commented 2 years ago

Hello, I notice that no one used Crossgrad[1] and L2A-OT[2] to conduct single domain experiments in previous articles. Maybe I didn't read enough materials and I missed them. I would like to ask whether these two methods are also trained with the same backbone, ResNet50, as SNR[3]?

[1]Shiv Shankar, Vihari Piratla, Soumen Chakrabarti, Sid-dhartha Chaudhuri, Preethi Jyothi, and Sunita Sarawagi. Generalizing across domains via cross-gradient training.arXiv preprint arXiv:1804.10745, 2018. [2]Kaiyang Zhou, Yongxin Yang, Timothy Hospedales, and TaoXiang. Learning to generate novel domains for domain gen-eralization. InEuropean Conference on Computer Vision,pages 561–578. Springer, 2020. [3]Xin Jin, Cuiling Lan, Wenjun Zeng, Zhibo Chen, and LiZhang. Style normalization and restitution for generalizableperson re-identification. InProc. IEEE Conf. Comput. Vis.Pattern Recognit., pages 3143–3152, 2020.

bismex commented 2 years ago

Sorry for the late reply.

The first question: This config file (https://github.com/bismex/MetaBIN/blob/master/configs/Sample/M-resnet.yml) provides the setting that you want to.

The second question: I recorded the performance for Crossgrad and L2A-OT by referring to the paper on L2A-OT. The result is not my re-implementation, so it is difficult to tell for sure which backbone was used. In the L2A-OT paper, it is stated that their method is based on Torchreid. Please check with the authors for more details.