Caffe转TensorFlow时遇TypeError:需类字节对象而非str
你尝试将colorful-colorization的预训练Caffe模型转成TensorFlow格式时碰到的报错,我在帮人排查类似问题时遇到过好几次,大概率是下面几个常见原因之一,你可以逐一尝试解决:
1. 转换器版本不兼容或未正确安装
很多时候这类转换错误是因为用的caffe-tensorflow转换器版本太老,不支持目标模型里的某些层结构。你可以更新到最新版本的转换器:
# 如果你已经克隆过仓库,先拉取最新代码 cd caffe-tensorflow git pull # 以可编辑模式重新安装 pip install -e .
如果还没安装过,就找到官方的caffe-tensorflow仓库克隆到本地,再执行上面的安装步骤。
2. 文件路径解析出错
相对路径很容易因为当前工作目录的问题导致找不到文件,建议你换成绝对路径来指定模型文件和输出路径,同时确保输出目录存在:
# 先创建输出目录(如果不存在的话) mkdir -p ./out-code # 替换成你自己的绝对路径 python3 convert.py /your/absolute/path/colorful-colorization/models/colorization_deploy_v2.prototxt \ --caffemodel /your/absolute/path/colorful-colorization/models/colorization_release_v2.caffemodel \ --code-output-path /your/absolute/path/out-code/mynet.py
3. 模型中的自定义层不被转换器支持
colorful-colorization模型里有几个自定义层(比如特定的Slice层用法或者颜色空间转换相关的层),默认的转换器可能没有适配这些层。你可以先看一下报错Traceback的完整信息——你只提到了第60行,但没说具体错误类型(比如是KeyError还是AttributeError),如果是层解析失败,你需要手动修改convert.py来添加对应层的TensorFlow实现:
- 打开
convert.py,定位到第60行,看这一行是在处理哪个层的逻辑 - 对照Caffe模型的prototxt文件里的层定义,编写对应的TensorFlow代码来替换报错的部分
- 也可以找找社区里有没有已经适配好这个模型的转换脚本,很多人已经分享过针对colorful-colorization的转换方案
4. 依赖库版本冲突
caffe-tensorflow对TensorFlow、NumPy和Protobuf的版本有严格要求,如果你用的是TensorFlow 2.x,很大概率会报错,因为这个转换器主要适配TensorFlow 1.x。建议你创建一个虚拟环境,安装兼容的依赖版本:
# 用conda创建虚拟环境(也可以用venv) conda create -n caffe-tf-env python=3.7 conda activate caffe-tf-env # 安装指定版本的依赖 pip install tensorflow==1.15.0 numpy==1.19.5 protobuf==3.19.0
激活环境后再运行转换命令。
如果还是解决不了,建议你把完整的报错Traceback信息贴出来,比如具体的错误类型和上下文,这样能更精准地定位问题。
内容的提问来源于stack exchange,提问作者ghyur7

