[博客翻译]分割漫画书框架


原文地址:https://vrroom.github.io/blog/2024/02/23/comic-frame-segmentation.html

代码地址:https://github.com/Vrroom/segment-anything-comic

模型地址:https://drive.google.com/file/d/1z8OE8TC8eupC6_ZNxUSVyfvk4rSkVIgE/edit

引言

在学习计算机视觉课程的经典技术时,我偶然阅读了Max Halford关于从漫画书中提取画框的博文。他设计了一个颇为有趣的算法,采用Canny算子检测画框边界,填补空洞,并对连续区域拟合边界框。

这一巧妙算法虽然效果显著,但亦有不足之处。例如,它无法处理任意非对齐多边形,且在负画框上无效,因为负画框没有自己的边界,而是由邻近画框的边界定义。

鉴于对如SAM这类基础模型在分割领域的热议,我通过程序化生成合成的漫画书数据集,并对SAM进行微调,以便检测画框的角点。

comic_panels.png

  • 上图:David Revoy的《Pepper and Carrot》中的画框为多边形,非轴对齐边界框。
  • 下图:负画框可能没有明确的边界。

程序化漫画生成器

针对这一问题,现有数据并不丰富。但这并不意味着我们应束手无策。一种广泛应用的常见技术(参见Erroll Wood的工作)是程序化生成训练数据。

在我们的案例中,这意味着模拟漫画书。注意,我们不需要制作引人入胜的动画或讲述故事,我们只需生成从五万英尺高空看似漫画的面板。为此,我编写了一个布局的程序生成器,并在空白图像上随机分配盒子。我用从Danbooru数据集中抽取的图像填充这些盒子。

为了确保抽样的图像至少具有一定的连贯性,我使用了CLIP L/14图像编码器创建图像索引。在为特定页面选择图像时,我从Danbooru随机抽取一幅图像,并使用它的k-最近邻填充其余盒子。

借助这一程序生成器,我可以完全控制盒子的大小、形状和边界属性,从而适当设置以模拟负和多边形画框。

procedural_frames.png

procedural2.png

  • 上图:初版仅是一些盒子。
  • 下图:终版中,我随机向盒子中添加了Danbooru的图像。

漫画分割

我使用SAM作为我的模型的骨干。SAM是最先进的图像分割模型。它由一个计算密集型的图像编码器和一个轻量级解码器组成,后者用于回答分割查询。繁重的编码器仅对图像编码一次,之后可以廉价地回答多个分割查询。这种分工对于部署尤为有用,企业可以通过在云端保持繁重的编码器推理,并在用户设备上进行轻量级推理,以优化速度和成本。

architecture.png

由于SAM预测的是密集的、每像素掩码,我对其进行了修改,使其能预测点。模型概览如下。程序生成的漫画画框被送入图像编码器(训练期间其权重保持不变)。从画框中随机采样一个点,并作为查询/提示。轻量级解码器被训练以恢复画框的角点。

模型概览

在训练这个模型时,我学到了两个教训。首先,规范化预测画框角点的顺序很重要。没有这一步,模型会在角点排序上收到冲突信号,从而无法收敛。其次,使用L1而非L2损失很重要,因为L2在没有提高预测质量的情况下,会很快优化。

评估

我将我的方法与原始的SAM和Halford的方法进行了比较。注意,在这一比较中,Halford的方法稍显不利,因为我的方法还使用了查询(设置为待预测真实画框的中心)。尽管如此,很明显,我们基于程序化生成数据集训练的模型,在“现实世界”的漫画(简称P&C)上具有泛化性,接近Halford的方法。在程序化生成的数据集(简称Pr)上,它击败了Halford的方法,因为该数据集旨在暴露方法的缺陷。

方法比较

方法 IoU (P&C) PCK@0.1 (P&C) L1 (P&C) IoU (Pr) PCK@0.1 (Pr) L1 (Pr)
SAM 0.42 0.52 0.37 0.81 0.94 0.08
Halford 0.93 0.96 0.04 0.47 0.61 0.47
我们的方法 0.88 0.98 0.05 0.88 0.99 0.03

这里,IoU简单衡量了真实画框与预测画框交集与并集的面积比。PCK@0.1指的是预测画框角点在真实画框角点一定半径内的百分比(0.1指的是半径为漫画页面对角线的百分比)。L1是真实画框与预测画框之间的L1距离。

定性结果

下面是一些定性结果,展示了我们的方法在“现实世界”的漫画上的有效性。我们以两种模式运行:左侧,我们交互式提供查询,模型生成角点;右侧,我们在图像上采样一系列查询,预测多边形,并使用非极大值抑制过滤,如原始SAM论文所示。

interactive.png

confidence.png

总结思考

我的方法仍有不足之处,对于复杂、杂乱的漫画页面,它常常失败。但我仍然喜欢这种设计算法的方法,而不是组合OpenCV函数,因为往往更容易看到如何改进数据集,而不是设计新的启发式方法。一旦做到这一点,你几乎可以保证神经网络机制将带来结果。

用于评估的《Pepper and Carrot》标注数据集和代码均可以本站下载。