複数の物体追跡(Multi Object Tracking)の実装を試そうと思い、『多人数トラッキング論文解説 Deep Affinity Network for Multiple Object Trackingを読む』を参考にしようと思ったのですが、Pytorch0.3を使用していて環境構築が難しそうだったので諦めました。代わりにこの論文を引用している論文を探して、Pytorch1.5.1でも動く実装を見つけたのでそのデモを動かしてみました。ここでは実行方法とその結果を紹介します。
環境
- OS: Ubuntu 20.04
- CUDA 10.2
論文情報
docker
CUDA10.2を利用しているので、Dockerfileを自分で用意しました。動作検証はしていませんが、CUDA10.1の場合のDockerfileはgithubに公開されています。
FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NOWARNINGS yes
WORKDIR /build/
COPY scripts/provisioning-*.bash scripts/
RUN chmod 775 scripts/*.bash \
&& scripts/provisioning-base.bash \
&& scripts/provisioning-python.bash
RUN rm -rf /build
RUN groupadd -g 1000 admin
RUN useradd -m --uid 1000 --gid 1000 admin
USER admin
RUN mkdir /home/admin/note
WORKDIR /home/admin/note/
RUN jupyter notebook --generate-config
COPY jupyter_notebook_config.py /home/admin/.jupyter/jupyter_notebook_config.py
CMD ["jupyter" , "notebook" , "--ip=0.0.0.0"]
#!/bin/bash
apt-get update && apt-get upgrade -y --no-install-recommends \
&& apt-get install -y --no-install-recommends python3.6
apt-get install -y --no-install-recommends python3-pip \
python3-setuptools \
python3-dev
apt-get install -y --no-install-recommends ffmpeg libsm6 libxrender-dev
apt-get install -y --no-install-recommends libgtk2.0-dev
apt-get install -y llvm-9
#!/bin/bash
pip3 install wheel==0.35.1
pip3 install opencv-python==4.2.0.34
pip3 install pandas==1.1.1
pip3 install matplotlib==3.3.1
pip3 install motmetrics==1.2.0
pip3 install Cython==0.29.21
pip3 install cython-bbox==0.1.3
pip3 install lap==0.4.0
pip3 install torch==1.5.1 torchvision==0.6.1
pip3 install jupyterlab==2.2.6
LLVM_CONFIG=/usr/bin/llvm-config-9 pip3 install llvmlite==0.34.0
LLVM_CONFIG=/usr/bin/llvm-config-9 pip3 install numba==0.51.2
デモを動かす
docker run --gpus 0 --rm -it --shm-size=256m -v "$(pwd):/home/admin/note" nabeyang/mot bash
READMEの"Pretrained model and baseline models"にあるリンクから学習済みモデルをダウンロードします。1088x608ならここからダウンロードできます(日本ではBaiduのリンクからダウンロードは出来ないと思います)。ダウンロードしたptファイルをプロジェクトのトップから./weights/latest.pt
と置きます(オプションで指定するのでどこでも大丈夫です)。
動画をここ(ライセンスCC0)からダウンロードしてtest.mp4
という名前でプロジェクトトップに置きます。そして、次のようにするとデモを動かすことができます。
python3 demo.py --input-video ./test.mp4 --weights ./weights/latest.pt --output-format video --output-root ./root/
すると./root
以下に実行結果が出力されます。僕の環境では./root/result.mp4
はエンコードがうまくいかなかったので、後から次のようにしてmp4ファイルを作成しました。
ffmpeg -r 20 -i ./root/frame/%05d.jpg -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
demo.py
の中でも外部コマンドとしてffmpeg
を使ってmp4ファイルを生成しているだけなので、そこを直せば手間が省けそうです。最後に実行結果をgif形式にして載せておきます。
元動画
変換後