人脸识别技术一直是计算机视觉领域的研究重点。随着深度学习方法的兴起,特别是卷积神经网络(CNN)的出现,人脸识别取得了巨大进展。CNN 能够自动从数据中学习特征,这使得它在人脸识别任务中表现优异。同时,大规模数据集的建立和GPU 计算能力的提高也为基于CNN 的人脸识别研究提供了支持。
? 卷积神经网络直接用原始图像的全部像素作为输入,但是内部为非全连接结构。因为图像数据在空间上是有组织结构的,每一个像素在空间上和周围的像素是有关系的,和相距很远的像素基本上是没什么联系的,每个神经元只需要接受局部的像素作为输入,再将局部信息汇总就能得到全局信息。权值共享和池化两个操作使网络模型的参数大幅的减少,提高了模型的训练效率。
数据集包含了18000多张图片,需要数据集的宝子们可以私信我哦
#定义网络模型,输出网络结构
Net( (conv1): Conv2d(1, 10, kernel_size=(5, 5), stride=(1, 1)) (conv2): Conv2d(10, 20, kernel_size=(5, 5), stride=(1, 1)) (pooling): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (fc1): Linear(in_features=3380, out_features=64, bias=True) (fc2): Linear(in_features=64, out_features=2, bias=True) )
# 模型训练
def train(epoch):
? ? running_loss = 0
? ? total_loss = 0
? ? loss_count = 0
? ? acc_count = 0
? ? acc = 0
? ? for i, data in enumerate(train_loader, 0):
? ? ? ? loss_count += 1
? ? ? ? # 获取输入数据和标签
? ? ? ? inputs, label = data ? ? ?
? ? ? ? y_predict = model(inputs)? ? ? ? ??
? ? ? ? loss = criterion(y_predict, label)? ?
? ? ? ? optimizer.zero_grad()? ? ? ? ? ?
? ? ? ? loss.backward()? ? ? ? ?
? ? ? ? optimizer.step()? ? ? ? ? ? ? ??
? ? ? ? # 计算训练总损失
? ? ? ? running_loss += loss.item()
? ? ? ? total_loss += loss.item()
? ? ? ? # 计算训练acc
? ? ? ? acc_count += label.size(0)
? ? ? ? _, predicted = torch.max(y_predict.data, dim=1)
? ? ? ? acc += (predicted == label).sum().item()
? ? ? ? if i % 100 == 99:
? ? ? ? ? ? print('Epoch %d:\nTrain loss: %.6f, train accuracy: %d %%' % (epoch + 1, running_loss / 100, 100 * acc / acc_count))
? ? ? ? ? ? running_loss = 0.0
? ? return acc / acc_count, total_loss / loss_count
模型测试结果
需要源码的宝子们可以后台私信我,有完整的源码和数据集,轻松上手,创作不易,不免费哦
动动你们的小手指点个小爱心吧