人体检测、跟踪实例 | 附代码

人体检测和跟踪是一项基本的计算机视觉任务,涉及在给定场景中识别并跟踪个体的移动。这项技术在各种实际应用中发挥着关键作用,从监视和安全到自动驾驶车辆和人机交互都有涉及。人体检测的主要目标是在图像或视频帧中定位和分类人体,而跟踪侧重于在这些个体在不同帧之间移动时保持连续性,以便进行监测和分析。

本教程分为三个部分,旨在指导您创建自己的人体检测和跟踪系统。它利用了YOLOv8检测算法和多种跟踪方法。检测模型经过精心训练,使用了HumanCrowd(HC)数据集和多目标跟踪(MOT)数据集。在本文中,我们将带领您完成为此项目准备数据的过程。

为了开发和评估人体检测和跟踪算法,研究人员和从业者通常依赖于提供各种真实场景和挑战的大型数据集。在这一领域中两个显著的数据集是CrowdHuman和多目标跟踪(MOT)数据集。

CrowdHuman数据集:CrowdHuman是一个广泛使用的人体检测数据集。它包含超过15,000张带有人体实例注释的图像。CrowdHuman的独特之处在于其多样性,包括拥挤的场景、遮挡以及各种姿势和尺度。该数据集共包括15,000张图像,分为4,370张用于验证和5,000张用于测试,以及训练集。CrowdHuman的注释详尽,并涵盖了各种场景。

bb0e3c55031e4b52acc043cc4eaabcad.jpeg

CrowdHuman数据集包含每个人的全身、可见身体和头部边界框注释的基准数据

在该数据集中,训练和验证子集中的个体人数总计达到惊人的470,000,每张图像平均有22.6名行人。此外,提供了详细的注释,包括可见区域的边界框、头部区域的边界框以及全身注释,确保了对人体检测研究而言是一种全面且宝贵的资源。数据首先使用以下代码转换为COCO格式:

def crowdhuman_to_coco(DATA_PATH, OUT_PATH, SPLITS= ['val', 'train'], DEBUG=False):
    if OUT_PATH is None:
        OUT_PATH = DATA_PATH + 'annotations/'


    if not os.path.exists(OUT_PATH):
        os.makedirs(OUT_PATH, exist_ok=True)
    for split in SPLITS:
        data_path = DATA_PATH + split
        out_path = OUT_PATH + '{}.json'.format(split)
        out = {'images': [], 'annotations': [], 'categories': [{'id': 1, 'name': 'person'}]}
        ann_path = DATA_PATH + 'annotation_{}.odgt'.format(split)
        anns_data = load_func(ann_path)
        image_cnt = 0
        ann_cnt = 0
        video_cnt = 0
        for ann_data in tqdm(anns_data):
            image_cnt += 1
            file_path = DATA_PATH + split + '/Images/{}.jpg'.format(ann_data['ID'])
            assert os.path.isfile(file_path)
            im = Image.open(file_path)
            image_info = {'file_name': 'Images/{}.jpg'.format(ann_data['ID']),
                          'id': image_cnt,
                          'height': im.size[1],
                          'width': im.size[0]}
            out['images'].append(image_info)
            if split != 'test':
                anns = ann_data['gtboxes']
                for i in range(len(anns)):
                    if anns[i]['tag'] == 'mask':
                        continue  # ignore non-human
                    assert anns[i]['tag'] == 'person'
                    ann_cnt += 1
                    fbox = anns[i]['fbox']  # fbox means full body box
                    ann = {'id': ann_cnt,
                         'category_id': 1,
                         'image_id': image_cnt,
                         'track_id': -1,
                         'bbox_vis': anns[i]['vbox'],
                         'bbox': fbox,
                         'area': fbox[2] * fbox[3],
                         'iscrowd': 1 if 'extra' in anns[i] and \
                                         'ignore' in anns[i]['extra'] and \
                                         anns[i]['extra']['ignore'] == 1 else 0}
                    out['annotations'].append(ann)
        print('loaded {} for {} images and {} samples'.format(split, len(out['images']), len(out['annotations'])))
        json.dump(out, open(out_path, 'w'))

在这里,我们只考虑人类类别并忽略头部位置的边界框。

多目标跟踪(MOT)数据集:

另一方面,MOT数据集专门设计用于人体跟踪任务。这些数据集包含视频序列,并提供了关于在帧之间移动的个体人的跟踪注释。MOT数据集对于评估跟踪算法的稳健性和准确性至关重要,因为它们提供了地面实况数据,以衡量算法在长时间内能够一致地跟踪和识别个体的能力。著名的MOT数据集包括MOT17和MOT20,每个都包含各种具有挑战性的场景,使其对跟踪研究至关重要。

COCO(上下文中的通用对象)格式数据集和YOLO(You Only Look Once)格式数据集是用于目标检测和图像识别任务的两种广泛使用的数据格式,各自具有其特定的结构和目的。以下是每种格式的概述:

COCO格式数据集:

{
 "images": [{
  "file_name": "000001.jpg",
  "height": 500,
  "width": 353,
  "id": 1
 }, {
  ...
 }, {
  "file_name": "009962.jpg",
  "height": 375,
  "width": 500,
  "id": 9962
 }, {
  "file_name": "009963.jpg",
  "height": 500,
  "width": 374,
  "id": 9963
 }],
 "type": "instances",
 "annotations": [{
  "segmentation": [
   [47, 239, 47, 371, 195, 371, 195, 239]
  ],
  "area": 19536,
  "iscrowd": 0,
  "image_id": 1,
  "bbox": [47, 239, 148, 132],
  "category_id": 12,
  "id": 1,
  "ignore": 0
 }, {
  "segmentation": [
   [138, 199, 138, 301, 207, 301, 207, 199]
  ],
  "area": 7038,
  "iscrowd": 0,
  "image_id": 2,
  "bbox": [138, 199, 69, 102],
  "category_id": 19,
  "id": 3,
  "ignore": 0
 }, {
 ...
 }, {
  "segmentation": [
   [1, 2, 1, 500, 374, 500, 374, 2]
  ],
  "area": 185754,
  "iscrowd": 0,
  "image_id": 9963,
  "bbox": [1, 2, 373, 498],
  "category_id": 7,
  "id": 14976,
  "ignore": 0
 }],
 "categories": [{
  "supercategory": "none",
  "id": 1,
  "name": "aeroplane"
 }, {
  "supercategory": "none",
  "id": 2,
  "name": "bicycle"
 }, {
  "supercategory": "none",
  "id": 3,
  "name": "bird"
 }, {
  "supercategory": "none",
  "id": 4,
  "name": "boat"
 }, {
 ...
 }, {
  "supercategory": "none",
  "id": 19,
  "name": "train"
 }, {
  "supercategory": "none",
  "id": 20,
  "name": "tvmonitor"
 }]
}

注释结构:COCO数据集格式以其结构化和全面的注释而闻名。数据集中的每个图像都与一个包含有关图像中存在的对象的信息的JSON文件相关联。注释通常包括对象类别、边界框坐标、分割掩膜以及姿势估计的关键点等详细信息。COCO还支持关键点检测、对象关系等方面的注释。

YOLO(You Only Look Once)格式数据集:

注释结构:YOLO格式数据集专门设计用于目标检测任务。YOLO的注释通常存储在与每个图像相关联的文本文件中,与COCO相比,其格式更简单。文件夹结构定义如下:

40d6c3e4e2da22815d0a6ecc73ffe995.jpeg

在“Label”文件夹中,有一些与“Image”文件夹中的图像名称相似的文本文件。在每个文本文件中,YOLO格式提供了有关图像中每个对象的详细信息,如对象类别和边界框的坐标(class_id、中心 x、中心 y、宽度和高度),这些坐标是相对于图像尺寸进行标准化的。

由于每个数据集都有其自己的格式,在这系列教程中,我首先将所有数据合并到COCO格式,然后再转换为YOLO格式来训练检测模型。一个从COCO转换为YOLO的示例可以查看代码:https://github.com/vankhoa21991/human_dettrack/blob/dev/datasets/coco_to_yolo.py

·  END  ·

HAPPY LIFE

a71bb4f294ffde2ab417d6e1fc0ccaab.png

本文仅供学习交流使用,如有侵权请联系作者删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KVM 自动化脚本使用方法

一、介绍 目录结构介绍 [rootkvm-server kvm]# tree -L 2 . ├── control # 控制脚本目录 │ ├── KVMInstall.sh # kvm服务安装脚本 │ ├── VMHost.sh # kvm虚拟机克隆脚本 │ └── VMTemplate.sh # kvm模板机安装脚本 ├── mount # 此目录保持为空&…

代码随想录刷题笔记(DAY1)

前言:因为学校的算法考试让我认识了卡哥,为了下学期冲击大厂实习的理想,我加入了卡哥的算法训练营,从今天开始我每天会更新自己的刷题笔记,与大家一起打卡,一起共勉! Day 1 01. 二分查找 &…

科研学习|论文解读——融合类目偏好和数据场聚类的协同过滤推荐算法研究

论文链接(中国知网): 融合类目偏好和数据场聚类的协同过滤推荐算法研究 - 中国知网 (cnki.net) 摘要:[目的/意义]基于近邻用户的协同过滤推荐作为推荐系统应用最广泛的算法之一,受数据稀疏和计算可扩展问题影响&#x…

时序预测 | Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测

时序预测 | Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测 目录 时序预测 | Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序…

RK3568平台(中断篇) 中断的基本概念

一.中断的基本概念 中断是操作系统中至关重要的机制,它能够显著提高系统的响应性能和并发处理能力。 中断是指在 CPU 正常运行期间,由外部或内部事件引起的一种机制。当中断发生时,CPU会停止当前正在执行的程序,并转而执行触发该…

Sql 动态行转列

SELECT ID, Name, [Month],auth FROM dbo.Test3 数据列表: 1.静态行专列 Select auth, MAX( CASE WHEN [Month] 一月 then Name else null end) 一月, MAX( CASE WHEN [Month] 二月 then Name else null end) 二月, MAX( CASE WHEN…

智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,GB28181视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流&#xff0c…

对于c++的总结与思考

笔者觉得好用的学习方法:模板法 1.采用原因:由于刚从c语言面向过程的学习中解脱出来,立即把思路从面向过程转到面向对象肯定不现实,加之全新的复杂语法与操作,着实给新手学习这门语言带来了不小的困难。所以&#xff…

JavaScript 工具库 | PrefixFree给CSS自动添加浏览器前缀

新版的CSS拥有多个新属性,而标准有没有统一,有的浏览器厂商为了吸引更多的开发者和用户,已经加入了最新的CSS属性支持,这其中包含了很多炫酷的功能,但是我们在使用的时候,不得不在属性前面添加这些浏览器的…

获取Android和iOS崩溃日志的方法

文章目录 一、Android崩溃日志1、获取方法1.1 通过adb logcat获取1.2 通过adb shell dumpsys dropbox命令获取 2、导出设备Crash日志3、导出设备ANR日志4、常见日志类别 二、iOS崩溃日志1、获取方法1.1 xcode中打开1.2 手机上直接获取 2、Crash 头部信息 一、Android崩溃日志 …

视频格式网络地址转换视频到本地,获取封面、时长,其他格式转换成mp4

使用ffmpeg软件转换网络视频,先从官网下载对应操作系统环境的包 注意:网络地址需要是视频格式结尾,例如.mp4,.flv 等 官网地址:Download FFmpeg window包: linux包: 如果下载缓慢,下载迅雷安装使用…

干掉程序员饭碗的会是 AI 吗?

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助,请关注我,一起向上进击。 创作不易,希望大家给一点鼓励,把公众号设置为…

0.1+0.2≠0.3,揭秘Python自带的Bug

朋友们,问一个简单的问题:0.10.2? 你肯定会说:中国人不骗中国人,0.10.20.3。 但是在Python里,0.10.2≠0.3 ,我们今天一起来看看这个,并且看一下解决办法。 离奇的错误 在python里…

【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇

文章目录 📝前言🌠什么是位段?🌉 位段的内存分配🌉VS怎么开辟位段空间呢?🌉位段的跨平台问题🌠 位段的应⽤🌠位段使⽤的注意事项🚩总结 📝前言 本…

内网离线搭建之----kafka-manager集群监控

工具介绍: 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager。 这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况…

mfc140u.dll丢失的解决方法,怎样修复mfc140u.dll

最近看到很多朋友在问找不到mfc140u.dll丢失怎么办?有什么解决方法,今天就给小伙伴们解答一下,mfc140u.dll丢失的解决办法,怎么修复mfc140u.dll。 一.丢失的原因 1.损坏的程序安装:在安装某个程序时,可能会出现意外中…

Python算法例30 统计前面比自己小的数

1. 问题描述 给定一个整数数组(数组大小为n,元素的取值范围为0~10000),对于数组中的每个元素,计算其前面元素中比它小的元素数量。 2. 问题示例 对于数组[1,2,7,8,5]&…

Oracle database 静默安装 oracle12c 一键安装 12.1.0.2

基于oracle安装包中应答文件实现一键安装 注意此安装脚本基于12.1.0.2 安装包 原始安装包结构为两个压缩包 此脚本使用安装包为原始压缩包解压后、 重新封装为一个.zip压缩包 建议在linux 环境下解压重新压缩后 使用该脚本 支持环境: Linux :centerOS 7 oracle :12.1.0.…

Android原生实现分段选择

六年前写的一个控件,一直没有时间总结,趁年底不怎么忙,整理一下之前写过的组件。供大家一起参考学习。废话不多说,先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…

Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API

笔者曾经写过 ChatGPT OpenAI API请求限制 尝试解决 Account deactivated. Please contact us through our help center at help.openai.com if you need assistance. 结果如何? 没有啥用。目前发现一条曲线救国的方案。 1. 在官方 openai 库中使用 此处为最新Op…