计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数

2023-11-08

Date: 2020/05/19

Author: CW

前言:

EAST 的损失函数由三部分构成,对应预测输出的三个map——score map、loc map 以及 angle map,即分类损失,位置(点到文本框边界上下左右的距离)损失以及角度损失。

分类损失

对于分类损失,最自然想到的就是交叉熵。在这里,由于在文本框外的点会占多数,即负样本比例较大,因此,可采用类别平衡的交叉熵损失。

0efd281b1481

类别平衡的交叉熵损失

在代码实现中,以上有个特别需要注意的地方,就是模型输出的预测结果 pred_score 是从sigmoid 出来的,那么其取值范围为[0, 1],所以用在交叉熵时有可能使得 log 函数输出正/负无穷,因此需要加上一个极小值,这里使用的是 np.finfo(np.float32).eps。

另外,由于这里的分类是对一个个像素点进行区分(是否在文本框内),那么就可看作是语义分割问题,因此,使用 Dice Loss 作为分类损失也是一种可行的方案。

0efd281b1481

Dice Loss

对于以上两种 loss 的选择,根据我的训练结果来看,使用类别平衡交叉熵计算得到的loss值相对较小,可能需要调整合适的loss权重才能更好地让模型学会分类,否则这种方案下训练出的模型容易出现大量误检(召回率还不错但准确率低);而使用 dice loss 的话,loss 值通常在零点几的数量级,不需要加大权重,模型也能比较容易学好分类,训练出来的模型误检率较低。也可以将两种 loss 结合在一起,其中类别平衡的交叉熵损失权重要相对大一些。

几何损失

顾名思义,这部分损失指的是预测框与真实文本框之间在几何层面上计算的损失,通过 d1~d4以及 angle 来计算。

这里比较有意思的是,对于

math?formula=d_%7Bi%7D%20(i=1,2,3,4) ,并不是分别计算预测的

math?formula=d_%7Bi%7D%20与 对应标签的

math?formula=d_%7Bi%7D%20的差来作为损失,而是根据

math?formula=d_%7Bi%7D%20计算出框的面积,然后将预测框与 gt 框之间的 IoU 用于损失计算,IoU 越大说明和 gt 越接近,因此 loss 应该越小,同时由于 IoU 取值范围在 [0, 1],因此可将其输入 log 函数并乘以-1作为 loss。

而对于 angle,使用余弦函数,余弦函数的输入为预测 angle 与 对应标签的 angle 之差。使用余弦函数的好处是,它是偶函数,无需对角度差值取绝对值。这样的话,两个角度相差越小,余弦函数的输出则越大,因此用1减去余弦函数的输出便可作为这部分的loss。

0efd281b1481

几何损失 (i)

这里需要注意的是交集的计算,与通常计算两个 bbox 的交集稍有不同,这里是根据d来计算的,要取预测与 gt 对应 d 的最小值才是交集,而不像通常的两个 bbox 在计算交集的 x_min 与y_min 时是分别取两者的最大值。

0efd281b1481

几何损失 (ii)

0efd281b1481

几何损失 (iii)

综合损失

最终模型的损失综合了分类与几何损失,可以根据实际情况分别对分类 loss、IoU loss、angle loss 设置不同的权重,最后加起来作为总的损失。

通常在代码中实现模型的损失计算时,都会将其实现为一个 torch.nn.Module 的子类,损失计算则通过重载 forward 方法也即前向反馈过程来实现。

0efd281b1481

损失计算

在这里我们需要考虑一种情况,就是一个 batch 中可能并没有 gt,那么此时就不计算损失,直接返回损失为0。

另外注意上图红框部分,这里将几何 loss 与 gt_score 相乘,由于gt_score 中非0即1,因此说明这里仅对正样本计算几何损失。

最后:

越发地觉得,gt 的生成与 loss 的设计往往是很有技巧性的,它们直接影响到模型会学习成什么样子,gt 生成让模型了解到学习的目标,而 loss 设计则是将模型学习的目标转化为在数学上的表达形式,使得模型有途径通过迭代学习不断逼近目标。

在阅读与手写了众多算法模型代码后,吾以为,细心观察生活很重要,只有你足够了解生活,才能从其中的需求中出发,然后基于生活中某些事物的工作方式,抽象出一套方法论,接着用代码去实践,最终通过实验验证,这样之后才有可能创造出一个好的模型算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数 的相关文章

  • PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 在 windows下使用pyinstaller将多个目录的Python文件打包成exe可执行文件 介绍了可以使
  • chatgpt赋能python:看Python代码的App:提高你的编程技能

    看Python代码的App 提高你的编程技能 Python作为一门流行的编程语言 使用者越来越多 如果你是一名初学者或是有多年的编程经验的工程师 你可能会遇到需要查看Python代码的情况 为了满足这一需求 近年来出现了一些看Python代
  • 如何用cmd查看文件内容的MD5值

    certutil hashfile 文件名称 文件类型 MD5 如 certutil hashfile 123 MP3 MD5
  • 常用函数整理(基础篇)

    目录 strcpy 返回值 strcat Parameters 返回值 例 strncpy Parameters 返回值 例 strncat Parameters 返回值 例 strncmp Parameters 返回值 例 strstr
  • 精灵图与遮罩层的使用方法

    一 精灵图 精灵图的使用步骤 第一步 先测量精灵图局部的大小 设置为盒子的宽度和高度 第二部 测量精灵图局部的坐标值 设置为背景定位的负值 宽 width 20px 高 height 20px 精灵图局部定位值 84px 366px 二 遮
  • monkey命令

    monkey是adb调试工具中的一个命令 用于android设备的稳定性测试 主要是为了测试app会不会出现crash和anr 以及出现的时间和次数 adb shell monkey命令 可以查看命令所能携带的参数 crash 程序崩溃或闪
  • background-position: -192px -48px;//图片定位详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt
  • SAP S/4实操LTMC 数据迁移驾驶舱

    SAP S 4实操LTMC 数据迁移驾驶舱 文章目录 SAP S 4实操LTMC 数据迁移驾驶舱 前言 一 LTMC是什么 二 使用步骤 1 配置好SICF并正常启用LTMC服务 2 数据迁移 2 1 创建迁移项目 2 2 数据整理 总结
  • 蓝牙简单配对(Simple Pairing)协议及代码流程简述

    DESCRIPTION 在BT2 1及之后版本 蓝牙协议有在传统的密码配对 PIN Code Pairing 之外 新增一种简单配对 Simple Pairing 的方式 这种新的配对方式操作更为简单 安全性也更强 目前市面上大部分蓝牙设备
  • 《算法笔记》01

    1 比较交换3个实数值 并按序输出 从键盘输入3个实数a b c 通过比较交换 将最小值存储在变量a中 最大值存储在变量c中 中间值存储在变量b中 并按照从小到大的顺序输出这三个数a b c 末尾输出换行 include
  • kafka客户端连接测试

    客户端代码 package main import fmt github com Shopify sarama kafka 示例代码 func main 配置 config sarama NewConfig 等待服务器所有副本都保存成功后的
  • 【Qt多线程之线程的等待和唤醒】

    QWatiCondition的成员函数 QWaitCondition QWaitCondition bool wait QMutex mutex unsigned long time ULONG MAX void wakeOne void
  • 哪些你朝思暮想的动漫网站-搜嗖工具箱

    AcFun是国内首家弹幕视频网站 这里有全网独家动漫新番 友好的弹幕氛围 有趣的UP主 好玩有科技感的虚拟偶像 年轻人都在用www acfun cn 哔哩哔哩是国内知名的视频弹幕网站 这里有及时的动漫新番 活跃的ACG氛围 有创意的Up主
  • docker pull 设置代理

    简介 你在终端设置代理的时候docker pull的时候是不会走代理的 下面是docker pull设置代理的正确方式 操作 环境是在centos下 如果没有新建下面这个文件夹 sudo mkdir p etc systemd system
  • 毕业设计-基于大数据的新闻推荐系统-python

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • 组件的生命周期

    一 组件的生命周期 1 组件的生命周期 至一个组件从 创建 gt 运行 gt 销毁的过程 2 声明周期函数 由Vue提供的内置函数 伴随组件生命周期按次序自动运行 gt 钩子函数 3 生命周期的阶段划分 1 创建阶段 beforeCreat
  • Flutter从入门到放弃之坑的神奇之处?

    坑一 关于环境变量的配置 这里要注意几点 不然你将会在这里卡死 这里只说Mac OS环境变量的配置 因为我是Mac 首先 command shift 打开隐藏文件 如果你是用的是自带的终端 请在这个文件中配置 如果你使用的是zsh请在 这个
  • Pytorch nn.Module的基本使用

    文章目录 nn Module的基本用法 nn Module的其他常用方法 参考资料 nn Module的基本用法 nn Module是所有神经网络的基类 所以你的神经网络类也应该要继承这个基类 当使用时 主要需要实现其两个方法 init 初
  • SPSS问卷数据处理步骤

    SPSS问卷数据处理步骤 一 准备 界面与数据准备工作 1 先处理显示界面问题 改成中文输出 优化操作过程 编辑 选项 2 数据字典 定义变量属性 几个代表性的 复制数据属性 数据 定义变量属性 设好以后 数据 复制数据属性 把几个代表性的

随机推荐

  • SQL 左连接 右表多条数据处理方式

    前言 多表连接经常使用 而一对多的数据处理比较麻烦 用于记录 便于以后使用 正文 SQL server语句 select a t from table1 a left join select from select b ROW NUMBER
  • STL模板库 常用函数 vector向量容器

    STL模板库 STL是Standard Template Library缩写 中文名字叫标准模板库 由惠普实验室提供 共有三类内容 算法 以函数模板形式实现的常用算法 如 max min swap find sort 容器 以类模板形式实现
  • 做一个 加减运算 利用JavaScript

    首先做个运算需要用到三个文本框 显示数字 这里我用input做了3个框 并且赋值他们的属性值 id 并且做了一个button按钮来调动 接着调用button这个函数 接着我们需要获取第一个和第第二个input的值 为什么用 parseInt
  • 【Linux专题_05】Linux统计行数命令

    Linux统计行数几种常用命令 wc l 这是最常用的命令 用于统计文件中的行数 它会输出文件的行数以及文件名 示例 wc l filename txt nl 该命令会给文件中的每一行添加行号 并将结果输出到标准输出 通过查看行号的最后一个
  • LeetCode 220. 存在重复元素 III

    题目链接 点击这里 class Solution public boolean containsNearbyAlmostDuplicate int nums int k int t TreeSet
  • Android Studio解除全局搜索100条限制

    1 点击Help gt Find Action选项 2 输入Registry 并选中进入 3 将ide usages page size的value设置为自己想要的数值即可
  • 修改块的方法+AcGeMatrix3d+AcGeScale3d+两点之间的距离

    开发过程中 当从外部获取了一个 需要修改块中的实体时 有以下几种方法 1 第一个通过explode函数炸开AcDbBlockReference 获取块参照中的实体对象 然后遍历对象 找到修改的实体 完成修改后将所有的实体插入到模型空间 注意
  • 第四章CSS基础

    文章目录 学习CSS的目的 引入的三种方式 内部样式表 行内样式表 外部样式表 选择器的分类 基础选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 盒子模型 不同浏览器下盒子模
  • 深度学习 从零开始 —— 神经网络(四),二分类问题,IMDB数据集使用

    IMDB数据集 互联网电影数据 包含50000条严重两极分化的评论 正面和负面评论各占50 而该数据集也同样被内置于Keras库中了 其中的评论数据已经经过了预处理 评论 单词 被转化为了整数序列 每个整数都对应词典里面的一个单词 加载数据
  • HTML页面基本结构

    本文简要介绍HTML中的各种元素及其相关属性 读者需要有一个概念 HTML页面都是由基本元素及属性组成的 HTML页面的结构如下 doctype 声明 HTML 源文件中 首先出现的是 doctype 声明 该声明告诉浏览器 本页面使用何种
  • [hive]hive中查找表或者查看表的信息

    一 查找表 查看数据库中所有表 SHOW TABLES IN db name 使用正则表达式过滤表 USE db name SHOW TABLES employ 二 查看已创建的表信息 DESCRIBE EXTENDED db name t
  • C++ vector向量的查找和删除

    一 在vector中查找元素 1 代码 include
  • 枚举电脑上的终结点设备

    STDAPI CoCreateInstance REFCLSID rclsid 创建的Com对象的类标识符 CLSID LPUNKNOWN pUnkOuter 指向接口IUnknown的指针 DWORD dwClsContext 运行可执行
  • win下使用git-bash工具进行ssh免密登录服务器

    1 ssh keygen exe 生成公钥私钥 pub 2 ssh agent exe bash 指定工具 3 ssh add exe 添加私钥 OK
  • nacos注册中心的配置

    将nacos作为注册中心使用 使用的步骤 导入nacos依赖 这么导
  • 选路算法(计算机网络)

    目的 决定从源到目的地通过网络的 好的路径 一般指最小费用的路径 根据算法是静态的还是动态的进行分类 静态 路由随时间缓慢变化 手工配置 动态 路由更快地变化 周期的更新 适应链路费用和网络拓扑变化 根据算法是全局式的还是分散式的来加以区分
  • Python入门指南:从零开始学习Python编程

    文章目录 前言 安装Python 变量以及数据类型 总结 前言 Python是一种简单而又强大的编程语言 它在全球范围内广受欢迎 适用于各种应用场景 包括Web开发 数据分析 人工智能和科学计算等 本篇博客将为初学者提供一份Python入门
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 Simulink 文章讲解 1 概述 文献来源 抗扰PI
  • 背景图片设置透明度

    div position relative background color eee background moz linear gradient 30deg eff8fd 0 f0f9fe 40 c4e2fe 80 9cbee6 100
  • 计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数

    Date 2020 05 19 Author CW 前言 EAST 的损失函数由三部分构成 对应预测输出的三个map score map loc map 以及 angle map 即分类损失 位置 点到文本框边界上下左右的距离 损失以及角度