Kornia 视频框修复解析VideoBoxes.get_boxes_shape()与to_mask()的TypeError消除migration-042【免费下载链接】kornia 空间人工智能的几何计算机视觉库项目地址: https://gitcode.com/kornia/kornia导读本文围绕 kornia 仓库changelog.d/migration-042.fixed.md记录的一次关键修复展开此前在视频增广管线中调用VideoBoxes.get_boxes_shape()与VideoBoxes.to_mask()会稳定抛出TypeError导致AugmentationSequential为视频框输入构建的容器链路不可用。修复后这两个继承自Boxes的方法可以正常工作且不改变任何既有合法调用的结果。读完本文你将理解 bug 的根因、修复的最小改动原则以及它在视频数据增广batch × frames × boxes场景下的实战影响。一、修复背景VideoBoxes与Boxes的继承关系1.1 两个核心类在 kornia/geometry/boxes.py 中Boxes第 190 行起2D 框容器存储形状为(N, 4, 2)、(B, N, 4, 2)或 list 形式VideoBoxes第 1072 行起继承Boxes专为视频序列设计接受(B, T, N, 4, 2)输入内部展平为(B·T, N, 4, 2)存储并保存temporal_channel_size T以便在导出时恢复时间轴。VideoBoxes.to_tensor()第 1150 行在super().to_tensor(...)之后通过out.view(-1, self.temporal_channel_size, *out.shape[1:])恢复时间维度是视频框回传张量的核心路径。1.2 Bug 的直接现场Boxes.get_boxes_shape()第 328 行内部调用boxes_xywh cast(torch.Tensor, self.to_tensor(xywh, as_padded_sequenceTrue))Boxes.to_mask()第 819 行内部调用clipped_boxes_xyxy cast(torch.Tensor, self.to_tensor(xyxy, as_padded_sequenceTrue))而VideoBoxes的重写只声明了mode参数旧签名def to_tensor(self, mode: Optional[str] None)未声明as_padded_sequence。因此任何从基类继承、内部向to_tensor传递as_padded_sequenceTrue的方法在VideoBoxes实例上都会触发TypeError: to_tensor() got an unexpected keyword argument as_padded_sequence二、根因分析与最小修复2.1 为什么每个调用都失败get_boxes_shape与to_mask是VideoBoxes继承自Boxes的方法它们固定向to_tensor传入as_padded_sequenceTrue。由于VideoBoxes的重写签名缺少该关键字这两个方法在VideoBoxes上必然失败——包括AugmentationSequential为视频框输入构建的容器路径见 kornia/augmentation/container/augment.py 第 722-739 行_preproc_boxes当contains_video_sequential为真时调用VideoBoxes.from_tensor(arg)。2.2 修复内容修复后的VideoBoxes.to_tensor签名改为def to_tensor(self, mode: Optional[str] None, as_padded_sequence: bool False) - torch.Tensor | list[torch.Tensor]: out super().to_tensor(mode, as_padded_sequenceas_padded_sequence) if isinstance(out, torch.Tensor): return out.view(-1, self.temporal_channel_size, *out.shape[1:]) return [_out.view(-1, self.temporal_channel_size, *_out.shape[1:]) for _out in out]关键点接受并转发关键字as_padded_sequence被完整透传给基类Boxes.to_tensor第 738 行不影响正常调用该参数只改变 list-backed 容器的输出形式。由(B, T, N, 4, 2)张量构建的VideoBoxes并非 list-backed_N is None因此该关键字对其结果无任何影响向后兼容默认值False与旧行为一致所有既有合法调用结果不变。三、源码佐证list-backed 语义Boxes.to_tensor中第 813-816 行if self._N is not None and not as_padded_sequence: boxes [torch.nn.functional.pad(o, (len(o.shape) - 1) * [0, 0] [0, -n]) for o, n in zip(boxes, self._N)] else: boxes boxes if self._is_batched else boxes.squeeze(0) return boxes_N为None时走 else 分支as_padded_sequence完全不生效——这正印证了修复文档的论断它只改变 list-backed 容器而从张量构建的VideoBoxes不是其中之一所以没有合法调用会改变其结果。四、测试验证与已知遗留4.1 测试覆盖tests/geometry/test_boxes.py 中TestVideoBoxes第 1881 行起针对本次修复提供双重验证test_convention_inherited_shape_and_mask_work_on_the_temporal_wrapper_4249第 2024 行直接断言get_boxes_shape()与to_mask(4, 5)不再抛出TypeError并以AssertionError捕获残留异常test_wart_indexing_drops_the_temporal_size_4249第 1972 行固定剩余的另一半 #4249——索引操作仍会丢失temporal_channel_sizeframe video_boxes[0] with pytest.raises(AttributeError, matchtemporal_channel_size): frame.to_tensor()4.2 遗留问题诚实边界从源码与测试可以确认索引仍丢失时间轴Boxes.__getitem__第 306 行用type(self)(...)构造结果从不设置temporal_channel_size导致切片后的to_tensor抛出AttributeError。这是 #4249 未修复的一半文档注释boxes.py 第 1100-1104 行同时标注了validate_boxes标志当前无效#4177。五、实战影响视频增广容器链路在 kornia/augmentation/container/augment.py 中视频框的处理流程为_preproc_boxes第 722 行检测contains_video_sequential后调用VideoBoxes.from_tensor(arg)第 735 行容器内几何变换作用于展平的(B·T, N, 4, 2)数据_postproc_boxes第 741 行调用out_arg.to_tensor(modemode)第 757 行恢复时间轴。本次修复保证了在管线中如需调用get_boxes_shape计算每个框的宽高或to_mask将框渲染为掩码图不再中断。可结合下列入口深入阅读kornia/geometry/boxes.pyBoxesL190、VideoBoxesL1072、Boxes.to_tensorL738、Boxes.get_boxes_shapeL328、Boxes.to_maskL819kornia/augmentation/container/augment.py_preproc_boxesL722、_postproc_boxesL741tests/geometry/test_boxes.pyTestVideoBoxesL1881。六、迁移建议升级到包含 #4176、#4365 修复的版本后现有VideoBoxes代码无需任何修改签名扩展完全向后兼容若此前因TypeError绕过了get_boxes_shape/to_mask例如先to_tensor再手写宽高计算现在可直接调用继承方法仍需注意索引切片后不要调用to_tensor应使用video_boxes.data或先恢复容器这是当前版本明确的已知限制#4249 剩余部分。【免费下载链接】kornia 空间人工智能的几何计算机视觉库项目地址: https://gitcode.com/kornia/kornia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
九号M95C夜路大灯选型:从功率光型到DC的技术判断 九号M95C高频夜路的大灯升级,技术上要同时满足照度射程、光型合规、连续工作热管理和供电匹配四个条件,单纯比标称功率没有意义。综合参数,多数一周夜骑多次的M95C对到紫色妖狐(M系185W、1.6寸3透镜三近九远双直射、远光约250米、… · 2026/9/23 13:17:12
怎样取消超级qq面试必问3种方案避坑指南 怎样取消超级qq面试必问3种方案避坑指南 复制来的代码跑不通,报错信息全是天书,不知道从哪下手调?别急,这行代码能跑通,但逻辑全错的情况更让人头大。很多开发者在接手旧项目或看教程时,常遇到这种“看起来对,运行就崩”的陷阱。其实,这背后往往涉… · 2026/9/23 13:17:12
DRNN单通道人声分离:小数据低算力下的轻量实用方案 简介:本资源是一套基于深度循环神经网络(DRNN)实现单通道音乐人声分离的Python完整源码,面向计算机、人工智能、电子信息等专业的在校学生及初学者,适用于毕业设计、课程大作业、期末项目或算法实践入门。代码已通过实… · 2026/9/23 13:17:06
Java Web车辆管理系统源码解析:JSP+SQL Server真实业务闭环 简介:本资源是一套完整的毕业设计级Java Web项目——住宅小区车辆管理系统,面向计算机专业本科生及Java初学者,解决小区车辆登记、进出管控、车位分配与预约等实际物业管理需求。系统采用JSP前端SQL Server数据库JDK 1.8技术栈,兼… · 2026/9/23 14:05:10
SpringBoot+Vue车辆管理系统设计与实践 1. 项目背景与核心价值去年接手一鹿租车公司的技术升级项目时,发现他们还在用Excel表格管理200多台租赁车辆。每天交接班时,客服要手动核对30多张表格,经常出现车辆状态更新延迟、维修记录遗漏的情况。最严重的一次,由于系统未及时… · 2026/9/23 14:05:10
短网址生成与防红源码实战:域名池调度、跳转链路分层与边缘解析优化 简介:这是一套带后台管理系统的短网址生成与防红服务源码,面向有一定PHP基础的Web开发者、建站爱好者及需要链接推广与防封场景的运营人员。它通过哈希映射与自定义短码将长网址转为易记短链,并借助加密混淆、代理转发等策略降低链接被平台屏… · 2026/9/23 14:05:10
西瓜书线性模型Python手实现:对率回归与LDA从推导到可视化 简介:本资源是《机器学习》(周志华著,俗称“西瓜书”)第三章“线性模型”的配套Python实践代码包,面向机器学习初学者与高校课程实践者,聚焦对率回归与线性判别分析两大核心算法的动手实现与验证。资源完整… · 2026/9/23 14:05:09
FURUNO FAR-28x7 雷达操作与维护全指南:从按键到避碰 简介:这份FURUNO雷达使用说明书PDF面向船舶驾驶人员、航海电子设备维护者及航运院校师生,针对FAR-2817/2827/2837S系列雷达的日常操作与功能理解需求,帮助读者掌握ARPA与AIS一体化航海雷达的使用方法。资源包共1个文件,为PDF格式&… · 2026/9/23 14:05:02
SciPy `kstwo` 分布详解:双样本 Kolmogorov-Smirnov 统计量的精确概率分布 SciPy kstwo 分布详解:双样本 Kolmogorov-Smirnov 统计量的精确概率分布 【免费下载链接】scipy SciPy library main repository 项目地址: https://gitcode.com/gh_mirrors/sc/scipy
导读
本文围绕 SciPy 官方教程文档 continuous_kstwo.rst 展开ÿ… · 2026/9/23 14:05:02
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29