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


原文地址: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的方法