shuangw98 / MFDC

Multi-Faceted Distillation of Base-Novel Commonality for Few-shot Object Detection, ECCV 2022
MIT License
27 stars 4 forks source link

modeling/roi_heads.py #3

Closed MrCrightH closed 1 year ago

MrCrightH commented 1 year ago

Dear author, please can you share the design concept of this module with me. I would like to ask you for your humble advice

modeling/roi_heads.py

@torch.no_grad()
def _dequeue_and_enqueue(self, keys_s, keys_l, gt_class):
    keys_s = keys_s[:self.queue_len]
    keys_l = keys_l[:self.queue_len]
    batch_size = keys_s.shape[0]
    ptr = int(self.queue_ptr[gt_class])
    if ptr + batch_size <= self.queue_len:
        self.queue_s[gt_class, ptr:ptr + batch_size] = keys_s
        self.queue_l[gt_class, ptr:ptr + batch_size] = keys_l
    else:
        self.queue_s[gt_class, ptr:] = keys_s[:self.queue_len - ptr]
        self.queue_s[gt_class, :(ptr + batch_size) % self.queue_len] = keys_s[self.queue_len - ptr:]
        self.queue_l[gt_class, ptr:] = keys_l[:self.queue_len - ptr]
        self.queue_l[gt_class, :(ptr + batch_size) % self.queue_len] = keys_l[self.queue_len - ptr:]

    if ptr + batch_size >= self.queue_len:
        self.queue_full[gt_class] = 1
    ptr = (ptr + batch_size) % self.queue_len
    self.queue_ptr[gt_class] = ptr
shuangw98 commented 1 year ago

Thanks for your attention! '_dequeueandenqueue()' is used to update the memory bank by enqueuing the current batch of RoI features to the corresponding class queue and dequeuing the same amount of oldest samples. You can refer to the Section 3.5 of our paper for more details.