跨镜头目标融合__追踪之目标重识别研究(跨镜头目标追踪)

文章目录

      • 标题:
          • 跨镜头目标融合;目标重识别;跨镜头目标追踪;
      • 1 目的:
      • 2 实现方法/策略:
        • 2.1 目标类型+位置匹配(或考虑结合目标轨迹)
        • 2.2 目标重识别
        • 2.3 目标类型+位置匹配(轨迹)+目标重识别
      • 3 目标重识别方案
        • 3.1 facenetReID
          • 3.1.1 本地源码位置:
          • 3.1.2 训练方法:
          • 3.1.3 测试方法:
          • 3.1.4 转换为TRT模型
          • 3.1.5 部署:前处理
          • 3.1.6 部署:后处理
        • 3.2 deep-person-reid-master
          • 3.2.1 源码
          • 3.2.2 数据准备
          • 3.2.3 训练方法
          • 3.2.4 测试方法
          • 3.2.5 转换为TRT模型
          • 3.2.6 部署:前处理
          • 3.2.7 部署:后处理
        • 3.3 TransReID
        • 3.4 相关数据集
        • 3.5 其它 (Deepstream)
          • 3.5.1 官方模型
            • ResNet
          • 3.5.2 自定义模型
          • 3.5.2 自定义模型

标题:

跨镜头目标融合;目标重识别;跨镜头目标追踪;

​ 追踪之目标重识别 研究(SORT_ReID)

​ 跨镜头目标追踪(或可理解为跨镜头目标融合)

​ 采用“匈牙利”最优匹配方法,来进行多源同一目标的去重。

1 目的:

​ 为实现不同摄像机镜头下拍到的多个目标中,同一目标对应的ID相同。

2 实现方法/策略:

2.1 目标类型+位置匹配(或考虑结合目标轨迹)

​ 依据同一位置只可能存在一个目标。(缺点是由于目标位置不一定准确带来的目标错误融合)。

​ 此处难点主要有:① 不同相机源拍摄到同一目标的角度不同,根据不同源对应的经纬度标定计算目标位置存在差异。② 多辆车相邻比较近的时候,由于上述①导致的错位匹配。③ 可以考虑匈牙利最优匹配策略,理论上应该可以避免错误匹配。

2.2 目标重识别
2.3 目标类型+位置匹配(轨迹)+目标重识别

​ 考虑目标经纬度位置的时候,① 考虑目标连续多帧的经纬度轨迹。②考虑目标下边沿角点对应的经纬度值和目标中心点对应的经纬度值。

3 目标重识别方案

3.1 facenetReID

[ref: ] https://github.com/bubbliiiing/facenet-pytorch/tree/bilibili

3.1.1 本地源码位置:
D:\____SORT\_LL_facenet_pytorch_ReID
进入目录 _LL_facenet_pytorch_ReID 中
百度网盘链接:https://pan.baidu.com/s/1K_eVgT8yHrYhF48rQiigGA 
3.1.2 训练方法:
  1. 准备训练数据集,训练数据集格式如下:
|-datasets|-car0001|-0001.jpg|-0002.jpg|-car0002|-0005.jpg|-0006.jpg|-...
  1. 准备验证数据集,验证数据集存放在目录文件夹 lfw 中。

  2. 在训练前利用txt_annotation.py文件生成对应的cls_train.txt。

  3. 利用train.py训练facenet模型,训练前,根据自己的需要选择backbone,model_path和backbone一定要对应。

  4. 运行train.py即可开始训练。

  5. 评估模型

① 将评估用的数据集放在根目录文件夹 lfw 中。

② 在eval_LFW.py设置使用的主干特征提取网络和网络权值。

③ 运行eval_LFW.py来进行模型准确率评估。

3.1.3 测试方法:

​ 使用自己训练的权重测试,自己训练的权重存放在./model_path路径下。

  1. 先修改facenet.py中的内容,包括 model_path 和 backbone 使其对应训练好的文件。

  2. 运行predict.py,根据提示并输入示例如下:

Input image_1 filename: img\1_001.jpg
Input image_2 filename: img\1_002.jpg
  1. 然后会输出两张图片的相似度距离和效果对比图。源自facenet.py中如下源码:
#  图片传入网络进行预测
output1 = self.net(photo_1).cpu().numpy()
output2 = self.net(photo_2).cpu().numpy()
#   计算二者之间的距离
l1 = np.linalg.norm(output1 - output2, axis=1)plt.subplot(1, 2, 1)
plt.imshow(np.array(image_1))plt.subplot(1, 2, 2)
plt.imshow(np.array(image_2))
plt.text(-12, -12, 'Distance:%.3f' % l1, ha='center', va= 'bottom',fontsize=11)
plt.show()
3.1.4 转换为TRT模型

1 训练后生成的模型为 .pth 的文件。

2 pth 转为 onnx 模型。

3 onnx 转为 .trt 或 .engine 文件。

3.1.5 部署:前处理
3.1.6 部署:后处理
3.2 deep-person-reid-master
3.2.1 源码

如下内容来自源码:README.rst文件

​ Code: https://github.com/KaiyangZhou/deep-person-reid.

​ Documentation: https://kaiyangzhou.github.io/deep-person-reid/.

​ How-to instructions: https://kaiyangzhou.github.io/deep-person-reid/user_guide.

​ Model zoo: https://kaiyangzhou.github.io/deep-person-reid/MODEL_ZOO.

​ Tech report: https://arxiv.org/abs/1910.10093.

3.2.2 数据准备
  1. 准备训练数据集,数据仿照VeRI-Wild的数据格式,训练数据集格式如下:
|-VeRI-Wild|-iamges|-0000_c1_0000.jpg|-0000_c1_0002.jpg|-0000_c2_0003.jpg|-0000_c2_0004.jpg|-0001_c1_0005.jpg|-0001_c1_0006.jpg|-... ...|-train_test_split|-test_10000_id_query.txt|-test_10000_id.txt  |-train_list.txt

​ 上述数据集中,图片命名规则为:【类别ID _ 相机ID _ 图片ID.jpg】,这里的类别ID可以认为是同一时刻的同一辆车作为一个类别(作为同一时刻不同相机的目标检测融合来说)【或者将不同时刻同一辆车认为是一个类别(作为同一目标的重识别来讲)】。

  1. 准备好数据集,可以看出,上述数据集树包含【images】文件夹存放所有图片,包含【train_test_split】文件夹,其中包含的txt文件为对【images】文件夹中各个文件的划分。划分依据源码如下:

    def getimgpath2txt():import ospath = '../VeRI-Wild/images/'pathtxt = '../VeRI-Wild/train_test_split/train_list.txt'files = os.listdir(path)vcls, vclsid = {}, 0  # videoCLSccls, cclsid = {'211': 1, '216': 2, '203': 3, '207': 4}, 1  # CameraCLStxtPaths = []for fp in files:# if dirif os.path.isdir(os.path.join(path, fp)):pass# if fileelse:ffname = os.path.join(path, fp)# print(ffname, 'is a file')if fp[:9] not in vcls:  # fp[:9] is cls vcls[fp[:9]] = vclsidvclsid += 1if fp[11:14] not in ccls:  # fp[11:14] is camera ip,for example 211, 216...ccls[fp[11:14]] = cclsidcclsid += 1if fp[11:14] == '03_':print(fp)# txtPath bao han [img path, img cls ID, camera cls ID]zu cheng de stringtxtPath = ffname + ' ' + str(vcls[fp[:9]]) + ' '+ str(ccls[fp[11:14]]) + '\n'txtPaths.append(txtPath)print(ccls)print(vcls)# break# xie wen jiantxtPaths[-1] = txtPaths[-1].replace('\n', '')with open(pathtxt, 'w', encoding='utf-8') as wf:wf.writelines(txtPaths)if __name__ == '__main__':getimgpath2txt()
    
  2. 上述的图片也可以放到三个个文件夹【train】【test】【querry】区分。只要在【train_test_split】文件夹中的txt文件内容对应上述3个文件夹的文件即可

3.2.3 训练方法

train.sh

# train.sh
# MyTrain
python scripts/main.py --config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml  -s VeRI-Wild -t VeRI-Wild --transforms random_flip random_erase  --root ../MyTrain/   data.save_dir log/osnet_x1_0_VeRI-Wild_softmax_cosinelr

【问题1】

​ 使用’‘sh train.sh’'运行程序的时候,由于保存的txt文件的图片路径是绝对路径,所以在源码遍历图片后,提示train的数据为[]。故需要修改源码读取train_list.txt文件后关于数据的部分。这个位置根据源码修改即可

sh train.sh
    上述修改源码: File "/home/user/anaconda3/envs/torchreid/lib/python3.7/site-packages/torchreid-1.4.0-py3.7-linux-x86_64.egg/torchreid/data/datasets/image/veriwild.py"中的内容。增加下图中框中的两行即可(上述问题是由于源码中get数据集的路径是相对路径造成的)

在这里插入图片描述

【训练记录】

由于我本地的数据比较少,所以没有【querry】的图片,而是将“test_10000_id_query.txt”和“test_10000_id.txt ”的内容是一样的。如下图可看出
在这里插入图片描述

​ 程序正常跑起来了,会打印一些配置相关的信息。程序结束会通过使用【querry】集测试:
在这里插入图片描述

3.2.4 测试方法
3.2.5 转换为TRT模型

1 训练后生成的模型为 .pth 的文件。

2 pth 转为 onnx 模型。

3 onnx 转为 .trt 或 .engine 文件。

3.2.6 部署:前处理
3.2.7 部署:后处理
3.3 TransReID

[ref: ] https://github.com/damo-cv/TransReID [ICCV-2021]

​ //

3.4 相关数据集

​ 如下两个数据集DOWNLOAD中提示,都是需要发邮件到某网址方可申请下载该数据集,不是很方便。

1 VeRidataset:https://github.com/JDAI-CV/VeRidataset

2 PKU VehicleID:https://www.pkuml.org/resources/pku-vehicleid.html)

3.5 其它 (Deepstream)

NvDeepSORT Tracker Re-ID模型

3.5.1 官方模型

​ Deepstream中NvDeepSORT Tracker模块里官方的Re-ID模型是在MARS数据集上训练的10层ResNet网络。

ref: https://zhuanlan.zhihu.com/p/518545684

ResNet

ref: https://blog.csdn.net/u013181595/article/details/80990930

ResNet模型简介:

ResNet源码涉及:

ResNet所得:

3.5.2 自定义模型

​ 也可以使用自定义的Re-ID模型。只要它是UFF格式,并且每个对象的网络输出是L2范数的单个向量。然后基于余弦度量计算Re-ID相似性得分,并以与官方模型相同的方式用于执行数据关联。步骤如下:

1. 使用TensorFlow或PyTorch等深度学习框架训练Re-ID网络。
2. 确保TensorRT支持网络层,并将模型转换为UFF格式。仍然支持混合精度推理,并且INT8模式需要校准缓存。
3. 根据自定义模型的属性,在跟踪器配置文件中指定以下参数。然后使用新的Re-ID模型运行DeepStream SDK。

esNet所得:

3.5.2 自定义模型

​ 也可以使用自定义的Re-ID模型。只要它是UFF格式,并且每个对象的网络输出是L2范数的单个向量。然后基于余弦度量计算Re-ID相似性得分,并以与官方模型相同的方式用于执行数据关联。步骤如下:

1. 使用TensorFlow或PyTorch等深度学习框架训练Re-ID网络。
2. 确保TensorRT支持网络层,并将模型转换为UFF格式。仍然支持混合精度推理,并且INT8模式需要校准缓存。
3. 根据自定义模型的属性,在跟踪器配置文件中指定以下参数。然后使用新的Re-ID模型运行DeepStream SDK。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/187839.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14 # 手写 debounce 防抖方法

什么是防抖 防抖: n 秒后再去执行该事件,若在 n 秒内被重复触发,则重新计时,这个效果跟英雄联盟里的回城技能差不多。 本质上是优化高频率执行代码的一种手段,目的就是降低回调执行频率、节省计算资源。 应用场景: …

使用 huggingface_hub 镜像下载 大模型

download.py 👇 import os # 配置 hf镜像 os.environ[HF_ENDPOINT] https://hf-mirror.com# 设置保存的路径 local_dir "XXXXXX"# 设置仓库id model_id "sensenova/piccolo-large-zh"cmd f"huggingface-cli download --resume-downlo…

Python 列表元素里面含有字典或者列表进行排序

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 示例1:列表里面含有列表进行排序 s [[1, 2], [100, 2], [33, 3], [25, 6]] s.sort(keylambda k: k[0]) print(s)结果: [[1, 2], [25, 6], [33, 3…

C++动态库

C动态库 动态库文件(Dynamic Link Library,DLL)是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本:VS2017 编程语言:C 2 功能介绍 使用VS2017项目模板创建C动态库生成…

ARM 基础学习记录 / ARM 裸机编程

汇编程序调用 C 程序详情 在 C 程序和 ARM 汇编程序之间相互调用时必须遵守 ATPCS 规则,其是基于 ARM 指令集和 THUMB 指令集过程调用的规范,规定了调用函数如何传递参数,被调用函数如何获取参数,以何种方式传递函数返回值。 寄存…

为什么要做MBTI职业性格测试?

MBTI职业性格测试是一种成熟的人格测评工具,基于荣格理论发展而来,将人的性格分为16种类型,或内向。或外向,或注重情感,或注重感知。 每种性格各有长处和不足,通过应用mbti职业性格测试,可以方…

暖手宝+充电宝设计方案 可实现快速升温和充电 低成本充电电流可选

充电暖手宝因为它的便携性,既能供暖又能当充电宝使用而备受人们喜爱。是冬天暖手供暖的必备神器。 目前,市场常见的暖手宝大致有三个类型,分别是加热水的热水袋、通过化学反应放热的铁粉袋子和锂电供电的智能暖手宝。与常见的暖手宝不同&…

设计模式之组合模式-创建层次化的对象结构

目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获(❀❀) 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式,它允许将对象组合成树形结…

jbase代码生成器(成型篇)

上一篇说到通用码表可以解决百分之八十的基础维护功能,剩下的百分二十的需要级联维护的界面可以用代码生成器生成代码,基于生成的代码拷贝再组装界面,来解决这百分之二十的工作量里的百分之八十工作量。 首先实现代码生成器 Class Jbase.Ma…

宠物社区系统宠物领养小程序,宠物救助小程序系统多少钱?

当前很多的宠物被抛弃和虐杀,它们没有选择权,我们强制性的把狗带进人类的生活中,然后又无情的抛弃,让它们无家可归,变成流浪狗,它们做错了什么?流浪动物被主人遗弃之后居无定所,时刻…

Pytorch R-CNN目标检测-汽车car

概述 目标检测(Object Detection)就是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,通俗点说就是给定一张图片要精确的定位到物体所在位置,并完成对物体类别的识别。其准确性和实时性是整个系统的一项重要能力。 R-CNN的全称是Region-CNN(区域卷积神经…

Linux是什么,Linux系统介绍

很多小伙伴都不是那么了解和知道Linux,到底Linux是什么? 像大家用到的安卓手机,生活中用到的各种智能设备,比如路由器,光猫,智能家具等,很多都是在Linux操作系统上。 Linux是什么?Li…

基于轻量级卷积神经网络CNN开发构建打架斗殴识别分析系统

在很多公共场合中,因为一些不可控因素导致最终爆发打架斗殴或者大规则冲突事件的案例层出不穷,基于视频监控等技术手段智能自动化地识别出已有或者潜在的危险行为对于维护公共场合的安全稳定有着重要的意义。本文的核心目的就是想要基于CNN模型来尝试开发…

AI:74-基于深度学习的宠物品种识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

视频编软件会声会影2024中文版功能介绍

会声会影2024中文版是一款加拿大公司Corel发布的视频编软件。会声会影2024官方版支持视频合并、剪辑、屏幕录制、光盘制作、添加特效、字幕和配音等功能,用户可以快速上手。会声会影2024软件还包含了视频教学以及模板素材,让用户剪辑视频更加的轻松。 会…

LeetCode(2)移除元素【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 27. 移除元素 1.题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原…

赛宁网安入选国家工业信息安全漏洞库(CICSVD)2023年度技术组成员单

近日,由国家工业信息安全发展研究中心、工业信息安全产业发展联盟主办的“2023工业信息安全大会”在北京成功举行。 会上,国家工业信息安全发展研究中心对为国家工业信息安全漏洞库(CICSVD)提供技术支持的单位授牌表彰。北京赛宁…

安装dubbo-admin报错node版本和test错误

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :dubbo-admin安装 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台&#xff0…

一文入门Springboot+actuator+Prometheus+Grafana

环境介绍 技术栈 springbootmybatis-plusmysqloracleactuatorPrometheusGrafana 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 本地主机应用 192.168.1.9:8007 PrometheusGrafana安装在同一台主机 http://…

【Spring之底层核心架构概念解析】

文章目录 一、BeanDefinition二、BeanDefinitionReader2.1、AnnotatedBeanDefinitionReader2.2、XmlBeanDefinitionReader 五、ClassPathBeanDefinitionScanner六、BeanFactory七、ApplicationContext7.1、AnnotationConfigApplicationContext7.2、ClassPathXmlApplicationCont…