ST-GCN网络安装过程中遇到的问题

本文详细解析了在安装并运行ST-GCN网络时遇到的两大问题及解决方案。一是OpenCV无法读取视频,原因是未编译ffmpeg库,解决方法为重新编译OpenCV并确保ffmpeg库正确配置。二是GPU显存不足导致运行失败,解决方法是减小输入视频大小。

ST-GCN网络:https://github.com/yysijie/st-gcn

问题一:

在安装完环境和依赖,准备运行demo程序时,报错:

VideoCapture (IP camera/video) could not be opened for path: 'examples/media/video.avi'.

由于ST-GCN在运行时,先要调用运行OpenPose,所以这个问题其实是OpenPose报错的。这里也有人提出了类似的问题https://github.com/CMU-Perceptual-Computing-Lab/openpose/issues/41

问题原因:

本质上是因为OpenPose在调用OpenCV时,OpenCV打开视频失败,cvCreateFileCapture和VideoCapture无法读入视频。这是系统里的OpenCV在编译安装时没有联合编译ffmpeg库导致的。

解决办法:

只能重新编译安装OpenCV库,别无他法。首先,完整安装ffmpeg库,参考(https://blog.youkuaiyun.com/Jacky_Ponder/article/details/53490992)。我安装的版本是ffmpeg官网上下载的ffmpeg_3.4.2.orig.tar.xz,系统是Ubuntu18.04 LTS 64位

但是,我发现在我重新安装OpenCV(版本3.4.5)时,cmake后打印出的log里面,ffmpeg处是NO,而不是想要的YES!

解决办法是把FFMPEG库对应的pgkconfig文件夹下的.pc文件放到pkg-config的查找路径下。

比如,对于我的系统来说,就是把/usr/local/ffmpeg/lib/pkgconfig下的.pc文件复制到/usr/lib/x86_64-linux-gnu/pkgconfig

问题二:

在安装ST-GCN网络成功后,准备运行如下demo时报错:

root@a421-HP-Z840-Workstation:~/YuWentao/huawei_fatigue_driving_detection/st-gcn# python main.py demo --openpose /home/a421/YuWentao/huawei_fatigue_driving_detection/openpose/build/ --video ./video.avi --device 0 1
Starting OpenPose demo...
Configuring OpenPose...
Starting thread(s)...
Auto-detecting all available GPUs... Detected 2 GPU(s), using 2 of them starting at GPU 0.
F0225 12:56:18.533463 34969 syncedmem.cpp:71] Check failed: error == cudaSuccess (2 vs. 0)  out of memory
*** Check failure stack trace: ***
    @     0x7f49b7ed30cd  google::LogMessage::Fail()
    @     0x7f49b7ed4f33  google::LogMessage::SendToLog()
    @     0x7f49b7ed2c28  google::LogMessage::Flush()
    @     0x7f49b7ed5999  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f49b7a5b338  caffe::SyncedMemory::mutable_gpu_data()
    @     0x7f49b7a10b02  caffe::Blob<>::mutable_gpu_data()
    @     0x7f49b7988b48  caffe::BaseConvolutionLayer<>::forward_gpu_gemm()
    @     0x7f49b7aade26  caffe::ConvolutionLayer<>::Forward_gpu()
    @     0x7f49b7a43f51  caffe::Net<>::ForwardFromTo()
    @     0x7f49b9d37736  op::NetCaffe::forwardPass()
    @     0x7f49b9d572ba  op::PoseExtractorCaffe::forwardPass()
    @     0x7f49b9d513c5  op::PoseExtractor::forwardPass()
    @     0x7f49b9d4e26b  op::WPoseExtractor<>::work()
    @     0x7f49b9d89da9  op::Worker<>::checkAndWork()
    @     0x7f49b9d89f4b  op::SubThread<>::workTWorkers()
    @     0x7f49b9d929eb  op::SubThreadQueueInOut<>::work()
    @     0x7f49b9d8ce0b  op::Thread<>::threadFunction()
    @     0x7f49b90628f0  (unknown)
    @     0x7f49b87846db  start_thread
    @     0x7f49b8abd88f  clone
Aborted (core dumped)
Can not find pose estimation results.

问题原因:

GPU显存不够。本系统配有2个GTX1080显卡,显存8G,但还是不够。应该是输入的视频文件过大。虽然我输入的是OpenPose官方提供的示例视频video.avi(时长5s,1.4MB),但还是过大。

解决办法:

我输入一个更小的视频(mp4文件, 时长3s,497KB),可以成功运行

03-15
### ST-GCN 的原理、实现与应用 #### 原理概述 时空图卷积网络ST-GCN, Spatial Temporal Graph Convolutional Networks)是一种专门针对基于骨架的动作识别任务而设计的深度学习模型[^3]。它通过将人体骨架建模为一种特殊的时空图结构来捕捉动作的时间和空间特征。具体来说,该模型将人体骨架关节视为图中的节点,将自然的身体连接关系定义为空间边,并引入时间维度上的前后帧关联作为时序边。 这种时空图的设计使得 ST-GCN 能够有效地捕获局部模式及其相关性[^5]。相比于传统的 CNN 或 RNN 方法,ST-GCN 更适合处理具有复杂拓扑结构的数据,例如由骨架序列构成的人体运动轨迹。 #### 实现细节 在实际实现过程中,ST-GCN 使用了一种多层图卷积架构来逐步提取时间和空间维度的信息。以下是其实现的关键技术点: 1. **图卷积操作** 图卷积的核心思想是在图结构上执行类似于传统二维图像卷积的操作。为了适应骨架数据的特点,ST-GCN 提出了稀疏自然连接的概念以及权重共享机制,从而显著提高了计算效率并减少了参数量[^4]。 2. **可学习的边重要性加权** 为了让模型具备更强的表现力,ST-GCN 引入了一个额外的学习模块——边缘重要性加权(Edge Importance Weighting)。这个模块允许网络动态调整每条边上所分配的重要性分数,进一步增强了对不同身体部位之间相互作用的理解能力。 3. **训练与优化** 训练阶段采用标准反向传播算法配合 Adam 优化器完成端到端学习流程。值得注意的是,在某些情况下可能需要解决依赖外部库(如 Caffe 和 OpenCV)带来的兼容性问题。例如: - 如果遇到 `opencv` 宏定义缺失的情况,则可以通过手动替换这些宏为固定数值的方式解决问题- 同时还需要确保环境变量设置正确以便顺利加载必要的头文件路径。 ```bash export CPLUS_INCLUDE_PATH=/path/to/opencv/include:$CPLUS_INCLUDE_PATH ``` 另外也可以考虑完全禁用掉不必要的第三方依赖项以简化整个编译过程。 #### 应用场景 目前,ST-GCN 已经被广泛应用于多种基于骨架的动作分类任务当中,尤其是在大规模公开数据集测试环境下取得了优异的成绩。比如 NTU RGB+D 数据集中就包含了大量复杂的日常活动样本供研究者们验证各自提出的新型框架的有效性。除此之外还有 Kinetics-Skeleton 这样更加贴近真实世界需求的大规模视频片段集合可供探索。 --- ###
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值