拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Label Studio 中的 TimelineLabels:基于 YOLO 特征提取与 LSTM 的时序视频多标签分类 ML 后端

Label Studio 中的 TimelineLabels基于 YOLO 特征提取与 LSTM 的时序视频多标签分类 ML 后端【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio本指南以 Label Studio 官方示例 ML 后端中的TimelineLabels模型为核心系统讲解如何利用「YOLO 特征提取 LSTM 时序建模」在 Label Studio 中实现视频的时序多标签分类。读者将掌握TimelineLabels标签的完整标注配置、model_trainable简单模式与可训练模式的切换、全部神经网络参数的语义与调优方法以及该后端从前端标签解析到后端增量训练partial_fit的完整源码级工作原理。一、模型概述与适用场景TimelineLabels 是 Label Studio ML 后端示例中的时序视频分类模型用于对视频逐帧或按时间区间进行多标签分类例如检测球是否在画面内是否发生触球这类事件状态。它采用两段式架构特征提取利用预训练的 YOLO 分类模型如yolov8n-cls.pt提取视频帧特征具体做法是移除 YOLO 最后一层分类层改用倒数第二层的特征表示时序建模在 YOLO 特征之上叠加一个自定义 LSTM 神经网络捕捉帧与帧之间的时序依赖关系输出逐帧的多标签概率。该模型最典型的玩法是可训练模式trainable mode先手动标注少量视频每次点击Submit提交标注后模型即基于新标注增量重训当模型开始在新任务上预测出标签后会自动把预测结果填充到时间轴timeline上。标注人员可以验证或修正这些预测修正后模型再次训练从而形成人工标注 → 增量训练 → 自动预标注 → 人工校验 → 再训练的迭代闭环实现少样本few-shot条件下的持续改进。提示如果需求是更先进的时序分类方案可以参考 VideoMAE 模型Label Studio 未附带其示例后端但可以自行按 ML 后端开发指南 集成。二、安装与快速开始在使用本模型前需要先安装 Label Studio ML 后端 SDKlabel-studio-ml-backend并获取本教程依赖的YOLO 示例后端位于label-studio-ml-backend仓库的label_studio_ml/examples/yolo目录内含本模型所使用的timeline_labels.py、neural_nets.py、converter.py等核心文件。整体安装流程如下克隆并安装 ML 后端 SDK进入yolo示例目录检查docker-compose.yml配置所需的模型路径与环境变量执行docker compose up启动后端服务默认监听http://localhost:9090在 Label Studio 项目Settings Model中点击Connect Model填入后端 URL 完成接入确认Interactive Preannotations交互式预标注保持关闭默认即关闭。对接完成后建议通过curl http://localhost:9090验证后端状态返回类似{model_class:...,status:UP}即表示服务正常。三、标注配置TimelineLabels标签的完整用法在 Label Studio 的标注配置labeling config中TimelineLabels作为控制标签control tag配合Video对象标签使用。完整示例View TimelineLabels namelabel toNamevideo model_trainabletrue model_classifier_epochs1000 model_classifier_sequence_size16 model_classifier_hidden_size32 model_classifier_num_layers1 model_classifier_f1_threshold0.95 model_classifier_accuracy_threshold0.99 model_score_threshold0.5 Label valueBall touch backgroundred/ Label valueBall in frame backgroundblue/ /TimelineLabels Video namevideo value$video height700 frameRate25.0 timelineHeight200 / /View3.1 前端标签语义源码佐证TimelineLabels在前端web/libs/editor/src/tags/control/TimelineLabels.jsx中由TimelineLabelsModel组合ControlBase、LabelsModel与SelectedModelMixin而成注册为timelinelabels标签其生成的标注区域region类型为TimelineRegion见 web/libs/editor/src/regions/TimelineRegion.js。使用方式为先选择一个标签单击标注单帧按住鼠标拖动即可一次标注多帧区间。其标注结果以 JSON 形式存储核心字段定义在 docs/source/includes/tags/timelinelabels.mdvalue.ranges区间数组每个区间对象含start与end两个帧号属性一个 region 对应一个区间value.timelinelabels该区间对应的标签名称字符串数组。{ value: { ranges: [{start: 3, end: 5}], timelinelabels: [Moving] } }3.2 必须注意的frameRate约束Video标签中的frameRate属性必须设置为正确的值可参考 docs/source/includes/tags/video.md默认值为 24也可用任务数据动态指定如$fps。所有视频的帧率必须一致否则提交的标注将与视频画面错位misaligned。此外Label Studio 依赖浏览器解析视频总帧数建议使用H.264 编码的 MP4恒定帧率 CFR约 30fps以获得稳定的帧数与时长识别参见 docs/source/tags/video.md 中的 FFmpeg 转码示例。四、参数详解TimelineLabels标签支持以下模型参数均可直接在标注配置中修改无需改动代码参数类型默认值说明model_trainableboolfalse启用可训练模式使模型能从你的标注中增量学习model_classifier_epochsint1000LSTM 神经网络的训练轮数model_classifier_sequence_sizeint16LSTM 输入序列长度按帧计。调整以捕获更长或更短的时序依赖在 25 帧率下 16 帧约为 0.6 秒model_classifier_hidden_sizeint32LSTM 隐藏状态维度调整以改变 LSTM 容量model_classifier_num_layersint1LSTM 层数增大可获得更深的 LSTM 网络model_classifier_f1_thresholdfloat0.95训练时基于 F1 分数的早停阈值防止过拟合model_classifier_accuracy_thresholdfloat1.00训练时基于准确率的早停阈值防止过拟合model_score_thresholdfloat0.5预测最低置信度阈值低于该值的标签将被忽略model_pathstringNone自定义 YOLO 模型路径详见下方自定义 YOLO 模型一节需要特别说明两点自定义 YOLO 模型可以通过model_path指向自己的 YOLO 模型但该模型需具备与yolov8-cls系列相似的架构因为特征提取依赖对倒数第二层的钩取hook。predicted_values属性在可训练模式下Label标签上的predicted_values属性不生效——可训练模式不使用预训练 YOLO 类名做预测而是学习你自己的标签集合。五、两种运行模式5.1 简单模式Simple mode简单模式直接使用预训练 YOLO 的分类结果生成预测不做任何额外训练。适用场景快速搭建、无需自定义训练启动即可出预测配置方法model_trainablefalse或不写该属性默认即为 false示例View Video namevideo value$video height700 frameRate25.0 timelineHeight200 / TimelineLabels namelabel toNamevideo model_trainablefalse Label valueBall predicted_valuessoccer_ball/ Label valuetiger_shark / /TimelineLabels /View注意简单模式通过predicted_values建立你的标签 → YOLO 预训练类别名的映射YOLO 对每一帧给出类别概率超过model_score_threshold的类别即被渲染到时间轴上。5.2 可训练模式Trainable mode可训练模式在预训练 YOLO 分类特征之上叠加自定义 LSTM 网络捕获视频的时序依赖。LSTM 从零开始训练大约需要 1020 段、每段约 500 帧约 20 秒的标注良好的视频才能开始产出有意义的预测。适用场景需要自定义标签或相对简单模式需要更高精度配置方法model_trainabletrue训练流程用TimelineLabels开始标注 → 提交第一条标注后模型开始训练 → 每次新标注通过partial_fit()方法增量更新模型样本需求约 1020 个标注任务即可达到合理效果few-shot learning。可训练模式的完整配置示例View Video namevideo value$video height700 frameRate25.0 timelineHeight200 / TimelineLabels namelabel toNamevideo model_trainabletrue model_classifier_epochs1000 model_classifier_sequence_size16 model_classifier_hidden_size32 model_classifier_num_layers1 model_classifier_f1_threshold0.95 model_classifier_accuracy_threshold0.99 model_score_threshold0.5 Label valueBall in frame/ Label valueBall touch/ /TimelineLabels /View六、可训练模型的工作原理可训练模式使用自定义的时序 LSTM 分类模型实现每次标注提交或更新时增量训练并为视频的每一帧生成预测。整体可拆分为三步。6.1 第一步YOLO 特征提取预训练 YOLO 模型使用 YOLO 分类模型如yolov8n-cls.pt提取视频帧特征层修改移除 YOLO 最后一层分类层取倒数第二层的特征表示对应源码utils/neural_nets.py::cached_feature_extraction()缓存机制使用缓存保存 YOLO 中间特征避免重复计算支撑边训练边预测的实时性。缓存目录位于/app/cache_dir保存 YOLO 模型最后一层提取的中间特征用于增量训练与预测加速。6.2 第二步LSTM 神经网络目的对 YOLO 最后一层输出的特征向量序列进行时序建模捕获视频中的时间依赖架构对应MultiLabelLSTM输入层接收 YOLO 特征向量全连接层降维Layer Normalization 与 Dropout提升训练稳定性、防止过拟合LSTM 层处理序列建模时序关系输出层生成每个时间步的多标签预测损失函数使用带 logits 的二元交叉熵损失BCEWithLogitsLoss做多标签分类并加入权重衰减weight decay实现 L2 正则化。6.3 第三步partial_fit()增量训练功能每次新标注到达时更新模型参数流程通过utils/converter.py::convert_timelinelabels_to_probs()从标注视频中提取特征与标签按model_classifier_sequence_size将数据切分为适合 LSTM 输入的序列块增量训练模型并以 F1 分数与准确率阈值做早停优势少样本学习能力强早停机制避免在有限数据上过拟合。七、限制与注意事项非最终生产模型该模型主要作为 demo 示例用于生产前需要进一步验证性能依赖数据至少需要 1020 个标注任务且数据要多样才能开始有良好表现参数敏感调整神经网络参数可能显著影响性能训练数据上的早停由于每次只基于单条标注更新、缺少验证集模型在训练数据上做 F1/准确率早停可能导致对训练数据过拟合这是权衡之举YOLO 的局限预训练 YOLO 面向图像分类任务其特征未必适配所有场景如事件检测本方案不微调 YOLO只训练 YOLO 最后一层之上的 LSTM 部分标签不平衡模型对标签分布不平衡的数据可能效果不佳需保证训练数据中标签分布均匀可考虑修改损失函数BCEWithLogitsLoss并使用类别正样本权重class pos weights缓解未实现全量数据训练目前模型只基于最近一条标注训练尚未实现基于全部数据训练见源码timeline_labels.py::fit()。八、实战示例足球视频中的球体检测8.1 环境搭建标注配置View TimelineLabels namevideoLabels toNamevideo Label valueBall touch backgroundred/ Label valueBall in frame backgroundblue/ /TimelineLabels Video namevideo value$video height700 timelineHeight200 frameRate25.0 / /View连接模型后端新建项目进入Settings Model添加 YOLO 后端在终端进入本仓库的yolo示例目录更新docker-compose.yml执行docker compose up启动后端在项目设置中连接该后端并确认Interactive Preannotations关闭默认关闭。8.2 标注与训练标注视频上传足球视频到项目使用TimelineLabels控制标签标注球在画面中可见的时间区间模型训练提交标注后模型开始增量训练持续标注直到模型能产出准确预测校验预测模型为未标注视频自动建议标签标注人员验证并修正预测进一步改进模型。九、调参与重置模型若模型效果不佳可修改标注配置中以model_classifier_为前缀的 LSTM 与分类器训练参数。修改以下参数后模型将被重置model_classifier_sequence_sizemodel_classifier_hidden_sizemodel_classifier_num_layers标注配置中新增或删除标签模型重置后需要对新旧标注执行Update操作才能看到改进效果。若需修改更多参数可直接修改代码中的utils/neural_nets.py::MultiLabelLSTM。若需彻底重置模型可删除/app/models下的模型文件——模型文件名以timelinelabels-前缀开头具体路径见timeline_labels.py::get_classifier_path()。十、调试与日志以LOG_LEVELDEBUG环境变量运行后端可配置在docker-compose.yml中然后在Docker控制台查看日志输出即可进行调试。十一、核心数据结构TimelineLabels 区域与标签数组互转utils/converter.py提供两个核心转换函数convert_timelinelabels_to_probs()将 TimelineLabels 区域ranges转换为标签数组convert_probs_to_timelinelabels()将标签数组转换回 TimelineLabels 区域。标签数组是一个二元矩阵每一行对应视频的一帧每一列对应一个标签若该帧存在某标签则对应单元格为1否则为0。例如[ [0, 0, 1], [0, 1, 0], [1, 0, 0] ]对应标签顺序[label3, label2, label1]分别出现在第 1、2、3 帧。更多示例可参考tests/test_timeline_labels.py::test_convert_probs_to_timelinelabels()。十二、面向开发者的架构解析本部分深入剖析后端架构与代码调用流帮助开发者理解组件交互与扩展方式。12.1 类继承关系ControlModelLabel Studio 控制标签的基类TimelineLabelsModel继承ControlModel实现TimelineLabels标签专属功能文件timeline_labels.pytorch.nn.ModulePyTorch 所有神经网络模块的基类BaseNN自定义神经网络基类继承torch.nn.Module文件neural_nets.pyMultiLabelLSTM继承BaseNN实现多标签分类的 LSTM 网络。12.2 预测调用流12.3 训练调用流12.4 关键类与工具函数TimelineLabelsModeltimeline_labels.pyis_control_matched(cls, control)类方法检查给定的控制标签是否为TimelineLabelscreate(cls, *args, **kwargs)创建模型实例初始化trainable、label_map等属性predict_regions(video_path)预测主入口根据trainable属性分流到简单模式或可训练模式create_timelines_simple(video_path)调用cached_yolo_predict获取 YOLO 预测处理逐帧结果得到概率再经convert_probs_to_timelinelabels转为时间轴标签create_timelines_trainable(video_path)调用cached_feature_extraction提取特征加载已训练分类器预测概率后转为时间轴标签fit(event, data, **kwargs)标注创建/更新事件触发处理增量训练提取特征与标签 → 预处理 → 加载或新建分类器 →partial_fit→ 保存模型get_classifier_path(project_id)根据项目 ID 与模型名生成分类器模型文件的存储路径。BaseNNneural_nets.pyset_label_map(label_map)/get_label_map()存储/获取标签映射字典save(path)用torch.save保存模型load(cls, path)从指定路径加载模型load_cached_model(cls, model_path)缓存命中则加载否则返回None。MultiLabelLSTMneural_nets.py__init__(...)初始化网络层与超参数输入维度、隐藏层、dropout、优化器forward(x)前向传播——全连接降维 → LayerNorm Dropout → LSTM → 全连接输出preprocess_sequence(sequence, labelsNone, overlap2)切分与填充输入序列及标签partial_fit(sequence, labels, ...)增量训练——预处理序列、构建 DataLoader 分批、按准确率与 F1 阈值早停predict(sequence)将序列切块、以评估模式前向传播、拼接输出以对齐原始序列长度。工具与辅助函数cached_yolo_predict(yolo_model, video_path, cache_params)基于 joblibMemory缓存 YOLO 预测结果避免重复计算cached_feature_extraction(yolo_model, video_path, cache_params)通过钩取 YOLO 倒数第二层提取特征并缓存convert_probs_to_timelinelabels(probs, label_map, threshold)概率输出 → Label Studio 时间轴标签convert_timelinelabels_to_probs(regions, label_map, max_frame)标注区域 → 训练用概率序列。十三、结语TimelineLabels ML 后端将 Label Studio 的时序标注能力与「YOLO 特征提取 LSTM 时序建模」的深度学习管线无缝衔接为视频数据提供开箱即用的时序多标签分类方案。其核心价值在于通过partial_fit增量训练实现少样本迭代通过标注配置即可调节全部网络超参数且代码结构清晰ControlModel → TimelineLabelsModel、BaseNN → MultiLabelLSTM两条继承线非常适合作为二次开发与自定义时序分类模型的基础骨架。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门