PySlowFast安装及部分报错解决

PySlowFast


踩了无数个PySlowFast安装和使用的坑🙃,整理了一下希望能帮到同在泥泞中的小伙伴

安装步骤 (建议先浏览一遍)

  • 创建conda环境
    • conda create -n slowfast python=3.8
    • conda activate slowfast
  • 安装pytorch
    • conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia
  • clone PySlowFast仓库
    • git clone https://github.com/facebookresearch/slowfast
    • 方式1-编译安装:
      • cd slowfast
      • python setup.py build develop
    • 方式2-设置环境变量(推荐):
      • export PYTHONPATH=/path/to/SlowFast/slowfast:$PYTHONPATH
  • 安装fvcore
    • pip install -U ‘git+https://github.com/facebookresearch/fvcore.git’
  • 安装pyav(这个命令包含很多包,比较重要的是pyav,用来解码视频。PyAV提供了ffmpeg的python接口:使用ffmpeg做后端,使用Cython封装了ffmpeg的接口,所以调用pyav起作用的是ffmpeg)
    • pip install simplejson av psutil opencv-python tensorboard==2.10.1 moviepy scipy scikit-learn
  • 安装torchvideo
    • 方式1-编译安装:
      • git clone https://github.com/facebookresearch/pytorchvideo.git
      • cd pytorchvideo
      • pip install -e .
      • cd …
    • 方式2-设置环境变量(推荐):
      • export PYTHONPATH=/path/to/pytorchvideo:$PYTHONPATH
  • 安装fairscale
    • pip install ‘git+https://github.com/facebookresearch/fairscale’
  • 安装cython
    • pip install -U cython
  • 安装iopath
    • conda install -c iopath iopath
  • clone detectron2 (经常会遇到gcc版本不匹配的问题,需要手动更新gcc,有很多相关的博客可以参考)
    • git clone https://github.com/facebookresearch/detectron2 detectron2_repo
    • 方式1-编译安装:
      • pip install -e detectron2_repo
    • 方式2-不编译,设置环境变量(推荐):
      • export PYTHONPATH=/path/to/detectron2_repo:$PYTHONPATH
    • 方式3-按照官方对应pytorch版本的命令安装(限制比较明显):
      • https://github.com/facebookresearch/detectron2/blob/main/INSTALL.md
  • 安装ffmpeg (使用torchvision作为解码视频的后端时,不一致的ffmeg可能会导致报错)
    • conda install ffmpeg==4.2 (or will result bug when decoding videos with torchvision as backend)
  • Note:
    • 实际上SlowFast,Detectron2,pytorchvideo这三个需要clone+build的安装方式,都可以用设置环境变量来解决,也就是
    • export PYTHONPATH=/path/to/repository_name:$PYTHONPATH
    • 可以打印$PYTHONPATH查看是否设置成功
        $ echo $PYTHONPATH
        $ /home/STAL_docker/detectron2:/home/STAL_docker/pytorchvideo:
      
    • 觉得每次开一个bash都要重新设置很麻烦,可以直接写在.bashrc里

安装报错

  • AttributeError: module ‘distutils’ has no attribute ‘version’
    • 原因: 当前tensorboard的版本和安装的pytorch版本不匹配
    • 解决:降级版本
      • pip uninstall setuptools
      • pip install setuptools==59.5.0
  • ImportError: cannot import name ‘cat_all_gather’ from ‘pytorchvideo.layers.distributed’
    • 原因:这个报错时因为直接pip install pytorchvideo,这种安装有点点问题,官方issue提供了两种可替换的安装方案 (NOTE: )
    • https://github.com/facebookresearch/SlowFast/issues/636
    • 太多不看版:第一部分的安装指引就是参考该链接,也是我尝试过work的方式

运行报错

  • No such operator video_reader::probe_video_from_memory

    • 原因:ffmpeg的版本和torchvision不匹配,需要设置为4.0
    • 解决1:改一下ffmpeg的版本
    • 解决2(推荐):config里将解码视频的后端改为pyav, 即DECODING_BACKEND pyav
    • 资料来源:https://github.com/facebookresearch/SlowFast/issues/181
  • pyav with exception: unsupported operand type(s) for -: ‘list’ and ‘int’

    • 原因:SlowFast在支持无监督训练的时候,num_frames类别变为了list,torchvision的代码更新了,但是pyav的代码没更新
    • 解决:参考dfan大神的fork, https://github.com/dfan/SlowFast/blob/main/slowfast/datasets/decoder.py, 直接替换原本的decoder.py文件内容
    • 资料来源:https://github.com/facebookresearch/SlowFast/issues/181
  • unicodedecodeerror utf-8 codec can’t decode byte 0xd4 in position 1: invalid continuation byte

    • 原因:PySlowFast预训练的ckpt有一部分是caffe2(官方config在c2目录下的模型)
    • 解决:加载ckpt的时候需要设置参数,即CHECKPOINT_TYPE caffe2
  • AVA数据集

    • 一个小坑,下载AVA的注解的时候,应该下载数据准备部分最后一行的链接,只有这个链接里有person_detection等文件
      • You could also replace the v2.1 by v2.2 if you need the AVA v2.2 annotation. You can also download some pre-prepared annotations from here.
    • ‘int’ object is not subscriptable
      • 原因:下载错了官方提供的ckpt
      • 解决:
        • AVA数据集官方提供了两个ckpt,一个是Pretrain Model,另一个是model。前者是在K400/600上预训练的,后者是在AVA上再次训练的,需要根据自己实际使用目的下载不同的ckpt。
        • 比较坑的是两个ckpt文件时同名的
    • The size of tensor a (400) must match the size of tensor b (80) at non-singleton dimension 0
      • 原因:这是因为在load pre-trained ckpt的时候把它的optimizer和scheduler也一并加载了。这导致在AVA上训练的时候类别数目不匹配
      • 解决:在utils/checkpoing.py中,把lines 555-560注释掉就可以了,不需要当前的optimizer加载预训练的信息
      • 资料来源:https://github.com/facebookresearch/maskrcnn-benchmark/issues/317
    • Trying to pause a Timer that is already paused!
      • 原因:test_net.py的代码存在缩进问题,导致test_meter.iter_toc()记录了两遍
      • 解决:
        • 把lines 121-136缩进到else:
        • 然后copy这段代码到elif:
    • RuntimeError: Tensors must be CUDA and dense
      • 原因:和上一个报错的原因一致,缩进问题导致变量已经被送至cpu,但是记录的时候需要在gpu上
      • 解决:和上一个问题一样
      • 资料来源:https://github.com/facebookresearch/SlowFast/issues/549
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值