半自动的行人重识别数据标注算法Tracking + infomap

2023-11-07 19:40

本文主要是介绍半自动的行人重识别数据标注算法Tracking + infomap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Fast-ReID系列文章目录

文章目录

  • Fast-ReID系列文章目录
  • 前言
  • 一、行人截取
  • 二、行人聚类
    • 聚类优化


前言

本人做行人重识别工程的数据准备过程。借鉴人脸的数据聚类清洗方法实现半自动行人重识别数据标注。

一、行人截取

使用行人跟踪算法,讲视频中行人截取出来: 使用yolov5 + deepsort 实现行人跟踪参考此方法Yolov5_DeepSort GitHub,并稍作修改以过滤掉不完整和太小的行人
1. 限制检测到行人的长宽比例和大小

w = x2 - x1
h = y2 - y1
person_rate = h / w
if person_rate > 2.1 and w > 96 and h > 128:# print(person_rate)if frame_rate % 5 != 0:continuecv2.imwrite(os.path.join(save_path, '{}{}{}{}{}{}'.format(str(id).zfill(4), '_c2-', video_name, '_', str(person_num), '.jpg')), img[y1:y2, x1:x2])

2. 跳帧截取

if frame_rate % 25 != 0:continue

3. 调整行人置信度过滤

parser.add_argument('--conf-thres', type=float, default=0.65, help='object confidence threshold')
parser.add_argument('--iou-thres', type=float, default=0.85, help='IOU threshold for NMS')

4. 通过以上方法再加上人工过滤,就能获得做了部分标注的行人重识别数据集了:
0002:行人ID, c1-1:摄像头号,98:该id下行人图片序号
在这里插入图片描述
但是我们知道跟踪算法很容易出现id切换,就会出现一个视频同一行人有多个ID。那么这时如果人工做去重的话就效率很低,可以借鉴人脸聚类的方法实现行人聚类。

二、行人聚类

人脸聚类方法文章
GitHub
对于给定的大量待聚类行人图片,找一个用开源数据训练的reid模型,本人使用得是用fastreid训练的模型,利用reid特征抽取组件(reid_feature_extract)进行行人特征抽取,并对用抽取的行人特征进行人脸聚类并进行图片归档。
main.py代码如下(示例):

extract_features = torch.nn.functional.normalize(query_feats, dim=1, p=2).data.cpu().numpy()            #替换成行人特征提取
print('features:', extract_features.shape)    # (N, 2048) N:图片数量
with Timer('All Steps'):global argsargs = parser.parse_args()label_path = Nonepred_label_path = None# with Timer('Extract Feature'):   注释掉人脸特征提取#     extract_features = extract_fature(args)   if eval(args.is_evaluate):args.label_path = 'data/tmp/test.meta'if not eval(args.is_cuda):args.knn_method = 'faiss-cpu'with Timer('Face Cluster'):cluster_main(args, extract_features)

face_cluster_by_infomap.py代码如下(示例):

def get_dist_nbr(features, args):# features = np.fromfile(feature_path, dtype=np.float32)# features = features.reshape(-1, 256)  features = features.reshape(-1, 2048)  #修改 行人输出2048维特征features = l2norm(features)index = knn_faiss(feats=features, k=args.k, knn_method=args.knn_method)knns = index.get_knns()dists, nbrs = knns2ordered_nbrs(knns)return dists, nbrs

最后生成如图所示,每个文件夹下保存不同时段不同角度的行人图片,一个文件夹对应一个ID,最后在进行人工筛选。
在这里插入图片描述

聚类优化

reid模型和聚类算法并不能做到完全准确,需要不断的优化reid模型对我们视频场景的泛化能力和调整聚类算法的参数,经过几次迭代后提升聚类准确度。

parser.add_argument('--k', default=80, type=int)
parser.add_argument('--min_sim', default=0.5, type=float)

这篇关于半自动的行人重识别数据标注算法Tracking + infomap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365863

相关文章

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装