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

HMDB51数据集划分

生成训练集、验证集和测试集

每个split文件应该包含:

  • 训练集(id=1): 70个视频
  • 测试集(id=2): 30个视频
  • 未使用(id=0): 剩余视频
    这是一个70/30的训练/测试分割比例。标记为0的视频被排除在当前实验之外。
  • 实际上训练集(id=1),验证集(id=2),测试集(id=0),测试集和验证集可以互换
import os
import glob
from pathlib import Path# 设置数据处理的路径
SPLIT_DIR = r"C:/Users/yanho/Desktop/testTrainMulti_7030_splits"  # split文件所在目录
OUTPUT_DIR = r"C:/Users/yanho/Desktop/hmdb51_annotations"  # 输出目录def process_split_file(split_file, action_class):"""处理单个split文件并生成训练、验证和测试列表"""train_videos = []val_videos = []test_videos = []with open(split_file, 'r') as f:for line in f:video_name, label = line.strip().split()# 为每个视频添加类别标签(action_class)video_info = f'{video_name} {action_class}\n'if label == '1':train_videos.append(video_info)elif label == '2':val_videos.append(video_info)elif label == '0':test_videos.append(video_info)return train_videos, val_videos, test_videosdef main():# 创建输出目录output_dir = Path(OUTPUT_DIR)output_dir.mkdir(parents=True, exist_ok=True)# 用于收集所有训练、验证和测试样本all_train_videos = []all_val_videos = []all_test_videos = []# 处理所有split1文件split_files = glob.glob(os.path.join(SPLIT_DIR, '*_test_split1.txt'))for split_file in split_files:# 从文件名中提取动作类别action_class = Path(split_file).stem.split('_test_split1')[0]# 获取当前类别的动作类别索引class_idx = split_files.index(split_file)print(f'处理类别: {action_class} (索引: {class_idx})')# 处理当前split文件train_videos, val_videos, test_videos = process_split_file(split_file, class_idx)all_train_videos.extend(train_videos)all_val_videos.extend(val_videos)all_test_videos.extend(test_videos)# 写入训练集文件train_file = output_dir / 'train_split1.txt'with open(train_file, 'w') as f:f.writelines(all_train_videos)# 写入验证集文件val_file = output_dir / 'val_split1.txt'with open(val_file, 'w') as f:f.writelines(all_val_videos)# 写入测试集文件test_file = output_dir / 'test_split1.txt'with open(test_file, 'w') as f:f.writelines(all_test_videos)print(f'\n处理完成!')print(f'训练集样本数: {len(all_train_videos)}')print(f'验证集样本数: {len(all_val_videos)}')print(f'测试集样本数: {len(all_test_videos)}')print(f'文件保存在: {output_dir}')if __name__ == '__main__':main()

合并视频到统一目录

import os
import shutil
from pathlib import Pathdef merge_videos(src_dir, dst_dir):"""合并所有视频到统一目录Args:src_dir: 源视频目录dst_dir: 目标目录"""# 创建目标目录Path(dst_dir).mkdir(parents=True, exist_ok=True)# 遍历源目录for root, dirs, files in os.walk(src_dir):for file in files:if file.endswith('.avi'):  # 只处理视频文件# 获取类别名称category = os.path.basename(os.path.dirname(root))# 创建类别子目录category_dir = os.path.join(dst_dir, category)Path(category_dir).mkdir(exist_ok=True)# 源文件和目标文件路径src_path = os.path.join(root, file)dst_path = os.path.join(category_dir, file)# 复制文件shutil.copy2(src_path, dst_path)print(f"Copied {src_path} -> {dst_path}")if __name__ == "__main__":src_dir = "videos_src"  # 源视频目录dst_dir = "data/hmdb51/videos"  # 目标目录merge_videos(src_dir, dst_dir)  # 合并视频到统一目录,一共6766个视频
http://www.xdnf.cn/news/6957.html

相关文章:

  • V 型不锈钢对夹球阀:高性价比流体控制的优选方案-耀圣
  • 联想笔记本黑屏了,排线出问题还是静电
  • QT调用Halcon查询所有摄像头名称
  • 遨游科普:三防平板是什么?有什么功能?
  • Linux安全篇 --firewalld
  • Windows系统永久暂停更新操作步骤
  • 微软家各种copilot的AI产品:Github copilot、Microsoft copilot
  • 什么是PMBus
  • 18-总线IIC
  • 大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究
  • LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)
  • 字节2025实习/校招/社招 内推码:R9SZ7Y1
  • 车载以太网驱动智能化:域控架构设计与开发实践
  • 【Ubuntu】Waydroid-Linux安卓模拟器安装
  • 【数据结构】线性表--队列
  • 自动化脚本开发:Python调用云手机API实现TikTok批量内容发布
  • 卷积神经网络中的二维卷积与三维卷积详解
  • 山东大学计算机图形学期末复习10——CG12下
  • Redis设计与实现——分布式Redis
  • 共享内存【Linux操作系统】
  • Go语言语法---输入控制
  • Node.js 源码架构详解
  • [system-design] ByteByteGo_Note Summary
  • 如何开发专业小模型
  • 强化学习赋能医疗大模型:构建闭环检索-反馈-优化系统提升推理能力
  • 数据库实验报告 数据定义操作 3
  • 【leetcode】逐层探索:BFS求解最短路的原理与实践
  • 使用Python和Selenium打造一个全网页截图工具
  • CSS- 4.1 浮动(Float)
  • Echart地图数据源获取