GithubHelp home page GithubHelp logo

sharpiless / yolov5-deepsort Goto Github PK

View Code? Open in Web Editor NEW
866.0 6.0 144.0 63.4 MB

最新版本yolov5+deepsort目标检测和追踪,能够显示目标类别,支持5.0版本可训练自己数据集

License: GNU General Public License v3.0

Python 99.02% Shell 0.69% Dockerfile 0.28%
pytorch computer-vision object-detection object-tracking yolov5 deepsort

yolov5-deepsort's Introduction

本文禁止转载!

本文地址:https://blog.csdn.net/weixin_44936889/article/details/112002152

项目简介:

使用YOLOv5+Deepsort实现车辆行人追踪和计数,代码封装成一个Detector类,更容易嵌入到自己的项目中。

代码地址(欢迎star):

https://github.com/Sharpiless/yolov5-deepsort/

最终效果: 在这里插入图片描述

YOLOv5检测器:

class Detector(baseDet):

    def __init__(self):
        super(Detector, self).__init__()
        self.init_model()
        self.build_config()

    def init_model(self):

        self.weights = 'weights/yolov5m.pt'
        self.device = '0' if torch.cuda.is_available() else 'cpu'
        self.device = select_device(self.device)
        model = attempt_load(self.weights, map_location=self.device)
        model.to(self.device).eval()
        model.half()
        # torch.save(model, 'test.pt')
        self.m = model
        self.names = model.module.names if hasattr(
            model, 'module') else model.names

    def preprocess(self, img):

        img0 = img.copy()
        img = letterbox(img, new_shape=self.img_size)[0]
        img = img[:, :, ::-1].transpose(2, 0, 1)
        img = np.ascontiguousarray(img)
        img = torch.from_numpy(img).to(self.device)
        img = img.half()  # 半精度
        img /= 255.0  # 图像归一化
        if img.ndimension() == 3:
            img = img.unsqueeze(0)

        return img0, img

    def detect(self, im):

        im0, img = self.preprocess(im)

        pred = self.m(img, augment=False)[0]
        pred = pred.float()
        pred = non_max_suppression(pred, self.threshold, 0.4)

        pred_boxes = []
        for det in pred:

            if det is not None and len(det):
                det[:, :4] = scale_coords(
                    img.shape[2:], det[:, :4], im0.shape).round()

                for *x, conf, cls_id in det:
                    lbl = self.names[int(cls_id)]
                    if not lbl in ['person', 'car', 'truck']:
                        continue
                    x1, y1 = int(x[0]), int(x[1])
                    x2, y2 = int(x[2]), int(x[3])
                    pred_boxes.append(
                        (x1, y1, x2, y2, lbl, conf))

        return im, pred_boxes

调用 self.detect 方法返回图像和预测结果

DeepSort追踪器:

deepsort = DeepSort(cfg.DEEPSORT.REID_CKPT,
                    max_dist=cfg.DEEPSORT.MAX_DIST, min_confidence=cfg.DEEPSORT.MIN_CONFIDENCE,
                    nms_max_overlap=cfg.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.DEEPSORT.MAX_IOU_DISTANCE,
                    max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET,
                    use_cuda=True)

调用 self.update 方法更新追踪结果

运行demo:

python demo.py

训练自己的模型:

参考我的另一篇博客:

【小白CV】手把手教你用YOLOv5训练自己的数据集(从Windows环境配置到模型部署)

训练好后放到 weights 文件夹下

调用接口:

创建检测器:

from AIDetector_pytorch import Detector

det = Detector()

调用检测接口:

result = det.feedCap(im)

其中 im 为 BGR 图像

返回的 result 是字典,result['frame'] 返回可视化后的图像

联系作者:

B站:https://space.bilibili.com/470550823

CSDN:https://blog.csdn.net/weixin_44936889

AI Studio:https://aistudio.baidu.com/aistudio/personalcenter/thirdview/67156

Github:https://github.com/Sharpiless

遵循 GNU General Public License v3.0 协议,标明目标检测部分来源:https://github.com/ultralytics/yolov5/

yolov5-deepsort's People

Contributors

sharpiless avatar sxj731533730 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

yolov5-deepsort's Issues

关于AIDetector_pytorch.py

我想了解一下这个接口文件是怎么编写出来的,是根据哪个文件编写的,为什么我看完后不知道从何处入手,望大佬解答

沒有任何結果

請問為什麼我無法使用自己的影片進行偵測,cv2.show出來的影片是原本的影片,我發現在yolo那邊回傳的BBOX,conf就是空陣列了,但我也透過使用pytorch.hub使用yolo返回bbox的資訊,但當我傳進deepsort時返回的result["frame"]還是原本的圖,我更進一部檢察result其他KEY的value,卻一樣是空陣列,沒有任何東西。請問這是哪邊出了問題?

TypeError: load() missing 1 required positional argument: 'Loader'

File "C:\Users\xx\PycharmProjects\try\Yolov5-Deepsort-main\deep_sort\utils\parser.py", line 23, in merge_from_file
self.update(yaml.load(fo.read()))
TypeError: load() missing 1 required positional argument: 'Loader'

请问提示load()函数调用的时候缺少参数是怎么回事呢?

我执行的时候 报一个 除0错误 是什么情况?

fa@ubuntu:~/Downloads/Yolov5-Deepsort-main$ python3 demo.py
/home/fa/Downloads/Yolov5-Deepsort-main/deep_sort/utils/parser.py:23: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
self.update(yaml.load(fo.read()))
/home/fa/.local/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)
return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
fps: 0
Traceback (most recent call last):
File "demo.py", line 50, in
main()
File "demo.py", line 13, in main
t = int(1000/fps)
ZeroDivisionError: division by zero

如何训练deepsort自己的数据集?我已经训练了yolov5的自己的数据集。

如何训练deepsort自己的数据集?我已经训练了yolov5的自己的数据集。因为我需要跟踪的目标不是行人,也不是汽车,而是其他的物体。所以在deepsort对目标物体进行跟踪预测的时候,如果同一物体被遮挡再出现,其reID会改变。我想这应该就是我没有重新训练deepsort的原因。请大佬指导一下我该如何制作自己的数据集重新训练deepsort。

yolo.py中报错

AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'

显存越来越高

使用的rtx3060 12g显存
centos7
cuda:11.1,驱动:470.63.01
torch:1.7.1+cu110

接RTSP视频流,开始占用显存大概1.3G,过一段时间后显存占用越来越高,直到显存溢出,屏蔽deepsort部分,只跑检测不会出现这情况,不知道deepsort哪一部分导致显存占用升高

too many indices for tensor of dimension 1

File "/home/car/code/laserscan_camera_fuse/Yolov5-Deepsort-ros/demo.py", line 63, in
main()

File "/home/car/code/laserscan_camera_fuse/Yolov5-Deepsort-ros/demo.py", line 31, in main
result = det.feedCap(im)

File "/home/car/code/laserscan_camera_fuse/Yolov5-Deepsort-ros/utils/BaseDetector.py", line 35, in feedCap
im, faces, face_bboxes,bboxes_draw = update_tracker(self, im)

File "/home/car/code/laserscan_camera_fuse/Yolov5-Deepsort-ros/tracker.py", line 60, in update_tracker
outputs = deepsort.update(xywhs, confss, clss, image)

File "/home/car/code/laserscan_camera_fuse/Yolov5-Deepsort-ros/deep_sort/deep_sort/deep_sort.py", line 32, in update
bbox_tlwh = self._xywh_to_tlwh(bbox_xywh)

File "/home/car/code/laserscan_camera_fuse/Yolov5-Deepsort-ros/deep_sort/deep_sort/deep_sort.py", line 55, in _xywh_to_tlwh
bbox_tlwh[:, 0] = bbox_xywh[:, 0] - bbox_xywh[:, 2]/2.

IndexError: too many indices for tensor of dimension 1

when i try to debug ,i found that the issues occured when the image cannot be detected anything

Easy skip :
USE TRY EXCEPT: use except to skip this
try: result = det.feedCap(im) except Exception as e: result = {} print(e)

if the bug can be solved perfectly ,that 's would be wonderful! thanks @Sharpiless

如何修改默认的n卡跑该模型?

我想修改成gpu 2上跑,即在AIDetector_pytorch.py 中修改self.device = '2' if torch.cuda.is_available() else 'cpu',但是在运行的时候依旧是在gpu 0 上跑,请问这是为什么呢?

模型

这个可以支持自己改进的自定义yolov5模型吗?

如何使用GPU运行这个项目?

我运行代码后,在任务管理器的性能一栏看到CPU使用率很高,但是GPU几乎没有被使用。请问是哪里出了问题?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.