CRFasRNN论文+源码

本文详细解析了CRFasRNN的工作原理,将其视作CNN层的堆叠,用于图像分割任务。通过对高斯核参数的设置,结合初始化、消息传递、权重过滤、兼容性转换等步骤,实现端到端训练。CRFasRNN通过多层迭代,改善了FCN的初始输出,形成了一种有效的RNN结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码看的是基于keras实现的版本,代码在这里。CRFasRNN把fcn作为骨干网络,然后把fcn的输出作为CRF的二元势的初始化和一元势,前面fcn的部分不再赘述,文章中提出的CRFasRNN作为单独一层用TensorFlow实现,使用起来很简单:

output = CrfRnnLayer(image_dims=(height, weight),
                         num_classes=21,
                         theta_alpha=160.,
                         theta_beta=3.,
                         theta_gamma=3.,
                         num_iterations=10,
                         name='crfrnn')([upscore, img_input])

高斯核的参数theta_alpha,theta_beta,theta_gamma作为超参数直接给出,没有参与训练。
CrfRnnLayer的定义在crfrnn_layer.py中,继承了layer类,其中,build方法通过add_weight函数定义了该层可以训练的参数:

    def build(self, input_shape):
        # Weights of the spatial kernel
        self.spatial_ker_weights = self.add_weight(name='spatial_ker_weights',
                                                   shape=(self.num_classes, self.num_classes),
                                                   initializer=_diagonal_initializer,
                                                   trainable=True)

        # Weights of the bilateral kernel
        self.bilateral_ker_weights = self.add_weight(name='bilateral_ker_weights',
                                                     shape=(self.num_classes, self.num_classes),
                                                     initializer=_diagonal_initializer,
                                                     trainable=True)

        # Compatibility matrix
        self.compatibility_matrix = self.add_weight(name='compatibility_matrix',
                                                    shape=(self.num_classes, self.num_classes),
                                                    initializer=_potts_model_initializer,
                                                    trainable=True)

        super(CrfRnnLayer, self).build(input_shape)

其中,spatial_ker_weights表示spatial kernel的权重,bilateral_ker_weights 表示bilateral kernel的权重 compatibility_matrix表示相似度矩阵。

4. A Mean-field Iteration as a Stack of CNN Layers

将DenseCRF变分推断的迭代求解过程表示成RNN的形式,方便和CNN骨干网络共同进行参数更新。要学习的参数是:Gaussian kernels的参数,label compatibility function等等。使用随机梯度下降学习参数。

4.1. Initialization

Q i ( l ) ← 1 Z i exp ⁡ ( U i ( l ) )  for all  i Q_{i}(l) \leftarrow \frac{1}{Z_{i}} \exp \left(U_{i}(l)\right) \text { for all } i Qi(l)Zi1exp(Ui(l)) for all i
CRF的一元势的初始化由CNN网络的输出结果直接给出: Q i ( l ) ← 1 Z i exp ⁡ ( U i ( l ) ) Q_{i}(l) \leftarrow \frac{1}{Z_{i}} \exp \left(U_{i}(l)\right) Qi(l)Zi1exp(Ui(l)),其中 Z i = ∑ l exp ⁡ ( U i ( l ) ) Z_{i}=\sum_{l} \exp \left(U_{i}(l)\right) Zi=lexp(Ui(l)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值