PyTorchVideo训练视频分类模型时Kinetics数据集加载错误修复咨询
解决Kinetics数据集PyTorchVideo训练中的两个加载错误
错误1:ValueError: invalid literal for int() with base 10:'Dancing'
原因
PyTorchVideo的Kinetics数据集类默认要求标签为整数类型,你最初使用文本标签(如Dancing),导致系统无法将其转换为整数,触发类型错误。
解决方法
无需移动视频文件位置,保留原分类文件夹结构即可,两种修复方式二选一:
- CSV保留文本标签,添加映射参数
在初始化Kinetics数据集时,传入label_map参数,手动映射文本标签到整数:# 替换为你的所有类别映射关系 label_map = {"Dancing": 0, "Running": 1, "Jumping": 2, ...} train_dataset = pytorchvideo.data.Kinetics( data_path=os.path.join("/mnt/storage_6TB/user/kinetics400/train_subdivision", "my_train.csv"), clip_sampler=pytorchvideo.data.make_clip_sampler("random", self._CLIP_DURATION), transform=train_transform, label_map=label_map ) - CSV直接使用整数标签
保持你已经修改的数字标签CSV,但恢复原数据集文件夹结构,无需将所有视频移到同一目录。
错误2:RuntimeError: Failed to load video after 10 retries
核心原因:视频文件无法被正常读取,可能由以下问题导致,逐一排查修复:
路径不匹配
检查CSV中的视频路径是否正确:- 若使用绝对路径,确保路径与实际文件位置完全一致(区分大小写、后缀名);
- 若使用相对路径,需设置
video_path_prefix参数,指向视频文件的根目录。
视频文件损坏/编码不兼容
- 编写安全加载函数跳过损坏视频:
from pytorchvideo.data.encoded_video import EncodedVideo def safe_video_loader(path, decode_audio=False): try: return EncodedVideo.from_path(path, decode_audio=decode_audio) except Exception as e: print(f"跳过损坏视频: {path},错误信息: {e}") return None # 初始化数据集时替换默认loader train_dataset = pytorchvideo.data.Kinetics( data_path=os.path.join("/mnt/storage_6TB/user/kinetics400/train_subdivision", "my_train.csv"), clip_sampler=pytorchvideo.data.make_clip_sampler("random", self._CLIP_DURATION), transform=train_transform, video_loader=safe_video_loader ) - 对编码不兼容的视频,用ffmpeg转码:
ffmpeg -i 原视频.mp4 -c:v libx264 -crf 23 -c:a aac 转码后视频.mp4
- 编写安全加载函数跳过损坏视频:
数据加载器参数冲突
降低num_workers数值(比如从8改为4),多进程加载可能引发文件访问冲突。裁剪时长不匹配
你的_CLIP_DURATION设置为2秒,若存在时长不足2秒的视频,会导致无法采样。解决方式:- 过滤CSV中时长小于2秒的视频;
- 更换
clip_sampler为uniform,允许采样短于设定时长的视频片段。
额外脚本修复提示
你的训练变换中,RandomShortSideScale设置为224,但后续RandomCrop设置为244,这会触发尺寸不匹配错误,需将RandomCrop参数改为224:
RandomShortSideScale(min_size=224, max_size=224), RandomCrop(224), # 原244改为224
内容的提问来源于stack exchange,提问作者dtr43
相关产品推荐
相关产品推荐

