前言

上篇讲到yolo v2 loss中使用了两个loss分别时wh使用的smoothl1 loss以及其他的BCEloss,这里做个扩展介绍,并对比pytorch以及tensorflow的api接口的使用

smooth l1(huber loss)

转载自知乎高赞回答:https://www.jianshu.com/p/19483787fa24

smooth L1 loss能从两个方面限制梯度:

  • 当预测框与 ground truth 差别过大时,梯度值不至于过大;
  • 当预测框与 ground truth 差别很小时,梯度值足够小。

考察如下几种损失函数,其中

损失函数对 x 的导数分别为:

观察 (4),当 x 增大时 L2 损失对 x 的导数也增大。这就导致训练初期,预测值与 groud truth 差异过于大时,损失函数对预测值的梯度十分大,训练不稳定。

根据方程 (5),L1 对 x 的导数为常数。这就导致训练后期,预测值与 ground truth 差异很小时, L1 损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。

最后观察 (6),smooth L1 在 x 较小时,对 x 的梯度也会变小,而在 x 很大时,对 x 的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 smooth L1 完美地避开了 L1 和 L2 损失的缺陷。其函数图像如下:

由图中可以看出,它在远离坐标原点处,图像和 L1 loss 很接近,而在坐标原点附近,转折十分平滑,不像 L1 loss 有个尖角,因此叫做 smooth L1 loss。

pytorch及tensorflow接口

pytorch:

import torch.nn as nn
smooth_l1 = nn.SmoothL1Loss(reduce=False)
loss = smooth_l1(coord_wh, tcoord_wh))

tensorflow:

#reduction参数默认返回sum值,若要返回同shape的矩阵则传入NONE
loss = tf.losses.huber_loss(gt_coord_wh, pre_coord_wh, reduction=tf.losses.Reduction.NONE)

各参数含义见:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-2cbn2wyj.html

smooth l1(huber)+binary cross entropy详解(tensorflow+pytorch)相关推荐

  1. 快速理解binary cross entropy 二元交叉熵

    Binary cross entropy 二元交叉熵是二分类问题中常用的一个Loss损失函数,在常见的机器学习模块中都有实现.本文就二元交叉熵这个损失函数的原理,简单地进行解释. 首先是二元交叉熵的公 ...

  2. Binary Cross Entropy真的适合多标签分类吗?

    个人曾在负责一个多标签文本分类项目时对于多标签分类(multi-label classification)的loss选择.forward尾层处理感到迷惑,当时查找了一下资料确定了一种方案: 1.以类别 ...

  3. tensorflow对应的python版本_详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系

    参考官网地址: Windows端:https://tensorflow.google.cn/install/source_windows CPU Version Python version Comp ...

  4. 【小白学PyTorch】13.EfficientNet详解及PyTorch实现

    <<小白学PyTorch>> 小白学PyTorch | 12 SENet详解及PyTorch实现 小白学PyTorch | 11 MobileNet详解及PyTorch实现 小 ...

  5. 【小白学PyTorch】12.SENet详解及PyTorch实现

    <<小白学PyTorch>> 小白学PyTorch | 11 MobileNet详解及PyTorch实现 小白学PyTorch | 10 pytorch常见运算详解 小白学Py ...

  6. Python实战——VAE的理论详解及Pytorch实现

    参考的论文: Tutorial on Variational Autoencoders Auto-Encoding Variational Bayes 建议参考的文章: Pytorch里的CrossE ...

  7. 代码详解|tensorflow实现 聊天AI--PigPig养成记(1)

    Chapter1.代码详解 完整代码github链接,Untitled.ipynb文件内. [里面的测试是还没训练完的时候测试的,今晚会更新训练完成后的测试结果] 修复了网上一些代码的bug,解决了由 ...

  8. 【小白学PyTorch】11.MobileNet详解及PyTorch实现

    <<小白学PyTorch>> 小白学PyTorch | 10 pytorch常见运算详解 小白学PyTorch | 9 tensor数据结构与存储结构 小白学PyTorch | ...

  9. tensorflow打印模型结构_社区分享 | 详解 TensorFlow 中 Placement 的最后一道防线 — Placer 算法...

    本文作者王思宇,阿里巴巴算法专家,从事深度学习算法平台建设,TensorFlow 分布式架构设计与大规模分布式性能优化工作,开源 TensorFlow 项目 contributor. 本文转自:互联网 ...

最新文章

  1. 【数据结构与算法】图论基础与图存储结构
  2. #41 最短路(分治+线性基)
  3. JavaScript——jQuery AJAX链式编程(流式编程)DEMO
  4. Linux之Debian下安装LAMP apt-get安装方式
  5. python 图片旋转角度_OpenCV获取图像的旋转角度
  6. apk ionic 破损_cordova – ionic build android不生成任何.apk文件或错误
  7. C++工作笔记-getter/setter方法中大佬的风格
  8. 利用CSS按比例缩小图片
  9. 伏安特性曲线实验报告_【鼎阳硬件智库原创 | 测试测量】动手测量电解电容器的阻抗频率特性...
  10. 通过swagger下载的文件乱码解决方法,求解
  11. kuangbin线段树专题
  12. 鹅厂开源框架tars之基础组件
  13. 51nod - 1378 - 夹克老爷的愤怒
  14. 最简单的Hopper Disassembler玩转Mac逆向
  15. 去面试了几家BATJ等N家互联网大厂
  16. VRChat简易教程4-使用VRC的接口实现物体的移动(VRC的action和trigger接口)
  17. 用墨刀做出的交互动效,10个优秀作品欣赏
  18. 基于OpenCV的人脸识别自助商店(源码&部署视频)
  19. 技术专有名词缩写整理
  20. ## YARN运行资源配置

热门文章

  1. spring事物回滚遇到的问题
  2. loadrunner—事务、TPS
  3. Poj2480欧拉函数
  4. 使用shell脚本对Linux系统和进程资源进行监控
  5. 【转】如何缩进你的代码?
  6. oracle复制sequence,oracle sequence语句重置方介绍
  7. 2014/School_C_C++_B/2/调和级数
  8. BASIC-2 01字串
  9. 阿里云服务器上安装java配置jdk
  10. Spring Boot(二)应用实例