使用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
相关产品推荐
相关产品推荐

