chainer-目标跟踪-DeepSort【附源码】


前言

本文使用fasterrcnn、SSD做目标检测,检测人,使用deepsort跟踪人。
本次实验只是做一个实现,后续可以根据效果深究。


一、fasterrcnn、SSD的目标检测

  本次的fasterrcnn以及SSD的检测模型使用chainer默认的模型库,因此如果想提高检测成功率,修改此模型算法即可,具体的这里不做展开

二、DeepSort原理

  基于深度学习的多目标跟踪算法的几种改进方向,其中有一种便是将深度表观特征应用到多目标跟踪问题中,deep-sort多目标跟踪算法便是这类算法中较为常用的一个。deep-sort 是在 sort 目标跟踪的基础上引入了表观特征提取网络,该网络是在行人重识别数据集上离线训练得到的,在目标跟踪过程中提取目标的表观特征进行最近邻匹配,这样可以有效的改善遮挡情况下的目标追踪效果。

1.引入库

这里我们封装了一个SORTMultiObjectTracking多目标跟踪的类

import sys
sys.path.append('.')
import numpy as np
import time,chainer,cv2
from nets.faster_rcnn.faster_rcnn_vgg import FasterRCNNVGG16
from nets.ssd.ssd_vgg16 import SSD300, SSD512
from nets.sort_multi_object_tracking import SORTMultiObjectTracking

2.读入数据

class SORTMultiObjectTracking(object):
    def __init__(self, dectector, detector_label_names, tracking_label_names=None):
        self.bbox_tracker = SORTMultiBboxTracker()
        self.detector = dectector
        self.detector_label_names = detector_label_names
        self.tracking_label_names = tracking_label_names

    def predict(self, img):
        if len(img) > 1:
            raise ValueError
        bboxes, labels, scores = self.detector.predict(img)
        bbox, label, score = bboxes[0], labels[0], scores[0]
        bbox = chainer.cuda.to_cpu(bbox)
        label = chainer.cuda.to_cpu(label)
        score = chainer.cuda.to_cpu(score)

        det_bbox = []
        det_label = []
        det_score = []
        for bb, lbl, sc in zip(bbox, label, score):
            if self.detector_label_names[lbl] in self.tracking_label_names and sc>0.4:
                det_bbox.append(bb[None])
                det_label.append(lbl)
                det_score.append(sc)
        if len(det_bbox) > 0:
            det_bbox = np.concatenate(det_bbox)
        else:
            det_bbox = np.array(det_bbox).reshape((0, 4))
        det_label = np.array(det_label)
        det_score = np.array(det_score)

        trk_indices, trk_bbox, trk_inst_id = self.bbox_tracker.update(det_bbox)
        trk_label = det_label[trk_indices]
        trk_score = det_score[trk_indices]
        return trk_bbox[None], trk_label[None], trk_score[None], trk_inst_id[None]

这里把目标检测器dectector放进多目标跟踪器中,使用self.bbox_tracker.update获得目标的id和位置


3.效果如图

chainer-目标跟踪视频

总结

目标检测检测人+deepsort跟踪人,可以跟踪的不是人,只需要修改跟踪目标即可。
源码:chainer-目标跟踪-DeepSort

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的广东仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值