这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » OpenVINO生态社区 » 【原创】项目实战—人脸检测之卷积神经网络实战(六)

共13条 1/2 1 2 跳转至

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

高工
2020-08-26 20:55:01     打赏

项目实战—人脸检测之卷积神经网络实战

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

                                              image.png

在这种特定情况下,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"

完整代码:

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()

实验结果:

image.png

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

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都属于框架,真正的核心仍然是机器学习算法,掌握了核心的东西,我们在使用各种框架时,通过阅读使用手册,基本上就能做到实战化,基础仍然十分重要。谨记!

 

 

 

 

 


对计算机视觉感兴趣?这个社区推荐给你~

>>点击了解OpenVINO生态开发社区



工程师
2020-08-27 18:25:15     打赏
2楼

谢谢分享


工程师
2020-08-27 18:31:57     打赏
3楼

学习一下


工程师
2020-08-27 18:36:00     打赏
4楼

收藏了


工程师
2020-08-27 18:39:13     打赏
5楼

感谢楼主分享


工程师
2020-08-27 18:41:57     打赏
6楼

谢谢楼主分享


工程师
2020-08-27 18:44:35     打赏
7楼

谢谢分享


高工
2020-08-27 23:05:07     打赏
8楼

讲解的非常好


专家
2020-08-28 13:36:57     打赏
9楼

给祝老师送花。这个系列要仔细跟着练习了



工程师
2020-08-29 15:26:56     打赏
10楼

感谢您的分享


共13条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]