级联网络

article/2025/9/7 10:03:07

目录

级联

mtcnn级联人脸检测网络

 


级联

级联(cascade)在计算机科学里指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率

中文名  级联

外文名  Cascade

类    型  映射关系

另    指  用来设计一对多关系

重复性的操作十分烦琐,尤其是在处理多个彼此关联对象情况下,此时我们可以使用级联(Cascade)操作。级联 在关联映射中是个重要的概念,指当主动方对象执行操作时,被关联对象(被动方)是否同步执行同一操作。

级联还指用来设计一对多关系。例如一个表存放老师的信息:表A(姓名,性别,年龄),姓名为主键。还有一张表存放老师所教的班级信息:表B(姓名,班级)。他们通过姓名来级联。级联的操作有级联更新,级联删除。 在启用一个级联更新选项后,就可在存在相匹配的外键值的前提下更改一个主键值。系统会相应地更新所有匹配的外键值。如果在表A中将姓名为张三的记录改为李四,那么表B中的姓名为张三的所有记录也会随着改为李四。级联删除与更新相类似。如果在表A中将姓名为张三的记录删除,那么表B中的姓名为张三的所有记录也将删除。

mtcnn级联人脸检测网络

论文名称:Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks

论文地址:https://arxiv.org/abs/1604.02878

这是个人写的第一篇论文解读,如有考虑不到或者解释不清楚的地方,请在下方留言。

摘要:
简单来说,作者提出了一种使用三个卷积网络做级联,来检测人脸区域和人脸的5个关键点检测。同时,提出了一种新的online hard sample mining 训练技巧来提高模型的判别能力。

模型结构:


三个级联网络分别是pnet,rnet,onet。pnet采用全卷积结构,最后一部分是三个兄弟层,分别完成人脸分类,人脸框回归,和人脸关键点检测三个任务。另外两个网络的结构大致相似,只是在网络的后端使用全连接层。同时三个网络的在训练的时候的输入大小不一样。除了输出层,激活函数使用Prelu。

损失函数:
每个网络都有三个任务:分类,定位,关键点定位。所以每个网络都有三个损失函数,也就是多任务学习(Multi-task),MTCNN因此得名。

对分类任务而言,因为是二类分类,即仅仅判断是否是人脸区域,所以损失函数使用二类交叉熵(Binary Cross Entropy)。 

对于框回归任务而言,网络得到的结果不是框的坐标。我们知道,一个框能用四个数字表示它的位置,即左上角的x,y坐标,框的width,height,这四个参数。为了将获得位置信息变成一个回归问题,我们希望网络学到的是产生的框和Ground Truth的偏置距离,框回归的标签就不应该是以上描述一个框位置的那四个参数,而是样本框的左上角坐标和右下角坐标相对于GT左上角的坐标和右下角坐标的偏置比例。如果没接触过什么是偏置比例,强烈推荐看下rcnn的那篇论文,即RCNN系列的第一篇。

框回归任务直接使用欧式距离作为损失函数。

对于人脸的关键点检测任务而言,也同样使用欧式距离作为损失函数。

总的损失函数的设计如下:

det只的是分类任务,box指的是框回归任务,landmark指的是关键点检测任务。N是一个min-batch的数目。aj是这三类任务的控制参数,这三个参数哪一个大,说明网络对于对应的任务就更加看重。

如文中写道,aj描述了任务的重要性,以及训练不同网络的参数设置是如何的。另外是一个很重要的参数,下标i是说,对应batch中的某一个样本,上标j是说,对于某一类任务。这个参数的取值是0或者1。也就是说,对于一个样本xi,当且仅当分类任务对xi的判断结果是阳性,才是1,否则为0。也就是说,框回归任务和关键点检测任务只在分类结果为阳性的时候才会加入训练。

训练数据的制作:
论文使用的人脸检测的数据集是WIDER FACE,对关键点检测使用的数据集是CelebA。

第一步

从WIDER FACE中随机crop出样本,判断样本的GT的IOU,如果IOU大于0.65,则得到一个正样本;如果IOU大于0.45,则得到一个part样本;如果IOU小于0.3,则得到了一个负样本。IOU在0.3-0.45之间的样本,被认为是不重要的,没有学习价值的样本。

对分类任务使用正样本和负样本,对框回归任务使用正样本和part样本,对关键点检测直接使用CelebA的标签再加上处理成偏置比例即可。

第二步

从用上一步得到的数据训练pnet,将WIDER FACE中的整张图片送入pnet,得到了结果再和GT计算IOU,同样用上面的方式采集正负样本和part样本,作为对onet训练的数据集。

第三步

同第二步的思路。

以上三步得到的数据都要resize到所训练网络的输入大小。

训练技巧:
使用了online hard sample mining。思路是对一个batch的loss值进行排序,只对前70%最大的loss值计算梯度。

作者认为,这样做可以忽略对检测器不太有帮助的样本,而更加注重那些难分类,难学习的样本,对它们进行学习。

(不过我不太明白为啥作者是这是一种全新的online hard sample mining,因为传统的不也是这样做吗!!!)

测试:
作者考虑到了多尺度问题,因此在输入图像之前,做了一个图像金字塔。总过程如图所示:

 


http://chatgpt.dhexx.cn/article/hHjM4rbK.shtml

相关文章

信息级联(Information cascade)

文章目录 一、信息级联的定义1.1 信息级联的两步过程 二、基本模型三、文献Review3.1 信息级联起源的相关描述文献 四、相关资料提供 一、信息级联的定义 信息瀑布,又称信息级联。描述了当人们的选择受到前人信息的影响,放弃自己喜好,追随前…

级联相关网络

文章转自https://blog.csdn.net/xc_xc_xc/article/details/53163478 介绍 一般的神经网络是固定好拓扑结构,然后训练权重和阈值。级联相关神经网络是从一个小网络开始,自动训练和添加隐含单元,最终形成一个多层的结构。 级联相关神经网络具…

交换机——级联、堆叠和集群

交换机的连接主要有三种方式,级联方式、堆叠方式和集群方式。级联方式实现简单,只需一根普通的双绞线即可,节约成本而且基本不受距离的限制。而堆叠方式投资相对较大,且只能在很短的距离内连接,实现起来比较困难。集群…

一张图彻底理解级联!!!!!

1 学生表中肯定包含多条记录 每一条记录代表一名学生 因为 每一条记录保存了一名学生的核心信息: 该学生的姓名,性别,学生证号 但是 学生表中必须给每一条记录一个编号id 为什么 就是为了级联!!! 事实上 每个表我们都会倾向于给一个编号id 为什么? 为了…

级联

2019独角兽企业重金招聘Python工程师标准>>> 级联,英语:Cascade。是计算机科学里比较常见的概念。通常是指多个对象按照一定的规则有级别地或者是有梯度地联接在一起,也就是按照树形结构有层次地把对象组织在一起。 ■应用: 级联的应用比较广泛,表现在很多方…

级联介绍与实践

级联介绍与实践 一、级联的介绍和理解 1、级联概念 下面是百度百科对级联的解释和理解: 概念:级联(cascade)在计算机科学里指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率 理解:级联还…

C语言-汉诺塔问题详解

C语言经典递归题——汉诺塔 涉及知识:变量-形实参--函数-判断-递归 一、介绍 汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子, 其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把…

C++汉诺塔问题(河内塔)

C汉诺塔问题(河内塔) 这是一个非常经典的递归问题。 递归:在函数内部又再次调用函数自身的问题 假设有n个盘子,需要把这些盘子从第一根起始柱A移动到第三根目标柱C中。 1、首先需要把n-1个盘子移动到第二根中转柱B上&#xff1b…

关于Python实现汉诺塔问题

发文声明:在刚接触汉诺塔搬盘子这个问题时候,我是很懵的,当时也没多想,后来复习的时候才深入的去剖析了一下,对于我这种小白来讲还是不太容易的,因此我写下这篇博客,来分享一下自己的学习思路和心得&#x…

【C语言刷题】汉诺塔问题

目录 1.汉诺塔简介 2.汉诺塔分析 (1)寻找规律(采用物理中的参考系来进行推论) ①当n1时 ②当n2时 ③当n3时 插曲:很多讲解汉诺塔博客,视频,很不严谨的地方,让初学者听不懂&am…

【算法篇】汉诺塔问题

汉诺塔问题是一个递归的经典范例。 让我们先从移动一个盘开始,逐渐增加需要移动的盘数。 当我们需要移动一个盘时,只需将该盘移动至C杆。 int c 0; void move(char a, char b) {printf("第%d步为:%c->%c\n",c, a, b); } 当…

C语言实现汉诺塔问题(保姆式讲解)

前言: 大家好,又是再一次分享文章,我十分感谢各位能够点开这篇花费我颇多时间才解决的汉诺塔问题,接下来我就要分享一下自己的所思所想,希望能给各位带来一些不一样的收获吧。 提醒: 汉诺塔问题的本质是函数递归,而函数…

关于汉诺塔问题

首先,我们要了解什么是汉诺塔问题。 汉诺塔问题源于古印度的一种游戏,而这种游戏是指在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。而我们游戏的目标则是:把A杆上的金盘全部移…

【C语言】汉诺塔问题的解决办法(附图)

1.游戏规则 汉诺塔(Hanoi)游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个盘子。游戏的目标:把A杆上的盘子全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子…

Python解决汉诺塔问题

问题引入 汉诺塔问题源于印度一个古老传说。相传大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小…

汉诺塔问题(C语言实现)

前言 一、汉诺塔圆盘的移动步数 二、汉诺塔圆盘移动步骤 总结 前言 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序…

Java|汉诺塔问题详解

文章目录 汉诺塔问题:编程要求:解题过程:代码实现:总结 汉诺塔问题: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆…

C++解决汉诺塔问题

Description 汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着 n n n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去&…

汉诺塔问题超级详解

汉诺塔 汉诺塔问题图解代码 汉诺塔问题 1,我们为了后期方便讲解首先进行一个简单的命名—— 起始柱:1; 过度柱: 2; 目标住:3; 2,由于汉诺塔问题是一个明显的递归问题,所以…

汉诺塔问题解析(C语言)

文章目录 背景一、汉诺塔和递归二、代码实现总结 背景 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄…