标签 深度学习 下的文章

图像分割任务中,input 和 target 都是图片,此时做数据增广时如果用到随机变换,例如随机翻转和旋转,则需要保证两者随机值相同,否则分割 label 就不准确。

例如变换:

self.transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(90),
    transforms.CenterCrop(480),
    transforms.ToTensor(),
    transforms.ToPILImage()
])

在使用时如果直接

image = self.transform(image)
bulb = self.transform(bulb)

则输入图片和 label 会产生不同的翻转/旋转角,造成数据不对应的问题。

- 阅读剩余部分 -

gauss_test.png

如图,需要对数据集生成对应的 HeatMap 数据,中心点值为1,向四周生成一个高斯分布。

高斯分布又叫正态分布,最近武汉新型冠状病毒的确诊人数应该就是一个很类似正态分布的图,虽然还不知道什么时候会是高峰期。

正态分布的概率密度函数为 $$f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^\frac{(x-\mu)^2}{2\sigma^2}$$,对应图像如下:

Normal Distribution PDF

根据这个公式,就可以写出生成一维高斯分布的函数:

def get_gauss(n):
    u = 0  # 均值μ
    sig = math.sqrt(1)  # 标准差δ
    x = np.linspace(u - 3*sig, u + 3*sig, n)
    y = np.exp(-(x - u) ** 2 / (2 * sig ** 2))/(math.sqrt(2*math.pi)*sig)
    y = normalize(y)
    return y

注意此时生成的高斯分布数据还需要进行归一化:

def normalize(x):
    max = x.max()
    min = x.min()
    return (x - min) / (max - min)

最后将两个一维的高斯分布矩阵相乘即可,完整代码如下:

- 阅读剩余部分 -

Snipaste_2019-08-14_17-15-49.png2019/8/21 Update: 已经有人部署到网站 selife2anime.com

UGATIT是一个由韩国NCSOFT公司开源的非监督GAN网络,这个GAN网络使用了新的改进的注意力模块能更好的关注几何和整体变化;以及使用新的AdaLIN (Adaptive Layer-Instance Normalization) 函数从数据集中学习参数,来灵活控制对材质和形状的修改(个人理解为更精细的生成?)。GitHub上开源了其TensorFlow版PyTorch版

请输入图片描述

使用恰当的数据集,可以训练妹子->二次元 or 二次元->妹子的模型,8说了,准备数据集,开冲!

- 阅读剩余部分 -

预测出的嗅球和白色部分需要验证是否正确,因为嗅球和白色部分比较对称,所以有个朴素的方法:将预测出的mask从中间折叠,计算重合部分占比,占比过小的认为是无效预测

然而在实现时发现pytorch的Tensor不支持负数作为步长:

Snipaste_2019-08-07_15-56-09.png

Google之后发现:这2个issue:

在第二个issue里可以看到这个问题的历程:

- 阅读剩余部分 -

上周发了个博客说多分类应该用一个像素代表不同值的方式来实现,今天又仔细研习了一下 github 上这个 issue,看了作者的回复,感觉还是应该用多通道作为输入。
于是我把unet传入的n_classes参数改成了2,然后让传入的数据形状和unet输出预测的形状一致,把嗅球和白色区域数据用torch.cat叠起来,最后两个通道输出扩充一个通道保存成3通道RGB的形式

81{$EWPX3UTZ}5R3FJ[8_TK.jpg


- 阅读剩余部分 -