《JOINT MULTI-VIEW PEOPLE TRACKING AND POSE ESTIMATION FOR 3D SCENE RECONSTRUCTION》阅读笔记

提出一种结合多目标跟踪与3D人体姿态估计的离线MOT方法,旨在理解和重建3D视频场景。该方法从单视图提取轨迹,关联不同视点跟踪,反馈姿态估计增强Tracklet关联,经实验验证有效。

有一段时间没更了,最近在忙着coding,没有好好作整理。往后会更新几篇论文阅读。
《JOINT MULTI-VIEW PEOPLE TRACKING AND POSE ESTIMATION FOR 3D SCENE RECONSTRUCTION》是华盛顿大学唐正的文章,发表于2018年,讲的是一个离线的MOT方法。
在这里插入图片描述

摘要:

监视视频中数据分析的目的是充分理解和重建3D场景,即恢复每个对象的轨迹和动作. 在具有重叠视点的多摄像机监控系统中,我们提出了一种新的视频场景重建框架,用于协同跟踪多个人体物体并估计其三维姿态。首先,根据tracking-by-detection模式,从每个单视图中提取轨迹。我们提出一种有效集成视觉和语义目标属性的方法,即外观模型、几何信息和姿态/动作,以关联不同视图的跟踪。基于从追踪导出的最佳视角,引入人体姿态的分层估计,以生成每个对象的3D骨架。将估计的身体关节点再反馈到追踪阶段以增强Tracklet之间的关联。通过对多视点跟踪和三维姿态估计基准的实验,验证了该方法的有效性。

第一章 介绍

1. 视频分析在这一研究领域中,主要应用的最终目的是充分理解和重建三维空间中的视频场景。不但要进行多目标识别和轨迹跟踪,还要准确地评估他们的姿态。
2. 尽管有了许多的研究,但是依然存在一些问题。一个是在多人遮挡的场景中,ID会经常变换。此外,同一对象在不同的视点上可能会有很大的外观变化。最后,(ground plane estimation)地面建模中常见的不精确性会导致位置坐标方面的错误,特别是对于视频场景中距离镜头较远的目标。
3. 多视点三维姿态估计为许多有用的应用(如动作识别)提供了信息丰富和视图不变的特征。(利用3D姿态估计作行为识别)主要的挑战是,由于深度信息的丢失和频繁的(自)遮挡,问题的约束性不足。
4. 本文提出了一种多视点多目标跟踪与三维人体姿态估计相结合的场景重建方法。对于初始化,我们遵循跟踪检测模式来生成轨迹,这是一系列人的包围盒,按时空一致性和感知相似性对Bbox进行分组。匹配算法是包括一个用于双向外观比较的基于像素的自适应模型和一个基于深度和可见性加权的几何邻近测量。我们还使用来自姿态估计阶段的反馈来引入显式动作描述符。利用多视点跟踪中的几何信息,选择层次式三维姿态估计的最优视点,其中,肢体位姿估计是将肘部和手腕的再投影误差降到最小。
5. 贡献有两方面:多摄像头数据融合采用了视觉属性和语义属性的新表示,这是一个能量最小化(energy minimization)问题。其次,我们提出了一种层次化的姿态估计模型,该模型通过最小化再投影误差来求解肢体位姿估计问题。

第三章 方法

  1. 先使用目标检测器对每一帧进行检测,然后用卡尔曼滤波将Bbox链接成轨迹片段。具体分段的依据是,当(1)从帧边界退出时, (2)被遮挡,或者(3)卡尔曼预测值超过距离最近的Bbox一米的位置也会被分段(即开启新的轨迹)。所有相机都是基于一组2D轨迹[17]进行自校准,并根据一些共享的参考点转换成一个全局坐标系。
    (后面的部分写完在另一台电脑上,被我不小心覆盖写删了,我好气呀,有时间再补吧)
<think>我们已知当前安装的Ultralytics版本是8.3.208。在这个版本中,YOLO模型的使用方式与之前版本相比可能有一些变化。以下是如何查看已安装的Ultralytics版本以及可用的YOLO模型的方法。 ### 查看Ultralytics版本 在Python环境中,可以通过以下代码查看已安装的ultralytics版本: ```python import ultralytics print(ultralytics.__version__) ``` ### 查看可用的YOLO模型 在Ultralytics框架中,预训练的YOLO模型有多种类型(检测、分割、分类、姿态估计)和不同尺寸(n, s, m, l, x)。官方提供的预训练模型名称如下: - 检测:'yolov8n.pt', 'yolov8s.pt', 'yolov8m.pt', 'yolov8l.pt', 'yolov8x.pt' - 分割:'yolov8n-seg.pt', 'yolov8s-seg.pt', 'yolov8m-seg.pt', 'yolov8l-seg.pt', 'yolov8x-seg.pt' - 分类:'yolov8n-cls.pt', 'yolov8s-cls.pt', 'yolov8m-cls.pt', 'yolov8l-cls.pt', 'yolov8x-cls.pt' - 姿态估计:'yolov8n-pose.pt', 'yolov8s-pose.pt', 'yolov8m-pose.pt', 'yolov8l-pose.pt', 'yolov8x-pose.pt' 另外,Ultralytics还支持从本地文件加载模型,或者从远程仓库(如GitHub或Hugging Face Hub)加载。 但是,请注意,官方并没有提供一个直接的函数来列出所有可用的预训练模型名称(因为模型种类和名称相对固定)。通常,用户直接使用这些已知的模型名称即可。 ### 如何查看本地已下载的模型 Ultralytics下载的模型默认存放在用户的缓存目录中,可以通过以下代码查看本地已下载的模型: ```python from pathlib import Path def list_downloaded_models(): cache_dir = Path.home() / '.cache' / 'ultralytics' models = list(cache_dir.glob('**/*.pt')) return [model.name for model in models] if __name__ == '__main__': downloaded_models = list_downloaded_models() print("本地已下载的模型:") for model in downloaded_models: print(model) ``` ### 如何获取官方预训练模型列表 虽然不能直接通过代码获取官方所有预训练模型名称(因为官方没有提供这样的API),但是我们可以根据命名规则生成一个列表: ```python def official_models(): sizes = ['n', 's', 'm', 'l', 'x'] tasks = ['', '-seg', '-cls', '-pose'] models = [] for size in sizes: for task in tasks: models.append(f'yolov8{size}{task}.pt') return models print("官方预训练模型:") for model in official_models(): print(model) ``` ### 使用建议 - 当使用`YOLO(model_name)`时,如果模型不在本地缓存中,Ultralytics会自动下载该模型。 - 可以通过传递完整的URL或者本地路径来加载自定义模型。 ### 注意事项 - 在离线环境中,只能使用已经下载到缓存中的模型。 §§相关问题§§: 1. 如何更改Ultralytics模型下载的缓存目录? 2. 如何在不联网的情况下使用Ultralytics预训练模型? 3. 如何将Ultralytics模型导出为ONNX格式? 4. 如何在使用YOLO模型进行预测时设置置信度阈值? </think>### 查看 Ultralytics 版本及可用 YOLO 模型的方法 #### 1. 查看已安装的 Ultralytics 版本(已验证为 8.3.208) ```python # Python 代码查看版本 import ultralytics print(f"已安装的 Ultralytics 版本: {ultralytics.__version__}") # 输出: 已安装的 Ultralytics 版本: 8.3.208 ``` #### 2. 查看当前可用的 YOLO 模型 在 Ultralytics 8.3.208 中,可用的 YOLO 模型包括: ```python from ultralytics import YOLO import glob import os def list_available_yolo_models(): """列出所有可用的 YOLO 模型及本地缓存模型""" # 官方预训练模型列表 official_models = [ 'yolov8n', 'yolov8s', 'yolov8m', 'yolov8l', 'yolov8x', 'yolov8n-seg', 'yolov8s-seg', 'yolov8m-seg', 'yolov8l-seg', 'yolov8x-seg', 'yolov8n-cls', 'yolov8s-cls', 'yolov8m-cls', 'yolov8l-cls', 'yolov8x-cls', 'yolov8n-pose', 'yolov8s-pose', 'yolov8m-pose', 'yolov8l-pose', 'yolov8x-pose', ] # 获取本地缓存模型 cache_dir = os.path.join(os.path.expanduser('~'), '.cache', 'ultralytics') local_models = [] if os.path.exists(cache_dir): pt_files = glob.glob(os.path.join(cache_dir, '**', '*.pt'), recursive=True) local_models = [os.path.splitext(os.path.basename(f))[0] for f in pt_files] # 合并并去重 all_models = sorted(set(official_models + local_models)) # 分组显示 model_types = { "目标检测": [m for m in all_models if not any(x in m for x in ['seg', 'cls', 'pose'])], "实例分割": [m for m in all_models if 'seg' in m], "图像分类": [m for m in all_models if 'cls' in m], "姿态估计": [m for m in all_models if 'pose' in m], "自定义模型": [m for m in local_models if m not in official_models] } print(f"\n{'='*50}") print(f"Ultralytics {ultralytics.__version__} 可用模型列表") print(f"{'='*50}") for category, models in model_types.items(): if models: print(f"\n▶ {category}模型:") print("-"*50) for i, model in enumerate(models, 1): indicator = "📁" if model in local_models else "🌐" print(f"{indicator} {model}") print("\n图例: 📁=本地缓存 | 🌐=在线可用") ``` ### 关键特性说明(基于 Ultralytics 8.3.208) 1. **模型类型支持**: ```python # 检测模型加载示例 detect_model = YOLO('yolov8n.pt') # 目标检测 # 分割模型加载示例 seg_model = YOLO('yolov8n-seg.pt') # 实例分割 # 分类模型加载示例 cls_model = YOLO('yolov8n-cls.pt') # 图像分类 # 姿态模型加载示例 pose_model = YOLO('yolov8n-pose.pt') # 姿态估计 ``` 2. **模型性能对比**: | 模型类型 | 大小 | mAP50 | FPS (RTX 3080) | 适用场景 | |---------|------|-------|----------------|----------| | yolov8n | 6.2M | 37.3 | 250 | 移动设备/嵌入式 | | yolov8s | 11.2M| 44.9 | 120 | 实时应用 | | yolov8m | 25.9M| 50.2 | 80 | 平衡性能 | | yolov8l | 43.7M| 52.9 | 45 | 服务器部署 | | yolov8x | 68.2M| 53.9 | 30 | 高精度需求 | 3. **模型使用最佳实践**: ```python # 1. 自动下载缺失模型 model = YOLO('yolov8x-pose.pt') # 首次使用自动下载 # 2. 查看模型信息 model.info() # 显示模型结构细节 # 3. 使用模型进行推理 results = model('image.jpg') # 单张图像 results = model(['img1.jpg', 'img2.jpg']) # 批量处理 ``` ### 扩展技巧:模型搜索功能 ```python def search_yolo_models(keyword=None): """按关键词搜索可用模型""" _, local_models = list_available_yolo_models() all_models = set(YOLO_MODEL_LIST + local_models) if keyword: matches = [m for m in all_models if keyword.lower() in m.lower()] print(f"\n🔍 找到 {len(matches)} 个匹配 '{keyword}' 的模型:") for model in matches: print(f" - {model}") else: print("请提供搜索关键词,如: 'seg', 'pose', 'l' 等") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值