1 环境配置

1.1 源码下载

Github:deep_sort_pytorch

1 下载YOLOv3参数
https://pjreddie.com/media/files/yolov3.weights
https://pjreddie.com/media/files/yolov3-tiny.weights

放在detector/YOLOv3/weight/目录下。

2 下载deepsort参数:
谷歌云盘百度云(密码:fbuw)中下载ckpt.t7,放入deep_sort/deep/checkpoint/目录下。

1.2 依赖

系统:Window10
IDE:Pycharm+Anaconda

在Anaconda Prompt内使用pip install安装下面的依赖:

Python3.6
numpy
scipy
opencv-python
sklearn
vizer
edict
pillow-6.2.2
pyyaml
easydict

安装依赖时,如果下载过慢可以使用清华镜像,像这样:pip install 名称 -i https://pypi.tuna.tsinghua.edu.cn/simple

pillow不能使用最新版本,最新版本缺少PILLOW_VERSON模块,将导致报错,所以我使用pillow-6.2.2版本。

Pytorch官网下载所需版本的Pytorch和torchvision。下面是我选择的版本。

PyTorch-1.1.0
torchvision-0.3.0

2 代码实现

使用终端进入项目目录下,输入命令python yolov3_deepsort.py VIDEO_PATH:在这里插入图片描述
加载完成后,即可开始检测,放一张截图
在这里插入图片描述

用我自己的笔记本进行测试,用cpu测试时的FPS=0.5,用gpu测试时的FPS=3。这检测速度实在是太慢了。

程序能够运行起来了,接下来就是要去想办法修改参数、训练自己的数据集了。

第二次更新:

使用终端运行太麻烦了,对yolov3_deepsort.py文件内的main进行修改,VIDEO_PATH为视频的路径。

if __name__ == "__main__":
    VIDEO_PATH = "E:/Activities/fwwb2019/code/keras-yolo3-master/test/video2.mp4"

    parser = argparse.ArgumentParser()
    parser.add_argument("--VIDEO_PATH", type=str, default=VIDEO_PATH)
    parser.add_argument("--config_detection", type=str, default="./configs/yolov3.yaml")
    parser.add_argument("--config_deepsort", type=str, default="./configs/deep_sort.yaml")
    parser.add_argument("--ignore_display", dest="display", action="store_false", default=True)
    parser.add_argument("--frame_interval", type=int, default=1)
    parser.add_argument("--display_width", type=int, default=800)
    parser.add_argument("--display_height", type=int, default=600)
    parser.add_argument("--save_path", type=str, default="./demo/demo.avi")
    parser.add_argument("--cpu", dest="use_cuda", action="store_false", default=True)
    parser.add_argument("--camera", action="store", dest="cam", type=int, default="-1")

    args = parser.parse_args()
    cfg = get_config()
    cfg.merge_from_file(args.config_detection)
    cfg.merge_from_file(args.config_deepsort)

    with VideoTracker(cfg, args) as vdo_trk:
        vdo_trk.run()