PyTorch_YOLOv4
PyTorch_YOLOv4 copied to clipboard
项目可以将 yolov4.weights to yolov4.pth吗?
不知道这个项目是不是有将 yolov4.weights转换成yolov4.pth代码?
load完weights再save就行了
谢谢大佬
@futureflsl 你解决这个问题吗?我也有同样的问题,根据上面建议用了下面的代码,但是出现了错误。
import torch
model = torch.load("./weights/yolov4-pacsp.weights") torch.save(model, "./weights/yolov4-pacsp_new.pt")
error: File "/home/sei/anaconda3/envs/run-pytorch/lib/python3.8/site-packages/torch/serialization.py", line 764, in _legacy_load magic_number = pickle_module.load(f, **pickle_load_args) _pickle.UnpicklingError: invalid load key, '\x00'.
讀取權重方式
cfg = 'your_cfg.cfg'
weights = 'your_weights.weights'
model = Darknet(cfg)
load_darknet_weights(model, weights)
@WongKinYiu 谢谢您。根据您的建议,我用了下面的代码进行转换。转换成功了,但是用转换了的weights file进行训练时出现了下述错误。请您看看好吗?我是一个AI新手,真的非常感谢您的帮助。
转换代码
import torch from models.models import *
cfg = 'cfg/yolov4-pacsp.cfg' weights = 'weights/yolov4-pacsp.weights' model = Darknet(cfg) load_darknet_weights(model, weights) torch.save(model, "./weights/yolov4-pacsp_new.pt")
训练时出现的错误
Model Summary: 342 layers, 5.25014e+07 parameters, 5.25014e+07 gradients
Traceback (most recent call last):
File "train.py", line 438, in
train(hyp, opt, device, tb_writer)
File "train.py", line 66, in train
state_dict = {k: v for k, v in ckpt['model'].items() if model.state_dict()[k].numel() == v.numel()}
TypeError: 'Darknet' object is not subscriptable
我是用dakrnet yolov4训练的模型yolov4.weights但是转换后提示如下错误 assert not any(u), "Unsupported fields %s in %s. See https://github.com/ultralytics/yolov3/issues/631" % (u, path) AssertionError: Unsupported fields ['max_delta'] in trainedmodel/yolov4.cfg. See https://github.com/ultralytics/yolov3/issues/631 我用https://github.com/Tianxiaomo/pytorch-YOLOv4这个项目是可以将yolov4.weights转成pth,但是转换也不能用。目前还没有发现一个项目能把dakrnet yolov4训练的模型yolov4.weights但是转换pytorch模型,希望大佬探索一下
from models.models import *
from utils.datasets import *
from utils.general import *
cfg = input("cfg路径:")
weights = input("weights路径:")
model = Darknet(cfg)
if weights.endswith('.pt'):
model.load_state_dict(torch.load(weights, map_location='cpu')['model'])
save_weights(model, path='converted.weights', cutoff=-1)
print("Success: converted '%s' to 'converted.weights'" % weights)
elif weights.endswith('.weights'):
_ = load_darknet_weights(model, weights)
chkpt = {'epoch': -1, 'best_loss': None, 'model': model.state_dict(), 'optimizer': None}
torch.save(chkpt, 'converted.pt')
print("Success: converted '%s' to 'converted.pt'" % weights)