Google Colab中已安装PyAV仍报错:UCF101数据集导入失败
解决Colab中torchvision UCF101数据集的PyAV导入错误
我遇到过完全一样的问题,罪魁祸首是DataLoader的多进程机制和Colab的环境隔离。虽然你在主进程里成功安装并验证了PyAV,但DataLoader启动的子工作进程并没有继承到这个新安装的包,所以才会触发这个错误。下面是几个有效的解决办法:
方法1:临时禁用DataLoader多进程(快速验证)
先把DataLoader的num_workers参数设为0,强制在主进程加载数据,绕开子进程环境的问题:
from torch.utils.data import DataLoader import torchvision import torchvision.transforms as transforms # 定义你的数据集(和之前代码一致) dataset = torchvision.datasets.UCF101( '/content/drive/My Drive/Colab Notebooks/ucf101', annotation_path='/content/drive/My Drive/Colab Notebooks/ucfTrainTestlist', frames_per_clip=16, step_between_clips=1, frame_rate=None, fold=1, train=True, transform=transforms.Compose([transforms.ToTensor(),]) ) # 关键:设置num_workers=0 dataloader = DataLoader(dataset, batch_size=4, num_workers=0)
这个方法能快速验证是不是多进程的问题,但缺点是加载数据速度会变慢,适合测试阶段使用。
方法2:重启Colab运行时(彻底同步环境)
有时候Colab的pip安装后,新包不会立刻被子进程识别,重启运行时能让整个环境同步:
- 点击Colab界面顶部的「Runtime」→「Restart runtime」
- 重启后先重新运行安装代码:
pip install av - 再执行你的数据集加载代码
方法3:安装兼容版本的PyAV
如果重启后还是报错,可能是PyAV版本和torchvision不兼容。试试安装一个经过验证的稳定版本:
pip install av==10.0.0
这个版本和大多数torchvision的视频数据集模块兼容性更好。
额外验证步骤
重启或重装后,你可以加一段代码验证子进程是否能正常导入PyAV:
import torch.multiprocessing as mp def check_av_in_subprocess(): try: import av print(f"子进程中PyAV版本:{av.__version__}") return True except ImportError: print("子进程无法导入PyAV") return False # 启动子进程测试 mp.set_start_method('spawn') test_process = mp.Process(target=check_av_in_subprocess) test_process.start() test_process.join()
如果能正常打印PyAV版本号,说明子进程环境已经正常,再运行UCF101的代码就不会报错了。
内容的提问来源于stack exchange,提问作者costa98
相关产品推荐
相关产品推荐

