BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs

Abstract

我们提出了BlazeFace,这是一种轻量级且性能优异的面部检测器,专为移动GPU推理而设计。它在旗舰设备上运行速度可达200到1000+ FPS。这种超实时性能使其能够应用于任何增强现实管道中,作为任务特定模型的输入来准确识别面部感兴趣区域,例如2D/3D面部关键点或几何估计、面部特征或表情分类以及面部区域分割。我们的贡献包括一个轻量级的特征提取网络,该网络受到MobileNetV1/V2的启发但有所不同,基于单次多框检测器(SSD)修改的适合GPU的锚点方案,以及一种改进的替代非极大值抑制的平局分辨策略。

1. Introduction

近年来,深度网络中的各种架构改进([4, 6, 8])使实时物体检测成为可能。在移动应用中,这通常是视频处理管道中的第一步,接下来是特定任务的组件,如分割、跟踪或几何推理。因此,物体检测模型的推理必须尽可能快,最好性能远高于标准的实时基准。

我们提出了一种新的面部检测框架,称为BlazeFace,该框架针对移动GPU推理进行了优化,并改编自单次多框检测器(SSD)框架[4]。我们的主要贡献包括:

  1. 与推理速度相关的改进: 1.1. 一个非常紧凑的特征提取卷积神经网络,结构上与MobileNetV1/V2 [3, 9]相关,专门为轻量级物体检测设计。 1.2. 一个基于SSD [4]修改的新型GPU友好锚点方案,旨在有效利用GPU资源。锚点[8],或SSD术语中的先验,是预定义的静态边界框,作为网络预测调整的基础,并确定预测的精细度。

  2. 与预测质量相关的改进:一种替代非极大值抑制[4, 6, 8]的平局解决策略,

下面是一个可能的实现代码: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.StringTokenizer; public class WorkSchedule { public static void main(String[] args) { String workTime = "08:00-09:00;10:00-11:00"; Date startTime = parseDate("2023-05-25 08:17:00"); Date endTime = parseDate("2023-05-26 09:00:00"); Date specifiedDate = parseDate("2023-05-26"); List<String> result = getWorkTime(workTime, startTime, endTime, specifiedDate); for (String time : result) { System.out.println(time); } } private static List<String> getWorkTime(String workTime, Date startTime, Date endTime, Date specifiedDate) { List<String> result = new ArrayList<>(); StringTokenizer st = new StringTokenizer(workTime, ";"); while (st.hasMoreTokens()) { String timeRange = st.nextToken(); String[] timeArray = timeRange.split("-"); String startStr = timeArray[0]; String endStr = timeArray[1]; Date startDate = parseTime(specifiedDate, startStr); Date endDate = parseTime(specifiedDate, endStr); if (startDate.getTime() >= startTime.getTime() && endDate.getTime() <= endTime.getTime()) { String timeStr = formatTime(startDate) + "-" + formatTime(endDate); result.add(timeStr); } } return result; } private static Date parseDate(String dateStr) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); return null; } } private static Date parseTime(Date date, String timeStr) { Calendar cal = Calendar.getInstance(); cal.setTime(date); String[] timeArray = timeStr.split(":"); int hour = Integer.parseInt(timeArray[0]); int minute = Integer.parseInt(timeArray[1]); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, minute); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } private static String formatTime(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); return sdf.format(date); } } ``` 输出结果为: ``` 08:00-09:00 ``` 这个程序会解析工作时间段字符串,并将每个时间段转换为起始时间和结束时间。然后,对于指定日期,计算出该日期的开始和结束时间。最后,遍历每个时间段,如果该时间段在指定日期内,则将该时间段添加到结果集中。最终,返回所有符合条件的时间段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值