紀錄 Spatial Temporal Graph Convolutional Networks(ST-GCN) 的架設過程,ST-GCN是一種深度學習網路,將GCN應用到基於骨架的人體動作識別方法。

原論文: Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition
GitHub: yysijie/st-gcn: Spatial Temporal Graph Convolutional Networks (ST-GCN) for Skeleton-Based Action Recognition in PyTorch

st-gcn 是用 python 3 運行,雖然原作者的指令都是用 python ,但筆者的 python 預設為 2,所以以下皆會替換成 python3 的指令。

Clone

在想要的目錄下,clone該專案

1
git clone https://github.com/yysijie/st-gcn.git

Prerequisites

PyTorch(0.4.0)

1
pip3 install torch==0.4.0 -f https://download.pytorch.org/whl/cu80/stable

也要安裝 torchvision

1
pip3 install torchvision -f https://download.pytorch.org/whl/cu80/stable

OpenPose

請參考 OpenPose 安裝紀錄 (github)

FFmpeg

失敗的安裝方式

1
sudo apt-get install ffmpeg

以此方法安裝的 FFmpeg ,在測試 demo 時會有以下錯誤:

1
ValueError: No way to determine width or height from video. Need `-s` in `inputdict`. Consult documentation on I/O.

可行的安裝方式
改為從 source code 編譯的方式安裝 FFmpeg[1] :
以下的安裝FFmpeg的部分,筆者會另外開一個資料夾,在裡面進行編譯與安裝的步驟,因為會下載蠻多東西的。如 ~/ffmpeg_sources/

先移除已存在的 packages

1
sudo apt -y  remove ffmpeg x264 libav-tools libvpx-dev libx264-dev

安裝依賴庫

1
2
3
4
5
sudo apt-get update
sudo apt-get -y install build-essential checkinstall git libfaac-dev libgpac-dev \
libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev \
librtmp-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev \
libx11-dev libxfixes-dev pkg-config texi2html yasm zlib1g-dev

Install Yasm

1
2
3
4
5
6
7
cd ~/ffmpeg_sources
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install

Install nasm

1
2
3
4
5
6
7
8
cd ~/ffmpeg_sources
wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2
tar xjvf nasm-2.13.01.tar.bz2
cd nasm-2.13.01
./autogen.sh
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
PATH="$HOME/bin:$PATH" make
make install

libx264

1
sudo apt-get install libx264-dev

libx265

1
sudo apt-get install libx265-dev

libfdk-aac

1
sudo apt-get install libfdk-aac-dev

libmp3lame

1
sudo apt-get install libmp3lame-dev

libopus

1
sudo apt-get install libopus-dev

libvpx

1
sudo apt-get install libvpx-dev

筆者在執行稍候的FFmpeg指令時,會出現以下錯誤:

1
ERROR: libass not found using pkg-config

所以需要安裝 libass[2] [3] :
FreeType-2.10.0 下載並解壓縮後,進到解壓縮後的資料夾,執行以下指令

1
./configure --prefix=/usr --enable-freetype-config --disable-static && make

FriBidi-1.0.5 下載並解壓縮後,進到解壓縮後的資料夾,執行以下指令

1
./configure --prefix=/usr --disable-docs && make

Fontconfig-2.13.1 下載並解壓縮後,進到解壓縮後的資料夾,執行以下指令

1
./configure --prefix=/usr -disable-docs && make && sudo make install

安裝 libass

1
2
3
4
5
git clone https://github.com/libass/libass.git
cd libass
sh autogen.sh
./configure --prefix=/usr --disable-static && make
sudo make install

設定環境變數

1
export PKG_CONFIG_PATH=/usr/local/ass/lib/pkgconfig:$PKG_CONFIG_PATH

安裝 FFmpeg[1:1] [4]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cd ~/ffmpeg_sources
git clone --depth 1 https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-librtmp \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-version3 \
--enable-libxcb
PATH="$HOME/bin:$PATH" make
make install
hash -r

其他 Python liberties

1
2
cd st-gcn
pip3 install -r requirements.txt

安裝

不知道為什麼 python setup.py install 會有權限問題,各位在安裝時可以試試看不加 sudo 能不能安裝

1
cd torchlight; sudo python3 setup.py install; cd ..

下載預訓練模型權重

1
bash tools/get_models.sh

測試demo

1
python3 main.py demo --openpose <path to openpose build directory> [--video <path to your video> --device <gpu0> <gpu1>]

範例:

1
python3 main.py demo --openpose /data/paperProjects/openpose/build --video /data/paperProjects/st-gcn/resource/media/ta_chi.mp4 --device 0

參考資料

动作识别初体验 - 知乎

ST-GCN網絡安裝過程中遇到的問題 - 台部落


  1. Compile FFmpeg on Ubuntu 16.04 ↩︎ ↩︎

  2. FFmpeg编译记-依懒库安装-广东IDC网 ↩︎

  3. ffmpeg在PC上编译问题全解决_张志辉kom_新浪博客 ↩︎

  4. image - Unknown option “–enable-x11grab” when installing ffmpeg on centos (6.8) - Stack Overflow ↩︎