目标检测概述

时间:2022-01-03 12:51:49

经典的深度学习模型

  • AlexNet(Error: 16%)
  • VGGNet(Error: 7%)
    • VGG-16: conv3-64->conv3-64->maxpool -> conv3-128->conv3->128->maxpool -> conv3-256->conv3-256->conv3-256->maxpool -> conv3-512->conv3-512->conv3->512->maxpool -> conv3-512->conv3-512->conv3->512->maxpool -> fc4096->fc4096->fc1000->softmax
  • GoogLeNet(Error: 6%)
  • ResNet(Error: 3.57%)

目标检测

  • R-CNN
    • 多个卷积层(框要大小统一) -> SVM分类
  • SPPNet
    • 多个卷积层(框可以是任意大小)->ROI池化层(将任意大小的框转为统一大小的框)-> SVM分类
  • Fast-R-CNN
    • 多个卷积层(框可以是任意大小)->ROI池化层(将任意大小的框转为统一大小的框)->两个全连接神经网络(一个softmax用于分类, 另外一个用于框回归)

MTCNN(Multi-task CNN)

  • P-Net
  • R-Net
  • O-Net
  • 应用
    • 人脸实时检测与人脸对齐

GAN

  • 对抗网络

人脸识别(Face Recognition)

  • 案例
    • 现在有一个公司员工进入公司内部的身份验证系统, 与百度的类似, 但是是简化的版本, 现在有两种方案
      1. 每一个员工进入之前要初始自己的ID卡, 该卡上的磁条上有自己名字的信息, 同时员工还有对准相机进行脸部图像的获取, 在后台服务器的数据库中有一个name到encoding vector的映射, name就是公司中所有员工的姓名, encoding vector就是员工一开始录用拍摄的照片放入到神经网络中得到的编码; 输入name和图像, 将图像转为encoding vector, 根据name到dictionary中找到数据库中对应的encoding vector, 计算两个向量的L2范式距离, 如果小于一个阈值(比如0.7)表示为同一个人, 允许进入
      2. 与方案1不同的是, 现在不需要ID卡, 而是直接采用相机捕捉脸部图像的方法, 在服务器上的数据库还是那个字典, 当员工靠近时, 对准相机, 算法会将当前的人脸转为encoding vector, 接着去遍历dictionary中的encoding vector计算他们的L2范式距离, 得到对接近的dist, 在将该dist与阈值(如0.7)进行比较, 如果小于0.7则表示是同一个人, 允许进入; 此方法的好处是员工丢失了ID卡也没有关系
  • 模型
    • 采用DeepFace模型
    • 每一个样本为\((A^{(i)},P^{(i)},N^{(i)})\), 其中A表示anchor(新的图片), positive(与anchor是同一个人的图片), negative(与anchor不是同一个人的图片), 这与我们之前遇到的样本长得不一样, 称之为triplet(三元组)
    • L2计算公式\(||f(A^{(i)})-f(P^{(i)})||^2+\alpha \le ||f(A^{(i)})-f(N^{(i)})||^2\), 其中\(\alpha\)与SVM中的功能一样, 是一个软间隔; 变换一下为求最小化\(J=\sum_{i}^mmax({||f(A^{(i)})-f(P^{(i)})||^2}-||f(A^{(i)})-f(N^{(i)})||^2+\alpha)\), 成为triplet loss(三元组损失)