问题:在把训练好的新YOLO11s模型转wts文件时报错,具体信息如下图(PytorchStreamReader failed reading zip archive: failed finding central directory)

解决:新老版本pytorch之间的兼容问题,改动一下生成wts文件即可。代码帖在下面。
import sys import argparseimport osimport structimport torchdef parse_args(): parser = argparse.ArgumentParser(description=\'Convert .pt file to .wts\') parser.add_argument(\'-w\', \'--weights\', required=True, help=\'Input weights (.pt) file path (required)\') parser.add_argument( \'-o\', \'--output\', help=\'Output (.wts) file path (optional)\') parser.add_argument( \'-t\', \'--type\', type=str, default=\'detect\', choices=[\'detect\', \'cls\', \'seg\', \'pose\', \'obb\'], help=\'determines the model is detection/classification\') args = parser.parse_args() if not os.path.isfile(args.weights): raise SystemExit(\'Invalid input file\') if not args.output: args.output = os.path.splitext(args.weights)[0] + \'.wts\' elif os.path.isdir(args.output): args.output = os.path.join( args.output, os.path.splitext(os.path.basename(args.weights))[0] + \'.wts\') return args.weights, args.output, args.typept_file, wts_file, m_type = parse_args()print(f\'Generating .wts for {m_type} model\')print(f\'Loading {pt_file}\')device = \'cpu\'model = torch.load(pt_file, map_location=device, weights_only=False) model = model[\'ema\' if model.get(\'ema\') else \'model\'].float()if m_type in [\'detect\', \'seg\', \'pose\', \'obb\']: anchor_grid = model.model[-1].anchors * model.model[-1].stride[..., None, None] delattr(model.model[-1], \'anchors\')model.to(device).eval()with open(wts_file, \'w\') as f: f.write(\'{}\\n\'.format(len(model.state_dict().keys()))) for k, v in model.state_dict().items(): vr = v.reshape(-1).cpu().numpy() f.write(\'{} {} \'.format(k, len(vr))) for vv in vr: f.write(\' \') f.write(struct.pack(\'>f\', float(vv)).hex()) f.write(\'\\n\')