WongKinYiu / PyTorch_YOLOv4

PyTorch implementation of YOLOv4
1.88k stars 587 forks source link

项目可以将 yolov4.weights to yolov4.pth吗? #195

Open futureflsl opened 3 years ago

futureflsl commented 3 years ago

不知道这个项目是不是有将 yolov4.weights转换成yolov4.pth代码?

WongKinYiu commented 3 years ago

load完weights再save就行了

futureflsl commented 3 years ago

谢谢大佬

yueli822ms commented 3 years ago

@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'.

WongKinYiu commented 3 years ago

讀取權重方式

cfg = 'your_cfg.cfg'
weights = 'your_weights.weights'
model = Darknet(cfg)
load_darknet_weights(model, weights)
yueli822ms commented 3 years ago

@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

futureflsl commented 3 years ago

我是用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模型,希望大佬探索一下

1061700625 commented 2 years ago
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)