技术标签: 论文研究、复现、总结
论文地址:L2-constrained Softmax Loss for Discriminative Face Verification
现状:无约束环境下的人脸验证是一个具有挑战性的问题。 尽管最近的人脸验证系统在像LFW这样的有计划的数据集表现优异,但是在视点、分辨率、遮挡和图像质量极不相同的人脸上,仍然很难达到类似的精度。
猜想:训练集中的数据质量不平衡是造成这种性能差距的原因之一。 现有的人脸识别训练数据集包含大量的高质量和正面人脸,而 无约束和困难的面孔很少有。
softmax loss优缺点:容易实现,批次大小没有任何限制,并且收敛速度快。但是,没有任何度量学习。
L2范数:如图1,我们观察到,使用Softmax损失学习的特征的L2范数是关于面部[23]质量的信息。 优质正面脸的特点是有一个高的L2范数,而模糊的脸与 极端姿态具有低L2-范数
流程:
用Softmax损失函数对网络进行训练,由方程(1)给出:
测试的时候,采用L2-distance,或余弦(2)做相似度判断,结果是一样的
这个流程有两个主要问题:首先,对人脸验证任务的训练和测试步骤进行解耦。 使用Softmax损失的训练不一定能确保正对 在归一化或角空间中,负对要更近,负对要远距离分离。其次,Softmax分类器在 困难 或 极端样本结果不好。
提出假设:在数据质量不平衡的典型训练批次中,通过增加L2范数,使Softmax损失减轻重视简单样本的特征,忽略困难样本。
实验:为了验证这一理论,我们在IJB-A数据集上进行了一个简单的实验。网络采用Face RestNet。就是图1,高L2-norm好,低L2-norm不好
做法:为了解决这些问题,我们强制每个人脸图像的特征的L2范数。最终的特征都分布在球面上。
优点:使正对的余弦相似度最大化,使负对的余弦相似度最小化,从而增强了特征的验证信号。 其次,这是 由于所有的人脸特征都具有相同的L2范数,所以Softmax损失能够更好地模拟极端和困难的人脸
L2-softmax loss 表示:
验证:
L2-norm实现:(scalar parameter (α) 参与训练)
参数α的变化:
标度参数α在决定L2-Softmax损失的性能中起着至关重要的作用。
有两种方法来执行L2约束:
第二种方法比较好,比Softmax损失有所改善。 但是,网络学习到的α参数很高,导致了减轻了 L2约束。 该Softmax分类器旨在增加特征范数以最小化总体损失,增加α参数,使其更自由地适合于简单的样本。 因此,由网络学习的α构成参数的上界。 通过将α固定在较低的恒定值上,获得了更好的性能。
另一方面,α值很低,训练不收敛。 例如,α=1在LFW[14]数据集上的性能非常差,准确率达到86.37%。小半径(α)的超球具有有限的比表面积,所以比较难
在这里,我们在α上制定了一个理论下界。
网络结构:用于实验[33]Face-Resnet体系结构。 C表示卷积层,激活函数PRELU[11],P表示最大池化层。 每个池层后面都有一组残差连接。 在完全连接层(FC)之后,我们添加了一个L2-Normalize层和尺度层,然后是Softmax损失。
数据集:在这一部分中,我们实验验证了L2-softmax损失对人脸识别的有效性。
我们从MS-Celeb-1M[9]数据集中形成了两个训练数据集子集:
数据清洗:聚类方法进行数据清洗
我们对具有Softmax损失以及L2-Softmax损失的Face-Resnet网络进行了各种α的训练。
在这里,我们比较了在MS-small 上训练的网络,使用我们提出的L2-softmax损失,与训练的有传统的softmax损失。
看图说话:
我们在MS-large数据集上为这个实验训练网络。
看图说话:
网络使用:All-In-One Face[25] 而不是 ResNet
随着尺度参数α的性能变化与Face-Resnet相似,表明最优尺度参数不依赖于网络的选择
与softmax损失类似,L2-softmax损失可以与中心损失、对比损失、三重态损失等辅助损失耦合。
进一步提高性能。 在这里,我们研究与中心损失耦合时,L2-Softmax损失的变化。 我们使用MS-小数据集来训练网络。
表4:Softmax损失表现最差。 中心损失在与Softmax损失一起训练时显著提高了性能,与L2-Softmax损失相当。 中心损耗与L2-Softmax损失给出了99.33%的精度的最佳性能。
文章浏览阅读1.5k次。2022年即将过去了,2023年您打算做什么呢?不少小伙伴打算做跨境电商了,目前也正在学习当中,这里就告诉大家一下2023年值得关注的几个跨境电商平台吧!_2023哪些跨境平台值得做
文章浏览阅读1.8k次,点赞2次,收藏31次。一.引言上一篇文章基础文本处理 processing && embedding介绍了常用的文本处理方法,趁热打铁了解一下处理连续文本的 demo 流程。二.数据信息与获取下面例子将用到气象记录站的天气时间序列,数据集中每10分钟记录14个不同的指标,包含气压,温度,湿度,风向等等环境相关的特征,这里采用 2009-2016 年的数据作为备选。1.源数据获取通过本地 terminal 输入如下命令,即可在对应 Downloads 文件夹下获取到原始数据。 ..
文章浏览阅读2.3w次,点赞9次,收藏59次。文章目录1,效果2,ffmpeg获取视频信息2,opencv获取视频信息1,效果2,ffmpeg获取视频信息其中key:‘streams’对应的值是一个list,list中有两个dict类型的值,分别表示视频中视频流和音频流的相关信息。key:‘format’对应的值是一个dict,其中包含了视频的相关的格式信息、视频时长信息、文件大小信息等。import ffmpegde..._cap.get(cv2.cap_prop_frame_width)
文章浏览阅读3.6k次。java.lang.IllegalArgumentException: width and height must be > 0 在postraotate之前需要设置转换矩形区域旋转时要判断旋转角度是否大于0,否则不做旋转。缺一报错Matrix mt = new Matrix(); float delta = angle - lastAngle;_java.lang.illegalargumentexception: width and height must be > 0
文章浏览阅读1.1w次,点赞2次,收藏22次。用户空间的缺页异常可以分为两种情况--1.触发异常的线性地址处于用户空间的vma中,但还未分配物理页,如果访问权限OK的话内核就给进程分配相应的物理页了2.触发异常的线性地址不处于用户空间的vma中,这种情况得判断是不是因为用户进程的栈空间消耗完而触发的缺页异常,如果是的话则在用户空间对栈区域进行扩展,并且分配相应的物理页,如果不是则作为一次非法地址访问来处理,内核将终结进程下面来看d_linux 缺页异常 匿名
文章浏览阅读1.6k次。在InitInstance函数中添加多个文档模板m_pTemplateSchematicView = new CMultiDocTemplate(IDR_CTEMATYPE, RUNTIME_CLASS(CCTEMADoc), RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架 RUNTIME_CLASS(CCTEMAView)); if (!m_pTemplateSchematicView) re..._mfc多文档生成多个子窗口
文章浏览阅读1.4w次,点赞26次,收藏74次。一、问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。二、背景知识git的版本管理,及HEAD的理解使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向ma_git revert和reset
文章浏览阅读384次。2.基于镜像创建新容器:注意为了保证和旧容器其它配置全部一样,创建时,需要保留旧的配置和旧容器创建是一样(包括挂载的目录、关键变量等),然后修改或者增加自己需要加的改动。其中old_container_id为老的容器ID,new_image为镜像名,v1为标签。如果容器已经创建,忘记指定--network=host了,又不想删除老容器,想仍然用这个容器里面的各种配置,可以考虑创建一份这个容器的镜像,基于这个镜像,指定--network=host,创建新的容器。_ros2 nav2 docker arm 部署
文章浏览阅读3k次。Android 设置PNG图片的打印分辨率dpi(pHYs)1.了解png的原文件数据,头文件IHDR,控制物理密度的pHYs,关于png的头文件IHDR:https://blog.csdn.net/satanzw/article/details/38757121png图片都是以固定标识89 50 4E 47 0D 0A 1A 0A开始,然后接着IHDR例如一张png从头开始为:..._phys dpi
文章浏览阅读3.8k次。app开发,手机顶部状态栏会和app头部导航叠加在一起解决方法:拿到顶部状态栏的高度,再给头部导航加个padding-top在app.vue里拿到状态栏的高度并存放在globalData里onLaunch() { const that = this; uni.getSystemInfo({ success(res) { that.globalData.statusBarHeight = res.statusBarHeight; } })},globalData:{ statu_app顶部状态栏与头部重叠
文章浏览阅读252次,点赞9次,收藏3次。重复将首节点的下一个节点调整到最前面,如链表1->2->3->4,调整过程为2->1->3->4,3->2->1->4,4->3->2->1。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。将原链表的元素从头到尾入栈后,从栈顶到栈底的元素的顺序即为原链表反转后的顺序。您的支持是我们为您提供帮助的最大动力。使链表从尾节点开始指向前一个节点。
文章浏览阅读138次。出处:blog.csdn.net 作者:eye_of_back 更新时间:2007-08-21 原文 一,derby是什么 Derby是什么,即使你说不上来,想必你也早就听说过了,当然了,如果没有听说过,也没有关系,因为下面就要和你说一下Derby。 Derby是一款轻量级的关系型数据库,它的出现要感谢的人很多,其中一位是IBM,它把Cloudscape源码开源,并捐献给了Ap..._derby插件版本一定要匹配吗