pydensecrf的使用

本文详细介绍了pydensecrf库在图像分割中的使用,包括设置一元势和二元势,如unary_from_labels和unary_from_softmax函数,以及pairwiseGaussian和pairwiseBilateral。还讨论了非RGB数据处理和推理过程。
摘要由CSDN通过智能技术生成

参考:https://github.com/lucasb-eyer/pydensecrf

1.使用

对于图像来说,最简单的使用该库的方法是使用DenseCRF2D类:

import numpy as np
import pydensecrf.densecrf as dcrf

d = dcrf.DenseCRF2D(640, 480, 5)  # width, height, nlabels

 

 2.一元势 Unary potential

你可以使用下面的方法设置固定的一元势

一元势即网络预测得到的结果,进行-np.log(py)等操作

U = np.array(...)     # Get the unary in some way.
print(U.shape)        # -> (5, 480, 640)
print(U.dtype)        # -> dtype('float32')
U = U.reshape((5,-1)) # Needs to be flat.
d.setUnaryEnergy(U)

# Or alternatively: d.setUnary(ConstUnary(U))

记住U应该是负的log概率,所以如果你用概率py,别忘了执行U = -np.log(py)

需要在一元势上进行reshape是我想要修复的API缺陷,但是如果不引入对numpy的显式依赖,我不知道如何解决这个问题。

注意,nlabel维度是这里reshape之前的第一个维度;如果不是这样的话,你可能需要在reshape之前把nlabel移到前面,即U.shape的结果应该为(5, 480, 640),就像这样:

print(U.shape)  # -> (480, 640, 5)
U = U.transpose(2, 0, 1).reshape((5,-1))

 

1)Getting a Unary

得到 unary potentials有两种常见的方法:
1)由人类或其他过程产生的硬标签。该方法由from pydensecrf.utils import unary_from_labels实现
2)由概率分布计算得到,例如深度网络的softmax输出。即我们之前先对图片使用训练好的网络预测得到最终经过softmax函数得到的分类结果,这里需要将这个结果转成一元势

对此,请参阅from pydensecrf.utils import unary_from_softmax

 

1)unary_from_labels(labels, n_labels, gt_prob, zero_unsure=True)函数的使用

简单分类器,该分类器50%确定注释(即从训练好的网络预测img后得到的结果)是正确的。(与推理示例中相同)。

参数:

  • labels: numpy.array;标签label映射,即数据的形状的数组,其中每个唯一值对应于一个标签,一种像素值对应一种标签。
  • n_labels: int;标签的总数。如果' zero_unsure'参数为True(默认值),这个数字不应该包括' 0 '标签,因为' 0 '不是一个标签!
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值