本文章为记录使用YOLOv8-DeepSORT-对象跟踪项目。
开发环境
conda activate '环境名'
1、python3.8
2、Anaconda3
开发环境搭建
1、创建一个虚拟环境用于项目
conda create -n '自定义环境名' python=3.8
2、激活虚拟环境
conda activate 环境名
激活陈功如下图:
克隆储存库
GitHub项目地址:YOLOv8-DeepSORT-对象跟踪,需要更详细的了解项目可以查看
git clone https://github.com/MuhammadMoinFaisal/YOLOv8-DeepSORT-Object-Tracking.git
克隆完成如下图:
完整的项目结构如下:
.
└── YOLOv8-DeepSORT-Object-Tracking
├── CONTRIBUTING.md
├── figure
│ ├── figure1.png
│ ├── figure2.png
│ └── figure3.png
├── MANIFEST.in
├── mkdocs.yml
├── README.md
├── requirements.txt
├── setup.cfg
├── setup.py
├── ultralytics
│ ├── hub
│ │ ├── auth.py
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── auth.cpython-38.pyc
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ ├── session.cpython-38.pyc
│ │ │ └── utils.cpython-38.pyc
│ │ ├── session.py
│ │ └── utils.py
│ ├── __init__.py
│ ├── models
│ │ ├── README.md
│ │ ├── v3
│ │ │ ├── yolov3-spp.yaml
│ │ │ ├── yolov3-tiny.yaml
│ │ │ └── yolov3.yaml
│ │ ├── v5
│ │ │ ├── yolov5l.yaml
│ │ │ ├── yolov5m.yaml
│ │ │ ├── yolov5n.yaml
│ │ │ ├── yolov5s.yaml
│ │ │ └── yolov5x.yaml
│ │ └── v8
│ │ ├── cls
│ │ │ ├── yolov8l-cls.yaml
│ │ │ ├── yolov8m-cls.yaml
│ │ │ ├── yolov8n-cls.yaml
│ │ │ ├── yolov8s-cls.yaml
│ │ │ └── yolov8x-cls.yaml
│ │ ├── seg
│ │ │ ├── yolov8l-seg.yaml
│ │ │ ├── yolov8m-seg.yaml
│ │ │ ├── yolov8n-seg.yaml
│ │ │ ├── yolov8s-seg.yaml
│ │ │ └── yolov8x-seg.yaml
│ │ ├── yolov8l.yaml
│ │ ├── yolov8m.yaml
│ │ ├── yolov8n.yaml
│ │ ├── yolov8s.yaml
│ │ ├── yolov8x6.yaml
│ │ └── yolov8x.yaml
│ ├── nn
│ │ ├── autobackend.py
│ │ ├── __init__.py
│ │ ├── modules.py
│ │ ├── __pycache__
│ │ │ ├── autobackend.cpython-38.pyc
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ ├── modules.cpython-38.pyc
│ │ │ └── tasks.cpython-38.pyc
│ │ └── tasks.py
│ ├── __pycache__
│ │ └── __init__.cpython-38.pyc
│ └── yolo
│ ├── cli.py
│ ├── configs
│ │ ├── default.yaml
│ │ ├── hydra_patch.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── hydra_patch.cpython-38.pyc
│ │ └── __init__.cpython-38.pyc
│ ├── data
│ │ ├── augment.py
│ │ ├── base.py
│ │ ├── build.py
│ │ ├── dataloaders
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-38.pyc
│ │ │ │ ├── stream_loaders.cpython-38.pyc
│ │ │ │ ├── v5augmentations.cpython-38.pyc
│ │ │ │ └── v5loader.cpython-38.pyc
│ │ │ ├── stream_loaders.py
│ │ │ ├── v5augmentations.py
│ │ │ └── v5loader.py
│ │ ├── dataset.py
│ │ ├── datasets
│ │ │ ├── Argoverse.yaml
│ │ │ ├── coco128-seg.yaml
│ │ │ ├── coco128.yaml
│ │ │ ├── coco.yaml
│ │ │ ├── GlobalWheat2020.yaml
│ │ │ ├── ImageNet.yaml
│ │ │ ├── Objects365.yaml
│ │ │ ├── SKU-110K.yaml
│ │ │ ├── VisDrone.yaml
│ │ │ ├── VOC.yaml
│ │ │ └── xView.yaml
│ │ ├── dataset_wrappers.py
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── augment.cpython-38.pyc
│ │ │ ├── base.cpython-38.pyc
│ │ │ ├── build.cpython-38.pyc
│ │ │ ├── dataset.cpython-38.pyc
│ │ │ ├── dataset_wrappers.cpython-38.pyc
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ └── utils.cpython-38.pyc
│ │ ├── scripts
│ │ │ ├── download_weights.sh
│ │ │ ├── get_coco128.sh
│ │ │ ├── get_coco.sh
│ │ │ └── get_imagenet.sh
│ │ └── utils.py
│ ├── engine
│ │ ├── exporter.py
│ │ ├── __init__.py
│ │ ├── model.py
│ │ ├── predictor.py
│ │ ├── __pycache__
│ │ │ ├── exporter.cpython-38.pyc
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ ├── model.cpython-38.pyc
│ │ │ ├── predictor.cpython-38.pyc
│ │ │ ├── trainer.cpython-38.pyc
│ │ │ └── validator.cpython-38.pyc
│ │ ├── trainer.py
│ │ └── validator.py
│ ├── utils
│ │ ├── autobatch.py
│ │ ├── callbacks
│ │ │ ├── base.py
│ │ │ ├── clearml.py
│ │ │ ├── comet.py
│ │ │ ├── hub.py
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── base.cpython-38.pyc
│ │ │ │ ├── clearml.cpython-38.pyc
│ │ │ │ ├── comet.cpython-38.pyc
│ │ │ │ ├── hub.cpython-38.pyc
│ │ │ │ ├── __init__.cpython-38.pyc
│ │ │ │ └── tensorboard.cpython-38.pyc
│ │ │ └── tensorboard.py
│ │ ├── checks.py
│ │ ├── dist.py
│ │ ├── downloads.py
│ │ ├── files.py
│ │ ├── __init__.py
│ │ ├── instance.py
│ │ ├── loss.py
│ │ ├── metrics.py
│ │ ├── ops.py
│ │ ├── plotting.py
│ │ ├── __pycache__
│ │ │ ├── autobatch.cpython-38.pyc
│ │ │ ├── checks.cpython-38.pyc
│ │ │ ├── dist.cpython-38.pyc
│ │ │ ├── downloads.cpython-38.pyc
│ │ │ ├── files.cpython-38.pyc
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ ├── instance.cpython-38.pyc
│ │ │ ├── loss.cpython-38.pyc
│ │ │ ├── metrics.cpython-38.pyc
│ │ │ ├── ops.cpython-38.pyc
│ │ │ ├── plotting.cpython-38.pyc
│ │ │ ├── tal.cpython-38.pyc
│ │ │ └── torch_utils.cpython-38.pyc
│ │ ├── tal.py
│ │ └── torch_utils.py
│ └── v8
│ └── detect
│ ├── deep_sort_pytorch
│ │ ├── configs
│ │ │ └── deep_sort.yaml
│ │ ├── deep_sort
│ │ │ ├── deep
│ │ │ │ ├── checkpoint
│ │ │ │ │ └── ckpt.t7
│ │ │ │ ├── evaluate.py
│ │ │ │ ├── feature_extractor.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── model.py
│ │ │ │ ├── original_model.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── feature_extractor.cpython-38.pyc
│ │ │ │ │ ├── __init__.cpython-38.pyc
│ │ │ │ │ └── model.cpython-38.pyc
│ │ │ │ ├── test.py
│ │ │ │ ├── train.jpg
│ │ │ │ └── train.py
│ │ │ ├── deep_sort.py
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── deep_sort.cpython-38.pyc
│ │ │ │ └── __init__.cpython-38.pyc
│ │ │ ├── README.md
│ │ │ ├── sort
│ │ │ │ ├── detection.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── iou_matching.py
│ │ │ │ ├── kalman_filter.py
│ │ │ │ ├── linear_assignment.py
│ │ │ │ ├── nn_matching.py
│ │ │ │ ├── preprocessing.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── detection.cpython-38.pyc
│ │ │ │ │ ├── __init__.cpython-38.pyc
│ │ │ │ │ ├── iou_matching.cpython-38.pyc
│ │ │ │ │ ├── kalman_filter.cpython-38.pyc
│ │ │ │ │ ├── linear_assignment.cpython-38.pyc
│ │ │ │ │ ├── nn_matching.cpython-38.pyc
│ │ │ │ │ ├── track.cpython-38.pyc
│ │ │ │ │ └── tracker.cpython-38.pyc
│ │ │ │ ├── tracker.py
│ │ │ │ └── track.py
│ │ │ └── sort - Copy
│ │ │ ├── __init__.py
│ │ │ ├── iou_matching.py
│ │ │ ├── kalman_filter.py
│ │ │ ├── linear_assignment.py
│ │ │ ├── nn_matching.py
│ │ │ └── preprocessing.py
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── utils
│ │ ├── asserts.py
│ │ ├── draw.py
│ │ ├── evaluation.py
│ │ ├── __init__.py
│ │ ├── io.py
│ │ ├── json_logger.py
│ │ ├── log.py
│ │ ├── parser.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-38.pyc
│ │ │ └── parser.cpython-38.pyc
│ │ └── tools.py
│ ├── __init__.py
│ ├── predict.log
│ ├── predict.py
│ ├── __pycache__
│ │ ├── __init__.cpython-38.pyc
│ │ ├── predict.cpython-38.pyc
│ │ ├── train.cpython-38.pyc
│ │ └── val.cpython-38.pyc
│ ├── test3.mp4
│ ├── train.py
│ ├── val.py
│ ├── yolov8l.pt
│ └── yolov8n.pt
├── ultralytics.egg-info
│ ├── dependency_links.txt
│ ├── entry_points.txt
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── YOLOv8_DeepSORT_TRACKING_SCRIPT.ipynb
└── YOLOv8_Detection_Tracking_CustomData_Complete.ipynb
运行代码的步骤
转到克隆的文件夹
cd YOLOv8-DeepSORT-Object-Tracking
在虚拟环境中安装依赖项
pip install -e '.[dev]'
注意:numpy==1.23.5,numpy版本高于1.23.5可能无法运行,因为代码依赖于旧版的numpy
进入detect文件
cd ultralytics/yolo/v8/detect
从驱动器下载 DeepSORT Zip 文件后,将其解压缩到子文件夹中,并将 deep_sort_pytorch 文件夹放入 yolo/v8/detect 文件夹中
下载 DeepSORT 文件地址如下:下载 DeepSORT 文件
下载示例视频:示例视频
运行predict.py文件,进行目标检测+跟踪
python predict.py model=yolov8l.pt source="test3.mp4" show=True