PyTorch 1.11.0 compatibility updates (#1914)
* PyTorch 1.11.0 compatibility updates Resolves `AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'` first raised in https://github.com/ultralytics/yolov5/issues/5499 and observed in all CI runs on just-released PyTorch 1.11.0. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update experimental.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
b6f6b5b965
commit
7093a2b543
@ -94,21 +94,22 @@ def attempt_load(weights, map_location=None, inplace=True, fuse=True):
|
|||||||
model = Ensemble()
|
model = Ensemble()
|
||||||
for w in weights if isinstance(weights, list) else [weights]:
|
for w in weights if isinstance(weights, list) else [weights]:
|
||||||
ckpt = torch.load(attempt_download(w), map_location=map_location) # load
|
ckpt = torch.load(attempt_download(w), map_location=map_location) # load
|
||||||
if fuse:
|
ckpt = (ckpt['ema'] or ckpt['model']).float() # FP32 model
|
||||||
model.append(ckpt['ema' if ckpt.get('ema') else 'model'].float().fuse().eval()) # FP32 model
|
model.append(ckpt.fuse().eval() if fuse else ckpt.eval()) # fused or un-fused model in eval mode
|
||||||
else:
|
|
||||||
model.append(ckpt['ema' if ckpt.get('ema') else 'model'].float().eval()) # without layer fuse
|
|
||||||
|
|
||||||
# Compatibility updates
|
# Compatibility updates
|
||||||
for m in model.modules():
|
for m in model.modules():
|
||||||
if type(m) in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU, Detect, Model]:
|
t = type(m)
|
||||||
m.inplace = inplace # pytorch 1.7.0 compatibility
|
if t in (nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU, Detect, Model):
|
||||||
if type(m) is Detect:
|
m.inplace = inplace # torch 1.7.0 compatibility
|
||||||
|
if t is Detect:
|
||||||
if not isinstance(m.anchor_grid, list): # new Detect Layer compatibility
|
if not isinstance(m.anchor_grid, list): # new Detect Layer compatibility
|
||||||
delattr(m, 'anchor_grid')
|
delattr(m, 'anchor_grid')
|
||||||
setattr(m, 'anchor_grid', [torch.zeros(1)] * m.nl)
|
setattr(m, 'anchor_grid', [torch.zeros(1)] * m.nl)
|
||||||
elif type(m) is Conv:
|
elif t is Conv:
|
||||||
m._non_persistent_buffers_set = set() # pytorch 1.6.0 compatibility
|
m._non_persistent_buffers_set = set() # torch 1.6.0 compatibility
|
||||||
|
elif t is nn.Upsample and not hasattr(m, 'recompute_scale_factor'):
|
||||||
|
m.recompute_scale_factor = None # torch 1.11.0 compatibility
|
||||||
|
|
||||||
if len(model) == 1:
|
if len(model) == 1:
|
||||||
return model[-1] # return model
|
return model[-1] # return model
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user