Why are the weights not shared in the backbone and shared in the classifier?
wpumain opened this issue · comments
Zachary Wang commented
Why are the weights not shared in the backbone and shared in the classifier?
class two_view_net(nn.Module):
def __init__(self, class_num, droprate, stride = 2, pool = 'avg', share_weight = False, VGG16=False):
super(two_view_net, self).__init__()
if VGG16:
self.model_1 = ft_net_VGG16(class_num, stride=stride, pool = pool)
else:
self.model_1 = ft_net(class_num, stride=stride, pool = pool)
if share_weight:
self.model_2 = self.model_1
else:
if VGG16:
self.model_2 = ft_net_VGG16(class_num, stride = stride, pool = pool)
else:
self.model_2 = ft_net(class_num, stride = stride, pool = pool)
self.classifier = ClassBlock(2048, class_num, droprate)
if pool =='avg+max':
self.classifier = ClassBlock(4096, class_num, droprate)
if VGG16:
self.classifier = ClassBlock(512, class_num, droprate)
if pool =='avg+max':
self.classifier = ClassBlock(1024, class_num, droprate)
def forward(self, x1, x2):
if x1 is None:
y1 = None
else:
x1 = self.model_1(x1)
y1 = self.classifier(x1)
if x2 is None:
y2 = None
else:
x2 = self.model_2(x2)
y2 = self.classifier(x2)
return y1, y2
Weights is not shared in self.model_1 and self.model_1 ,but the classifier does share weight,why?
Zhedong Zheng commented
Hi @wpumain
The low level feature may be different style, e.g., illumination (You may check the satellite and drone images).
But we want to mapping them to one shared space, so we share the final classifier.