You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Approx-Vision转换COCO2017至RAW Bayer时Halide函数报错求助

问题描述

我正在使用Approx-Vision库将COCO2017数据集转换为RAW Bayer格式,多数图片可正常转换,但部分图片转换失败。采用pipeline_V2.cpp(由run-pipe.py脚本运行)执行转换时,部分图片出现如下错误:

root@167545c2c5e4:/approx-vision/pipelines/common# ./pipeline_V2.o /datasets/000000431848.png /datasets/ 
Error at ./pipeline_V2.cpp:153:
Input buffer b0 is accessed at 2, which is beyond the max (-1) in dimension 2
Aborted (core dumped)

正常情况下应输出.png格式的RAW BAYER图像,需明确该报错的原因及解决方法。

报错原因分析
  • 输入图片维度异常:报错显示维度2的最大索引为-1,说明程序读取目标图片时,某个关键维度(如通道数、高度/宽度)未被正确加载,导致缓冲区b0的维度值无效。COCO2017数据集以3通道RGB图为主,但存在少量单通道灰度图、尺寸异常(如高/宽为0)或损坏的图片,这类样本会触发该问题。
  • 代码未做边界校验:pipeline_V2.cpp第153行的缓冲区访问逻辑默认输入为3通道RGB图,未对输入图片的维度合法性做校验,遇到非预期格式的图片时,直接按固定维度访问导致越界崩溃。
解决方法

预处理异常图片

  • 定位失败图片的具体问题:用identify命令查看图片属性,示例命令:identify /datasets/000000431848.png,确认是否为单通道、尺寸异常或文件损坏。
  • 针对性处理:将单通道图转为3通道RGB图,修复可恢复的损坏图片,对无法修复的样本直接跳过。

修改代码添加边界校验

  • 打开pipeline_V2.cpp,定位到第153行附近,在访问缓冲区b0前添加维度校验逻辑:检查维度2的长度是否≥3,若不符合则输出错误日志并终止当前图片的处理流程,避免程序崩溃。
  • 重新编译代码:执行原编译命令(如g++ pipeline_V2.cpp -o pipeline_V2.o),替换原可执行文件后重新运行转换任务。

优化批量处理脚本

  • 修改run-pipe.py,添加子进程执行结果的判断逻辑:当调用pipeline_V2.o返回非0状态时,记录失败图片的路径,然后继续处理下一张图片,避免批量转换任务中断。

内容的提问来源于stack exchange,提问作者Abduragim Shtanchaev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:37:01