Kaggle项目:Northeastern SMILE Lab - Recognizing Faces in the Wild

本Kaggle项目地址Northeastern SMILE Lab - Recognizing Faces in the Wild
数据集百度网盘下载地址Kaggle data,提取码为:1mem
keras-vggface开源项目下载地址keras-vggface
项目描述
该项目使用Families In the Wild (FIW)数据集,要求通过面部识别,判断数据集任意两张图片中的人是否是有血缘关系。比如图片对为同一家庭的(父,子),(母,子)(兄,弟),(兄,妹)等时,标签label为1(注意比如(父,母)是没有血缘关系的,并不是同一个家庭的成员就有血缘关系),当图片对不是来自同一家庭时,一定没有血缘关系,标签label为0。
思路
该项目属于人脸识别项目,可用的开源项目方案有很多,这里我使用了基于VGG-face数据集预训练的网络模型进行迁移学习,深度学习框架为Keras。去掉了与训练模型的输出层,只保留特征层做特征提取,然后自定义输出层模型,最终输出为sigmoid层。
模型的输入中,每一个样本为一个图片对,输入相同的预训练模型(相同的权值),提取出特征后合并输入自定义输出层,这种网络结构叫孪生神经网络(Siamese network),这里就不详述了。
代码
首先导入需要的库

# 导入需要用到的第三方库
from collections import defaultdict
from glob import glob
from random import choice, sample
import cv2
import numpy as np
import pandas as pd
import re

# 导入keras及相关模块
from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau, LearningRateScheduler
from keras.layers import Input, Dense, GlobalMaxPool2D, GlobalAvgPool2D, Concatenate, Multiply, Dropout, Subtract
from keras.models import Model
from keras.optimizers import Adam
import keras.backend as K

#导入keras_vggface及相关模块,里面有使用vggface训练好的预训练模型
from keras_vggface.utils import preprocess_input
from keras_vggface.vggface import VGGFace

然后创建需要的文件路径变量,数据集中油训练样本集,测试样本集(未标注),训练样本标签(CSV文件),提交文件的示例(CSV文件),其中训练样本已经按家庭和人物分好了类。

# 文件路径
train_file_path = '.\\recognizing-faces-in-the-wild\\train_relationships.csv'
train_folders_path = '.\\recognizing-faces-in-the-wild\\train\\'
test_folders_path = '.\\recognizing-faces-in-the-wild\\test\\'
valid_folders_name = 'F08' #文件名中含有"F08"的图片会作为验证数据集而存在

创建路径列表:

# 返回所有的训练图片文件路径构成的列表
all_images = glob(train_folders_path + "*/*/*.jpg")

# 返回所有训练数据集(全部)、训练数据集(不含验证集)、验证数据集的路径列表
train_valid_images = all_images
train_images = [x for x in all_images if valid_folders_name not in x]
valid_images = [x for x in all_images if valid_folders_name in x]

接着定义几个字典,字典的键为“家庭/成员”格式的路径名,值为该文件夹下对应的图片路径构成的列表:

# 创建训练数据集(全部)、训练数据集(不含验证集)、验证数据集的defaultdict
# 其中键为家庭/成员文件名,值为该文件夹下的图片路径列表
train_valid_images_map = defaultdict(list)
train_images_map = defaultdict(list)
valid_images_map = defaultdict(list)

# 为每一个defautlist添加键值对
for x in train_valid_images:
    train_valid_images_map[x.split('\\')[-3] + "/" + x.split('\\')[-2]].append(x)

for x in train_images:
    train_images_map[x.split('\\')[-3] + "/" + x
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值