CV之NS之LF:圖像風格遷移中常用的幾種損失函數(內容損失、風格損失)簡介、使用方法之詳細攻略
CV之NS之LF:圖像風格遷移中常用的幾種損失函數(內容損失、風格損失)簡介、使用方法之詳細攻略
目錄
圖像風格遷移中常用的幾種損失函數
1、內容損失
2、風格損失
3、定義總損失
圖像風格遷移中常用的幾種損失函數
1、內容損失
# endpoints_dict是上一節提到的損失網絡各層的計算結果;content_layers是定義使用哪些層的差距計算損失,默認配置是conv3_3
def content_loss(endpoints_dict, content_layers):
content_loss = 0
for layer in content_layers:
#上一節中把生成的圖像、原始圖像同時傳入損失網絡中計算。所以這里先把他們區分開
#我們可以參照函數tf.concat與tf.split的文檔理解此處的內容
generated_images, content_images = tf.split(endpoints_dict[layer], 2, 0)
size = tf.size(generated_images)
# 所謂的內容損失,是生成圖片generated_images與原始圖片激活content_images的L*L距離
content_loss += tf.nn.l2_loss(generated_images - content_images) * 2 / tf.to_float(size) # remain the same as in the paper
return content_loss
2、風格損失
# 定義風格損失,style_layers為定義使用哪些層計算風格損失。默認為conv1_2、conv2_2、conv3_3、conv4_3
# style_features_t是利用原始的風格圖片計算的層的激活。如在wave模型中是img/wave.jpg計算的激活
def style_loss(endpoints_dict, style_features_t, style_layers):
style_loss = 0
# summary是為TensorBoard服務的
style_loss_summary = {}
for style_gram, layer in zip(style_features_t, style_layers):
# 計算風格損失,只需要計算生成圖片generated_imgs與目標風格style_features_t的差距。因此不需要取出content_images
generated_images, _ = tf.split(endpoints_dict[layer], 2, 0)
size = tf.size(generated_images)
# 調用gram函數計算Gram矩陣。風格損失定義為生成圖片與目標風格Gram矩陣的L*L的Loss
layer_style_loss = tf.nn.l2_loss(gram(generated_images) - style_gram) * 2 / tf.to_float(size)
style_loss_summary[layer] = layer_style_loss
style_loss += layer_style_loss
return style_loss, style_loss_summary
3、定義總損失
"""Build Losses"""
# 定義內容損失
content_loss = losses.content_loss(endpoints_dict, FLAGS.content_layers)
# 定義風格損失
style_loss, style_loss_summary = losses.style_loss(endpoints_dict, style_features_t, FLAGS.style_layers)
# 定義tv損失,該損失在實際訓練中并沒有被用到,因為在訓練時都采用tv_weight=0
tv_loss = losses.total_variation_loss(generated) # use the unprocessed image
# 總損失是這些損失的加權和,最后利用總損失優化圖像生成網絡即可
loss = FLAGS.style_weight * style_loss + FLAGS.content_weight * content_loss + FLAGS.tv_weight * tv_loss
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。