更新项目介绍

This commit is contained in:
xiongraorao 2018-08-18 14:56:20 +08:00
parent 273aeaa5d8
commit 7fd93ce091
5 changed files with 118 additions and 0 deletions

View File

@ -2,6 +2,8 @@
目标职位: java 工程师、大数据开发方向
[项目介绍](resume.md)
## 1. 招聘信息
招聘信息的来源主要是学校的群和牛客网。

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

116
interview/resume.md Normal file
View File

@ -0,0 +1,116 @@
<!-- TOC -->
- [个人简历项目介绍](#个人简历项目介绍)
- [大规模人脸检索和人证合一系统](#大规模人脸检索和人证合一系统)
- [项目简介](#项目简介)
- [应用背景](#应用背景)
- [技术关键](#技术关键)
- [大数据框架](#大数据框架)
- [存储实现](#存储实现)
- [计算逻辑](#计算逻辑)
- [索引方法](#索引方法)
- [CPU索引](#cpu索引)
- [GPU索引](#gpu索引)
- [融合深度学习技术的智能云应用平台](#融合深度学习技术的智能云应用平台)
- [项目简介](#项目简介-1)
- [项目背景](#项目背景)
<!-- /TOC -->
# 个人简历项目介绍
# 大规模人脸检索和人证合一系统
## 项目简介
实现一个基于深度神经网络的大规模人脸识别和检索的系统,统计在规定时间内,经过所有摄像头的人脸的次数。
## 应用背景
本项目的大规模人脸识别系统是基于某海关鉴定“水客”的应用场景来设计。在实际的应用场景中每天通过海关的人员大约有40万人每个游客进入摄像头的人脸图像大约提取10张要求计算该游客在过去15天内一共出现的次数。根据统计的次数来判断游客是否为“水客”。
## 技术关键
按照应用背景的要求15天内大约有6000万张图片面对如此庞大的数据集需要采用分布式处理的方案来计算。
### 大数据框架
采用Storm分布式实时处理的框架来对每个摄像头的视频帧进行预处理通过**人脸检测**、**特征提取**、**特征比对**等步骤来实现大规模人脸检索的功能。
HDFS实现分布式文件存储HBase来实现分布式列存储Storm实现实时流计算并接入人脸识别算法Kafka实现分布式消息转发
### 存储实现
需要存储的数据有人脸图像的非结构化数据中间产生的人脸特征、哈希特征等结构化的数据将非结构化的数据存储在HDFS上通过URL获取结构化数据存储在HBase表里面分别有3张表HashTableTimesTableIndexTable
**HashTable**: 建立hash特征和人脸实值特征、人脸图片URL和时间戳人脸ID字段的联系。行健为hash特征
![](img/hash-table.jpg)
**注意一个feature 可能对应多个hash**
count表示hash对应的feature的个数
feature: 人脸实值特征512
**TimesTable**: 记录每天出现的次数和每次出现对应的时间戳和人脸图片对应的URL。行键为游客的ID和当天日期的结合。
![](img/times-table.jpg)
count: 表示游客被识别成功的次数每识别一次count字段就加1然后新增stamp和url两个字段。
times: 表示该游客出现的次数,**和count不同times在游客连续10秒内出现只计算一次count则是识别一次就加一次**
这里的游客的ID是通过检索得到的后面有检索算法
**IndexTable**: 记录15天内每天插入到索引的哈希值主要用于更新索引和数据恢复。行健为当天的日期。
![](img/index-table.jpg)
count: 记录当天插入索引的hash的个数hash为当天的哈希索引值。如果需要增加新的索引count字段加一后面添加新的列。
hash: 当天抓取的人的hash值
### 计算逻辑
每天抓到的人脸都会存储到IndexTable中用于初始化索引。对于抓取到的人脸去以前的特征库里面检索特征中间需要用到HashTable来对人脸进行精细计算然后统计次数存入到TimesTable中。
## 索引方法
### CPU索引
首先将待查的特征变成Hash利用C++ 的 popcnt 指令优化计算待查Hash和特征库里面的Hash的汉明距离异或然后利用桶排序思想得到汉明距离最低的几个hash值然后返回粗略索引结果得到粗略结果后查询 HashTable 里面的实值特征,然后利用余弦计算距离,得到最近的余弦值,即最终的查询结果。
Topk 排序问题,因为汉明距离的值有大小范围,所以采用桶排序的思想。
考虑到角度原因,所以采用余弦值来代替。
性能100万9ms
### GPU索引
性能6000万平均512ms 100万3ms
GPU索引利用了归并排序和双调排序的思想。
首先将所有的汉明距离按K划分K个相邻的数据为一组将所有⌈N/K⌉组的汉明距离排序为组内有序
找出数组下标[0,K)和[K,2K)中汉明距离中最小的K个数据并将它移动到[0,K)的位置,找出数组下标[2K,3K)和[3K,4K)中汉明距离中最小的K个数据并将它移动到[2K,3K)的位置依此类推。经过这一步之后以2K个数据为分组可以找出每组中的前K个数据
重复前面两步,分别排序[0,K)、[2K,3K)、[4K,5K)…,然后将[0,K)和[2K,3K)这2K个数组为一组找出前K个最小的汉明距离并将它移动到[0,K)依此类推所有数据的前K个汉明距离即存储在[0,K)位置上。
# 融合深度学习技术的智能云应用平台
## 项目简介
结合深度学习技术,开发融合了人脸识别,人脸布控,活体检测,智能门禁等多种应用的分布式智能云应用平台。
## 项目背景
利用深度学习算法,实现摄像头视频流的实时人脸检测,人脸布控,活体检测,智能门禁的多种应用的平台级产品。
人脸布控:先将人脸黑名单库存放到系统中,提取人脸的特征,拿到待查询的人脸,跟特征库进行比对,超过某个阈值则示警。
智能门禁:其实差不多,也是拿人脸进行匹配,通过了就开门。
Docker和kubernetes 部署: 遇到的挑战集群间的通信、分布式文件系统的选择GlusterFS、ceph Fs、NFS、docker 的问题。