Repository navigation
Releases
LabelForge v2.0.7
LabelForge v2.0.7 — 视频推理成片与逐帧标注
✨ 新增
• 视频推理成片:按帧跑检测并重新编码,可选跨帧跟踪,成片里可显示轨迹编号
• 跨帧跟踪:ByteTrack 式两阶段关联,未匹配上的轨迹用低分框续接;卡尔曼滤波只用于预测匹配位置,写进成片与标注的仍是检测框本身
• 逐帧标注导出:与成片一起产出 LabelMe 数据集,images/ 下图片与同名 JSON 成对存放,classes.txt 与清单留在根目录
• 滑窗与区域推理新增「去重比例」:小框被另一个框覆盖达到该比例即删除,不分类别,尺寸悬殊的保留
• 被窗口切缝切成上下两段的同一目标自动拼合为一个框
🔧 修复
• 滑窗与区域推理在开启跟踪时取不到低分框,两阶段关联退化为单阶段
• 逐帧标注落盘失败被静默忽略
• 同一帧内几乎重合的重复检测未去重,两条轨迹抢同一目标
• 删除推理侧的「最低可见比例」:该判据属于数据增强的滑窗裁剪,推理侧不再使用;旧配置中的该项读入即忽略
• 低分框阈值由 0.1 提高到 0.3
LabelForge v2.0.6
LabelForge v2.0.6 — 右键菜单只列常用标签
✨ 改进
• 检测框右键菜单:不再平铺数据集全部类别。分隔线下列出常用标签一块 —— 最近选定的最多 3 个排在最前,其后按数据集内框数降序的类别最多 5 个;块内去重,且不显示当前标签
• 贴图项右键菜单:同样只列常用贴图标签一块 —— 最近选定的最多 3 个在前,其后按当前会话贴图数排序最多 5 个;贴图标签与检测框标签是两套独立体系,最近记录分开保存
• 菜单长度不再随类别数增长,类别很多时也不会超出屏幕
• 全量类别经「修改标签…」选取,该对话框支持滚动与输入新标签
• 最近选定记录在当前数据集的记忆里,随记忆记录保存,跨会话保留;切换数据集时自动换成该数据集的记录
🔧 修复
• 检测框右键的「修改标签」改为打开标签选择框,与菜单文案一致;「移除」保持原有撤销行为
LabelForge v2.0.5
LabelForge v2.0.5 — 推理支持分割、旋转框与姿态模型
✨ 新功能
• 推理任务扩展:除检测框外,现支持分割、旋转框、姿态三类模型,覆盖 YOLOv8 / YOLO11 / YOLO26
• 任务自动识别:读取模型自带的元数据判定任务,缺失时按输出形状推断。模型列表每行新增任务下拉,可手动指定自动 / 检测 / 分割 / 旋转框 / 姿态,并显示判定结果
• 分割:输出多边形标注,顶点起点统一归一到最左上角,与手绘多边形同一口径,类别标签始终落在同一位置
• 旋转框:输出四角点旋转框,严格顺时针且起点归一到最左上角,与手绘旋转框一致
• 姿态:实例框与关键点用同一分组号绑定,关键点名称读模型自带配置
🔧 修复
• 旋转框:旋转手柄与角度文字改为画在矩形中心。此前手柄挂在框边外侧,角度文字挤在左上角
• 旋转框:鼠标拖拽或键盘旋转之后,类别标签会跳到框的另一个角,现始终固定在左上角
• 区域推理:跨窗口合并结果时,多边形、旋转框与关键点的顶点没有跟着平移,标注整体偏移
📄 格式说明
• 推理结果与手绘标注在显示格式(类别文字、标签位置、摇杆位置、角度文字)与 JSON 格式上完全一致,可混用于同一份标注,一致性由自动化测试逐项校验
LabelForge v2.0.4
LabelForge v2.0.4 — 数据集分组重做、导出流程简化
✨ 新功能与改进
• 数据集分组:原「Kmeans划分」更名为「数据集分组」,入口在工具栏「导出」菜单
• 数据集分组:聚类算法重写——按类别覆盖图片数、框面积中位数与面积离散度三项特征建模,改用层次凝聚聚类;推荐组数由数据本身的层次结构给出,同一份数据每次分析结果一致,也可手动调整
• 标签导出:数据处理面板的导出格式固定为 YOLO,去掉格式下拉框——该面板下游的划分只读 labels/*.txt,导出成 VOC/COCO 后接不上
• 标签导出:YOLO 任务类型(检测 / 分割 / 旋转框 / 关键点)改为按标注的 shape_type 自动判定,不再需要手动选
🔧 修复
• 导出:标签含 &、<、> 等字符时产出的 VOC XML 损坏,现由标准库转义
• 导出:越界框的坐标未钳制到图像范围(YOLO 归一化值超过 1、COCO/VOC 落到图外),现统一钳住并跳过不足 1px 的退化框
• 导出:COCO 在图片较多时只写出最后一批——标注是单个 json,分块写会互相覆盖,现改为整体一次写出
• 导出:YOLO-Pose 的矩形框与关键点无法聚合为同一实例,现按 group_id 正确配对
• 画布:检测框标签字号不再随缩放反向补偿,改为只跟设置里的字号走
⚡ 性能(大数据集)
• 导出:VOC / COCO 的写出改由格式转换模块统一承担,三套序列化实现合成一份
LabelForge v2.0.3
LabelForge v2.0.3 — 转换进度修复、推荐聚类数修正、撤销补全
🔧 修复
• 数据转换:进度显示覆盖读取、写出、校验全程,100% 即转换完成,支持中途取消
• 数据转换:COCO 输出逐张更新写出进度
• 撤销:多边形 / OBB 顶点的插入、删除、拖动此前无法撤销,现可正常回退
• 数据集分类:推荐聚类数此前恒等于最大 K,Silhouette 列全为负数——现按标准轮廓系数评估,推荐真实最优,同一数据结果稳定
• 一键贴图:已删光标注框的图片贴图后旧框从磁盘复活,现保持为空
• 一键贴图:进度小窗到 100% 不自动关闭,现完成即退出
• 数据转换:拖动或删除检测框时画布贴图被一并抹掉,现完整保留
• 数据转换 / 导出:标签含 &、< 等字符时导出的 VOC XML 损坏,现已转义
• 数据集工具:中文界面下弹窗按钮显示英文 OK,现为「确定」
• 设置:配置文件写入改为原子操作,断电 / 崩溃不再损坏全部设置
⚡ 性能(大数据集)
• COCO 导入:万图级从分钟级到秒级(原先每张图全表扫描一遍)
• 统计弹窗打开更快:每个标注文件只解析一次(原先两遍)
• 导出提速:只读文件头获取宽高,不再整图解码
• 数据增强内存占用大幅下降(不再把每张结果图留在内存)
• 画布更流畅:放大镜关闭时省去每帧满幅离屏拷贝;贴图覆盖层免临时位图
LabelForge v2.0.2
LabelForge v2.0.2 — 界面可读性与参数排布调整
🔧 修复
• 标签列表的筛选按钮:「T」「G」字母被按钮内边距裁掉而看不见,现已完整显示
• 标签统计:类别名被截断(如 traffic ...),现已完整显示
• 标签统计:四个图表的横轴刻度挤成一排,现按可用宽度自动取点
• 滑窗裁剪:三行参数的输入框与锁未对齐,现已对齐成列
• 画布显示调节面板:英文界面下 Brightness / Contrast 标题被裁,现已自适应宽度
• 禁用项文字、错误提示与输入框边界的对比度过低,现按可读性重校
• 界面字号写死为 12px、不随系统缩放,现按屏幕 DPI 换算
🎨 界面
• 数据增强按「几何 / 色彩 / 噪声」三组排列,每行 4 项,面板相应加宽
• 数据导出:类别列表按等宽列排列,增强参数输入框统一宽度
• 数据集划分显示三个比例的合计,不足 1 时给出提示
• 一键流水线改为有色块的步骤条,勾选状态一眼可见
• 标签统计:「健康建议」独立成行并加高亮
• 滑窗裁剪:预览的保留 / 空窗边框加粗并加光晕
• 检测框标签字号随画布缩放调整,放大时不过大、缩小时仍可读
LabelForge v2.0.1
LabelForge v2.0.1 — 滑窗重叠按方向独立设置,界面参数更紧凑
✨ 新功能与改进
• 滑窗裁剪:横向重叠与纵向重叠可分别设置,两个方向的窗口排布互不影响
• 滑窗裁剪:重叠与窗口尺寸一一对应显示,修改横向窗口宽度只反推横向重叠,纵向同理,不再牵动另一方向
• 推理范围:横向与纵向重叠支持分别设置
• 重叠参数合并为「a × b」一行显示,不再占两行
• 输入框宽度收紧:滑窗裁剪的行列、最小可见比例、填充 RGB 三通道,以及推理范围的最低可见比例,数字完整可见同时更省横向空间
🎨 界面
• 画布左下角的显示调节面板重做:标签透明度、画面亮度、对比度三列并排,可收起为图标,不再遮挡画布内容
LabelForge v2.0.0
LabelForge v2.0.0 — ONNX 图片推理、视频与滑窗区域推理
本版跨越三个新功能域:图片推理、视频、滑窗/区域推理。项目由 PasteLabel 更名为 LabelForge,界面框架由 PyQt5 迁到 PySide6,许可协议由 MIT 改为 LGPL-3.0-only。
✨ 新功能与改进
• ONNX 图片推理:支持 YOLOv5 / YOLOv8 / YOLO11 / YOLO26 四种导出,可对当前图片或整批数据集推理,结果写成 LabelMe 标注
• 模型格式自动识别:从输出形状与模型自带 metadata 判断,歧义形状直接报错要求显式指定格式,不猜(猜错会静默产出错误标注)
• 端到端模型(YOLO26)自动跳过 NMS:其导出已内置 NMS,再跑一遍会静默吞掉重叠框(实测 25 框变 22 框);界面把 NMS 输入框置灰并说明「该模型已内置 NMS,此项不生效」
• 兼容带辅助输出头的第三方自训练导出:按形状挑出主检测头(只看形状不看输出名,因为第三方输出名毫无规律);分割 / 姿态 / OBB 导出会明确拒绝而非瞎挑
• 推理设置行:工具栏四个图标(参数行、▶ 单图、⚡ 批量、漏斗筛选),设置行可关闭,关闭即停止推理但模型保持已加载;阈值与输入尺寸直接写入已加载的模型,调参不再重载模型
• 置信度显示与保存:写入 LabelMe 顶层 score 字段(手工框写 null 占位),画布可显示(固定两位小数,存储保留原始精度),新增「显示置信度」复选框与快捷键 Y 切换
• 类别筛选:可滚动勾选列表,支持全选 / 全不选,按钮上显示 (已选/总数);筛选只作用于本次推理写入的框,不动已有标注
• 推理进度窗:每行带北京时间戳(固定 UTC+8、精确到毫秒)、文件名、该图框数与单张耗时,最新在最上;向上翻历史时不会被新结果拽回底部
• 推理范围:可选全图 / 滑窗 / 区域三种模式,默认全图
• 滑窗推理:参数实时回显、窗口网格在画布上绘出并给每个窗口标 r1c1 式编号,跨窗结果按模型行的 NMS 阈值合并去重,并按可见度过滤过低的框
• 区域推理:画布内联绘制区域、列出区域坐标并带删除按钮、逐区域锁定、四角与边手柄调整、滚轮编辑、缩放感知的命中区域
• 视频抽帧:把视频按时间采样导出为图片数据集(按时间点采样而非固定帧步长整除,29.97 FPS 抽 2 FPS 也能得到准确的 2 FPS),每张图配映射记录写入 video_manifest.json
• 视频合成:把抽帧图片连同各自的标注合成为一段视频,输出原子发布(先写 .partial.mp4,校验通过再改名),失败不留看似成功的输出
• 推理成片:把原视频逐帧跑模型、将框烧进每一帧再编码成新视频,帧数 / 分辨率 / 帧率 / 时长与源视频完全一致,支持叠加标签与滑窗、区域推理
• 视频标签叠加:可勾选类别、类别名、置信度,默认与画布显示一致;标签字号可调并带可展开预览
• 视频功能支持中文路径:Windows 上 cv2 的 imread/imwrite 完全不支持中文路径(imwrite 返回 False 且不写文件),全部改用 imencode / imdecode 绕开
• 新增快捷键 Ctrl+Shift+Z:画布聚焦时删除当前图片的标注
• 参数行新增「批量目标」输入框,默认值为最后一张图
• 设置窗口显示版本号,「恢复默认设置」按钮移到保存旁边
• 画布:在图像任意位置按下即可平移(此前只在缩放后生效),拖出复制改为按鼠标移动触发,区域改为手型光标
• 界面圆角统一:选项弹窗、按钮与输入框统一为 4px,进度条样式抽成统一的主题方法供多处共用
• 推理进度窗时间戳去掉年月日:一次批量推理不跨天,日期是纯噪声,去掉后文件名这一列看得更清
• 画布清空后删除该图的 sidecar json:空 json 会让「从未标注」和「标注后删空」无法区分
• 应用图标重做:橙→品红的 F,SVG 绘制后按每个尺寸单独渲染,资源管理器与任务栏不再靠放大糊掉的 PNG
• 改名不停用旧设置:启动时若发现 ~/.pastelabel.json 且没有新的配置文件,就复制成 ~/.labelforge.json(旧文件保留),环境变量 PASTELABEL_CONFIG_PATH 同样回退
🔧 修复
• 修复加载数据集时静默销毁标注:渐进式加载器对每张图写入空框列表,而缓存命中判定是「键是否存在」——空列表被视为合法的「已加载、结果为零框」,于是加载器替所有还没读过的图标了「没有标注」
• 修复切换图片后旧检测框被写回缓存:缓存命中判定用「列表非空」,导致空结果不被识别为已缓存,切到该图时会重读磁盘并把已清掉的旧框写回
• 修复删除仍有内容的 json:空判断用的是内存中的框列表,漏掉两类实际有内容的文件
• 修复不同类别的框在保存时被当作重复而丢掉:去重只看几何形状,而模型常为一个区域给出多个类别提议,纯几何去重会静默丢掉其中一个
• 修复通过画布右键重命名时改掉所有同名框:该菜单调用的是整类重命名,现在只改当前这一个框
• 修复画布完全空白且无任何报错:绘制时取值写错了变量名,异常被 paintEvent 的兜底 except 吞掉(未捕获异常会让 Qt 直接终止进程)
• 修复删除已加载的背景文件夹后刷新,界面仍在撒谎:列表仍指向不存在的文件、画布仍显示最后一张图
• 修复设置窗口里放大器的四个选项在中英文界面都显示中文(侧边 / 鼠标中心 / 窗口放大器尺寸 / 放大器显示位置):这些键中文表里也缺失,取值失败时回退到键本身,编辑时看着正常
• 修复标注质检的小目标判据与标定前提不符:原判据各轴各比各的,而预处理是等比缩放,短边的缩水被抹掉;改为原图与框一起等比换算到 640 输入空间判断
• 修复打包版一点「数据增强」或「格式转换」就崩(AttributeError: 'QTextCursor' object has no attribute 'End'):光标枚举原来取在实例上,PyQt5 允许、PySide6 不允许,迁移时漏改了两处日志框
• 修复关键点落在检测框内时,画布右键弹出的是检测框的菜单:左键的命中顺序是「关键点在最上层」,右键却按列表顺序取第一个命中的框,两者口径不一致
• 修复统计窗的图表再也回不到 1:1:等高归一化只在「四个面板堆成一列」时才执行,而默认排布是 2×2 两列,于是同一列上下被拖成 1:2 后就无人纠正;拖分隔条也只改几何、不发 dockLocationChanged,连触发都等不到。现在行内等宽、列内等高,拖完左右比例一并回到默认
• 修复切换工作视图后已标注图片的圆点变回灰色:视图切换只重建列表行、不重启后台扫描,状态要等下次切图才补上
• 修复统计窗的表格、表头、面板标题与颜色按钮四角是直角,统一为项目一致的 4px 圆角
📦 其他变更
• 项目更名 PasteLabel → LabelForge:包目录、配置文件、CLI 名称、文档同步,旧配置自动沿用
• 界面框架由 PyQt5 换成 PySide6(Qt6)
• 许可协议由 MIT 改为 LGPL-3.0-only:换绑定并不能回避 Qt 的 LGPL,PyQt 的 wheel 里带的也是 LGPL 版 Qt;一文件打包的 exe 无法满足 4(d)(1),采用 4(d)(0) 路线(开放源码 + 可替换的 Qt),LICENSE 与 THIRD-PARTY.md 随源码仓库提供
• Linux 包照常提供,但构建基线由 Ubuntu 18.04 上调到 20.04(glibc 2.31):PySide6 需要 glibc ≥ 2.28,18.04 装不上;同时把 PySide6 上限钉在 <6.10,因为 6.10 的 Linux wheel 要求 glibc 2.34,会在无人察觉的情况下再把门槛抬高
• 依赖版本以 requirements.txt 为唯一出处,CI 直接读它,避免两处各钉一份
• 新增运行时依赖 cv2,钉到 opencv-python-headless>=4.10,<4.11(只用 headless,不要与其它 OpenCV 发行版混装)
• 内部重构:画布滚轮处理、主题样式表、统计健康面板等拆成小函数;框命中判定、并发扫描、关闭处理收敛到共享实现(行为不变,为后续修改降低出错面)
PasteLabel v1.5.3
PasteLabel v1.5.3 — 小目标可检测性审核与文件夹拖入加载
✨ 新功能与改进
• 标注质检新增「小目标可检测性」审核:按框短边占原图边的比例分两档 —— 低于 0.625%(约 4px@640 输入)常规配置检不到、低于 1.25%(约 8px@640)需 P2 检测头或裁剪放大;结果窗口表格新增「尺寸/提示」列(宽不足 / 高不足 / 宽高均不足 + 占比 + 建议);贴图参与检查,关键点与多边形不检查
• 小目标行右键「标记保留」:给框写入 flags.tiny_keep,之后该框不再触发尺寸类问题(含超小框)
• 文件夹拖到画布/窗口:直接按数据集加载该文件夹(替换当前列表,与文件夹按钮一致);拖入散图仍是追加
• 背景图列表 ◀/▶ 箭头支持长按连切:按住约 0.4 秒后连续翻页(约 8 张/秒),单击仍翻一页
• 背景图列表表头新增刷新按钮:就地重扫当前文件夹,增删文件同步进列表,不丢未保存的标注
• 质检进度条改为圆角样式,扫描完成后自动隐藏
• 滑窗裁剪:补边量上限收紧到窗口 30%(超限自动调重叠、保持网格恰好铺满),默认参数按首张图推导,导出文件名追加 _ov{重叠};新增「取消全选」按钮
🔧 修复
• 修复加载/保存丢失自定义 LabelMe flags 的问题
• 修复背景列表表头过宽导致「工作路径」按钮文字被截断的问题
PasteLabel v1.5.2
PasteLabel v1.5.2 — 滑窗裁剪参数模板
✨ 新功能与改进
• 滑窗裁剪配置窗新增「模板」行:自动记录最近 3 次使用的参数组合,按钮一键套用,行列按当前图自动重算,跨会话保留
• 最小可见比例默认值调整为 70%(可调范围 50%~100%),正方形锁定默认不勾选