多目标实时跟踪DeepSORT算法使用的学习记录(nwojke/deep_sort)

这是一篇如何使用DeepSORT的学习记录,依据https://github.com/nwojke/deep_sort的内容写出。注意这是deep_sort_pytorch或deep_sort_yolov3的这2个git仓库介绍,也是DeepSORT的实现原理介绍。这篇文章面向和笔者一样从未接触过相关内容,只是想看一看这些较新算法的效果和使用方法的人。或者说,这篇文章更像“操作指南”。

1.环境配置

1.1 建议使用VirtualEnv

笔者在依据原作者教程使用DeepSORT算法时,遇到了与环境配置有关的诸多问题。譬如,已经安装的package的版本和所需版本不同,且没有向下兼容。因此,使用VirtualEnv管理不同版本的包会比较方便。(当然,Conda也是可以的,而且可能效果更好。)

如果你不想使用虚拟环境,而是使用各个pip包的最新版本,请直接看1.3节的相关说明。

1.2 VirtualEnv安装与使用

Windows用户请用管理员身份允许命令提示符或者Powershell,Linux用户请自行添加sudo或者以root用户运行,必要时将pip换成pip3。

由于DeepSORT的依赖库版本较旧(如必须安装旧版Scikit-learn),所需Python版本也较旧。可以在下列网址下载旧版Python:https://www.python.org/downloads/windows/。这里我们使用Python 3.6版本。如果您安装了更新的版本,并不需要卸载,另找一个地方安装即可。

如果你的设备连接官方pip源下载较慢,可以考虑更换源,例如换成国内的清华源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装VirtualEnv:

pip install virtualenv

到您希望创建虚拟环境的文件夹下,输入virtualenv [-p <使用Python的路径>] <环境名>,例如:

virtualenv -p D:\Python36\Python.exe deepsort

上述命令假定将Python 3.6版本安装在了D:\Python36文件夹,并创建一个名为deepsort的虚拟环境。

为了进入虚拟环境,我们需要输入下列命令:

cd deepsort\Scripts
activate

其中,deepsort是刚刚创建的环境名称,请换成您实际使用的名称。

此时,命令行最前面出现了(deepsort)字样,表明我们已经进入了虚拟环境。

输入pip list指令,可以看到该虚拟环境中只有最基本的3个包:
Description
环境内的包安装、卸载使用正常的pip命令即可。

为了退出环境,在Scripts文件夹下输入deactivate即可,此时命令行最前面的(deepsort)字样消失,表明退出虚拟环境。

1.3 安装依赖包

原作者使用了NumPy,Sklearn、OpenCV和Tensorflow等包。推荐使用如下命令以安装指定版本:

pip install numpy==1.19.5
pip install opencv-python
pip install scipy
pip install scikit-learn==0.19.2
pip install matplotlib
pip install tensorflow==1.15

scikit-learn此处安装0.19.2,参考自这里

兼容性问题说明

NumPy

(可选修改)需要将代码中的np.int更换为int

Scikit-learn

(必须修改)使用Scikit-learn(版本>=0.23)时,由于sklearn.utils.linear_assignment_模块弃用,需要使用 scipy.optimize.linear_sum_assignment替代,并适当调整代码。需要修改deep_sort\linear_assignment.py

#第4行附近
#from sklearn.utils.linear_assignment_ import linear_assignment
from scipy.optimize import linear_sum_assignment as linear_assignment 

#第59行附近
#indices = linear_assignment(cost_matrix)
indices = np.array(linear_assignment(cost_matrix)).transpose()
Tensorflow

(必须修改)使用Tensorflow 2时(Tensorflow 1系列不受影响),需要额外安装tf_slim,并修改如下代码,才能正常使用freeze_model.py和generate_detections.py:

#tools/freeze_model.py:第3,4行附近
#import tensorflow as tf
#import tensorflow.contrib.slim as slim
import tf_slim as slim
import tensorflow.compat.v1 as tf

#tools/generate_detections.py:第7行附近
#import tensorflow as tf
import tensorflow.compat.v1 as tf

#第80,81行附近,参考自https://github.com/nwojke/deep_sort/issues/217
#self.input_var = tf.get_default_graph().get_tensor_by_name("net/%s:0" % input_name)
#self.output_var = tf.get_default_graph().get_tensor_by_name("net/%s:0" % output_name)
self.input_var = tf.get_default_graph().get_tensor_by_name("%s:0" % input_name)
self.output_var = tf.get_default_graph().get_tensor_by_name("%s:0" % output_name)

1.4 配置DeepSORT环境

如果您安装了git,您可以使用下列命令获取DeepSORT源码:

git clone https://github.com/nwojke/deep_sort.git
cd deep_sort

Github访问困难时,可选择gitee替代:

git clone https://gitee.com/godycc/deep_sort
cd deep_sort

如果您没有安装git,可以直接在https://github.com/nwojke/deep_sorthttps://gitee.com/godycc/deep_sort下载源码并解压。

接下来,我们需要下载预生成的detections和checkpoint文件:链接
考虑到下载困难,这里提供两个备用链接:

百度网盘:链接,提取码:8dwh

我们还需要下载多目标跟踪检测数据集(MOT Benchmark)中的MOT16数据集:链接

如果直接下载有困难,也可使用如下备用链接:

百度网盘:链接,提取码:782p

下载后解压,您应该保持如下的文件夹结构:
文件夹结构

2 DeepSORT实践

2.1 快速体验

我们之前下载好的文件包含了DeepSORT使用的模型(networks文件夹),MOT数据集的目标检测结果(detections文件夹),而deep_sort_app.py模块可以标记各个目标并跟踪它们的运动。

输入python deep_sort_app.py -h可以查看使用方法和各种选项,以下是原作者给出的一个跟踪器运行示例。该示例运行了MOT16-06数据集的多目标跟踪的结果。

python deep_sort_app.py --sequence_dir=./MOT16/test/MOT16-06 --detection_file=./resources/detections/MOT16_POI_test/MOT16-06.npy --min_confidence=0.3 --nn_budget=100 --display=True

接下来您会看到一个动画窗口,显示跟踪效果:
抽帧示例

2.2 自己生成detections

上一节我们使用了原作者预先生成好的detections文件直接进行跟踪。在这一节中,我们将继续使用MOT16数据集,但是自行目标检测并生成detections文件。(此时你已经可以删除原有的detections文件夹了。当然也可以不删除,毕竟没有必要。)

输入以下命令,你将使用原作者提供mars-small128.pb描述的模型,对./MOT16/test路径中所有的图片序列进行目标检测,并将检测结果以npy文件形式存储到./resources/detections/MOT16_train路径中:

python tools/generate_detections.py --model=resources/networks/mars-small128.pb --mot_dir=./MOT16/test --output_dir=./resources/detections/MOT16_test

这一步的时间会较长,需要耐心等待。

上述npy文件中存储了每一帧中的目标特征,以便deep_sort_app.py确定不同帧中某目标是同一个物体运动产生的。文件的具体格式请参见原作者的Github仓库

这一次我们使用MOT16-01数据集。运行下列命令,可以看到和上一节类似的效果:

python deep_sort_app.py --sequence_dir=./MOT16/test/MOT16-01 --detection_file=./resources/detections/MOT16_test/MOT16-01.npy --min_confidence=0.3 --nn_budget=100 --display=True

效果2

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值