淘宝cms建站,做公司网站比较好的,深圳平台网站建设,做雷达干扰的网站在前面我们看了生成器和判别器的组成。 生成器损失公式#xff1a; 首先将fake image 和真实的 image输入到判别器中#xff1a; 接着看第一个损失#xff1a;参数分别为fake image经过判别器的输出mask#xff0c;和真实的label进行损失计算。对应于#xff1a; 其中l…在前面我们看了生成器和判别器的组成。 生成器损失公式 首先将fake image 和真实的 image输入到判别器中 接着看第一个损失参数分别为fake image经过判别器的输出mask和真实的label进行损失计算。对应于 其中loss对应于
class losses_computer():def __init__(self, opt):self.opt optif not opt.no_labelmix:self.labelmix_function torch.nn.MSELoss()def loss(self, input, label, for_real):#true#--- balancing classes ---weight_map get_class_balancing(self.opt, input, label)#--- n1 loss ---target get_n1_target(self.opt, input, label, for_real)loss F.cross_entropy(input, target, reductionnone)if for_real:loss torch.mean(loss * weight_map[:, 0, :, :])else:loss torch.mean(loss)return loss1首先平衡类别input大小为(1,36,256,512)label大小为(1,35,256,512). 首先将label每个通道所有的值相加最后只剩下C个值。 接着将class_occurence第一个值替换为0(在标签中第一个值为空).然后将列表值和0进行比较统计为True的个数就是总的类别。 然后求总的类别权重一张图有24个类别总的标签图有35各类别缺失的类别为inf。 根据argmax获得label的通道索引输出通道为一的mask图。 根据类别找对应的权重值。 接着标签和label输入到 首先得到一个和input相同大小的全1矩阵。这个矩阵是放在cuda上用1填充不需要更新和input相同维度。 接着取label的索引将全1矩阵target压缩通道维度和numclass相乘这样所有的值都是35在和label的类别值相加。因为相加之后的值肯定大于35即clamp将小于34的值替换为34.感觉clamp并没有起作用减去35加1相当于将label类别值全部加1了。 最后将辨别器的decoder输出和真实的label进行交叉熵计算。 将loss和类别权重相乘再求均值得到最终的损失。 接着是第二个损失生成器希望生成的结果可以骗过判别器fake产生的图片要尽可能的真实。 score是判别器encoder部分的两个输出。 在GANloss中: 在loss中 生成器是不完全执行patch_loss为了使损失更小则-1Dx就要趋近于0因为D最后是输出一个通道为1的值即经过sigmoid每个像素输出值在[0,1]之内为了使-1Dx最小则输出就要尽可能为1即输出要尽可能正确。 得到的两个GANloss相加求均值再和之前的对抗损失相加。 第三个是特征匹配损失输入是real image和fake image经过decoder的五个中间变量输出。 通过循环计算每一个输出对之间的MSE损失。 将生成的结果和前面两种损失相加。 最后输出总损失[对抗损失,None]。 接着损失取均值然后反向传播。 然后说判别器的损失 按照公式GAN loss需要计算fake image 和 real image产生的中间变量然后相加。而生成器不用计算E(z,l)。 在代码中通过控制target的True和False来计算两个loss。 损失包含 1fake image经过判别器得到的mask和真实的label计算对抗损失。 2real image经过判别器得到的mask和真实的label计算对抗损失。 3两个GAN loss。 4label mix 首先获得label上的类别值然后遍历类别值将mask中的类别随机替换为0或者1然后和真实的image相乘对target_map取反后和fake_image相乘最后相加。最终输出混合的image和新的target_map。 混合的image输入判别器中后计算labelmix损失 四个参数进过[0,1]替换后的maskmix_image经过判别器的输出fake_image经过判别器的输出和real_image经过判别器的输出。 生成的label_mix loss和原始的三个loss相加。 这样就计算完了辨别器损失。