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

告别混乱!用Python+shutil一键整理UCF101数据集(附完整代码)

告别混乱用Pythonshutil一键整理UCF101数据集附完整代码刚接触行为识别的研究者十有八九会在UCF101这类经典数据集的预处理环节卡壳——下载的压缩包解压后视频文件散落在101个子目录中而官方提供的训练/测试划分文件又需要手动匹配。这种目录结构的混乱不仅拖慢实验进度更可能因人为操作失误导致数据泄露训练集混入测试样本。本文将用不到100行Python代码解决这个痛点实现从原始压缩包到标准目录结构的全自动转换。1. 为什么需要自动化预处理UCF101的官方文件结构设计存在三个典型问题原始视频存放方式按类别存放在101个独立文件夹文件名仅含序号如v_ApplyEyeMakeup_g01_c01.avi划分文件格式特殊trainlist01.txt仅记录相对路径如ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi多版本划分方案提供三种不同的训练测试划分01/02/03手动操作易混淆手动整理时常见的翻车现场包括错误地将同一视频同时放入train和test目录因路径拼接错误导致文件复制失败需要重复处理三种划分方案时效率低下# 典型问题示例手动处理时的路径拼接陷阱 wrong_path os.path.join(UCF-101, ApplyEyeMakeup_v_ApplyEyeMakeup_g01_c01.avi) # 错误 correct_path os.path.join(UCF-101, ApplyEyeMakeup, v_ApplyEyeMakeup_g01_c01.avi) # 正确2. 工程化解决方案设计我们的脚本需要实现以下核心功能智能路径解析自动识别原始压缩包解压后的嵌套目录结构多划分方案支持通过命令行参数指定使用哪种划分01/02/03原子化操作确保文件移动过程的幂等性重复执行不报错2.1 目录结构设计目标最终生成的标准化结构应满足dataset/ ├── test/ │ ├── ApplyEyeMakeup/ │ │ ├── v_ApplyEyeMakeup_g01_c01.avi │ │ └── ... ├── train/ │ ├── ApplyLipstick/ │ │ ├── v_ApplyLipstick_g01_c01.avi │ │ └── ... └── splits/ # 原始划分文件备份2.2 关键技术实现使用shutil库的三大核心方法shutil.move()原子化文件移动比复制删除更安全os.makedirs()递归创建目录避免父目录不存在时报错os.path.exists()操作前检查路径有效性import shutil import os from pathlib import Path def safe_move(src, dst): 线程安全的文件移动操作 Path(dst).parent.mkdir(parentsTrue, exist_okTrue) if Path(src).exists(): shutil.move(src, dst)3. 完整实现代码以下代码支持三种划分方案通过--split参数指定默认为01#!/usr/bin/env python3 import argparse import shutil from pathlib import Path def parse_args(): parser argparse.ArgumentParser() parser.add_argument(--data_root, typestr, requiredTrue, helpUCF101解压后的根目录含UCF-101文件夹和划分文件) parser.add_argument(--output_dir, typestr, defaultdataset, help输出目录路径) parser.add_argument(--split, typestr, choices[01, 02, 03], default01, help使用的划分方案01/02/03) return parser.parse_args() def main(): args parse_args() src_videos Path(args.data_root) / UCF-101 splits_dir Path(args.data_root) / UCF101TrainTestSplits # 创建输出目录 (Path(args.output_dir)/splits).mkdir(parentsTrue, exist_okTrue) # 处理测试集 with open(splits_dir/ftestlist{args.split}.txt) as f: for line in f: video_rel_path line.strip() class_name, video_name video_rel_path.split(/) src src_videos / video_rel_path dst Path(args.output_dir)/test/class_name/video_name safe_move(src, dst) # 剩余文件作为训练集 for class_dir in src_videos.iterdir(): if class_dir.is_dir(): for video in class_dir.glob(*.avi): dst Path(args.output_dir)/train/class_dir.name/video.name safe_move(video, dst) def safe_move(src, dst): dst.parent.mkdir(parentsTrue, exist_okTrue) if src.exists(): shutil.move(str(src), str(dst)) if __name__ __main__: main()4. 进阶使用技巧4.1 与帧提取工具联动整理后的目录可直接配合FFmpeg进行帧提取# 批量提取训练集视频帧 find dataset/train -name *.avi | xargs -I {} ffmpeg -i {} {.}/frame_%04d.jpg4.2 异常处理增强建议添加以下安全检查验证原始文件是否完整101个类别文件夹移动文件后校验MD5确保数据一致性记录操作日志便于回溯# MD5校验示例 import hashlib def get_file_md5(file_path): with open(file_path, rb) as f: return hashlib.md5(f.read()).hexdigest()4.3 性能优化方案当处理超大规模数据时使用多线程加速concurrent.futures.ThreadPoolExecutor先复制再删除替代直接移动避免跨磁盘操作慢使用rsync替代shutil支持断点续传from concurrent.futures import ThreadPoolExecutor def batch_move(file_pairs, workers4): with ThreadPoolExecutor(max_workersworkers) as executor: executor.map(lambda x: safe_move(*x), file_pairs)5. 常见问题解决方案Q1执行时报PermissionError怎么办方案确保脚本有写入权限或使用sudo执行预防提前用os.access()检查权限Q2如何验证划分是否正确# 检查训练测试集无交集 train_videos set(p.name for p in Path(dataset/train).glob(*/*.avi)) test_videos set(p.name for p in Path(dataset/test).glob(*/*.avi)) assert not (train_videos test_videos), 存在数据泄露Q3需要处理其他视频格式怎么办 修改代码中的视频扩展名过滤条件# 原版只处理.avi for video in class_dir.glob(*.avi): # 支持多种格式 VIDEO_EXTS {.avi, .mp4, .mov} for video in class_dir.iterdir(): if video.suffix.lower() in VIDEO_EXTS:

相关文章:

告别混乱!用Python+shutil一键整理UCF101数据集(附完整代码)

告别混乱!用Pythonshutil一键整理UCF101数据集(附完整代码) 刚接触行为识别的研究者,十有八九会在UCF101这类经典数据集的预处理环节卡壳——下载的压缩包解压后,视频文件散落在101个子目录中,而官方提供的…...

apache-dolphinscheduler-3.4.1调度器配置虚拟机

1、下载文件3.4.1下载安装包https://mirrors.tuna.tsinghua.edu.cn/apache/dolphinscheduler/3.4.1/ 2、传到虚拟机/home/spark2下 3、解压并重命名 4、初始化 MySQL 数据库 (1)启动 MySQL 服务 (2)登录 MySQL(输入 r…...

谷歌 Gemma 4 部署指南

谷歌 Gemma 4 部署指南 Gemma 4 是 Google DeepMind 于 2026 年 4 月 2 日发布的最新开放权重模型系列,采用 Apache 2.0 许可协议,支持商业用途。该系列模型提供 E2B、E4B、26B A4B(MoE 架构)及 31B(密集架构)四种变体,适用于从移动设备、边缘计算到服务器和工作站的广…...

Spark依赖管理二选一:spark.yarn.archive和spark.yarn.jars到底怎么选?

Spark依赖管理深度抉择:spark.yarn.archive与spark.yarn.jars的架构师级决策指南 当你在凌晨三点被集群告警惊醒,发现数百个Spark作业因依赖加载超时而堆积,那一刻你会明白:依赖管理策略的选择绝非配置文件中的简单参数调整&#…...

Qwen3-14B企业应用部署:从镜像拉取到API接入的完整流程

Qwen3-14B企业应用部署:从镜像拉取到API接入的完整流程 1. 镜像概述与核心优势 Qwen3-14B私有部署镜像是专为企业级AI应用场景打造的优化版本,基于通义千问大语言模型深度定制。这个镜像最显著的特点是开箱即用——所有运行环境和模型依赖都已预装完毕…...

保姆级教程:在PHPStudy环境下复现CTFHub MySQL注入题(附WAF绕过Payload分析)

从零构建MySQL注入实验环境:PHPStudy靶场搭建与Quine攻击实战 第一次接触SQL注入时,我盯着屏幕上那个看似简单的登录框,完全无法理解黑客是如何通过几个特殊字符就能突破系统防线的。直到亲手搭建环境、逐行调试代码后,才真正明白…...

别只盯着树莓派!聊聊GEC6818这块国产ARM板在嵌入式学习中的独特优势与避坑指南

国产ARM开发板GEC6818实战指南:从硬件解析到智能家居项目落地 在嵌入式开发领域,树莓派几乎成了入门者的默认选择,但这款英国产的单板计算机真的适合所有学习场景吗?当我第一次接触到GEC6818这块国产ARM开发板时,它的8…...

别再复制粘贴了!深入理解STM32中IIR滤波器的差分方程与状态变量

从零构建STM32 IIR滤波器:差分方程、状态变量与C语言实现全解析 在嵌入式信号处理领域,IIR(无限脉冲响应)滤波器因其高效的计算特性和优异的频率选择性能,成为STM32等资源受限平台的理想选择。但许多开发者仅仅停留在&…...

Kook Zimage真实幻想Turbo企业级应用:SpringBoot微服务架构实战

Kook Zimage真实幻想Turbo企业级应用:SpringBoot微服务架构实战 1. 微服务架构下的AI图像生成价值 在内容创作平台的后台重构过程中,我们将Kook Zimage真实幻想Turbo的AI图像生成能力独立封装为微服务,这种架构设计带来了显著优势&#xff…...

Leather Dress Collection 快速上手:10分钟完成Vue3前端项目集成

Leather Dress Collection 快速上手:10分钟完成Vue3前端项目集成 你是不是刚拿到一个部署好的AI模型接口,想把它快速集成到你的Vue3项目里,看看效果?或者你正在开发一个需要AI能力的应用,但对接后端API、处理流式响应…...

FlowState Lab 在音频信号处理中的迁移应用效果:音高与节奏分析

FlowState Lab 在音频信号处理中的迁移应用效果:音高与节奏分析 1. 音频分析的新视角 音乐和语音信号处理一直是人工智能领域的重要研究方向。传统的音频分析方法往往需要复杂的特征工程和领域专业知识,而FlowState Lab的出现为这一领域带来了全新的可…...

比迪丽AI绘画效果展示:系列风格化角色设计作品集

比迪丽AI绘画效果展示:系列风格化角色设计作品集 用AI画出你心中的角色,让创意不再受技术限制 最近试用了比迪丽AI绘画模型,专门做了系列风格化角色设计的测试。不得不说,效果真的让人眼前一亮——从奇幻冒险的精灵战士到科幻未来…...

FLAC转ALAC踩坑实录:除了音质无损,你的专辑封面和元数据都保留了吗?

FLAC转ALAC终极指南:如何无损迁移音质、元数据与专辑封面 每次打开Apple Music看到那些没有封面的专辑,或是艺术家信息显示为"未知"的曲目,总让人有种说不出的别扭。作为一位十年资深的数字音乐收藏者,我深知真正的音乐…...

别再死记硬背了!用MONAI Transform处理医学图像,这5个实战场景帮你一次搞懂

医学图像处理实战:5个MONAI Transform核心场景解析 医学影像AI开发中最令人头疼的环节,往往不是模型设计,而是数据预处理。我曾见过不少团队花费80%的时间在数据清洗和转换上,却依然难以构建标准化的处理流程。MONAI Transform的出…...

Linux文件传输利器SCP命令使用详解与实战技巧

在Linux系统管理和运维中,文件传输是日常高频操作之一。无论是本地与远程服务器之间的数据同步,还是跨服务器直接传输文件,scp(Secure Copy Protocol)都是最常用的工具之一。它基于SSH协议,提供加密传输能力…...

MiniCPM-o-4.5-nvidia-FlagOS企业级方案:高可用服务器集群部署指南

MiniCPM-o-4.5-nvidia-FlagOS企业级方案:高可用服务器集群部署指南 1. 引言:当AI应用走向规模化 想象一下这个场景:你的团队基于MiniCPM-o-4.5-nvidia-FlagOS开发了一款智能客服应用,上线初期反响不错。但随着用户量激增&#x…...

Linux中的more 和 less区别对比分析

在 Linux/Unix 系统中,more 和 less 都是用于分页查看文本文件的命令,但 less 是 more 的增强版,功能更强大。以下是它们的核心区别和用法对比:1. 基础功能对比特性moreless(更强大)向前翻页❌ 仅支持向下翻…...

SDMatte与CI/CD集成:实现模型服务的自动化部署与更新

SDMatte与CI/CD集成:实现模型服务的自动化部署与更新 1. 引言:当AI模型遇上DevOps 最近遇到一个挺有意思的场景:某设计团队在使用SDMatte进行图像背景去除时,每次模型更新都需要手动重新部署服务,导致新功能上线延迟…...

LongCat动物百变秀效果展示:橘猫变布偶、柯基穿毛衣,AI编辑惊艳案例

LongCat动物百变秀效果展示:橘猫变布偶、柯基穿毛衣,AI编辑惊艳案例 1. 开篇:当AI成为宠物造型师 想象一下这样的场景:你拍了一张自家橘猫的照片,突然想看看它变成高贵布偶猫的样子;或者给柯基犬穿上毛衣…...

调试直流电机位置环PID时,我踩过的那些坑和解决思路

直流电机位置环PID调试实战:从振荡到精准控制的进阶指南 调试直流电机的位置环PID控制器就像在钢丝上跳舞——稍有不慎就会陷入振荡、超调或响应迟缓的困境。作为一名经历过无数次深夜调试的工程师,我想分享那些让我抓狂的问题和最终找到的解决方案。这不…...

GeoServer零配置入门:如何用绿色版快速搭建本地地图服务器(含端口自定义技巧)

GeoServer零配置入门:如何用绿色版快速搭建本地地图服务器(含端口自定义技巧) 在GIS开发领域,快速搭建本地测试环境是每个开发者必备的技能。GeoServer作为开源地图服务器中的佼佼者,其绿色版更是提供了即解压即用的便…...

OpenClaw安全审计方案:Phi-3-mini-128k-instruct操作日志分析

OpenClaw安全审计方案:Phi-3-mini-128k-instruct操作日志分析 1. 为什么需要OpenClaw安全审计 去年夏天,我在用OpenClaw自动处理一批财务报表时,差点酿成大错。当时脚本在凌晨3点自动运行,由于模型错误理解了"删除临时文件…...

SQL Server导入导出向导报错终极指南:从驱动安装到版本兼容性全解析

SQL Server数据迁移全链路排错手册:从驱动配置到跨版本适配实战 当你第5次看到"未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序"的红色报错框时,是否想过这背后隐藏着SQL Server数据迁移的完整知识体系?数据工程师老张最近…...

微信小程序对接实战:快速开发集成通义千问1.5-1.8B模型的AI聊天应用

微信小程序对接实战:快速开发集成通义千问1.5-1.8B模型的AI聊天应用 你是不是也想过,给自己的微信小程序加上一个智能聊天助手?比如,做一个能解答用户问题的客服机器人,或者一个能陪你闲聊、帮你写文案的创意伙伴。听…...

用面包板和三极管DIY四比特加法器:从逻辑门到级联的完整实战记录

从零构建四比特加法器:面包板上的数字逻辑之旅 1. 硬件DIY的魅力与数字逻辑基础 在电子工程和计算机科学的世界里,理解数字逻辑电路的工作原理是一项基础而关键的技能。而亲手用面包板和三极管搭建一个四比特加法器,不仅能让你深入理解计算机…...

OpenClaw学术场景应用:Qwen3-32B镜像辅助论文数据处理

OpenClaw学术场景应用:Qwen3-32B镜像辅助论文数据处理 1. 为什么需要自动化论文数据处理? 作为一名经常需要处理实验数据的研究人员,我过去常常花费大量时间在Excel和Python之间来回切换。数据清洗、格式转换、异常值检测这些重复性工作不仅…...

nuScenes 3D标注数据深度解析:从Box字段到可视化,理解自动驾驶感知的基石

nuScenes 3D标注数据深度解析:从Box字段到可视化,理解自动驾驶感知的基石 自动驾驶技术的快速发展离不开高质量数据集的支撑,而nuScenes作为业界公认的标杆级数据集,其丰富的3D标注信息为感知算法研发提供了坚实基础。本文将带您深…...

SN75453与非门电路设计:如何正确选择上下拉电阻值(附计算公式)

SN75453与非门电路设计:如何正确选择上下拉电阻值(附计算公式) 在数字电路设计中,与非门是最基础的逻辑门之一,而SN75453作为一款经典的TTL与非门芯片,广泛应用于各种控制系统中。但很多工程师在实际应用时…...

DeOldify跨框架模型转换:从PyTorch到ONNX及TensorRT加速

DeOldify跨框架模型转换:从PyTorch到ONNX及TensorRT加速 最近在折腾一个挺有意思的项目,想把老照片上色的模型DeOldify部署到生产环境里。原版模型是用PyTorch写的,直接拿来用的话,推理速度总觉得差点意思,尤其是在处…...

零售AI开发者必看:Ostrakon-VL-8B终端从部署到任务执行完整指南

零售AI开发者必看:Ostrakon-VL-8B终端从部署到任务执行完整指南 1. 项目概览:像素特工终端 Ostrakon-VL-8B是一款专为零售与餐饮场景优化的多模态大模型,我们将其封装成了一个充满游戏趣味的Web交互终端。与传统工业级UI不同,这…...