天天看點

【轉載】項目實戰—人臉檢測之卷積神經網絡實戰(六)

現在我們來進行實戰,以前的方法中,很大一部分工作是選擇濾波器來建立特征,以便盡從圖像中可能多地提取資訊。随着深度學習和計算能力的提高,這項工作現在可以實作自動化。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

【轉載】項目實戰—人臉檢測之卷積神經網絡實戰(六)

繼續閱讀