pytorch-coviar

pytorch-coviar

仓库介绍

https://github.com/chaoyuaw/pytorch-coviar

CoViAR (Compressed Video Action Recognition) 是一个压缩视频动作识别模型,由Chao-Yuan Wu、Manzil Zaheer、Hexiang Hu、R. Manmatha、Alexander J. Smola 和 Philipp Krähenbühl 在2018年的CVPR会议上提出。
这个模型的思想是,视频在当前互联网数据中占据重要地位,因为相比其他媒介,视频可以传递更加丰富形象的信息。CoViAR 的目标是从压缩视频中识别动作。它的实现是基于PyTorch,而原始论文使用了MXNet。目前,这个代码支持UCF-101和HMDB-51数据集,而Charades数据集的支持也在计划中。
CoViAR 的特点包括:
通过直接处理压缩视频,避免了提取和存储所有表示(I帧、运动矢量和残差)的图像文件。

  • 在HMDB-51和UCF-101数据集上,其结果与原始论文相当甚至更好:
  • HMDB-51:I帧52%、运动矢量40%、残差43%、CoViAR 59.2%。
  • UCF-101:I帧87%、运动矢量70%、残差80%、CoViAR 90.5%(平均3次划分;不使用光流)。
    推荐阅读:
    https://zhuanlan.zhihu.com/p/54939457

数据集介绍

  • UCF-101 是一个实际动作识别数据集,收集自 YouTube 视频,包含 101 种动作类别。它是一个具有挑战性的数据集,拥有来自 101 种动作类别的 13,320 个视频,这些视频分为 25 组,每组包含 4-7 个视频。UCF-101 数据集的视频涵盖了大量摄像机运动、物体外观和姿势等方面的变化
    这些动作类别可以分为以下五类:
    • 人-物互动
    • 仅人体运动
    • 人-人互动
    • 演奏乐器
    • 体育运动
  • HMDB-51是一个用于人体动作识别的大型视频数据集, 是一个包含来自各种来源(包括电影和网络视频)的逼真视频的大型集合。数据集由6,766个视频剪辑组成,涵盖了51个动作类别,例如“跳跃”、“亲吻”和“笑”,每个类别至少包含101个剪辑12。
    • 评估方案:原始评估方案使用三种不同的训练/测试划分。在每个划分中,每个动作类别有70个训练剪辑和30个测试剪辑。最终性能的度量标准是这三个划分的平均准确率。
    • 应用领域:HMDB-51数据集被广泛用于动作识别任务

coviar环境搭建

树莓派arm版本

准备python环境

系统自带的python3.11路径为/usr/bin/python,以后可以通过绝对路径使用

建议使用python3.9.1 , 实测python3.11不行

使用pyenv管理环境

pyenv的使用教程如下

https://fugangqiang.github.io/posts/python/pyenv搭建python虚拟环境.html

安装完成后,创建并使用python3.9.1环境

1
2
pyenv install 3.9.1
pyenv global 3.9.1

顺手安装numpy,后面有用

1
pip install numpy

安装依赖

安装libmp3lame0

因为奇怪的版本号,apt安装的最新版本不受支持,所以只能源码编译

1
2
3
4
tar -zxvf lame-3.99.5.tar.gz
lame-3.99.5
./configure --build=aarch64-unknown-linux-gnu
make && sudo make install

安装其他依赖

1
2
3
4
5
6
7
sudo apt install libopus-dev
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
sudo apt install libvorbis-dev
sudo apt install libvpx-dev
sudo apt install libx264-dev
sudo apt install x265
sudo apt install libx265-dev

编译ffmpeg

首先确定路径,不然后面会比较混乱

在树莓派上会同时存在两个版本的ffmpeg,分别是

  • apt安装的ffmpeg,路径为/usr/bin/ffmpeg
  • 编译的ffmpeg,路径为**/usr/local/ffmpeg**

安装coviar

执行下面的命令完成ffmpeg的编译

make大约需要40min,请耐心等待

1
2
3
4
5
6
7
8
9
git clone https://github.com/FFmpeg/FFmpeg/
cd FFmpeg
git checkout 74c6a6d3735f79671b177a0e0c6f2db696c2a6d2
make clean
./configure --prefix=/usr/local/ffmpeg --arch=aarch64 --cpu=cortex-a72 --enable-neon --enable-armv8 --enable-shared --disable-static --enable-gpl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libopus --enable-libvorbis --enable-libmp3lame
make
sudo make install
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib/
export PATH=/usr/local/ffmpeg/bin/:$PATH

安装coviar

1
git clone https://github.com/chaoyuaw/pytorch-coviar

进入data_loader文件夹,修改setup.py如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from distutils.core import setup, Extension
import numpy as np

coviar_utils_module = Extension('coviar',
sources = ['coviar_data_loader.c'],
include_dirs=[np.get_include(), './ffmpeg/include/', '/usr/local/ffmpeg/include/'],
extra_compile_args=['-DNDEBUG', '-O3'],
extra_link_args=['-lavutil', '-lavcodec', '-lavformat', '-lswscale', '-L/usr/local/ffmpeg/lib/']
)

setup ( name = 'coviar',
version = '0.1',
description = 'Utils for coviar training.',
ext_modules = [ coviar_utils_module ]
)

需要特别关照的是第6,8行,需要填入正确的路径,分别是ffmpeg编译后的路径中的include和lib文件夹

执行安装

1
./install.sh

coviar启动!

1
python -c "import coviar"

如果没有报错,则说明安装成功

提取numpy数组的示例代码

1
2
3
4
5
from coviar import load
import numpy as np
a = load('mpeg4_standard_output_000.mp4', 3, 8, 1, True)
np.save('load.npy',a)
print(a)

Ubuntu x86版本

预备环境Python 3.8.10(ubuntu20.04)

建议使用python3.8.10,其他版本的python很可能不可用

建议所有包都使用pip管理,coviar只能通过pip安装,如果使用conda安装的pytorch,可能会因为二者冲突而导致Segmentation Fault

不推荐使用python3.11,很可能用不了

编译ffmpeg

首先确定路径,不然后面会比较混乱

会同时存在两个版本的ffmpeg,分别是

  • apt安装的ffmpeg,路径为/usr/bin/ffmpeg
  • 编译的ffmpeg,路径为**/usr/local/ffmpeg**

执行下面的命令完成ffmpeg的编译

1
2
3
4
5
6
7
8
9
git clone https://github.com/FFmpeg/FFmpeg/
cd FFmpeg
git checkout 74c6a6d3735f79671b177a0e0c6f2db696c2a6d2
make clean
./configure --prefix=/usr/local/ffmpeg --enable-pic --disable-yasm --enable-shared
make
sudo make install
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib/
export PATH=/usr/local/ffmpeg/bin/:$PATH

安装coviar

1
git clone https://github.com/chaoyuaw/pytorch-coviar

进入data_loader文件夹,修改setup.py如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from distutils.core import setup, Extension
import numpy as np

coviar_utils_module = Extension('coviar',
sources = ['coviar_data_loader.c'],
include_dirs=[np.get_include(), './ffmpeg/include/', '/usr/local/ffmpeg/include/'],
extra_compile_args=['-DNDEBUG', '-O3'],
extra_link_args=['-lavutil', '-lavcodec', '-lavformat', '-lswscale', '-L/usr/local/ffmpeg/lib/']
)

setup ( name = 'coviar',
version = '0.1',
description = 'Utils for coviar training.',
ext_modules = [ coviar_utils_module ]
)

需要特别关照的是第6,8行,需要填入正确的路径,分别是ffmpeg编译后的路径中的include和lib文件夹

执行安装

1
./install.sh

coviar启动!

1
python -c "import coviar"

如果没有报错,则说明安装成功

提取numpy数组的示例代码

1
2
3
4
5
from coviar import load
import numpy as np
a = load('mpeg4_standard_output_000.mp4', 3, 8, 1, True)
np.save('load.npy',a)
print(a)

coviar模型测试

1
python test.py --gpus 0 --arch resnet18 --data-name hmdb51 --representation mv --data-root data/hmdb51/mpeg4_videos --test-list data/datalists/hmdb51_split1_test.txt --weights hmdb51_mv_model_mv_model_best.pth.tar --save-scores score.txt

先自动下载resnet18的预训练模型

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Initializing model:
base model: resnet18.
input_representation: mv.
num_class: 51.
num_segments: 25.

/root/miniconda3/lib/python3.8/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
warnings.warn(
/root/miniconda3/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.
warnings.warn(msg)
Downloading: "https://download.pytorch.org/models/resnet18-f37072fd.pth" to /root/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 44.7M/44.7M [02:57<00:00, 264kB/s]
model epoch 236 best prec@1: 30.130720138549805
1530 videos loaded.
test.py:94: UserWarning: volatile was removed and now has no effect. Use `with torch.no_grad():` instead.
input_var = torch.autograd.Variable(data, volatile=True)
video 99 done, total 100/1530, average 0.2338184118270874 sec/video
video 199 done, total 200/1530, average 0.24016900300979616 sec/video
video 299 done, total 300/1530, average 0.24238990863164267 sec/video
video 399 done, total 400/1530, average 0.23960657358169557 sec/video
video 499 done, total 500/1530, average 0.23549086046218873 sec/video
video 599 done, total 600/1530, average 0.234343368212382 sec/video
video 699 done, total 700/1530, average 0.23339044264384678 sec/video
video 799 done, total 800/1530, average 0.23506154507398605 sec/video

coviar用于视频特征提取与远程识别

https://github.com/CJL-sysu/pytorch-coviar

将特征提取分为本地端和服务端,中间通过网络传输无法复原出原视频的特征矩阵列表,可解决本地算力不足的问题,且保护用户隐私。


pytorch-coviar
https://blog.algorithmpark.xyz/2024/07/15/pytorch-coviar/index/
作者
CJL
发布于
2024年7月15日
更新于
2024年7月22日
许可协议