【EMFace】《EMface: Detecting Hard Faces by Exploring Receptive Field Pyramids》

news2024/11/18 15:36:05

在这里插入图片描述

arXiv-2021


文章目录

  • 1 Background and Motivation
  • 2 Related Work
  • 3 Advantages / Contributions
  • 4 Method
  • 5 Experiments
    • 5.1 Datasets and Metrics
    • 5.2 Ablation Study
    • 5.3 Comparison with State-of-the-Arts
  • 6 Conclusion(own)


1 Background and Motivation

尺度变化是人脸检测中最具挑战性的问题之一

在这里插入图片描述

Modern face detectors employ feature pyramids to deal with scale variation

但是特征金字塔存在如下问题:

it might break the feature consistency across different scales of faces(想表达的是一定范围的尺寸人脸,eg 50~100大小的,都落在一张特征图上,怕特征图 hold 不住)

作者对特征金字塔进行改进,提出 EMFace(EXPLORING RECEPTIVE)

2 Related Work

  • CNN-based face detection
  • receptive fields for recognition tasks
    • ASPP
    • RFB Net
    • Deformable convolution

3 Advantages / Contributions

  • 提出 EMFace,核心模块为感受野金字塔(Receptive Field Pyramid)
  • 感受野金字塔中的 pooling 模块,多分支训练,单分支测试,速度得以提升
  • 在 WIDER FACE 和 UFDD 数据集上,验证了其速度和精度
    在这里插入图片描述

The branch pooling balances the representations of parallel branches during training and enables a single branch to implement inference during testing

4 Method

在这里插入图片描述
特征金字塔 P2~P7,这个本身应该提点很猛,哈哈哈

RFP 的细节如下

  • multi-branch convolution layer
  • branch pooling layer
    在这里插入图片描述

先经过三个权重共享的空洞卷积+残差结构

在这里插入图片描述
再接个 Branch Pooling 结构

在这里插入图片描述
B = 3

RFP 输入输出维度相同

代码:https://github.com/emdata-ailab/EMface

class MRF(nn.Module):
    def __init__(self,in_planes):
        super(MRF,self).__init__()
        self.share_weight=nn.Parameter(torch.randn(in_planes,in_planes,3,3)) # 共享权重,卷积核 3x3
        self.bn1=nn.BatchNorm2d(in_planes)
        self.bn2=nn.BatchNorm2d(in_planes)
        self.bn3=nn.BatchNorm2d(in_planes)
        self.relu1=nn.ReLU(inplace=True)
        self.relu2=nn.ReLU(inplace=True)
        self.relu3=nn.ReLU(inplace=True)
    def forward(self,x):
        residual=x
        x1=F.conv2d(x,self.share_weight, stride=1, padding=1,bias=None, dilation=1)
        x1=self.bn1(x1)
        x1=x1+residual
        x1=self.relu1(x1)
        x2=F.conv2d(x,self.share_weight, stride=1, padding=3,bias=None, dilation=3)
        x2=self.bn2(x2)
        x2=x2+residual
        x2=self.relu2(x2)
        x3=F.conv2d(x,self.share_weight,stride=1, padding=5,bias=None, dilation=5)
        x3=self.bn3(x3)
        x3=x3+residual
        x3=self.relu3(x3)
        y=torch.cat((x1, x2, x3), dim=1) # (n, 3*in_planes, h, w)
        b,c,h,w=y.size()
        y=y.view(b,3,c//3,h,w) # (n, 3, in_planes, h, w)
        y1=y.mean(dim=1,keepdim=True) # (n, 1, in_planes, h, w)
        y=y1.view(b,-1,h,w) # (n, in_planes, h, w)
        return y

调用

self.MR1=MRF(256)
self.MR2=MRF(256)
self.MR3=MRF(256)
self.MR4=MRF(256)
self.MR5=MRF(256)
self.MR6=MRF(256)

5 Experiments

ResNet50 + FPN

5.1 Datasets and Metrics

WIDER FACE and UFDD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

metrics 为 AP

5.2 Ablation Study

(1)Number of Branches

在这里插入图片描述
3 个 Branch 计算量和精度权衡最好

(2)Weight Sharing.

在这里插入图片描述
RFP 中 multi-branch convolution 的权重 share 参数量减少很多,精度略微下降

(3)Branch Pooling.

在这里插入图片描述
训练的时候 3 branches,测试的时候选择不同的输出方式,输出数量,输出组合形式(BP,add,concat)

we drop out the Branch-1 and Branch-3 (d=1 and d=5 in Figure 4) in RFP and only keep the Branch-2 to output in the
inference phase.

作者测试时最终仅保留了 branch-2 作为输出

在这里插入图片描述

5.3 Comparison with State-of-the-Arts

(1)WIDER FACE
在这里插入图片描述

(2)UFDD
在这里插入图片描述

6 Conclusion(own)

  • 标题单词都搞错了,哈哈,pyramids

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1276291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flutter-一个可以输入的数字增减器

效果 参考文章 代码 在参考文章上边,主要是改了一下样式,逻辑也比较清楚,对左右两边添加增减方法。 我在此基础上加了_numcontroller 输入框的监听。 加了数字输入框的控制 keyboardType: TextInputType.number, //设置键盘为数字 inputF…

MySQL 基础、进阶、运维的学习笔记

1. MySQL 基础篇 1.1 MySQL 概述 1.1.1 数据库相关概念 数据库(Database, 简称 DB): 存储数据的仓库,数据是有组织的进行存储。 数据库管理系统(Database Management System, 简称 DBMS): 操作和管理数据库的大型软件。 SQL(Structured Query Language, 简称 S…

高并发下缓存失效问题-缓存穿透、缓存击穿、缓存雪崩、Redis分布式锁简单实现、Redisson实现分布式锁

文章目录 缓存基本使用范式暴露的几个问题缓存失效问题---缓存穿透缓存失效问题---缓存击穿一、单机锁正确的锁粒度不正确的锁粒度无法保证查询数据库次数是唯一 二、分布式锁getCatalogJsonData()分布式锁演进---基本原理分布式锁(加锁)演进一:删锁失败导致死锁分布…

『IDEA』代码热部署和热加载

前言 在日常开发中,我们需要经常修改 Java 代码,手动重启项目,查看修改后的效果。如果在项目小时,重启速度比较快,等待的时间是较短的。但是随着项目逐渐变大,重启的速度变慢,等待时间 1-2 min…

第一届云南大学CTF校赛YNUCTF-PWN提示(hint)

文章目录 easy-ikun四种方法 black_ikunsyscall-ikunikun-runner_记第一次校赛出题如何运行服务器?保存镜像 easy-ikun s[i:j] 表示获取a[i]到a[j-1] s[:-1]去掉最后一个字符 s[:-n]去掉最后n个字符 s[-2:]取最后两个字符 s[i:j:k]这种格式呢,i,j与上面的一样&…

android https 证书过期

有的时候 我们android https 证书过期 ,或者使用明文等方式去访问服务器 可能会碰到类似的 问题 : javax.net.ssl.SSLHandshakeException: Chain validation failed java.security.cert.CertPathValidatorException: Response is unreliable: its validi…

Pandas进阶:文本处理

引言 文本的主要两个类型是string和object。如果不特殊指定类型为string,文本类型一般为object。 文本的操作主要是通过访问器str 来实现的,功能十分强大,但使用前需要注意以下几点。 访问器只能对Series数据结构使用。 除了常规列变量df.c…

Python 高性能 web 框架 - FastApi 全面指南

原文:Python 高性能 web 框架 - FastApi 全面指南 - 知乎 一、简介 FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6 并基于标准的 Python 类型提示。 它具有如下这些优点: 快速&…

【Geoserver】SLD点位样式(PointSymbolizer)设计全通

SLD文件可以控制geoserver的样式管理,这里专门针对点位进行设计,首先点位的设计需要用到这面这个大标签 之前的项目中已经用到了很多关于面的样式管理,这里新学习的是关于点的样式管理 PointSymbolizer 参考资料地址:https://doc…

基于hadoop下的hbase安装

简介 HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,…

机器人导航地图——Obstacle层的障碍物-Bresenham算法详细解释

文章目录 前言一、Bresenham算法源码解析1. 函数raytraceFreespace2. 函数inline void raytraceLine3. 函数bresenham2D 二、Bresenham算法——C代码实现总结 前言 作者在读源代码时,遇到了下述的代码void ObstacleLayer::raytraceFreespace,不是很好理…

股票要怎么买入卖出?

股票账户终于开好了!恭喜你马上就可以开启刺激的炒股之旅了!不过第一次买股票的你是不是还不知道怎么个买法呢?别担心~贴心的汇小鲸带着教程来了,咱们一起看看吧! 首先一点,大家得知道:开好户还…

速通MySql

一、简介 1、什么是数据库 数据仓库,用来存储数据。访问必须用SQL语句来访问 2、数据库的类型 1、关系型数据库:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询&#…

Postman如何导入和导出接口文件

本文介绍2种导出和导入的操作方法:一种是分享链接,导入链接的方式(需要登录);另一种是导出json文件,再次导入。下面将详细介绍。 由于第一种分享链接,导入链接的方式需要登录,所以推…

项目实战之RabbitMQ死信队列应用

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 文章目录 🌟架构图&#x…

开源 LLM 安全扫描器

Vigil 是一款开源安全扫描程序,可检测即时注入、越狱以及对大型语言模型(LLM) 的其他潜在威胁。 当攻击者使用专门设计的输入成功影响 LLM 时,就会出现即时注入。这导致 LLM 无意中实现了攻击者设定的目标。 ​ 我对 LLM 的可能性感到非常兴奋&#xff…

MFC、VC++操作excel后,excel程序进程无法正常退出的非暴力处理方法

先说处理方式 1、最low的方式:强制结束进程 //打开进程得到进程句柄 HANDLE hProcessOpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); if(hProcess!NULL) { //结束进程 if (TerminateProcess(hProcess,0)){printf("结束进程成功\n");return 0;} }这种方式…

【Linux系统化学习】揭秘 命令行参数 | 环境变量

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 代码仓库:Gitee 目录 命令行参数 环境变量 PATH 查看PATH $PWD 查看环境变量PWD $HOME 查看系统支持的环境变量 获取环境变量 命令行参数 在C/C编程语言中我们有一个…

hls实现播放m3u8视频将视频流进行切片 HLS.js简介

github官网GitHub - video-dev/hls.js: HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. - GitHub - video-dev/hls.js: HLS.js is a JavaScript library …

Redis——某马点评day01——短信登录

项目介绍 导入黑马点评项目 项目架构 基于Session实现登录 基本流程 实现发送短信验证码功能 controller层中 /*** 发送手机验证码*/PostMapping("code")public Result sendCode(RequestParam("phone") String phone, HttpSession session) {// 发送短信…