Decord - 深度学习视频加载器

embedded/2025/1/12 14:40:20/
aidu_pl">

symbol

文章目录

    • 一、关于 Decord
      • 初步基准
    • 二、安装
      • 1、通过pip安装
      • 2、从源代码安装
        • 2.1 Linux
        • 2.2 macOS
        • 2.3 Windows
    • 三、用法
      • 1、VideoReader
      • 2、VideoLoader
      • 3、AudioReader
      • 4、AVReader
    • 四、深度学习框架的桥梁:


一、关于 Decord

一款高效的深度学习视频ai.html" title=加载>加载器,具有超级容易消化的智能洗牌功能

  • github : https://github.com/dmlc/decord


DecordRecord的一个反向过程,它提供了方便的视频切片方法,该方法基于硬件加速视频解码器上的一个薄封装器。

  • FFMPEG/LibAV(完成)
  • Nvidia编解码器(完成)
  • 英特尔编解码器

Decord旨在处理尴尬的视频洗牌体验,以提供类似于深度学习的随机图像ai.html" title=加载>加载器的流畅体验。

Decord还可以从视频和音频文件中解码音频。人们可以将视频和音频切片在一起以获得同步结果;因此为视频和音频解码提供一站式解决方案。


初步基准

Decord擅长处理随机访问模式,这在神经网络训练中很常见。

Speed up


二、安装


1、通过pip安装

简单的使用

pip install decord

支持的平台:

  • Linux
  • Mac OS>=10.12, python>=3.5
  • Windows

请注意,现在PYPI仅提供CPU版本。请从源代码构建以启用GPU加速器。


2、从源代码安装


2.1 Linux

安装用于构建共享库的系统包,对于Debian/Ubuntu用户,运行:

# official PPA comes with ffmpeg 2.8, which lacks tons of features, we use ffmpeg 4.0 here
sudo add-apt-repository ppa:jonathonf/ffmpeg-4 # for ubuntu20.04 official PPA is already version 4.2, you may skip this step
sudo apt-get update
sudo apt-get install -y build-essential python3-dev python3-setuptools make cmake
sudo apt-get install -y ffmpeg libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev
# note: make sure you have cmake 3.8 or later, you can install from cmake official website if it's too old

递归克隆repo(重要)

git clone --recursive https://github.com/dmlc/decord

在源根目录中构建共享库:

cd decord
mkdir build && cd build
cmake .. -DUSE_CUDA=0 -DCMAKE_BUILD_TYPE=Release
make

您可以指定-DUSE_CUDA=ON-DUSE_CUDA=/path/to/cuda-DUSE_CUDA=ON -DCMAKE_CUDA_COMPILER=/path/to/cuda/nvcc以启用NVDEC硬件加速解码:

cmake .. -DUSE_CUDA=ON -DCMAKE_BUILD_TYPE=Release

请注意,如果您遇到libnvcuvid.so的问题(例如,参见#102),可能是由于libnvcuvid.so的链接丢失,您可以手动找到它(ldconfig -p | grep libnvcuvid)并将库链接到CUDA_TOOLKIT_ROOT_DIR\lib64以允许decord顺利检测并链接正确的库。

要指定自定义FFMPEG库路径,请使用’-DFFMPEG_DIR=/path/to/ffmpeg"。

安装python绑定:

cd ../python
# option 1: add python path to $PYTHONPATH, you will need to install numpy separately
pwd=$PWD
echo "PYTHONPATH=$PYTHONPATH:$pwd" >> ~/.bashrc
source ~/.bashrc
# option 2: install with setuptools
python3 setup.py install --user

2.2 macOS

macOS上的安装类似于Linux。但是macOS用户需要先安装clang、GNU Make、cmake等构建工具。

clang和GNU Make等工具打包在macOS的命令行工具中。要安装:

xcode-select --install

要安装其他需要的包,如cmake,我们建议首先安装Homebrew,它是macOS的流行包管理器。详细说明可以在其主页上找到。

安装Homebrew后,通过以下方式安装cmake和ffmpeg:

brew install cmake ffmpeg
# note: make sure you have cmake 3.8 or later, you can install from cmake official website if it's too old

递归克隆repo(重要)

git clone --recursive https://github.com/dmlc/decord

然后转到根目录构建共享库:

cd decord
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make

安装python绑定:

cd ../python
# option 1: add python path to $PYTHONPATH, you will need to install numpy separately
pwd=$PWD
echo "PYTHONPATH=$PYTHONPATH:$pwd" >> ~/.bash_profile
source ~/.bash_profile # option 2: install with setuptools
python3 setup.py install --user

2.3 Windows

对于windows,您将需要CMake和Visual Studio进行C++编译。

  • 首先安装gitcmakeffmpegpython,可以使用Chocolatey管理类似Linux/Mac OS的包。
  • 第二,安装Visual Studio 2017 Community,这我需要一些时间。

依赖项准备就绪后,打开命令行提示符:

cd your-workspace
git clone --recursive https://github.com/dmlc/decord
cd decord
mkdir build
cd build
cmake -DCMAKE_CXX_FLAGS="/DDECORD_EXPORTS" -DCMAKE_CONFIGURATION_TYPES="Release" -G "Visual Studio 15 2017 Win64" ..
# open `decord.sln` and build project

三、用法

Decord为引导提供了最小的API集。您还可以查看jupyter笔记本示例。


1、VideoReader

VideoReader用于直接从视频文件中访问帧。

from decord import VideoReader
from decord import cpu, gpuvr = VideoReader('examples/flipping_a_pancake.mkv', ctx=cpu(0))# a file like object works as well, for in-memory decoding
with open('examples/flipping_a_pancake.mkv', 'rb') as f:vr = VideoReader(f, ctx=cpu(0))
print('video frames:', len(vr))# 1. the simplest way is to directly access frames
for i in range(len(vr)):# the video reader will handle seeking and skipping in the most efficient mannerframe = vr[i]print(frame.shape)# To get multiple frames at once, use get_batch
# this is the efficient way to obtain a long list of frames
frames = vr.get_batch([1, 3, 5, 7, 9])
print(frames.shape)
# (5, 240, 320, 3)# duplicate frame indices will be accepted and handled internally to avoid duplicate decoding
frames2 = vr.get_batch([1, 2, 3, 2, 3, 4, 3, 4, 5]).asnumpy()
print(frames2.shape)
# (9, 240, 320, 3)# 2. you can do cv2 style reading as well
# skip 100 frames
vr.skip_frames(100)# seek to start
vr.seek(0)
batch = vr.next()
print('frame shape:', batch.shape)
print('numpy frames:', batch.asnumpy())

2、VideoLoader

VideoLoader专为训练具有大量视频文件的深度学习模型而设计。它提供智能视频洗牌技术,以提供高随机访问性能(我们知道在视频中寻找是超级慢和冗余的)。优化隐藏在用户不可见的C++代码中。

from decord import VideoLoader
from decord import cpu, gpuvl = VideoLoader(['1.mp4', '2.avi', '3.mpeg'], ctx=[cpu(0)], shape=(2, 320, 240, 3), interval=1, skip=5, shuffle=1)
print('Total batches:', len(vl))for batch in vl:print(batch[0].shape)

Shuffling 视频可能很棘手,因此我们提供各种模式:

shuffle = -1  # smart shuffle mode, based on video properties, (not implemented yet)
shuffle = 0  # all sequential, no seeking, following initial filename order
shuffle = 1  # random filename order, no random access for each video, very efficient
shuffle = 2  # random order
shuffle = 3  # random frame access in each video only

3、AudioReader

AudioReader用于直接从视频(如果有音轨)和音频文件中访问样本。

from decord import AudioReader
from decord import cpu, gpu# You can specify the desired sample rate and channel layout
# For channels there are two options: default to the original layout or mono
ar = AudioReader('example.mp3', ctx=cpu(0), sample_rate=44100, mono=False)
print('Shape of audio samples: ', ar.shape())
# To access the audio samples
print('The first sample: ', ar[0])
print('The first five samples: ', ar[0:5])
print('Get a batch of samples: ', ar.get_batch([1,3,5]))

4、AVReader

AVReader是AudioReader和VideoReader的包装器。它使您能够同时切片视频和音频。

from decord import AVReader
from decord import cpu, gpuav = AVReader('example.mov', ctx=cpu(0))
# To access both the video frames and corresponding audio samples
audio, video = av[0:20]
# Each element in audio will be a batch of samples corresponding to a frame of video
print('Frame #: ', len(audio))
print('Shape of the audio samples of the first frame: ', audio[0].shape)
print('Shape of the first frame: ', video.asnumpy()[0].shape)
# Similarly, to get a batch
audio2, video2 = av.get_batch([1,3,5])

四、深度学习框架的桥梁:

有一个从decord到流行的深度学习框架的桥梁对于训练/推理很重要

  • Apache MXNet(完成)
  • Pytorch(完成)
  • TensorFlow(完成)

将桥接器用于深度学习框架很简单,例如,可以将默认张量输出设置为mxnet.ndarray

import decord
vr = decord.VideoReader('examples/flipping_a_pancake.mkv')
print('native output:', type(vr[0]), vr[0].shape)
# native output: <class 'decord.ndarray.NDArray'>, (240, 426, 3)
# you only need to set the output type once
decord.bridge.set_bridge('mxnet')
print(type(vr[0], vr[0].shape))
# <class 'mxnet.ndarray.ndarray.NDArray'> (240, 426, 3)
# or pytorch and tensorflow(>=2.2.0)
decord.bridge.set_bridge('torch')
decord.bridge.set_bridge('tensorflow')
# or back to decord native format
decord.bridge.set_bridge('native')

2025-01-07(二)


http://www.ppmy.cn/embedded/153305.html

相关文章

RK3568-rk809rtc休眠唤醒

参考链接 https://www.360doc.cn/article/71858349_1119199262.html修改驱动drivers/mfd/rk808.c static void rk817_shutdown_prepare(void) { int ret; …

nginx负载均衡-基于端口的负载均衡(一)

注意&#xff1a; (1) 做负载均衡技术至少需要三台服务器&#xff1a;一台独立的负载均衡器&#xff0c;两台web服务器做集群 一、nginx分别代理后端web1 和 web2的三台虚拟主机 1、web1&#xff08;nginx-10.0.0.7&#xff09;配置基于端口的虚拟主机 [rootOldboy extra]# …

C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件

今天在本文中&#xff0c;我们将尝试使用NPOI库将图像插入到 Excel 文件的特定位置。请将以下逻辑添加到您的写作方法中&#xff0c;在 Excel 文件中添加图像&#xff08;JPEG、PNG&#xff09;,我已经有一个示例 jpeg 文件 - Read-write-excel-npoi.jpg &#xff0c;我们将尝试…

车载数据结构 --- ARXML VS JSON

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

在Ubuntu中使用systemd设置后台自启动服务

引言 在Ubuntu系统中&#xff0c;systemd 是一个非常强大的系统和服务管理器。它不仅负责系统的启动和初始化&#xff0c;还可以帮助我们管理各种后台服务。通过使用 systemd&#xff0c;我们可以轻松地设置服务在系统启动时自动运行&#xff0c;并且能够方便地管理服务的启动…

大模型算法工程师相关面试

文章目录 一、深度学习与大模型基础二、大模型前沿与应用三、工程与系统设计四、实战与项目经验五、总结与面试准备建议 由于大模型&#xff08;如大语言模型、Vision Transformer 等&#xff09;通常具有参数量巨大、数据依赖度高、训练及推理过程复杂等特点&#xff0c;因此在…

docker 启动 nacos 单机模式

docker 启动 nacos 单机模式 # 拉取镜像# 启动&#xff0c;如果不拉镜像会自动拉取最新的 image docker run --name standalong_nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -d nacos/nacos-server# 状态查看外部访问验证 输入部署的 docker ip 地址以及…

YOLOv11改进,YOLOv11添加HAttention注意机制用于图像修复的混合注意力转换器,CVPR2023,超分辨率重建

摘要 基于Transformer的方法在低层视觉任务中表现出色,例如图像超分辨率。然而,作者通过归因分析发现,这些网络只能利用有限的空间范围的输入信息。这意味着现有网络尚未充分发挥Transformer的潜力。为了激活更多的输入像素以获得更好的重建效果,作者提出了一种新型的混合…