很久以前看吴恩达老师的视频和西瓜书时用jupyter写的,今天想起来就把它转到这里

图像识别、目标检测、风格迁移

人脸识别

人脸验证(face verification)和人脸识别(face recognition)的区别:
人脸验证:输入一张人脸图片,验证输出与模板是否为同一人,即一对一问题。
人脸识别:输入一张人脸图片,验证输出是否为K个模板中的某一个,即一对多问题。

One Shot Learning:数据库中每个人的训练样本只包含一张照片,然后训练一个CNN模型来进行人脸识别。若数据库有K个人,则CNN模型输出softmax层就是K维的。
问题:训练样本较少,CNN网络不够健壮;输出层不够灵活,数据库增加一个人,输出层就要发生变化,相当于重建网络架构。

相似函数:便是2张图片的相似程度,用d(img1,img2)来表示(越小越相似)。
应用:人脸验证中使用:

d(img1,img2)≤τ : 一样

d(img1,img2)>τ : 不一样

One Shot Learning的解决办法:计算测试图片与数据库中K个目标的相似函数,取其中d(img1,
img2)最小的目标为匹配对象。若所有的d(img1,img2)都很大,则表示数据库没有这个人。

from IPython.display import Image
libo="C:/Users/libo/Desktop/machine learning/卷积神经网络/CNN图片/"
Image(filename = libo + "27.png", width=800, height=200)

在这里插入图片描述

Siamese Network:一张图片经过一般的CNN网络,最终得到的全连接层FC可以看做是原始图片的编码,表征了原始图片的关键信息,这个网络结构我们称之为Siamese network。每张图片经过Siamese network后,由FC层每个神经元来表征。

libo="C:/Users/libo/Desktop/machine learning/卷积神经网络/CNN图片/"
Image(filename = libo + "28.png", width=800, height=200)

在这里插入图片描述

训练样本:必须保证同一人包含多张照片.

可以使用梯度下降算法,不断训练优化CNN网络参数,让J不断减小接近0。

A、P、N 的选择:人为选择A与P相差较大,A与N相差较小。即人为的增加难度和混淆度会让模型性能更好。

面部识别与二分类:将两个siamese网络组合在一起,将各自的编码层输出经过一个逻辑输出单元,该神经元使用sigmoid函数,输出1则表示识别为同一人,输出0则表示识别为不同人。结构如下:

libo="C:/Users/libo/Desktop/machine learning/卷积神经网络/CNN图片/"
Image(filename = libo + "29.png", width=800, height=200)

在这里插入图片描述