摘要
由于目标对象的尺度不同,超高分辨率 (UHR) 图像中的对象检测长期以来一直是计算机视觉中的一个具有挑战性的问题。在条码检测方面,将 UHR 输入图像调整为更小的尺寸通常会导致相关信息的丢失,而直接处理它们的效率很高且计算成本很高。在本文中,我们建议使用语义分割来快速准确地检测 UHR 图像中各种尺度的条形码。我们的管道涉及大小大于 10k×10k 的图像上的修改后的区域提议网络 (RPN) 和新提出的 Y-Net 分割网络,然后是用于在每个分割的条形码掩码周围拟合边界框的后处理工作流程。端到端系统的延迟为 16 毫秒,比 YOLOv4 快 2.5 倍,比 Mask R-CNN 快 5.9 倍。在准确度方面,我们的方法在合成数据集上分别以 5.5% 和 47.1% 的 mAP 优于 YOLOv4 和 Mask R-CNN。 我们在 http://www.github.com/viplabB/SBD/ 提供了生成的合成条形码数据集及其代码。
关键词: 使用深度神经网络检测条码、条码分割、超高分辨率图像。
作者的网址为:http://www-video.eecs.berkeley.edu/~avz/
论文的地址为:https://www.researchgate.net/publication/349336332_Fast_Accurate_Barcode_Detection_in_Ultra_High-Resolution_Images
1 引言
条形码是数字标志,通常由相邻和交替的黑白小矩形组成,已成为人类社会的固有部分。 例如,在管理中,它们用于编码、保存和检索各种用户的信息。 在杂货店,它们被用来跟踪销售和库存。 在电子商务中更有趣的是,它们用于跟踪和加快仓库和履行中心的处理时间。
在经典信号处理中,用于检测的滤波器是特定于图像的,因为输入图像不一定都是使用相同的照明、亮度、角度或相机获取的。 因此,需要自适应图像处理算法,这会影响检测精度 [1]。 此外,由于经典信号处理方法通常在中央处理单元上运行,因此与在图形处理单元 (GPU) 上轻松优化的深度学习实现相比,它们往往要慢得多。
多年来,已经提出了许多使用经典信号处理检测条形码的方法 [1, 2, 3, 4, 5],但几乎所有方法都需要很长时间来处理超高分辨率 (UHR) 图像 . 更具体地说,[5] 使用平行线段检测器,该检测器改进了他们之前的工作 [6],在霍夫空间中寻找具有最大稳定极值区域的假想垂直线来检测条形码。 卡托纳等人 [3] 使用形态学操作进行条码检测,但由于不同的条码类型具有不同的检测性能,因此该方法不能很好地概括。 类似地,[7] 提出使用 x 和 y 导数差异,但不同的输入图像会产生不同的输出,并且在 UHR 图像上使用这种操作通常会变得非常低效。
使用神经网络,虽然条形码检测任务有了很大改进,但很少有人解决 UHR 图像中快速准确的检测问题。赞贝莱蒂等 [8] 为使用神经网络通过研究霍夫空间来检测条形码铺平了道路。随后是 [9],它采用了 You Only Looked Once (YOLO) 检测器来查找低分辨率 (LR) 图像中的条形码,但众所周知,YOLO 算法在处理长形物体(例如代码 39 条形码)时表现不佳。 Mask R-CNN [10] 等实例分割方法在 1024 × 1024 像素大小的图像上表现更好,但在较小尺寸的图像上,输出的兴趣区域 (RoI) 与长的一维条码结构不能很好地对齐。这是因为无论对象大小如何,它通常都会预测 28×28 像素上的掩码,从而在某些条码预测上产生“摆动”伪影,从而失去空间分辨率。以同样的方式,专用对象检测管道,例如 YOLOv4 [11],虽然它们在较低的联合 (IoU) 阈值上表现良好,但在较高的 IoU 阈值下会受到准确性的影响。在使用 LR 图像分割作为检测手段的那些中,[12] 在更高的 IoU 阈值下也往往表现不佳。
在本文中,我们提出了一种使用深度神经网络检测条形码的管道,如图 1 所示,它由分别训练的两个阶段组成。与经典的信号处理方法相比,神经网络不仅提供了更快的推理时间,而且产生了更高的准确度,因为它们学习了有意义的过滤器以进行最佳特征提取。如图 1 所示,在第一阶段,我们扩展了 Faster R-CNN [13] 中引入的区域提议网络 (RPN),以提取可能存在条形码的潜在位置的高清区域。这个阶段允许我们显着减少在第二阶段本来需要的推理计算时间。在第二阶段,我们引入 Y-Net,这是一种语义分割网络,可检测给定输出 RoI 图像 (400 × 400) 中的所有条码实例。然后我们对预测的掩码应用形态学操作来分离和提取相应的边界框,如图 2 所示。
图 1. 提议的方法,修改后的 RPN 后面是 Y-Net 和边界框提取器
图 2. 我们管道的示例输出; 黄色 - 分段条码像素; 紫色 - 分割的背景像素; 框 - 提取的边界框; (a) 合成条码图像; (b) 真实的条码图像;© (a) 的预测结果; (d) (b) 的预测结果。
现有条码检测工作的局限性之一是训练示例数量不足。 ArTe-Lab 1D Medium Barcode Dataset [8] 和 WWU Muenster Barcode Database [14] 是现有可用数据集的两个示例。 它们分别包含 365 和 595 张图像,地面实况掩码的分辨率为 640 × 480。ArTe-Lab 数据集中的大多数样本每个样本图像只有一个 EAN13 条形码,而在 Muenster 数据库中很少有超过 给定图像上的一个条形码实例。 为了解决此数据集可用性问题,我们发布了 100,000 个 UHR 和 100,000 个 LR 合成条形码数据集以及它们相应的边界框地面实况和地面实况掩码,以促进进一步研究。 本文的大纲如下:在第 2 节中,我们描述了我们的方法的细节; 在第 3 节中,我们总结了我们的实验结果,在第 4 节中,我们总结并扩展了我们未来的工作。
2 建议的方法
如图 1 所示,我们提出的方法由三个阶段组成:修改后的区域建议网络阶段、我们的 Y-Net 分割网络阶段和边界框提取阶段。
我们的 Y-Net 架构类似于英文字母“Y”,与 [15] 不同,[15] 使用预训练的编码器网络,该网络使用未经训练的镜像网络和解码器网络进行增强。
2.1 修改后的区域建议网络
区域建议在计算机视觉中具有影响力,在 UHR 图像中的对象检测方面更是如此。 在 UHR 图像中,条形码聚集在图像的一个小区域中是很常见的。 为了过滤掉大部分非条形码背景,我们修改了 Faster R-CNN [13] 中引入的 RPN,为我们的下一阶段提出条形码区域。 首先将 UHR 输入图像转换为 256×256 大小的 LR 输入图像,训练 RPN 以识别 LR 图像中的斑点。 一旦在识别出的斑点周围放置了一个边界框,所产生的提议边界框就会通过透视变换重新映射到输入的 UHR 图像,并裁剪出结果区域。 选择 RPN 的 LR 输入大小为 256 × 256,因为较低的分辨率会导致相关信息的丢失。 非最大抑制 (NMS) 用于预测以选择最可能的区域。
2.2 Y-Net 分割网络
如图 3 所示,Y-Net 由分布在 2 个分支中的 3 个主要模块组成:一个以蓝色显示的正则卷积模块构成左分支,一个以棕色显示的金字塔池化模块,以及一个扩张的橙色显示的卷积模块经过串联和卷积后构成了右分支。
图 3. Y-Net 架构
常规卷积模块接收 RPN 的 400 × 400 输出图像,并由卷积层和池化层组成。 它从 64 通道 3 × 3 内核开始,每层的数量翻倍。 我们在卷积和最大池化之间交替,直到我们达到 25 × 25 像素的特征图大小。 该模块允许模型学习输入图像中任何位置的一般像素信息。
膨胀卷积模块利用条形码具有交替的黑白矩形的事实来学习其结构中的稀疏特征。 这个模块的动机来自这样一个事实,即扩张卷积算子在双正交小波分解的“算法”中发挥着重要作用 [16]。 因此,这种过滤器可以更准确地学习条形码中交替图案的不连续性和锐利边缘。 此外,它们利用多分辨率和多尺度分解,因为它们允许内核以从 1 到 16 的膨胀率扩大其感受野。这里也使用了 400 × 400 输入图像,我们保持 32 – 通道 3 × 3 内核遍及整个模块,而层的维度使用 2 的步幅逐渐减小,直到获得 25 × 25 像素的特征图。
Pyramid Pooling Module 允许模型学习关于不同尺度条形码潜在位置的全局信息,并且其层与膨胀卷积模块上的层连接,以保留从两个模块中提取的特征。
然后将来自右分支的结果特征图添加到正则卷积模块的输出中,这允许修正任一分支可能遗漏的特征。换句话说,每个分支的输出构成了另一个分支的残余校正,从而改进了每个节点的结果,如白色所示。然后对节点进行上采样并与以相应维度的红色和黄色显示的转置卷积特征图连接。在整个网络中,我们在每一层之后使用 ReLU 作为非线性,并添加 L2 正则化以解决训练期间可能发生的过拟合情况。在所有数据集上,我们将 80% 用于训练集,10% 用于验证集,其余 10% 用于测试集。我们使用一个 NVIDIA Tesla V100 GPU 进行训练。由于这是一个分割网络,我们对分类背景和条形码感兴趣,我们使用二进制交叉熵作为损失函数。
2.3 边界框提取
由于一些图像包含彼此非常接近的条形码,它们的 Y-Net 输出反映了相同的配置,这使得单个条形码边界框的提取变得复杂,如图 4(a)所示。 为了有效地分离它们,我们使用像素校正余量执行腐蚀、轮廓提取和边界框扩展。 如图 4(b) 所示,腐蚀阶段允许算法扩大分段条码之间的间隙,这些条码可能由 1 个或多个像素分隔。 然后在图 4© 中的轮廓提取阶段,通过边界跟踪,使用得到的掩码来推断单个条形码边界框。 如图 4(d) 所示,在扩展阶段使用像素校正余量来恢复原始边界框的尺寸。 我们流水线的这个后处理阶段的平均处理时间为 1.5 毫秒 (ms),因为它由一组 Python 矩阵操作组成,可以有效地从预测掩码中提取边界框。
图 4. (a) Y-Net 输出; (b) 侵蚀后的 Y-Net 输出; © 在侵蚀输出上提取边界框——红色,真实边界框——绿色; (d) Y Net 输出的像素校正余量后的最终边界框; (e) 被遮挡条码场景的 Y-Net 输出; (f) 由于输入图像中的条形码重叠,最终提取的边界框在像素校正余量后分组