wuzhihao7788 / yolodet-pytorch

reproduce the YOLO series of papers in pytorch, including YOLOv4, PP-YOLO, YOLOv5,YOLOv3, etc.
390 stars 106 forks source link

_freeze_stages函数第一部分param.requires_grad =False? #8

Closed dsp6414 closed 3 years ago

dsp6414 commented 3 years ago

感觉这位置应该为True,是我理解错了吗? 还有如果目标类别和预训练模型不一样可以加载预训练模型吗?

dsp6414 commented 3 years ago

models/backbone/resnet.py

wuzhihao7788 commented 3 years ago

感觉这位置应该为True,是我理解错了吗? 还有如果目标类别和预训练模型不一样可以加载预训练模型吗?

具体那个位置?resnet在配置文件里有定义。冻结那几几层的残差块

dsp6414 commented 3 years ago

def _freeze_stages(self): if self.frozen_stages >= 0: self.norm1.eval() for m in [self.conv1, self.norm1]: for param in m.parameters(): param.requires_grad = False #我觉得这里是不是应该为True

    for i in range(1, self.frozen_stages + 1):
        m = getattr(self, 'layer{}'.format(i))
        m.eval()
        for param in m.parameters():
            param.requires_grad = False
wuzhihao7788 commented 3 years ago

def _freeze_stages(self): if self.frozen_stages >= 0: self.norm1.eval() for m in [self.conv1, self.norm1]: for param in m.parameters(): param.requires_grad = False #我觉得这里是不是应该为True

    for i in range(1, self.frozen_stages + 1):
        m = getattr(self, 'layer{}'.format(i))
        m.eval()
        for param in m.parameters():
            param.requires_grad = False

这部分代码没有问题,frozen_stages 默认值为-1, param.requires_grad = False,在反向梯度更新的时候叶子节点不更新权重,网络层冻结。 param.requires_grad = True是默认值,默认所有的叶子节点都更新梯度。