【李佳辉_周报_2022.10.2】

1. 本周学习主要内容

1.1 深度学习方面

  • Kaggle医学影像识别案例
  • 生成对抗网络模型(Gan)
  • 自动编码器

1.2 信号处理与Matlab实现

  • matlab基本操作
  • 数字信号处理除

1.3 机器学习基础的回顾

  • 基础知识
  • 网格搜索
  • 重温经典机器学习模型

2. 下周学习内容

  • 继续复习传统机器学习模型的一些基础
  • 完成一个深度学习案例
  • 数字信号处理与matlab实现

3. 本周重点知识

3.1 Kaggle医学影响图像识别案例

  • 更多的是关于图像处理的一些知识
  • 通过学习图像处学习处理其他格式数据的方法
  • 完成的是病理图像识别诊断
  • 染色标准化入门:GAN、TransposeConv、DCGAN与cGAN

3.2 生成对抗网络

在生成对抗网络诞生之后数年之中,围绕着如何使用生成对抗网络进行染色标准化的研究层出不穷,最为代表性的作品是Salehi等人在2020年完成的论文:[Salehi2020] P. Salehi, A. Chalechale, Pix2pix-based stain-to-stain translation: A solution for robust stain normalization in histopathology images analysis (2020), International Conference on Machine Vision and Image Processing

这篇论文在经典对抗架构Pix2Pix的基础上做出了改进,创造出架构Stain-to-Stain Translation(STST),并成功实现了目前为止效果最优的染色标准化。如下图所示,a为原始染色载玻片,b为参考用的染色载玻片,c-g为使用不同方式实现染色标准化的生成图像。从颜色、轮廓等各个角度来看,STST的表现肉眼可见地超越了其他经典的染色标准化方法。
在这里插入图片描述

  • STST的染色标准化方法
  • Pix2Pix基本框架
    在这里插入图片描述
  • 基础知识
  1. 原始GAN的运行原理与代码
  2. 转置卷积TransposedConv与能够处理图像的DCGAN
  3. 自动编码器Autoencoders,经典Encoder-Decoder架构
  4. 深度卷积自动编码器(Convolutional Autoencoders)架构
  5. cGAN与PatchGAN架构
  6. Unet的损失函数、运行原理与代码
  7. STST架构基于Unet做出了怎样的改进
  • Gan基本架构
    在这里插入图片描述
  • 核心原理

  假设现在存在一组从真实场景中收集的数据RealData,生成对抗网络的关键使用场景之一就是借助真实数据RealData生成一组假数据FakeData,且这组假数据最好能够以假乱真。有时候这组生成的假数据会用于替代真实数据或加入真实数据、用于训练神经网络,有时候这组生成的假数据就是我们最终想要获得的目标(例如,AI生成人脸的技术)。因此大部分时候,生成对抗网络的最终目标就是输出一组以假乱真的假数据。

  如上图所示,一个生成对抗网络包含两个基础网络:生成器(generator,简写为G,也被称为生成网络)与判别器(discriminator,简写为D,也被称为判别网络)。其中,生成器用于生成新数据,其生成数据的基础往往是一组噪音或者随机数,而判别器用于判断生成的数据和真实数据哪个才是真的。生成器没有标签,是无监督网络;而判别器有标签,是有监督网络,其标签是“假与真”(0与1)。与普通二分类网络一样,判别器输出的是一类标签下的概率。在GAN官方论文中,我们规定判别器输出当前数据为真的概率(标签为1的概率),因此概率大于0.5时,判别器认为样本是真实数据,当概率小于0.5时,判别器认为样本是由生成器生成的假数据。
  在训练过程中,生成器和判别器的目标是相矛盾的,并且这种矛盾可以体现在判别器的判断准确性上。生成器的目标是生成尽量真实的数据(这也是我们对生成对抗网络的要求),最好能够以假乱真、让判别器判断不出来,因此生成器的学习目标是让判别器上的判断准确性越来越低;相反,判别器的目标是尽量判别出真伪,因此判别器的学习目标是让自己的判断准确性越来越高。

  当生成器生成的数据越来越真时,判别器为维持住自己的准确性,就必须向判别能力越来越强的方向迭代。当判别器越来越强大时,生成器为了降低判别器的判断准确性,就必须生成越来越真的数据。在这个奇妙的关系中,判别器判断的准确性由GAN论文中定义的特殊交叉熵 𝑉 来衡量,判别器与生成器共同影响交叉熵 𝑉 ,同时训练、相互内卷,对该交叉熵的控制是此消彼长的,这是真正的零和博弈。

  • 此处省略一些损失函数与一些公式法则
  • 转置卷积(Transposed Convolution) vs 反卷积(Deconvolution)

  转置卷积是一种与卷积相对应的操作:卷积是使用卷积核将原本尺寸较大的图像缩小,转置卷积是使用卷积核将原本尺寸较小的图像放大。这一操作在直觉上很容易被理解成是将卷积运算反过来,但需要强调的是:转置卷积不是卷积运算的逆运算(Inverse Convolution),只是一种单纯的、使用卷积核将图像放大的上采样操作而已。

  卷积运算的逆运算被称为反卷积(Deconvolution),反卷积是一种能够将某一卷积核的缩小效果完全逆转的运算,这种完全逆转可以将被卷积之前的图像像素极大程度地复原、甚至生成超越原始图像的图像,因此反卷积常被用于提升图像像素、为影像上色等实践领域。相比之下,转置卷积只能够将图像恢复到被卷积之前的尺寸(即恢复空间信息),但不能复原被卷积之前的图像像素信息、甚至还会打乱图像中不同维度的信息、让通道信息混杂在一起,这就非常适合被用于从无到有生成数据。
在这里插入图片描述

在这里插入图片描述

  • 转置卷积层的原理与代码实现
  • DCGan架构
    在这里插入图片描述
  • DCGan简单复现
#DCGAN中的判别器
class cGAN_disc(nn.Module):
    def __init__(self):
        super().__init__()
        self.label_embedding = nn.Sequential(nn.Embedding(10,50)
                                             ,nn.Linear(50,784)
                                             ,nn.ReLU(inplace=True) #在架构图上这里没有激活函数
                                            ) 
        self.main = nn.Sequential(nn.Conv2d(2,128,3,2,1)
                                 ,nn.LeakyReLU(0.2,inplace=True)
                                 ,nn.Conv2d(128,128,3,2,1)
                                 ,nn.LeakyReLU(0.2,inplace=True)
                                 ) #由于Fashion-MNIST图像较小,因此在这里使用的卷积层也很少
        self.output_ = nn.Sequential(nn.Dropout(0.2)
                                    ,nn.Linear(128*7*7,1))
    
    def forward(self,label,realdata): #标签在前,数据在后
        label = self.label_embedding(label)
        label = label.view(-1,1,28,28)
        inputs = torch.cat((realdata,label),dim=1)
        features = self.main(inputs)
        features = features.view(-1,128*7*7)
        outputs = self.output_(features)
        return outputs
class cGAN_gen(nn.Module):
    def __init__(self):
        super().__init__()
        #标签的上采样
        self.label_upsample = nn.Sequential(nn.Embedding(10,50)
                                           ,nn.Linear(50,49)
                                           ,nn.ReLU(True)
                                           )
        #噪音的上采样
        self.noise_upsample = nn.Sequential(nn.Linear(100,6272)
                                           ,nn.LeakyReLU(0.2,True)
                                           )
        #核心架构
        self.main = nn.Sequential(nn.ConvTranspose2d(129,128, kernel_size=4, stride=2, padding=1)
                                 ,nn.LeakyReLU(0.2,True)
                                 ,nn.ConvTranspose2d(128,128,4,2,1)
                                 ,nn.LeakyReLU(0.2,True)
                                 ,nn.Conv2d(128,1,kernel_size=3,padding=1)
                                 )
    
    def forward(self,label,noise):
        #转化标签
        label = self.label_upsample(label)
        label = label.view(-1,1,7,7)
        
        #转化噪音
        noise = self.noise_upsample(noise)
        noise = noise.view(-1,128,7,7)
        
        #合并数据
        inputs = torch.cat((noise,label),dim=1)
        
        #将数据输入核心架构,生成假数据
        fakedata = self.main(inputs)
        
        return fakedata

3.3 自动编码器

  任意自动编码器都是由编码器和解码器共同构成的,在这一架构中,编码器的职责是从原始数据中提取必要的信息,而解码器的职责是将提取出的信息还原为原来的结构,二者共同工作,便能够将原始数据表示成相同结构、但不同数值的另一组数据。值得注意的是,在自动编码器的架构中,编码器的结果Code是原始数据的数据表示,而解码器输出的结果也是原始数据的数据表示。

  很显然,如果对深度神经网络足够熟悉,那自动编码器的架构很容易理解。同时,只需要将编码器中的线性层替换成卷积层、解码器中的线性层替换成转置卷积层,我们就可以轻易地实现深度卷积自动编码器的架构:
在这里插入图片描述

  • 自动编码器种类
    1.降噪自动编码器(Denoising Autoencoder)
    2.稀疏自动编码器(Sparse Autoencoder)
    3.变分自动编码器(Variational Autoencoder,VAE)
    在这里插入图片描述
  • 从无到有生成图像
    1.方案1:完全从无到有,即从随机数生成图像

这一方案要求对生成器输入随机数(噪音z),并在训练中令生成器输出具体图像。在输入数据的创造上相对简便,但是训练难度很大,因为在真假数据结构、形态、分布完全不同的情况下,生成器很难战胜判别器。

2.从一组图像生成另一组图像

这一方案需要在生成器中输入与真实图像有相似信息的图像。这一方案训练起来难度会小很多,因为输入数据提供了大量真实图像的相关信息,因此生成器的学习会变得更加容易,判别器也会更容易被骗过。但这一方案要求必须准备至少两组信息像素的图像,并且在输入输出都是同尺寸图像的情况下、整体架构的计算量会变得更大。

3.4 传统机器学习基础知识复习

  • 主要复习一些数学原理与代码复现
    1.梯度下降
    2.网格搜索调参
    3.逻辑回归的可解释性等等

3.5 正在学习的内容:信号处理的复习与matlab实现

1.matlab的一些基本语法与操作
2.数字信号处理的一些基本知识

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值