本文整理匯總了Python中utils.detectron_weight_helper.resnet_weights_name_pattern方法的典型用法代碼示例。如果您正苦於以下問題:Python detectron_weight_helper.resnet_weights_name_pattern方法的具體用法?Python detectron_weight_helper.resnet_weights_name_pattern怎麽用?Python detectron_weight_helper.resnet_weights_name_pattern使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類utils.detectron_weight_helper
的用法示例。
在下文中一共展示了detectron_weight_helper.resnet_weights_name_pattern方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: load_pretrained_imagenet_weights
# 需要導入模塊: from utils import detectron_weight_helper [as 別名]
# 或者: from utils.detectron_weight_helper import resnet_weights_name_pattern [as 別名]
def load_pretrained_imagenet_weights(model):
"""Load pretrained weights
Args:
num_layers: 50 for res50 and so on.
model: the generalized rcnnn module
"""
_, ext = os.path.splitext(cfg.RESNETS.IMAGENET_PRETRAINED_WEIGHTS)
if ext == '.pkl':
with open(cfg.RESNETS.IMAGENET_PRETRAINED_WEIGHTS, 'rb') as fp:
src_blobs = pickle.load(fp, encoding='latin1')
if 'blobs' in src_blobs:
src_blobs = src_blobs['blobs']
pretrianed_state_dict = src_blobs
else:
weights_file = os.path.join(cfg.ROOT_DIR, cfg.RESNETS.IMAGENET_PRETRAINED_WEIGHTS)
pretrianed_state_dict = convert_state_dict(torch.load(weights_file))
# Convert batchnorm weights
for name, mod in model.named_modules():
if isinstance(mod, mynn.AffineChannel2d):
if cfg.FPN.FPN_ON:
pretrianed_name = name.split('.', 2)[-1]
else:
pretrianed_name = name.split('.', 1)[-1]
bn_mean = pretrianed_state_dict[pretrianed_name + '.running_mean']
bn_var = pretrianed_state_dict[pretrianed_name + '.running_var']
scale = pretrianed_state_dict[pretrianed_name + '.weight']
bias = pretrianed_state_dict[pretrianed_name + '.bias']
std = torch.sqrt(bn_var + 1e-5)
new_scale = scale / std
new_bias = bias - bn_mean * scale / std
pretrianed_state_dict[pretrianed_name + '.weight'] = new_scale
pretrianed_state_dict[pretrianed_name + '.bias'] = new_bias
model_state_dict = model.state_dict()
pattern = dwh.resnet_weights_name_pattern()
name_mapping, _ = model.detectron_weight_mapping
for k, v in name_mapping.items():
if isinstance(v, str): # maybe a str, None or True
if pattern.match(v):
if cfg.FPN.FPN_ON:
pretrianed_key = k.split('.', 2)[-1]
else:
pretrianed_key = k.split('.', 1)[-1]
if ext == '.pkl':
model_state_dict[k].copy_(torch.Tensor(pretrianed_state_dict[v]))
else:
model_state_dict[k].copy_(pretrianed_state_dict[pretrianed_key])