-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
请问我使用n系列的pt文件转为weights文件后,进行训练后,训练的过程是正常的,但是在进行val的时候,non_max_suppression后pds的size为0,后面的代码就报错了。
但是如果使用您提供的yolov5s.weights训练的话,就不会出现问题。
我转换的代码参考您提供的代码,如下所示:
from pathlib import Path
from models.common import DetectMultiBackend
import numpy as np
import torch
from utils.torch_utils import select_device
weights = 'yolov5s.weights'
pt_weights = 'yolov5s.pt'
device = select_device("cuda:0")
model = DetectMultiBackend(pt_weights, device=device, dnn=False, data='data/coco128.yaml', fp16=False)
# parms "model" is DetectMultiBackend's instance
ddd = model.model.state_dict()
i = 0
if Path(weights).exists():
f = open(weights, 'rb')
for k, v in ddd.items():
if 'weight' in k or 'bias' in k or 'running_mean' in k or 'running_var' in k:
# t = v.cpu().numpy()
# if 'weight' in k or 'bias' in k:
# print(k, i)
# i += 1
nb = v.element_size() * v.numel()
data_ = f.read(nb)
y = np.frombuffer(data_, np.float32).reshape(v.shape)
y = torch.from_numpy(y).to(v.device)
v[...] = torch.zeros(v.shape, device=v.device)[...]
v[...] = y[...]
print(i, k, v.shape, nb)
i += 1
# nb2 = t.nbytes
# print(k, t.shape, t.dtype)
# f.write(t.tobytes())
# v[...] = torch.zeros(v.shape,device=v.device)[...]
f.close()
else:
f = open(weights, 'wb')
for k, v in ddd.items():
if 'weight' in k or 'bias' in k or 'running_mean' in k or 'running_var' in k:
t = v.cpu().numpy()
print(k, t.shape, t.dtype)
f.write(t.tobytes())
# v[...] = torch.zeros(v.shape,device=v.device)[...]
f.close()Metadata
Metadata
Assignees
Labels
No labels
