zhmiao / OpenLongTailRecognition-OLTR

Pytorch implementation for "Large-Scale Long-Tailed Recognition in an Open World" (CVPR 2019 ORAL)
BSD 3-Clause "New" or "Revised" License
841 stars 128 forks source link

A question about the initialization of memory M. #8

Closed HX-idiot closed 5 years ago

HX-idiot commented 5 years ago

Hi, brother, it was great to have a look at your paper recently, what i confused is ,at the beginning of stage 2, you use average representation for each class as memory, how about just using the fc parameter trained in stage_1?(we can also use cosine classifier in stage_1) Maybe it's more conclusive? Does there some difference between the two ways? Thanks~

zhmiao commented 5 years ago

Hello @HX-idiot, thanks for asking. Actually, there could be many different ways to construct the memory bank. Feature centroids is one of the most straightforward ways because it is easy to implement and can capture the common invariance within each class that represents the whole class pretty well. At the same time, it fits the use of center loss that makes class clusters more compact and pushes the centroids further away from each other. Weight average is another way for sure. We did not test different types of memories in our paper, but should be an interesting thing to do.

The reason why we did not apply cosine classifier in the first stage was that the main purpose of the first stage was to initialize the memory bank. We believe that applying cosine classifier at the second stage training is enough for the final classification. However, to further improve the performance, applying cosine to the first stage might help as well.

zhmiao commented 5 years ago

Since it has been over 20 days, I am closing this issue for now. If you have any more questions, we will reopen this issue. Thank you very much.