CV之NS之LF:图像风格迁移中常用的几种损失函数(内容损失、风格损失)简介、使用方法之详细攻略

举报
一个处女座的程序猿 发表于 2021/03/30 22:47:20 2021/03/30
【摘要】 CV之NS之LF:图像风格迁移中常用的几种损失函数(内容损失、风格损失)简介、使用方法之详细攻略       目录 图像风格迁移中常用的几种损失函数 1、内容损失 2、风格损失 3、定义总损失     图像风格迁移中常用的几种损失函数 1、内容损失 # endpoints_dict是上一节提到的损失网络各层的计算结果;content_layers是...

CV之NS之LF:图像风格迁移中常用的几种损失函数(内容损失、风格损失)简介、使用方法之详细攻略

 

 

 

目录

图像风格迁移中常用的几种损失函数

1、内容损失

2、风格损失

3、定义总损失


 

 

图像风格迁移中常用的几种损失函数

1、内容损失


  
  1. # endpoints_dict是上一节提到的损失网络各层的计算结果;content_layers是定义使用哪些层的差距计算损失,默认配置是conv3_3
  2. def content_loss(endpoints_dict, content_layers):
  3. content_loss = 0
  4. for layer in content_layers:
  5. #上一节中把生成的图像、原始图像同时传入损失网络中计算。所以这里先把他们区分开
  6. #我们可以参照函数tf.concat与tf.split的文档理解此处的内容
  7. generated_images, content_images = tf.split(endpoints_dict[layer], 2, 0)
  8. size = tf.size(generated_images)
  9. # 所谓的内容损失,是生成图片generated_images与原始图片激活content_images的L*L距离
  10. content_loss += tf.nn.l2_loss(generated_images - content_images) * 2 / tf.to_float(size) # remain the same as in the paper
  11. return content_loss

 

 

2、风格损失


  
  1. # 定义风格损失,style_layers为定义使用哪些层计算风格损失。默认为conv1_2、conv2_2、conv3_3、conv4_3
  2. # style_features_t是利用原始的风格图片计算的层的激活。如在wave模型中是img/wave.jpg计算的激活
  3. def style_loss(endpoints_dict, style_features_t, style_layers):
  4. style_loss = 0
  5. # summary是为TensorBoard服务的
  6. style_loss_summary = {}
  7. for style_gram, layer in zip(style_features_t, style_layers):
  8. # 计算风格损失,只需要计算生成图片generated_imgs与目标风格style_features_t的差距。因此不需要取出content_images
  9. generated_images, _ = tf.split(endpoints_dict[layer], 2, 0)
  10. size = tf.size(generated_images)
  11. # 调用gram函数计算Gram矩阵。风格损失定义为生成图片与目标风格Gram矩阵的L*L的Loss
  12. layer_style_loss = tf.nn.l2_loss(gram(generated_images) - style_gram) * 2 / tf.to_float(size)
  13. style_loss_summary[layer] = layer_style_loss
  14. style_loss += layer_style_loss
  15. return style_loss, style_loss_summary

 

 

 

3、定义总损失


  
  1. """Build Losses"""
  2. # 定义内容损失
  3. content_loss = losses.content_loss(endpoints_dict, FLAGS.content_layers)
  4. # 定义风格损失
  5. style_loss, style_loss_summary = losses.style_loss(endpoints_dict, style_features_t, FLAGS.style_layers)
  6. # 定义tv损失,该损失在实际训练中并没有被用到,因为在训练时都采用tv_weight=0
  7. tv_loss = losses.total_variation_loss(generated) # use the unprocessed image
  8. # 总损失是这些损失的加权和,最后利用总损失优化图像生成网络即可
  9. loss = FLAGS.style_weight * style_loss + FLAGS.content_weight * content_loss + FLAGS.tv_weight * tv_loss

 

 

 

文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:yunyaniu.blog.csdn.net/article/details/82941252

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。