继续创作,加快成长!这是我参加「日新计划 10 月更文应战」的第13天,点击检查活动详情

导读

一个根据TensorFlow的CRF用法和完结的简略介绍。

使用条件随机场(CRF)来提升图像分割的表现

在一个理论上计算才能无限的现代国际,语义图画切割现已成为许多运用的关键办法,如自动驾驶、高级医学图画分析、目标检测和许多其他运用。一般,一个根本的U-Net神经网络在大多数时分都能够得到良好的成果。Dice系数是一个盛行的图画切割衡量。但是,在仔细检查猜测mask之后,发现了过错猜测像素的小的“孤岛”。因而,问题出现了:怎么改善这些微小的不一致?

条件随机场也被称为CRF,它经常被用作后处理工具来进步算法的性能。但是,在揣度过程中,这种操作的计算成本或许很高,特别是在移动设备上。它运用了一组需求硬编码的参数,这使得它很难适用于整个测验集。这个问题的一个或许的解决方案是以循环神经网络(RNN)的方式增加一个CRF算法作为神经网络的附加层,并使其具有可练习性。虽然有很多关于这种办法的科学论文,但在大多数深度学习结构中还没有开箱即用的CRF-RNN完结。因而,这篇博文的主要目的是演示怎么运用Tensorflow将这个额定的层插入到原来的U-Net模型中。

用例描绘

用例是对文档(特别是收据)的像素级检测。常规检测无法捕捉到收据形状的变形。图1展现了其间一个标示图画,它是测验集的一部分。

使用条件随机场(CRF)来提升图像分割的表现

图1:用例的真实标示

本质上,它是像素级的二元分类,其间0类界说为图画的背景,1类界说为文档。

只运用 U-Net 办法

数据集分为3个子集:练习集、开发集和测验集。后者用于模型的最终验证。用于图画像素分类的模型便是所谓的U-Net模型。

使用条件随机场(CRF)来提升图像分割的表现

图2:典型的U-Net结构

它由两个主要部分组成:编码器和解码器。该技术的完结是遭到Tensorflow图画切割的比如的启示。为了保持简短,能够在图3检查模型的大致结构。

使用条件随机场(CRF)来提升图像分割的表现

图3:U-Net模型的总体结构

在经过网络之前,图画被缩放为224×224并归一化。请注意softmax层被省略了。在500张图画上练习30个epoch现已显示出相当不错的测验数据集的成果:Dice coefficient0.983。图4中能够看到一个猜测mask的比如。

使用条件随机场(CRF)来提升图像分割的表现

图4:U-Net猜测Mask

值得注意的是,正如前面所描绘的,有一些用蓝色圈出的过错分类的小“岛”。这便是CRF-RNN层会派上用场的地方。在开始之前,有必要注意的是,由于特征现已练习好了,在增加新的CRF-RNN层之前,网络的权重应该被固定和设置为不行练习

CRF-RNN

一旦你练习好了特征,就能够开始参加CRF-RNN层,并再次练习网络。不幸的是,Tensorflow中没有一个预练习的CRF层。经过一番彻底的搜索,我偶然发现了Sadeep Jayasumana的GitHub库房。他为Keras创建了一个自界说类,并将其揭露。仅有的限制是批巨细必须为1,这使得练习有点慢。但是,考虑到特征现已练习过的事实,这个限制好像不是什么大问题。第一步,克隆git库房并遵循装置说明。一旦完结,你就能够将定制的CRFRNNLayer加到你的网络上。下面的代码片段演示了它是怎么在我们的用例中完结的:

fromcrfrnn_layerimportCrfRnnLayer
defadd_crf_layer(original_model):
original_model.trainable=False
crf_layer=CrfRnnLayer(image_dims=(224,224),
num_classes=2,
theta_alpha=3.,
theta_beta=160.,
theta_gamma=3.,
num_iterations=10,
name='crfrnn')([original_model.outputs[0],original_model.inputs[0]])
new_crf_model=tf.keras.Model(inputs=original_model.input,outputs=crf_layer)
return(new_crf_model)

有几个参数需求指定,如images_dims和迭代次数。第一个需求匹配特征提取中最终一层的输出维度。迭代次数是恣意参数。关于所有其他的,它们遵守超参数优化。新模型编译完结后,模型摘要如下:

使用条件随机场(CRF)来提升图像分割的表现

图5:自界说CRF-RNN Layer模型结构

作为最终一步,在从头练习模型时,需求将EPOCHS参数设置为1,因为现已在自界说层中指定了迭代次数。

在经过网络并在测验集上运转验证之后,我们观察到性能指标略有增加,显示Dice coefficient为0.9857。更重要的是,那些被过错分类的“小岛”消失了:

使用条件随机场(CRF)来提升图像分割的表现

图6:CNN CRF-RNN Mask猜测

现在你的解决方案离出产部署更近了一步!

总结

综上所述,Tensorflow中还没有完结开箱即用的CRF-RNN层。但是,感谢开源社区,有一个自界说的完结。要做到这一点,需求遵循以下步骤:

  1. 运用cnn练习你的特征。
  2. 使特征无法练习。
  3. 插入自界说CRF-RNN层。
  4. 从头练习网络。
  5. 运用新模型进行推理。

还有几个要点需求进一步改善该层。首要,现在批量巨细只要1的或许性。这是能够改善的,但是需求对层进行一些重构。其次,这个自界说办法不适用于Tensorflow Lite,因为这个操作符还没有在其间注册。也能够运用定制的内核,但这需求Tensorflow核心Lite库中的一系列c++完结。

英文原文:medium.com/@ihor.shylo…