【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
焦糖玛奇朵的魔法工具使用说明焦糖玛奇朵的魔法工具实现了从视频到高质量数据的半自动流水生产线工程。其开发初衷是为了高效清洗数据集以快速迭代模型。如果使用中发现有任何可以改进的地方欢迎留言或私信我。小白如果需要可以找我要打包的exe有自己环境的可以参考前文代码一键运行。目前主要适配YOLO框架。本文档说明3 个数据集工具的用途、启动方式、使用流程、依赖环境和常见问题。工具概览工具入口脚本推荐启动方式用途VideoToYolovideo_to_yolo_tool.pyrun_video_to_yolo_yolov8.bat视频抽帧、ONNX 自动标注、生成 YOLO 数据集、类别统计与数据平衡DatasetCleanerdataset_clean_tool.pyrun_dataset_cleaner_yolov8.bat逐目标查看裁剪图快速修正类别、移动脏图、移出需重标图片QuickModelViewerquick_model_viewer.pyrun_quick_model_viewer_yolov8.bat快速加载 ONNX 模型和图片直接可视化检测框推荐使用桌面快捷方式启动VideoToYoloDatasetCleaner-yolov8QuickModelViewer如果快捷方式失效可以直接双击项目目录中的.bat文件。依赖环境当前最稳定的启动方式是使用已有 conda 环境C:\Users\zhang\.conda\envs\yolov8主要依赖python opencv-python numpy Pillow PyYAML onnxruntime / onnxruntime-gpu tkinter启动脚本会先激活yolov8环境再补充 ONNX Runtime、CUDA、torch 相关 DLL 搜索路径。不要直接双击.py文件尤其是涉及 ONNX 推理的工具。直接双击可能会用到系统默认 Python导致动态链接库加载失败。1. VideoToYolo用途VideoToYolo 是数据集前置工具用于把视频转换成 YOLO 检测数据集。它可以完成选择视频目录按固定帧间隔抽帧生成images整理/保留videos使用 ONNX 模型自动标注生成labels生成dataset.yaml把模型没有检出任何目标的图片移到empty_images统计各类别数量随机移出某一类的纯类别图片用于数据平衡输出目录结构选择一个数据集目录后工具会生成或使用dataset_root/ videos/ images/ labels/ empty_images/ class_balance_removed/ dataset.yaml说明videos原始视频目录。images抽帧后、参与训练的图片。labelsYOLO txt 标签。empty_images模型没有检出任何目标的图片会从images移到这里不生成 txt。class_balance_removed类别平衡时被移出的图片和标签不会物理删除。dataset.yamlYOLO 训练配置。视频抽帧点击选择视频/数据集目录。设置图片名前缀。设置每多少帧抽一帧。选择图片格式一般用jpg。点击开始抽帧生成 images。抽帧命名规则图片名前缀_视频序号_帧序号.jpg示例efall_0520_3_24.jpg注意图片名会避免中文和特殊字符尽量保证训练和跨平台迁移稳定。自动标注点击选择 ONNX 模型。设置置信度、NMS IoU、输入尺寸。如果模型没有类别 metadata在类别框中手动填写类别名。点击开始自动标注 images。类别名可以写成standing fall bending也可以用逗号分隔standing,fall,bending自动标注完成后有目标的图片保留在images生成对应 txt 到labels。没有目标的图片移到empty_images。自动生成或刷新dataset.yaml。日志中会输出类别统计。类别统计点击统计 labels 类别数量后日志会显示类别统计: label文件数: 145空txt: 0 0: standing | 目标数 220 | 出现图片数 121 | 仅含该类图片数 43 1: fall | 目标数 3 | 出现图片数 3 2: bending | 目标数 141 | 出现图片数 102含义目标数该类别框的总数量。出现图片数有该类别的图片数量。仅含该类图片数整张图只包含该类别不包含其他类别。随机移出单类别图片用于处理某个类别严重过多的问题。例如 Standing 太多希望随机移出 90% 的“仅包含 Standing 的图片”类别ID填0。移出百分比填90。随机种子可保持默认。点击随机移出仅包含该类别的图片。工具只会移出“标签中全部目标都是该类别”的图片。只要图片包含其他类别就会保留。移出的数据会放到class_balance_removed/class_0_standing_90pct/ images/ labels/ manifest.csv这不是物理删除可以手动恢复。效果图区域VideoToYolo 主界面抽帧与自动标注日志类别统计与随机移出2. DatasetCleaner用途DatasetCleaner 是人工快速清洗工具用于逐个查看 YOLO 标注目标。它可以完成加载 YOLO 数据集加载训练 yaml 中的类别名显示原图场景显示当前目标 20% 扩框裁剪图在裁剪图右侧用大色块显示类别号和类别名快速修改当前目标类别把脏图移到_delete_把缺漏标图片移到relabel跨图片连续切换目标输入数据结构默认读取dataset/ images/ train/ val/ test/ labels/ train/ val/ test/ dataset.yaml也支持没有train/val/test的简单结构dataset/ images/ labels/ dataset.yaml图片和标签按相对路径对应images/a.jpg - labels/a.txt images/train/a.jpg - labels/train/a.txt使用流程点击选择 dataset。点击选择 yaml。左侧选择图片或用上一张/下一张切换。查看原图场景和当前目标裁剪图。如果类别错误点击右侧类别按钮。如果整张图不适合训练点击删除原图。如果图片目标有漏标点击需重新标。类别修正类别按钮显示真实 YOLO 类别号0: standing 1: fall 2: bending点击后会立即修改当前图片对应的.txt文件。修改的是当前目标所在行的第一个字段也就是 class id。bbox 坐标不变。图片移动规则删除原图不是真的删除会移动到dataset/_delete_/images/ dataset/_delete_/labels/需重新标会移动到dataset/relabel/images/ dataset/relabel/labels/目录层级会尽量保持原来的相对路径。目标切换逻辑当前图最后一个目标点下一个跳到下一张图第一个目标。当前图第一个目标点上一个跳到上一张图最后一个目标。当前图没有目标时上一个/下一个会直接切图。快捷键1-5: 分配类别 0-4 Left / Right: 切换目标 PageUp / PageDown: 切换图片效果图区域DatasetCleaner 主界面目标裁剪与类别色块3. QuickModelViewer用途QuickModelViewer 是快速验证 ONNX 模型效果的小工具。它可以完成选择 ONNX 模型选择单张图片选择图片文件夹快速推理并画框显示类别号、类别名、置信度调整 conf、iou、imgsz上一张/下一张快速浏览使用流程点击选择 ONNX 模型。点击选择图片或选择图片文件夹。设置conf、iou、imgsz。点击重新推理或切换图片查看效果。如果 ONNX 模型带有类别 metadata工具会自动读取类别名。如果没读到可以手动填写standing,fall,bending推理方式QuickModelViewer 的界面进程只负责显示。真正的 ONNX 推理会通过独立子进程执行这样可以绕开onnxruntime-gpu在 Tkinter 进程中偶发的 DLL 初始化问题。效果图区域QuickModelViewer 主界面模型推理结果常见问题与注意事项1. onnxruntime 动态链接库初始化失败常见报错DLL load failed while importing onnxruntime_pybind11_state 动态链接库(DLL)初始化例程失败建议不要直接双击.py。使用对应.bat或桌面快捷方式启动。确认启动窗口中 Python 是C:\Users\zhang\.conda\envs\yolov8\python.exeVideoToYolo 和 QuickModelViewer 已经采用子进程推理方式正常情况下可以绕过这个问题。2. 打开的是旧窗口如果刚修改过工具但效果没有变化很可能旧窗口还开着。建议关闭所有旧工具窗口。重新双击桌面快捷方式。再测试新功能。3. 图片名不要包含中文视频原名经常包含中文、括号、空格等字符。训练集图片建议使用 ASCII 命名例如efall_0521_1_0.jpg efall_0521_1_15.jpgVideoToYolo 抽帧时已经默认使用图片名前缀_视频序号_帧序号.jpg4. 空图片是否参与训练当前策略是不参与。自动标注时如果模型没有检出任何目标图片会移动到empty_images/并且不会生成空 txt。5. 随机移出不是物理删除类别平衡时移出的数据会保存在class_balance_removed/可以手动恢复。6. DatasetCleaner 修改类别是立即写入点击类别按钮后.txt会立即被改写。如果误点可以再次点正确类别改回来。7. dataset.yaml 的 train/valVideoToYolo 默认生成train:imagesval:images这是为了快速验证和小数据集制作方便。正式训练前如果需要 train/val/test 拆分可以后续再拆目录并修改 yaml。8. ONNX 输出格式兼容性当前自动标注和快速验证主要兼容常见 YOLOv8 ONNX 输出[1, 4 num_classes, N]也兼容部分已带 NMS 的输出[x1, y1, x2, y2, score, class]如果某个模型可加载但结果明显不对优先检查输入尺寸是否正确。类别名数量是否正确。模型是否是 YOLO 检测模型。导出 ONNX 时是否带了特殊后处理。推荐工作流从视频到训练集使用 VideoToYolo 抽帧。使用 VideoToYolo 自动标注。使用 VideoToYolo 统计类别。必要时随机移出过多类别。使用 QuickModelViewer 抽查模型标注效果。使用 DatasetCleaner 人工清洗类别和脏图。训练 YOLO 模型。快速验证模型使用 QuickModelViewer 选择模型。选择几张典型图片。调整 conf/iou。判断模型是否适合作为自动标注模型。