机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪...

1. cv2.dnn.readNetFromCaffe(prototxt, model)  用于进行SSD网络的caffe框架的加载

参数说明:prototxt表示caffe网络的结构文本,model表示已经训练好的参数结果

2.t=delib.correlation_tracker() 使用delib生成单目标的追踪器

3.delib.rectangle(int(box[0]), int(box[1]), int(box[2]), int(box[3])) 用于生成追踪器所需要的矩形框[(startX, startY), (endX, endY)]

4.t.start_track(rgb, rect) # 初始化生成器的开始状态

5.cv2.Writer(name, fourcc, (frame.shape[1], frame.shape[0]), True)进行图片写入到视频里面

参数说明: name表示视频的名字,fourcc表示视频格式,frame.shape[1] 表示视频的长和宽, 

6.cv2.dnn.blobFromImage(frame, 0.007843, (w, h), 127.5)  对图像进行归一化操作(-1, 1),

参数说明:frame表示输入图片,0.007843表示需要乘的数,即1/127.5,(w, h)表示图像大小,127.5表示需要减去的数

7. net.SetInput(rgb) 表示将图片输入到caffe网络中

参数说明: rgb表示已经经过归一化的图片

8. net.forward() 输出前向传播的预测结果

9. oq = multiprocessing.Queue() 生成用于多进行传输过程中的线程

10.p = multiprocessing.Process(target=start_track, args=(bb, label, rgb, iq, oq))  # 用于对函数创建进程

参数说明:target表示需要转换为进程的函数,args表示传入到进程里函数的参数

 

 

 

 

SSD是一种目标检测的算法,其使用多个卷积层进行预测,原理在后续的博客中进行补充

对于目标追踪的视频,我们先使用SSD找出图片中人物的位置,然后使用dlib中的跟踪器对物体进行跟踪

由于每一个人物框对应一个跟踪器,因此我们可以对每一个跟踪器起一个进程,使用输入和输出线程,用于构造多进程

使用的数据,需要一个训练好的SSD权重参数,还需要caffe关于SSD的prototxt文件
代码说明:

下面的代码可以近似认为是由两部分构成

 第一部分:使用SSD网络进行预测,获得box的位置

第二部分:使用dlib构造tracker跟踪器,带入box构造带有矩形框的追踪器,然后使用dlib的追踪器对图像每一帧的位置进行追踪

代码:

第一步:构造进程函数,使用iq.get 和oq.put进行追踪器的位置更新

第二步:构造输入的参数, 使用cv2.dnn.readNetFromCaffe()构造SSD网络模型

第三步:使用cv2.Videocapture视频读入,fps=FPS().start() 用于计算FPS

第四步:进入循环,使用.read()读取图片

第五步:使用cv2.resize()对图片大小进行放缩变化,使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #将读入的BGR转换为RGB,用于模型的预测

第六步:如果需要进行输出,使用cv2.VideoWriter实例化视频存储器

第七步:如果还没有使用SSD获得矩形框,使用cv2.dnn.blobFromImage对图像进行归一化操作

第八步:使用net.setInput将图片传入,使用net.forward获得前向传播输出的结果

第九步:如果置信度大于给定的置信度,获得SSD的标签,以及前向传播的位置信息

第十步:使用multiprocessing.Queue构造线程iq和oq,将线程添加到列表中,使用multiprocessing.process构造多进程,用于分别建立单个跟踪器

第十一步:如果已经生成了通道,使用iq.put(rgb)传入图像,使用oq.get()获得追踪器更新的位置

第十二步:进行画图操作,如果存在writer就进行写入

第十三步:更新fps.update

第十四步:统计运行的时间和FPS,并对vs进行释放内存

import cv2
import numpy as np
import argparse
import dlib
import multiprocessing
from utils import FPS

# 第一步:构造追踪器并进行结果的更新
def start_tracker(box, label, rgb, inputQueue, outputQueue):

    # 构造追踪器
    t = dlib.correlation_tracker()
    # rect为SSD获得的矩形框的位置
    rect = dlib.rectangle(int(box[0]), int(box[1]), int(box[2]), int(box[3]))
    # 设置追踪器的初始位置
    t.start_track(rgb, rect)
    # 获得下一帧图片
    while True:
        # 传入的图片
        rgb = inputQueue.get()
        if rgb is not None:
            # 更新追踪器
            t.update(rgb)
            # 获得追踪器的当前位置
            pos = t.get
  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `cv2.dnn.readNetFromCaffe`是OpenCV中一个用于读取Caffe框架训练的神经网络模型的函数。Caffe是一个流行的深度学习框架,它可以用于训练和部署深度神经网络模型。该函数需要两个参数: - `prototxt`: Caffe模型的网络结构描述文件,通常是以.prototxt为扩展名的文件。 - `caffeModel`: Caffe模型训练权重文件,通常是以.caffemodel为扩展名的文件。 函数返回一个`cv2.dnn_Net`对象,该对象包含了从Caffe模型读取的神经网络模型。可以使用该对象行前向传递,即输入图像并得到网络的输出。 以下是一个示例: ```python import cv2 # 读取Caffe模型 net = cv2.dnn.readNetFromCaffe('model.prototxt', 'model.caffemodel') # 加载图像 image = cv2.imread('image.jpg') # 对图像行预处理 blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(104.0, 177.0, 123.0)) # 将图像输入到网络中行前向传递 net.setInput(blob) output = net.forward() # 输出网络的预测结果 print(output) ``` ### 回答2: cv2.dnn.readnetfromcaffe是OpenCV中一个针对深度学习模型的函数,它可以从Caffe框架下的网络架构和权重文件中读取模型参数。Caffe是一个基于神经网络的开源框架,可以用来设计、训练和测试深度学习模型。 使用cv2.dnn.readnetfromcaffe函数,可以通过指定网络模型的网络结构文件和网络权重文件,将已经训练好的模型加载到Python环境中,并对其行预测和推理。 该函数的输入参数包括模型的配置文件和权重文件名称,以及可选的标志位。其中,模型配置文件是用来描述网络结构的文件,通常采用prototxt文件格式,它定义了网络的层数,每层的类型和参数等;权重文件是用来存储网络训练好的权重参数的文件,通常采用caffemodel文件格式,它保存了网络中每个节点的权重和偏置值。 函数的返回值是一个cv2.dnn.Net对象,即OpenCV中的深度学习网络类,该类封装了各种深度学习模型的构建、训练和预测方法。 在读取模型后,可以通过cv2.dnn.Net对象提供的方法行前向传播,对输入数据行推理,并得到相应的输出结果。这些方法包括setInput,forward,getLayerNames,getUnconnectedOutLayers等,分别用于设置输入数据,行前向传播,获取网络层名称和输出层索引等操作。 总之,cv2.dnn.readnetfromcaffe函数为OpenCV提供了一个便捷的方式,可以从Caffe框架中读取已经训练好的深度学习模型,并将其应用到Python中的各种应用场景中。 ### 回答3: cv2.dnn.readnetfromcaffe是OpenCV的一个函数,用于Caffe深度学习框架的模型导入到OpenCV中。Caffe是一个流行的深度学习框架,支持多种类型的神经网络架构,包括卷积神经网络、循环神经网络和深度生成模型等。 通过cv2.dnn.readnetfromcaffe函数,我们可以将Caffe模型文件(prototxt文件)和权重文件(caffemodel文件)导入到OpenCV中,创建一个DNN(深度神经网络)模型DNN模型可以在多种情况下使用,例如图像分类、目标检测、人脸识别和物体跟踪等。 使用cv2.dnn.readnetfromcaffe函数可以极大地降低开发人员的工作量,并且可以利用Caffe训练好的模型行相关任务,而不需要重新训练模型。在导入Caffe模型后,可以使用OpenCV中的其他DNN函数行网络推断和输出结果。 需要注意的是,使用cv2.dnn.readnetfromcaffe函数之前,需要安装OpenCVCaffe框架,并且需要准备好Caffe模型的prototxt文件和caffemodel文件。如不熟悉Caffe的使用可以参考Caffe官方文档和相关教程。此外,在使用OpenCVDNN模块时,需要保证OpenCV的版本高于3.3.0。 总之,cv2.dnn.readnetfromcaffe是OpenCV中一个非常有用的函数,通过它可以快速导入Caffe模型,从而使开发人员可以更加方便地行深度学习任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值