当前位置: 首页 > news >正文

HICO-DET数据集实战:用Python解析anno_bbox.mat,快速提取人-物交互标注信息

HICO-DET数据集实战用Python解析anno_bbox.mat快速提取人-物交互标注信息在计算机视觉领域人-物交互Human-Object Interaction, HOI检测是一个极具挑战性的任务。HICO-DET作为该领域的标杆数据集其标注文件anno_bbox.mat采用MATLAB格式存储这对习惯使用Python的开发者来说是个不小的障碍。本文将手把手教你如何用Python高效解析这个文件提取关键信息并转换为深度学习框架友好的格式。1. 环境准备与数据加载首先确保已安装必要的Python库pip install scipy numpy pandasanno_bbox.mat文件采用MATLAB v7.3格式需要使用h5py库而非传统的scipy.io来加载import h5py def load_mat(file_path): 加载MATLAB v7.3格式文件 with h5py.File(file_path, r) as f: data {k: [f[v[0]][()] for v in f[k]] for k in f.keys()} return data注意HICO-DET的标注文件可能因版本不同而采用不同格式。如果遇到加载错误可尝试先用scipy.io.loadmat()失败后再切换至h5py方案。2. 理解数据结构与关键字段加载后的数据结构包含三个主要部分字段名数据类型描述bbox_train结构化数组训练集标注包含文件名、图像尺寸和HOI信息bbox_test结构化数组测试集标注结构与训练集相同list_action结构化数组600个HOI类别的动名词组合其中hoi字段的结构最为复杂每个样本包含id: 动作类别索引bboxhuman: 人物边界框数组[N,4]bboxobject: 物体边界框数组[M,4]connection: 交互对数组[K,2]表示人物与物体的配对索引invis: 可见性标记3. 标注信息提取实战3.1 基础信息提取首先提取图像基本信息def extract_basic_info(mat_data, splittrain): bbox_data mat_data[fbbox_{split}] return { filenames: [str(f[0]) for f in bbox_data[filename][0]], sizes: [tuple(map(int, s)) for s in bbox_data[size][0]], hois: bbox_data[hoi][0] }3.2 交互关系解析核心的HOI信息提取函数def parse_hoi_annotations(hoi_data): annotations [] for i in range(len(hoi_data[id][0])): hoi_id int(hoi_data[id][0][i][0]) human_boxes hoi_data[bboxhuman][0][i].reshape(-1,4) if hoi_data[bboxhuman][0][i].size else [] obj_boxes hoi_data[bboxobject][0][i].reshape(-1,4) if hoi_data[bboxobject][0][i].size else [] connections hoi_data[connection][0][i].reshape(-1,2) if hoi_data[connection][0][i].size else [] annotations.append({ hoi_id: hoi_id, human_boxes: human_boxes.tolist(), object_boxes: obj_boxes.tolist(), connections: connections.tolist() }) return annotations3.3 动作类别映射list_action包含600个HOI类别的详细信息def get_action_mapping(mat_data): return [{ id: i1, verb: str(mat_data[list_action][vname][0][i][0]), object: str(mat_data[list_action][nname][0][i][0]) } for i in range(len(mat_data[list_action][nname][0]))]4. 转换为COCO格式为方便训练我们将数据转换为COCO风格的JSON格式def convert_to_coco(mat_data, splittrain): # 初始化COCO结构 coco_data { images: [], annotations: [], categories: get_action_mapping(mat_data) } basic_info extract_basic_info(mat_data, split) for img_idx, (filename, size) in enumerate(zip(basic_info[filenames], basic_info[sizes])): # 添加图像信息 coco_data[images].append({ id: img_idx, file_name: filename, width: size[0], height: size[1] }) # 处理该图像的所有HOI标注 hoi_anns parse_hoi_annotations(basic_info[hois][img_idx]) for hoi in hoi_anns: for conn in hoi[connections]: human_idx, obj_idx conn human_box hoi[human_boxes][human_idx-1] # MATLAB索引从1开始 obj_box hoi[object_boxes][obj_idx-1] coco_data[annotations].append({ image_id: img_idx, hoi_id: hoi[hoi_id], human_bbox: human_box, object_bbox: obj_box, category_id: hoi[hoi_id] }) return coco_data5. 实用技巧与性能优化处理大型MAT文件时可采用以下优化策略分块处理对于特别大的文件可以分块加载和处理数据def process_in_chunks(mat_path, chunk_size1000): with h5py.File(mat_path, r) as f: total len(f[bbox_train/filename]) for i in range(0, total, chunk_size): chunk {k: f[k][i:ichunk_size] for k in f.keys()} yield chunk并行处理利用多进程加速from multiprocessing import Pool def parallel_parse(args): img_idx, hoi_data args return parse_hoi_annotations(hoi_data) with Pool(4) as p: # 使用4个进程 results p.map(parallel_parse, enumerate(basic_info[hois]))缓存机制将解析结果保存为JSON避免重复解析import json from pathlib import Path def load_or_parse(mat_path, cache_dircache): cache_path Path(cache_dir) / (Path(mat_path).stem .json) if cache_path.exists(): return json.loads(cache_path.read_text()) data load_mat(mat_path) coco_data convert_to_coco(data) cache_path.parent.mkdir(exist_okTrue) cache_path.write_text(json.dumps(coco_data)) return coco_data6. 可视化验证为确保解析正确建议可视化部分结果import cv2 import matplotlib.pyplot as plt def visualize_hoi(image_path, human_box, obj_box, action_name): img cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2RGB) # 绘制边界框 cv2.rectangle(img, (human_box[0], human_box[1]), (human_box[2], human_box[3]), (255,0,0), 2) cv2.rectangle(img, (obj_box[0], obj_box[1]), (obj_box[2], obj_box[3]), (0,255,0), 2) # 添加动作标签 plt.imshow(img) plt.title(action_name) plt.axis(off) plt.show()7. 与深度学习框架集成最后我们可以创建PyTorch Dataset类方便训练使用from torch.utils.data import Dataset class HOIDataset(Dataset): def __init__(self, coco_data, image_dir, transformNone): self.data coco_data self.image_dir Path(image_dir) self.transform transform def __len__(self): return len(self.data[images]) def __getitem__(self, idx): img_info self.data[images][idx] img_path self.image_dir / img_info[file_name] image cv2.imread(str(img_path)) image cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 获取该图像的所有标注 anns [a for a in self.data[annotations] if a[image_id] idx] if self.transform: image self.transform(image) return image, anns
http://www.gsyq.cn/news/1408684.html

相关文章:

  • 轻量级网络隧道:Rinetd在容器与虚拟机混合环境中的端口转发实践(附:Linux/Windows双平台配置)
  • ai 模型加密,强化版终极防盗方案:NVIDIA + PyTorch + 显卡绑定 + 反调试 + 防篡改
  • 【力扣100题】62.滑动窗口最大值
  • 谷歌seo主页优化做什么?图片Alt标签加这3个词最管用
  • 基于树莓派Ubuntu Mate与PX4的UDP通信:搭建QGC地面站远程监控系统
  • 告别命令行恐惧:用Xmanager 5在Windows上图形化操作CentOS服务器(保姆级配置)
  • WarcraftHelper全面解析:5大核心功能彻底解决魔兽争霸3兼容性问题
  • 我观察了一年,发现90%的Agent教程一开始就教错了
  • 【转行大模型】大龄程序员转行AI大模型:高薪+前沿技术+实战路线图
  • Chatbot、RAG、Workflow、Agent,这4个AI概念全搞懂!
  • ChatGPT旅行规划辅助落地难题全解析(航空政策突变/多语言实时翻译/本地化POI校验实录)
  • AI 仿生毛绒宠物 Walulu 完成数千万元融资;网易有道开源 Confucius4-TTS:零样本生成无口音跨语种语音丨日报
  • 【2024招聘黑科技】:如何用ChatGPT+岗位胜任力模型+JD质量评分卡,批量产出猎头级JD(附可落地Prompt工程表)
  • 大模型幻觉终结战:Best-of-N采样与共识机制实战解析
  • 2026年5月贵州品质游旅行社推荐:TOP5口碑评测小众路线探秘市场份额专业选择指南 - 品牌推荐
  • GPU编程能效优化:从数据传递到源码级能耗感知实践
  • 用STM32F103C8T6做个可调电源:从原理图到代码的保姆级教程(含LCD1602显示与过流保护)
  • 别再死磕单级PID了!PX4固定翼姿态控制器里的串级PID,为什么是双回路的?
  • 绝对值方程多种数值解法【附代码】
  • ENVI实战:Band Math与NDWI水体提取全流程解析
  • 手把手教你用Python免费调用阿里云通义千问1.8B模型API(附完整代码)
  • 【EI复现】【基于改进粒子群算法求解】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)
  • 手把手教你调用快递100 API:构建一个全功能的快递查询爬虫系统
  • ChatGPT用户画像失效的3个致命盲区,87%的产品经理至今未察觉——2024最新审计清单发布
  • 2026年5月正规的中型面粉机厂家哪家靠谱厂家推荐榜,中型面粉机组/石磨面粉设备/杂粮脱皮制粉成套设备选购指南 - 海棠依旧大
  • 从皇家间谍到现代渗透测试:阿尔弗雷德大帝的战术启示与网络安全应用
  • 项目介绍 MATLAB实现基于HHT-ELM希尔伯特–黄变换(HHT)结合极限学习机(ELM)进行故障诊断分类预测(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓
  • 不只是安装:用LabelImg标注完数据后,如何高效管理你的VOC格式XML文件?
  • 从搜索引擎到推荐系统:TF-IDF算法在Python中的实战场景全解析
  • 试过了,不懂代码也能行!花15天用PageAdmin从0到1搭了个网站