人脸表情识别PaddlePaddle学习2

项目定义回顾

人脸表情有限数据集,自己搭建深度学习模型,训练并调优,最后还需要将模型部署到树莓派设备上,实现离线方式的部署,并做到用摄像头捕获表情,用显示屏显示识别结果。

paddlepaddle FatalError: 

Segmentation fault is detected by the operating system.

继续运行昨天的代码,还是不能运行下去,尝试找错。

把gpu运行改成cpu,然后减少epoch数量,可以缓慢运行了。

人脸表情识别PaddlePaddle学习2_第1张图片

因为受到部署侧限制,部署的设备算力并不高,内存也小,在没有GPU、NPU等加速的情况下使用CPU进行深度学习运算。虽然深度学习的前向传播运算并没有反向传播那么的吃算力,但是对于移动端设备来说也是非常大的计算量了。所以我们在模型选择时需要轻量级小参数的模型。使用小模型还需要保证精度,这也是赛题的一个难点。
详见柠檬分类:https://aistudio.baidu.com/aistudio/projectdetail/1592283 

于是在老师的建议下,选择浅层网络。

# Sequential形式组网
network = paddle.nn.Sequential(
    paddle.nn.Conv2D(3, 16 ,3), #输入3通道图像,输出16通道图像,卷积核大小3*3
    paddle.nn.ReLU(),
    paddle.nn.MaxPool2D(2),

    paddle.nn.Conv2D(16, 32, 3),
    paddle.nn.ReLU(),
    paddle.nn.MaxPool2D(2),

    paddle.nn.Conv2D(32, 64 ,3),
    paddle.nn.ReLU(),
    paddle.nn.MaxPool2D(2),

    paddle.nn.Conv2D(64, 32, 3),
    paddle.nn.ReLU(),
    paddle.nn.MaxPool2D(2),

    paddle.nn.Flatten(),
    paddle.nn.Linear(4608, 3),
)
model = paddle.Model(network)
model.summary((-1, ) + tuple(get('image_shape')))#模型可视化

哈哈哈哈好差的结果--

人脸表情识别PaddlePaddle学习2_第2张图片

 

 模型测试

 

人脸表情识别PaddlePaddle学习2_第3张图片

人脸表情识别PaddlePaddle学习2_第4张图片

 准确率只有0.30,而且图像看起来并没有经过预处理。

接下来选择一个更大的数据库,并尝试将图像正确地预处理。

数据库重新加载

!unzip -q -o data/data100247/images.zip

这个数据库的图片类型一样,除了测试集加入了自己的几个表情。

人脸表情识别PaddlePaddle学习2_第5张图片因为图片都是灰度图,在运行时总是报错,说某个标签项不在list中,百思不得其解。最后队友发现这里在数据加载的时候有一个条件语句(38行)是不符合我们的数据集的,将他删去,就不报错了。

 这次的数据集大了很多,有7种表情,每种表情都有一百多张。

人脸表情识别PaddlePaddle学习2_第6张图片

模型选择和训练

模型仍然是之前的浅层网络,将训练轮数改为20,batch size改为64。训练准确率达到了0.65.

人脸表情识别PaddlePaddle学习2_第7张图片

 模型预测

人脸表情识别PaddlePaddle学习2_第8张图片

人脸表情识别PaddlePaddle学习2_第9张图片 

 

 人脸表情识别PaddlePaddle学习2_第10张图片

怎么硕呢,我觉得我也分辨不清这些人的表情,数据集还是不行啊! 

补充知识

import time

https://blog.csdn.net/liagn/article/details/82597472?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162632318916780264018934%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162632318916780264018934&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-4-82597472.pc_search_result_cache&utm_term=import+time%E6%97%B6%E9%97%B4%E6%A8%A1%E5%9D%97%E8%83%BD%E5%B9%B2%E5%95%A5&spm=1018.2226.3001.4187

在Python中,与时间处理相关的模块有:time、datetime以及calendar。学会计算时间,对程序的调优非常重要,可以在程序中狂打时间戳,来具体判断程序中哪一块耗时最多,从而找到程序调优的重心处。

resize和reshape区别

reshape和resize 都可以改变数组的形状,但是reshape不改变原数组的数据,resize可以改变原数组的数据。

在卷积神经网络里,输入的数据要有相同的形状,所以只能预处理只能选择resize。

你可能感兴趣的:(暑期实习,python,机器学习,神经网络)