deepsort和yolov5怎么集成

楼主现在做好了yolov5的训练,deepsort源码已下载还未训练,请问yolov5和deepsort怎样集成在一起呢?看了几个博主的文件目录好像是都放在一起,除了把两个源码放在同一个目录下之后还应该改动哪里呢

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,内容及完整代码如下。
将YOLOv5和DeepSORT集成在一起,需要完成以下几个步骤:

1、 安装必要的依赖项

在开始之前,需要安装必要的依赖项。YOLOv5和DeepSORT都是使用Python语言编写的,因此需要安装Python 3.x以及相关的依赖库,例如NumPy、OpenCV、torch等等。建议使用Anaconda或者pipenv等Python环境管理工具来管理依赖。

2、 下载YOLOv5和DeepSORT的源代码

需要从YOLOv5和DeepSORT的GitHub仓库中下载源代码。YOLOv5的GitHub仓库链接为:https://github.com/ultralytics/yolov5%EF%BC%8CDeepSORT%E7%9A%84GitHub%E4%BB%93%E5%BA%93%E9%93%BE%E6%8E%A5%E4%B8%BA%EF%BC%9Ahttps://github.com/nwojke/deep_sort%E3%80%82

3、 训练YOLOv5模型

使用YOLOv5的源代码,可以对自己的数据集进行训练,得到一个检测模型。具体的训练步骤可以参考YOLOv5官方文档或者相关的博客教程。需要注意的是,在训练时需要设置好输出结果的格式,以便DeepSORT能够读取和处理检测结果。

4、 修改DeepSORT代码

在DeepSORT的源代码中,需要修改一些代码,以便它能够读取和处理YOLOv5的检测结果。具体来说,需要修改deep_sort/track.py文件中的predict函数。在该函数中,需要将YOLOv5的检测结果转换为DeepSORT所需要的格式。例如,将YOLOv5的检测框坐标和置信度转换为DeepSORT所需要的bbox和score格式。

5、 运行集成后的代码

最后,可以运行集成后的代码,对视频或图像进行目标检测和跟踪。在运行时,需要将YOLOv5的检测结果传递给DeepSORT进行处理,并将跟踪结果可视化出来。具体的代码实现可以参考DeepSORT的源代码和相关的博客教程。

下面是一个简单的示例代码,可以将YOLOv5和DeepSORT集成在一起,进行目标检测和跟踪。需要注意的是,该示例代码只是一个简单的示例,具体实现需要根据实际情况进行调整。

import cv2
import numpy as np
import torch
from deep_sort.deep_sort import DeepSort
from yolov5.yolov5 import YOLOv5

# 创建YOLOv5检测器和DeepSORT跟踪器
yolov5 = YOLOv5()
deepsort = DeepSort()

# 加载YOLOv5模型和DeepSORT模型
yolov5.load_model("yolov5s.pt")
deepsort.load_model("deep_sort.pt")

# 打开视频文件
video_path = "test.mp4"
cap = cv2.VideoCapture(video_path)

# 循环读取视频帧
while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 对视频帧进行目标检测
    detections = yolov5.detect(frame)

    # 对检测结果进行跟踪
    tracks = deepsort.update(detections)

    # 可视化跟踪结果
    for track in tracks:
        bbox = track.to_bbox()
        cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
        cv2.putText(frame, str(track.track_id), (bbox[0], bbox[1]), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

    # 显示视频帧
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

在上述代码中,我们首先创建了YOLOv5检测器和DeepSORT跟踪器,并分别加载了YOLOv5和DeepSORT的模型。然后,我们使用cv2.VideoCapture打开视频文件,循环读取视频帧。对于每一帧,我们使用YOLOv5进行目标检测,然后将检测结果传递给DeepSORT进行跟踪。最后,我们可视化跟踪结果,并使用cv2.imshow显示视频帧。当按下键盘上的“q”键时,循环将退出,释放资源并关闭窗口。

需要注意的是,在实际使用中,我们可能需要对代码进行进一步的优化和调整,以便提高检测和跟踪的准确性和效率。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

现成的项目都很多啊,多看几个找个适合你自己的用就行

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在集成yolov5和deepsort之前,需要先确保两个源码都能正常运行。具体操作可参考yolov5和deepsort各自的README文件。

深度排序(Deep SORT)是一种目标跟踪算法,可以使用已检测到的对象来识别已跟踪的对象。深度排序实现了带有滑动窗口的卡尔曼滤波器以及新颖的近似最近邻匹配算法,以实现点轨迹的关联。深度排序的主要输入是关键点位置和检测器结果,输出是每个检测轨迹的ID,在跟踪过程中追踪检测物体。

将yolov5和deepsort集成在一起,需要进行以下步骤:

  1. 确保yolov5检测器返回的结果能够与deepsort跟踪器兼容。一般情况下,yolov5返回的结果应该包含对象的边界框坐标、置信度得分和类别ID等信息。

  2. 将yolov5和deepsort的源码文件放在同一个目录下。

  3. 修改deepsort的测试文件deep_sort_app.py,让它从yolov5检测器获取检测结果,并输入给跟踪器进行目标跟踪。修改后的文件如下:

import argparse
import os
import cv2
import numpy as np
import torch

from yolov5 import detect

from deep_sort import preprocessing, nn_matching
from deep_sort.detection import Detection
from deep_sort.tracker import Tracker
from tools import generate_detections as gdet


def parse_args():
    parser = argparse.ArgumentParser(description='Deep SORT')
    parser.add_argument('--source', type=str, help='video source', default='0')
    parser.add_argument('--weights', type=str, help='path to weights file')
    parser.add_argument('--cfg', type=str, help='path to config file')
    parser.add_argument('--names', type=str, help='path to class name file')
    parser.add_argument('--conf', type=float, help='detection confidence threshold', default=0.5)
    parser.add_argument('--nms', type=float, help='non-maximum suppression threshold', default=0.4)
    parser.add_argument('--save', action='store_true', help='save output as video')
    parser.add_argument('--output', type=str, help='output file path', default='output.mp4')
    return parser.parse_args()


def main(args):
    source = args.source

    # load yolov5 detector
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model, _, _ = detect.load_model(weights=args.weights, cfg=args.cfg, names=args.names, device=device)

    # deep sort setting
    max_cosine_distance = 0.5
    nn_budget = None
    nms_max_overlap = args.nms

    # initialize tracker
    model_filename = 'model_data/mars-small128.pb'
    encoder = gdet.create_box_encoder(model_filename, batch_size=1)
    metric = nn_matching.NearestNeighborDistanceMetric("cosine", max_cosine_distance, nn_budget)
    tracker = Tracker(metric)

    # open video capture
    print("Opening video capture...")
    try:
        source = int(source)
    except ValueError:
        pass
    cap = cv2.VideoCapture(source)
    if not cap.isOpened():
        print("Failed to open video capture.")
        exit()

    # prepare video writer
    if args.save:
        fps = cap.get(cv2.CAP_PROP_FPS)
        width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        out = cv2.VideoWriter(args.output, fourcc, fps, (width, height))

    # start tracking
    count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

            # run detection
            detections = detect.detect(image=image, model=model, conf_thres=args.conf, nms_thres=args.nms)

            # format detection results for deepsort
            features = encoder(image, [detection.to_xywh() for detection in detections])
            detections = [Detection(detection.to_tlbr(), detection.conf, f) for detection, f in zip(detections, features)]

            # run deepsort tracker
            tracker.predict()
            tracker.update(detections)

            # draw tracklets
            for track in tracker.tracks:
                if track.is_confirmed() and track.time_since_update > 0:
                    continue
                bbox = track.to_tlbr()
                cv2.rectangle(frame, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), (0, 255, 0), 2)
                cv2.putText(frame, str(track.track_id), (int(bbox[0]), int(bbox[1] - 15)), cv2.FONT_HERSHEY_SIMPLEX, 0.75,
                            (0, 255, 0), 2)

            # show tracking result
            cv2.imshow('Deep SORT', frame)
            if args.save:
                out.write(frame)
            count += 1
            if cv2.waitKey(1) == ord('q'):
                break
        else:
            break

    # release resources
    cap.release()
    if args.save:
        out.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    args = parse_args()
    main(args)
  1. 运行deep_sort_app.py文件即可开始目标跟踪。
    如果我的回答解决了您的问题,请采纳!

YOLOv5+DeepSort实现目标跟踪

可以借鉴下
https://blog.csdn.net/Albert_yeager/article/details/129321339

引用chatGPT作答,
要将 YOLOv5 和 DeepSORT 集成在一起,您需要做以下步骤:

1.将 YOLOv5 和 DeepSORT 的源代码放在同一个目录下,以确保它们能够相互引用。

2.在 DeepSORT 代码中找到 deep_sort_detection.py 文件,并将其打开。这个文件是 DeepSORT 用来处理检测结果的文件。

3.在 deep_sort_detection.py 文件中,找到 create_box_encoder 函数。这个函数会加载一个已经训练好的目标检测器,并用它来编码每个检测框。

4.在 create_box_encoder 函数中,找到 load_saved_model 函数,并在其中添加以下代码:

from models.experimental import attempt_load
from utils.general import check_img_size

# Load YOLOv5 model
weights = 'path/to/yolov5/weights.pt' # 修改为YOLOv5训练得到的权重文件路径
device = 'cpu' # 修改为使用的设备,如 'cpu''cuda:0'
model = attempt_load(weights, map_location=device)
img_size = check_img_size(640, s=model.stride.max())  # 修改输入图像尺寸
model.to(device).eval()

这段代码会加载 YOLOv5 模型,并将其放到指定的设备上进行推理。请注意修改权重文件路径和设备参数,以适应您的环境。另外,您可能需要调整输入图像尺寸以满足 YOLOv5 模型的要求。

5.在 create_box_encoder 函数中,找到 preprocess 函数,并在其中添加以下代码:

from PIL import Image
from torchvision.transforms import ToTensor

# Preprocess input image for YOLOv5
im = Image.fromarray(frame)
im = im.resize((img_size, img_size))
img = ToTensor()(im)
img = img.to(device)

这段代码会对输入图像进行预处理,以满足 YOLOv5 模型的要求。

6.最后,在 deep_sort_app.py 文件中运行 DeepSORT 应用程序,以测试您的集成结果。

希望这些步骤能帮助您将 YOLOv5 和 DeepSORT 集成在一起。如有任何问题,请随时提出。

不知道你这个问题是否已经解决, 如果还没有解决的话:

  • 您还可以看一下 白勇老师的YOLOv5+DeepSORT多目标跟踪与计数精讲课程中的 行人多目标跟踪与计数演示小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以尝试回答这个问题。

    集成deepsort和yolov5,需要进行以下步骤:

    1. 安装依赖

    首先需要安装所需的依赖,包括deepsort和yolov5。可以使用pip安装,例如:

    pip install deepsort
    pip install yolov5
    
    1. 下载deepsort代码库

    从github上下载深度学习目标跟踪器deepsort的代码库

    git clone https://github.com/nwojke/deep_sort.git
    
    1. 修改deepsort代码,以便将检测器从opencv框架替换到yolov5框架

    由于deepsort代码的检测器默认使用的是opencv框架,需要将其替换为yolov5框架。需要修改deepsort代码库下的detection.py文件。

    在该文件中,需要修改以下代码:

    net = cv2.dnn.readNetFromDarknet(args.config, args.weights)
    ...
    detections = net.forward()
    ...
    return np.array(outputs), np.array(orig_img_boxes)
    

    将其修改为:

    detector = Detector()
    ...
    detections = detector.detect(frame)
    ...
    return outputs, np.array(result_boxes)
    

    其中,Detector()是yolov5检测器的类,可以从参考资料中段落3中的代码中得到。

    1. 配置config文件

    需要创建一个config文件,以提供deepsort使用。参考deepsort代码库中的config.json文件,修改其中检测器的相关参数,例如:

    "detection_model_type": "YOLOv5",
    "detection_model_path": "path/to/yolov5/weights",
    
    1. 运行deepsort

    使用下述命令运行deepsort,实现目标跟踪:

    python deep_sort_app.py  --sequence video.avi --detection_model_type YOLOv5 --detection_model_path path/to/yolov5/weights --detection_model_score_threshold 0.25
    

    其中,video.avi是待跟踪的视频文件路径。

    希望这些步骤可以帮助你解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^