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

微调YOLOv8时遇TypeError: code()参数13需str而非int的解决办法

YOLOv8训练首个epoch后保存模型触发cloudpickle TypeError解决思路

自定义数据集微调YOLOv8n模型时,首个epoch训练完成后触发保存模型的错误,错误类型为TypeError: code() argument 13 must be str, not int,相关代码、配置及错误日志如下:

训练代码

model = YOLO("YOLOv8n.pt",task="detect")
model.train(data="config.yaml", epochs=5,optimizer="Adam")

config.yaml配置

train: /Users/nuntea/Computer Vision/Football Field Detection/aug_data/Train/images
val: /Users/nuntea/Computer Vision/Football Field Detection/aug_data/Validation/images

names:
     0 : Referee
     1 : Player
     2 : GoalKeeper
     3 : Ball

截断后的错误日志

Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
 1/5         0G      2.409       2.63       2.16         44        640: 1

Class     Images  Instances      Box(P          R      mAP50  m
 all        900       4527   4.44e-05     0.0032   2.42e-05   7.84e-06

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[54], line 2
      1 model = YOLO("YOLOv8n.pt",task="detect")
----> 2 model.train(data="config.yaml", epochs=5,optimizer="Adam")

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/ultralytics/engine/model.py:338, in Model.train(self, trainer, **kwargs)
    336     self.model = self.trainer.model
    337 self.trainer.hub_session = self.session  # attach optional HUB session
--> 338 self.trainer.train()
    339 # Update model and cfg after training
    340 if RANK in (-1, 0):

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/ultralytics/engine/trainer.py:385, in BaseTrainer._do_train(self, world_size)
    383     # Save model
    384     if self.args.save or (epoch + 1 == self.epochs):
--> 385         self.save_model()
    386         self.run_callbacks('on_model_save')
    388 tnow = time.time()

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/cloudpickle/__init__.py:7
      3 import sys
      4 import pickle
----> 7 from cloudpickle.cloudpickle import *
      8 if sys.version_info[:2] >= (3, 8):
      9     from cloudpickle.cloudpickle_fast import CloudPickler, dumps, dump

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/cloudpickle/cloudpickle.py:361
    342         else:
    343             return types.CodeType(
    344                 co.co_argcount,
    345                 co.co_kwonlyargcount,
   (...)
    358                 (),
    359             )
--> 361 _cell_set_template_code = _make_cell_set_template_code()
    364 def cell_set(cell, value):
    365     """Set the value of a closure cell.
    366     """

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/cloudpickle/cloudpickle.py:324, in _make_cell_set_template_code()
    322 else:
    323     if hasattr(types.CodeType, "co_posonlyargcount"):  # pragma: no branch
--> 324         return types.CodeType(
    325             co.co_argcount,
    326             co.co_posonlyargcount,  # Python3.8 with PEP570
    327             co.co_kwonlyargcount,
    328             co.co_nlocals,
    329             co.co_stacksize,
    330             co.co_flags,
    331             co.co_code,
    332             co.co_consts,
    333             co.co_names,
    334             co.co_varnames,
    335             co.co_filename,
    336             co.co_name,
    337             co.co_firstlineno,
    338             co.co_lnotab,
    339             co.co_cellvars,  # this is the trickery
    340             (),
    341         )
    342     else:
    343         return types.CodeType(
    344             co.co_argcount,
    345             co.co_kwonlyargcount,
   (...)
    358             (),
    359         )

TypeError: code() argument 13 must be str, not int

解决思路

  • 升级/降级cloudpickle版本:这个错误是cloudpickle与Python3.11的兼容性问题导致的,Python3.11对types.CodeType的参数格式要求有变化,旧版cloudpickle未适配。执行以下命令升级到最新稳定版:

    pip install --upgrade cloudpickle
    

    如果升级后仍有问题,尝试指定适配Python3.11的版本:

    pip install cloudpickle==2.2.1
    
  • 临时跳过模型保存验证问题:在训练时添加save=False参数,跳过自动保存环节,验证后续训练是否正常:

    model.train(data="config.yaml", epochs=5, optimizer="Adam", save=False)
    

    如果能跑完所有epoch,说明问题确实出在模型保存的pickle环节,进一步确认是cloudpickle的问题。

  • 更换模型保存方式:如果cloudpickle的问题无法解决,可以训练完成后手动导出模型,比如:

    # 训练完成后执行
    model.export(format='pt')
    

    或者在训练回调中使用torch.save()直接保存模型权重。

  • 降级Python版本:如果上述方法都无效,暂时降级到Python3.10,YOLOv8的依赖库在3.10环境下兼容性更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:05:55