You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv3自定义2类模型.weights转.pb时报reshape相关ValueError求助

YOLOv3自定义权重转TFLite报错解决方案

你遇到的ValueError: cannot reshape array of size 278540 into shape (256,128,3,3)报错,核心原因是转换工具默认适配COCO数据集80类的YOLOv3结构,你训练的是2类自定义模型,输出层的参数维度和默认结构不匹配导致权重加载失败,按以下步骤操作即可解决:

1. 核验配置文件参数

这是最常见的出错原因,首先确认你训练用的cfg配置文件修改完全正确:

  • 找到cfg中全部3个[yolo]层,每个层下的classes参数值都改为2
  • 找到每个[yolo]层上方紧邻的[convolutional]层,将每个卷积层的filters参数值改为21,计算公式为3*(类别数 + 5) = 3*(2+5) =21,注意3个yolo层对应的卷积层都要修改,仅修改单一层会直接触发维度不匹配报错
  • 转换时使用的cfg文件必须和训练时的版本完全一致,不要混用官方原版YOLOv3 cfg

2. 调整转换工具的类别配置

你之前试用的所有转换仓库均默认适配80类,转换前需手动修改相关配置:

  • 确认工具加载类别文件的路径指向你自己的2类classes.names,不要用默认的coco.names
  • 部分仓库存在硬编码的类别数常量,全局搜索代码中数值为80的类别参数,改为2后再运行转换脚本

3. 标准转换流程参考

Darknet权重转TensorFlow SavedModel

python convert.py --weights ./你的权重文件名.weights --output ./checkpoints/yolov3-custom --num_classes 2 --model yolov3

SavedModel转PB格式

python -m tensorflow.python.tools.freeze_graph \
--input_saved_model_dir=./checkpoints/yolov3-custom \
--output_node_names='yolov3/yolo_nms/Reshape_1,yolov3/yolo_nms/Reshape_2' \
--output_graph=./yolov3-custom.pb

PB转TFLite格式

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model('./checkpoints/yolov3-custom')
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()

with open('yolov3-custom.tflite', 'wb') as f:
  f.write(tflite_model)

异常排查

如果修改后仍报错,按以下顺序核验:

  • 确认你使用的权重是训练完成后导出的最终权重,不是训练中断生成的临时权重
  • 转换前清空所有缓存的checkpoint、中间模型文件,避免旧文件干扰
  • 确认你的TensorFlow版本在2.4~2.10区间,过高或过低版本都会出现算子不兼容问题

内容的提问来源于stack exchange,提问作者Mishaal Naeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 02:15:05