Nginx配置 多线程 ajax matplotlib tags Ractivejs angularjs版本 vue最新版本 后台管理ui bootstrap日历控件 ceb转换成pdf在线转换 matlab停止运行 less的比较级 java微服务架构 flutter ui构建工具 python课程 python中index的用法 python中set的用法 python代码 python读取mysql数据 linux配置python环境 javalabel java判断语句 java语言运算符 linux基础教程 电子书之家 神龙kms pr缩放 网络工程师教程 编程语言实现模式 medcalc 小程序开发工具下载 vscode全局搜索 绘图软件下载 winhex中文版下载 微信预约系统 ipad内存怎么清理 3dmax布尔运算 dh浩劫天赋 大数据就业方向
当前位置: 首页 > 学习教程  > 编程语言

【转载】项目实战—人脸检测之卷积神经网络实战(六)

2020/11/24 9:43:55 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

现在我们来进行实战,以前的方法中,很大一部分工作是选择滤波器来创建特征,以便尽从图像中可能多地提取信息。随着深度学习和计算能力的提高,这项工作现在可以实现自动化。CNN 的名称就来自我们用一组滤波器卷积初始图像输入的事实…

现在我们来进行实战,以前的方法中,很大一部分工作是选择滤波器来创建特征,以便尽从图像中可能多地提取信息。随着深度学习和计算能力的提高,这项工作现在可以实现自动化。CNN 的名称就来自我们用一组滤波器卷积初始图像输入的事实。需要选择的参数仍是需要应用的滤波器数量以及尺寸。滤波器的尺寸称为步幅。一般步幅设置在 2 到 5 之间。
在这里插入图片描述

在这种特定情况下,CNN 的输出是二分类,如果有人脸,则取值 1,否则取 0。

检测图像上的人脸

一些元素在实现中会发生变化。

第一步是下载预训练模型:https://github.com/davisking/dlib-models/blob/master/mmod_human_face_detector.dat.bz2

将下载后的权重放到文件夹中,并定义 dnnDaceDetector:

dnnFaceDetector = dlib.cnn_face_detection_model_v1(“mmod_human_face_detector.dat”)

完整代码:

view plaincopy to clipboardprint?
import cv2  
 import dlib  
 import matplotlib.pyplot as plt  
   
 dnnFaceDetector = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat')  
 gray = cv2.imread('min.jpg', 0)  
 rects = dnnFaceDetector(gray, 1)  
 for (i, rect) in enumerate(rects):  
     x1 = rect.rect.left()  
     y1 = rect.rect.top()  
     x2 = rect.rect.right()  
     y2 = rect.rect.bottom()  
     # Rectangle around the face  
     cv2.rectangle(gray, (x1, y1), (x2, y2), (255, 255, 255), 3)  
 plt.figure(figsize=(12,8))  
 plt.imshow(gray, cmap='gray')  
 plt.show()  

实验结果:
在这里插入图片描述

最后,实现实时 CNN 人脸检测:

view plaincopy to clipboardprint?
video_capture = cv2.VideoCapture(0)  
 flag = 0  
 dnnFaceDetector = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat')  
   
 while True:  
     # Capture frame-by-frame  
     ret, frame = video_capture.read()  
   
     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  
     rects = dnnFaceDetector(gray, 1)  
   
     for (i, rect) in enumerate(rects):  
         x1 = rect.rect.left()  
         y1 = rect.rect.top()  
         x2 = rect.rect.right()  
         y2 = rect.rect.bottom()  
   
         # Rectangle around the face  
         cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)  
   
     # Display the video output  
     cv2.imshow('Video', frame)  
   
     # Quit video by typing Q  
     if cv2.waitKey(10) & 0xFF == ord('q'):  
         break  
   
 video_capture.release()  
 cv2.destroyAllWindows()  

这些只是卷积神经网络的一些很简单的应用,由于其对硬件资源的依赖较大,所以一般我们用显卡来运算。

至于卷积神经网络的一些其他知识,我们并不详述,其本身属于一个较为复杂的知识体系,如果大家有兴趣,可以看看机器学习的内容,了解神经网络、BP神经网络、优化器、损失函数、各种梯度下降算法、以及各种高级网络模型的搭建等等。

总之不要急着入手深度学习,深度学习本身属于机器学习的一个分支,只要掌握好机器学习的知识,深度学习基本上就是网络模型的搭建,各种层的叠加,大量数据集的“炼丹”过程。在现有的已成熟的深度学习框架TensorFlow以及pytorch的情况下,深度学习也不再复杂,真正的核心反而是机器学习的基础算法。

曾经有人问我,深度学习框架选择哪一个比较好,事实上在我看来,pytorch用来入门更为方便,且由于其构件计算图的方便性,目前在学术界已经占了大比例,Tensorflow更适合工业界生态的部署,但目前这个局面可能正在被打破,也许在未来几年后,Tensorflow的优势可能越来越弱。

以上仅仅是我个人的看法,从全局来讲,这些东西都只是一个框架而已,无论是TensorFlow还是pytorch都属于框架,真正的核心仍然是机器学习算法,掌握了核心的东西,我们在使用各种框架时,通过阅读使用手册,基本上就能做到实战化,基础仍然十分重要。谨记!
查看文章汇总页https://blog.csdn.net/weixin_44237705/article/details/107864965
更多openvino技术信息可以入群交流~
申请备注:CSDN
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_400119.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?