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

使用Super-gradients训练YOLO-NAS首次验证后遇编码错误求助

问题描述

环境版本

  • torch: 1.13.1
  • super-gradients: 3.1.2

训练参数

from super_gradients.training.losses import PPYoloELoss
from super_gradients.training.metrics import DetectionMetrics_050
from super_gradients.training.metrics import DetectionMetrics_050_095

from super_gradients.training.models.detection_models.pp_yolo_e import PPYoloEPostPredictionCallback

train_params = {
    'silent_mode': False,
    "average_best_models":True,
    "warmup_mode": "linear_epoch_step",
    "warmup_initial_lr": 1e-6,
    "lr_warmup_epochs": 3,
    "initial_lr": 5e-4,
    "lr_mode": "cosine",
    "cosine_final_lr_ratio": 0.1,
    "optimizer": "Adam",
    "optimizer_params": {"weight_decay": 0.0001},
    "zero_weight_decay_on_bias_and_bn": True,
    "ema": True,
    "ema_params": {"decay": 0.9, "decay_type": "threshold"},
    "max_epochs": EPOCHS,
    "mixed_precision": True,
    "loss": PPYoloELoss(
        use_static_assigner=False,
        num_classes=len(dataset_params['classes']),
        reg_max=16
    ),
    "valid_metrics_list": [
        DetectionMetrics_050(
            score_thres=0.1,
            top_k_predictions=300,
            num_cls=len(dataset_params['classes']),
            normalize_targets=True,
            post_prediction_callback=PPYoloEPostPredictionCallback(
                score_threshold=0.01,
                nms_top_k=1000,
                max_predictions=300,
                nms_threshold=0.7
            )
        ),
        DetectionMetrics_050_095(
            score_thres=0.1,
            top_k_predictions=300,
            num_cls=len(dataset_params['classes']),
            normalize_targets=True,
            post_prediction_callback=PPYoloEPostPredictionCallback(
                score_threshold=0.01,
                nms_top_k=1000,
                max_predictions=300,
                nms_threshold=0.7
            )
        )
    ],
    "metric_to_watch": 'mAP@0.50:0.95'
}

训练流程

models_to_train = ['yolo_nas_s']
 
CHECKPOINT_DIR = 'checkpoints'
 
trainer = Trainer(
    experiment_name='yolo_nas_s', 
    ckpt_root_dir=CHECKPOINT_DIR
)

model = models.get(
    'yolo_nas_s', 
    num_classes=len(dataset_params['classes']), 
    pretrained_weights="coco"
)

trainer.train(
    model, 
    training_params=train_params, 
    train_loader=train_data, 
    valid_loader=val_data
)

错误信息

"'charmap' codec can't encode characters in position 20-22: character maps to "


解决方法

这个编码错误多出现于Windows环境,核心原因是程序默认使用系统编码(如GBK)读取含非ASCII字符的文件(标注文件、类别名等)时出现兼容问题,可尝试以下方案:

  1. 强制设置Python默认编码为UTF-8
    在训练脚本开头添加代码,覆盖默认输出编码:
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
  1. 显式指定数据集文件编码
    如果自定义数据集的标注文件(XML/JSON/TXT等)含中文或特殊字符,读取时强制指定utf-8编码:
with open(label_file_path, 'r', encoding='utf-8') as f:
    content = f.read()

若使用SuperGradients内置数据集类,检查是否支持通过参数指定编码,或修改类内文件读取逻辑。

  1. 修改控制台编码
    在Windows命令行执行以下命令切换编码为UTF-8,再运行训练脚本:
chcp 65001
  1. 清理路径与名称中的特殊字符
    检查数据集的文件路径、文件名、类别名称是否包含中文、生僻字或特殊符号,若有则改为英文/数字命名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:54:55