Vào thời gian mình viết bài viết này, có lẽ rằng cụm trường đoản cú NHẬN DẠNG KHUÔN MẶT (FACIAL RECOGNITION) đã mất là một quan niệm quá xa lạ đối với ngẫu nhiên một ai. Đây là 1 kỹ thuật nhằm khẳng định một người từ 1 hình hình ảnh hoặc một cơ thể trong clip lấy được. Công nghệ nhận diện khuôn khía cạnh giờ đã trở buộc phải rất quen thuộc thuộc, và được áp dụng thông dụng trong những hệ thống bình yên ở những nơi trên cầm giới, trong đó có cả Việt Nam.
Bạn đang xem: Hệ thống nhận diện khuôn mặt dựa trên học sâu (Face recognition system based on deep learning)
Ưu điểm của công nghệ này so với các technology nhận dạng không giống (nhận dạng vân tay, nhận dạng giọng nói, nhận dạng mống mắt) đó là việc nó không yên cầu sự vừa lòng tác đến từ người dùng.
Mục tiêuHiện nay có nhiều kỹ thuật để triển khai việc nhấn dạng khuôn mặt, tuy nhiên điểm chung của những kỹ thuật này là phần lớn sẽ phải triển khai qua 3 bước:
Xác định và lôi ra (các) khuôn mặt tất cả trong hình ảnhTừ hình hình ảnh các khuôn mặt lấy ra từ cách 1, triển khai việc phân tích, trích xuất các đặt trưng của khuôn mặt
Từ những thông tin bao gồm được sau khoản thời gian phân tích, tóm lại và xác minh danh tính fan dùng
Thông qua nội dung bài viết lần này, mình sẽ xây dựng dựng một hệ thống hoàn chỉnh cho việc nhận dạng khuôn mặt dựa vào thư viện Dlib của Open
CV cùng mạng Deep Learning áp dụng hàm Triplet Loss. Hy vọng sẽ giúp chúng ta nắm được công nghệ này để rất có thể tự triển khai được vào thực tế.
Một chút phát âm lại vào phần tức thì trước, bản thân đã nói về 3 bước tiến hành của một khối hệ thống nhận dạng khuôn mặt, và giờ họ sẽ thực hiện không thiếu thốn 3 bước đó nhé.
Xác định khuôn khía cạnh trong hình ảnh (Facial detection) - vấn đề khó đã có Dlib lo

Tin vui cho các bạn là chúng ta sẽ không cần thiết phải hiểu vớ cả, thậm chí cũng không buộc phải nắm vượt rõ về một nghệ thuật nào trong số các chuyên môn trên nhưng vẫn có thể thực hiện tại được thuận lợi bước này.

Đúng như tiêu đề của bản thân có ghi, mọi vấn đề khó độc nhất vô nhị của bước này, bọn họ đều đã "nhờ" Dlib giải quyết! Dlib là 1 trong chương trình của tủ sách Open
CV, hỗ trợ người sử dụng trong việc xác minh khuôn mặt.Thuật toán mà lại Dlib thực hiện đó là HOG (Histogram of Oriented Gradients) cùng SVM (Support Vector Machine), đây đó là lý do vì sao Dlib có thời hạn chạy rất nhỏ và có thể sử dụng trong các hệ thống thời gian thực. Tuy nhiên gần đây, Dlib cũng đã hỗ trợ thêm những hàm xác định khuôn mặt dựa vào mạng CNN buộc phải tiếp theo họ sẽ cùng thử cả 2 phương thức này nhé. Vớ cả sẽ có trong đoạn code dưới đây.
import timeimport dlibimport cv2# Đọc ảnh đầu vàoimage = cv2.imread("/Users/phamhoanganh/Desktop/2.jpg")# Khai báo việc sử dụng các hàm của dlibhog_face_detector = dlib.get_frontal_face_detector()cnn_face_detector = dlib.cnn_face_detection_model_v1("/Users/phamhoanganh/Desktop/mmod_human_face_detector.dat")# Thực hiện xác định bằng HOG và SVMstart = time.time()faces_hog = hog_face_detector(image, 1)end = time.time()print("Hog + SVM Execution time: " + str(end-start))# Vẽ một đường bao màu xanh da trời lá xung quanh các khuôn phương diện được xác minh ra vị HOG + SVMfor face in faces_hog: x = face.left() y = face.top() w = face.right() - x h = face.bottom() - y cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)# Thực hiện xác định bằng CNNstart = time.time()faces_cnn = cnn_face_detector(image, 1)end = time.time()print("CNN Execution time: " + str(end-start))# Vẽ một đường bao đỏ xung quanh những khuôn mặt được xác định bởi CNNfor face in faces_cnn: x = face.rect.left() y = face.rect.top() w = face.rect.right() - x h = face.rect.bottom() - y cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255), 2)cv2.imshow("image", image)cv2.wait
Key(0)Đi sang một chút về đoạn code trên. Đầu tiên, hãy chắc chắn rằng rằng chúng ta đã thiết lập Dlib và triển khai import.
pip install dlib
Chi máu hơn về phong thái cài đặt, chúng ta hãy làm cho theo bài viết này
https://www.learnopencv.com/install-dlib-on-ubuntu/
Tiếp theo, mình phát âm vào một ảnh bất kỳ, sau đó gán và khai báo những hàm khẳng định khuôn mặt của Dlib.
dlib.get_frontal_face_detector: hàm áp dụng HOG + SVM để xác minh khuôn mặtdlib.cnn_face_detection_model_v1: hàm thực hiện CNN để khẳng định khuôn mặt, tuy vậy để áp dụng được hàm này ngay nhưng mà không cần đào tạo lại, bọn họ cần bắt buộc load weights của mạng CNN đã được train trước. Các bạn có thể tải xuống weights ở chỗ này và thực hiện khai báo như mình sinh sống trên nhé.http://arunponnusamy.com/files/mmod_human_face_detector.dat
Đây là bức hình ảnh mà mình sẽ thực hiện để thử

Tiếp đến, chúng ta thực hiện việc gọi hàm xác định khuôn mặt. Ở đây, để so sánh 2 phương pháp, trước và sau từng khi triển khai hàm xác định của từng phương pháp, mình đầu khắc ghi thời gian để tiện cho việc đối chiếu sau này.
faces_hog = hog_face_detector(image, 1)faces_cnn = cnn_face_detector(image, 1)Tham số buộc phải truyền vào cả hai hàm hầu như là hình ảnh đầu vào và con số của cửa sổ tìm kiếm. Trường hợp số này càng lớn, đồng nghĩa với việc sẽ sở hữu thêm những cửa sổ kiếm tìm kiếm (kích thước cửa sổ mới sẽ nhỏ tuổi dần). Điều này góp ta nhận thấy được các khuôn phương diện ở xa (bị nhỏ) nghỉ ngơi trong ảnh tuy nhiên đánh đổi bởi việc thời gian chạy sẽ tăng theo cấp cho số mũ. Ở đây mình chỉ để 1 cửa ngõ sổ.
Cả 2 hàm số đông trả về cho chúng ta 1 list những toạ độ của các khuôn mặt tất cả trong ảnh, với từ đó mình sẽ triển khai vẽ lên ảnh các đường bao chữ nhật.
LƯU Ý: Để rành mạch thì đối với các khuôn mặt được xác minh nhờ HOG+SVM, mình đã vẽ con đường bao màu sắc xanh, còn các vùng được khẳng định nhờ CNN, mình sẽ vẽ đường bao color đỏ! Hãy cùng xem kết quả.

Hog + SVM Execution time: 0.1367199420928955CNN Execution time: 4.2889978885650635
Với một bức ảnh khoảng 800x600 pixel như thế này, phương pháp sử dụng HOG kết hợp SVM mất khoảng 0.13 giây để xác định được toàn bộ khuôn mặt, còn phương pháp CNN lại đề xuất mất tới 4.29 giây (gấp khoảng 40 lần). Sự chênh lệch này sẽ bự hơn rất nhiều nếu bọn họ thử bên trên một bức hình ảnh chất lượng cao hơn. Tuy nhiên do bây giờ mình đang thực hiện MBP2017 là 1 loại lắp thêm không cung cấp về tính toán, GPU quá to gan lớn mật nên phương pháp CNN tỏ ra yếu hiệu quả. Vậy buộc phải với "cơ sở đồ gia dụng chất" của bản thân mình thì bản thân sẽ lựa chọn sẽ dụng cách thức HOG + SVM để đảm bảo an toàn được hệ thống của bản thân mình sẽ chuyển động được cùng với thời gian thực nhé!!
Đến đây, chúng ta đã xử lý dứt bước trước tiên theo một giải pháp ... Rất dễ dàng và tiện lợi nhờ sự hỗ trợ của DLIB. Hệ thống của họ đã có thể xác định được các vị trị khuôn phương diện ở trong ảnh! ngoài ra, Dlib còn hỗ trợ họ lấy ra những điểm đặc biệt trên khuôn phương diện (Landmark), tuy nhiên mình sẽ không còn đề cập cho tới trong nội dung bài viết này do hệ thống bọn họ đang xây dựng trọn vẹn không sử dụng chúng.
Biểu diễn các khuôn mặt dưới dạng vector
Nói tới việc nhận dạng, khẳng định khuôn khía cạnh này là "của ai", chúng ta sẽ buộc phải tính độ GIỐNG/ KHÁC nhau giữa những khuôn mặt chúng ta lấy được. Và nói tới độ GIỐNG/ KHÁC nhau, để đơn giản, bọn họ sẽ quy về việc Tính khoảng cách giữa các vector. Mặc dù cho là trong xử lý âm nhạc hay xử lý hình ảnh hay xử lý ngôn ngữ tự nhiên, vấn đề chuyển về vector nhằm tính khoảng cách đều là 1 trong lựa lựa chọn rất tốt. Với trong bài viết này, mình sẽ thay đổi các cơ thể khuôn khía cạnh về các vector có 128 chiều (số chiều này là do sau rất nhiều lần bản thân thử và lựa chọn ra, các chúng ta có thể thử và chọn lọc số khác).
Về lý thuyết thì là như vậy, nhưng lại vấn đề đặc biệt quan trọng nhất ngơi nghỉ đấy thiết yếu là
CẦN MỘT MÔ HÌNH CHUYỂN TỪ size HÌNH KHUÔN MẶT sang VECTOR, sao cho ẢNH 2 KHUÔN MẶT GẦN NHAU THÌ 2 VECTOR TƯƠNG ỨNG CŨNG PHẢI CÓ KHOẢNG CÁCH GẦN NHAU. ẢNH 2 KHUÔN MẶT KHÁC NHAU THÌ 2 VECTOR TƯƠNG ỨNG CŨNG PHẢI xa nhau chừng HƠN.
Và để xử lý vấn đề này, mình sẽ reviews cho chúng ta mô hình học tập sâu Conv
Net áp dụng hàm loss Triplet.
Triplet là gì?
Tiếng việt của Triplet hoàn toàn có thể tạm được dịch ra là "bộ ba". Với không hề ít các vấn đề khác trước đó của các mô hình học sâu, thông thường họ sẽ đến lần lượt từng hình ảnh một vào để mô hình học, tuy vậy với việc lần này, chúng ta sẽ phải áp dụng từng "bộ ba".
Bộ tía của bọn họ bao gồm: 1 hình ảnh mặt của 1 người bất kỳ (query), 1 ảnh mặt không giống của bạn đó (positive), 1 ảnh mặt của bạn khác (negative). Với việc giảng dạy mô trong khi thế, bọn họ sẽ tất cả thêm thông tin về mối quan hệ giữa những ảnh, điều này giúp mô hình họ phù hòa hợp hơn nhiều với bài bác toán.
Conv
Net

Net bên trên trong việc lần này.
Triplet loss
Một lần nữa
CẦN MỘT MÔ HÌNH CHUYỂN TỪ size HÌNH KHUÔN MẶT sang VECTOR, thế nào cho ẢNH 2 KHUÔN MẶT GẦN NHAU THÌ 2 VECTOR TƯƠNG ỨNG CŨNG PHẢI CÓ KHOẢNG CÁCH GẦN NHAU. ẢNH 2 KHUÔN MẶT KHÁC NHAU THÌ 2 VECTOR TƯƠNG ỨNG CŨNG PHẢI xa nhau HƠN.
Vậy làm cho sao mô hình của họ hiểu được vấn đề này khi giảng dạy để hoàn toàn có thể giúp chúng ta tạo ra những vector như ý? Đây chính là lúc việc sử dụng "bộ ba" trở bắt buộc hiệu quả. Và hàm loss của mô hình họ sẽ có dạng như sau

Với f(p)f(p)f(p) là vector màn trình diễn ppp. DDD là khoảng cách giữa 2 vector. Hàm loss của bọn họ sẽ là <−l>-l>−l>. Liếc qua một chút, họ đang huấn luỵên để cho hàm bên trên CÀNG LỚN CÀNG TỐT (max). Điều này có nghĩa là mô hình họ sẽ cố gắng học sao cho càng ngày, nó càng giảm khoảng cách giữa 2 vector f(pi)f(p_i)f(pi) (Query Image) với f(pi+)f(p_i^+)f(pi+) (Positive Image), và tăng khoảng cách giữa Query Image với Negative Image! Đây là điều họ đang muốn mô hình học được
Chuẩn bị dữ liệu đào tạo và giảng dạy mô hình
Đối với tuỳ từng tổ chức, mục đích sử dụng, bọn họ nên có một tập tài liệu đặc thù, nhưng ở đây mình đang mô phỏng lại một hệ thống, vậy đề xuất mình sẽ áp dụng 1 bộ data lớn một chút để test nghiệm. Và ở đây mình lựa chọn thử nghiệm hệ thống trên tập Labeled Face in Wild (LFW). Dataset này bao hàm hơn 13000 hình ảnh mặt fan (được gán nhãn) thu thập trên mạng internet. Các chúng ta cũng có thể tìm thấy bộ dữ liệu này sinh hoạt đây
LFW Dataset: http://vis-www.cs.umass.edu/lfw/
Huấn luyện tế bào hình
def convnet_model_(): vgg_model = applications.VGG16(weights=None, include_top=False, input_shape=(221, 221, 3)) x = vgg_model.output x = Global
Average
Pooling2D()(x) x = Dense(4096, activation="relu")(x) x = Dropout(0.6)(x) x = Dense(4096, activation="relu")(x) x = Dropout(0.6)(x) x = Lambda(lambda x_: K.l2_normalize(x,axis=1))(x)# x = Lambda(K.l2_normalize)(x) convnet_model = Model(inputs=vgg_model.input, outputs=x) return convnet_modeldef deep_rank_model(): convnet_model = convnet_model_() first_input = Input(shape=(221, 221, 3)) first_conv = Conv2D(96, kernel_size=(8,8), strides=(16,16), padding="same")(first_input) first_max = Max
Pool2D(pool_size=(3,3), strides=(2,2), padding="same")(first_conv) first_max = Flatten()(first_max) first_max = Lambda(lambda x: K.l2_normalize(x, axis=1))(first_max) second_input = Input(shape=(221, 221, 3)) second_conv = Conv2D(96, kernel_size=(8,8), strides=(32,32), padding="same")(second_input) second_max = Max
Pool2D(pool_size=(7,7), strides=(4,4), padding="same")(second_conv) second_max = Flatten()(second_max) second_max = Lambda(lambda x: K.l2_normalize(x, axis=1))(second_max) merge_one = concatenate(
Net đang nói nghỉ ngơi trên, 1 hình ảnh sẽ được chuyển vào 3 mặt đường khác nhau, trước khi nối lại để chế tạo thành 1 vector 128 chiều. Vector này sẽ đại diện thay mặt cho bức ảnh, với khi mô hình được giảng dạy tốt, 128 thuộc tính này có thể coi như là 128 trực thuộc tính đặc trưng của khuôn khía cạnh đó. Cũng vì đó, cách huấn luyện quy mô từ khuôn khía cạnh sang vector có cách gọi khác là bước TRÍCH CHỌN ĐẶC TRƯNG.
Giờ họ sẽ code hàm triplet loss thích hợp công thức
batch_size = 24_EPSILON = K.epsilon()def _loss_tensor(y_true, y_pred): y_pred = K.clip(y_pred, _EPSILON, 1.0 - _EPSILON) loss = 0. G = 1. For i in range(0, batch_size, 3): try: q_embedding = y_pred p_embedding = y_pred n_embedding = y_pred D_q_p = K.sqrt(K.sum((q_embedding - p_embedding)**2)) D_q_n = K.sqrt(K.sum((q_embedding - n_embedding)**2)) loss = loss + g + D_q_p - D_q_n except: continue loss = loss/batch_size*3 return K.maximum(loss, 0)deep_rank_model.compile(loss=_loss_tensor, optimizer=SGD(lr=0.001, momentum=0.9, nesterov=True))Một điểm không giống mà mình đã nói từ đầu trong câu hỏi huấn luyện quy mô này chính là việc chúng ta sẽ đưa hình ảnh theo BỘ BA. Và từ kia hàm loss cũng trở thành tính theo những BỘ BA, không hẳn tính riêng biệt từng cổng đầu ra như các mô hình khác.
Đây là giải pháp mình chọn BỘ BA, ảnh đầu sẽ được đánh giá là ảnh query, hình ảnh tiếp theo sẽ là positive (ảnh thuộc class) và cuối cùng là ảnh negative (ảnh khác class)
def image_batch_generator(images, labels, batch_size): labels = np.array(labels) while True: batch_paths = np.random.choice(a = len(images), form size = batch_size//3) input_1 = <> for i in batch_paths: pos = np.where(labels == labels)<0> neg = np.where(labels != labels)<0> j = np.random.choice(pos) while j == i: j = np.random.choice(pos) k = np.random.choice(neg) while k == i: k = np.random.choice(neg) input_1.append(images) input_1.append(imagesMô phỏng công dụng (Data Visualize)
Sau khi sẽ training xong, bọn họ muốn theo dõi kết quả 1 cách trực quan hơn. Liệu mô hình họ có làm tốt được trách nhiệm trích lựa chọn đặc trưng, và làm cho những khuôn mặt tương tự nhau thì về gần nhau, còn trái lại thì cách nhau không? Để hoàn toàn có thể NHÌN RÕ ĐIỀU NÀY 1 CÁCH TRỰC QUAN, bọn họ sẽ cần áp dụng thuật toán t-SNE. Thuật toán đang giúp chúng ta đưa từ không gian vector 128 chiều về không khí 3 chiều, góp mắt ta quan liêu sát dễ dàng nhất. Ví dụ về thuật toán và cách mô phỏng mình sẽ không đề cập sống đây, các bạn có nhu cầu tìm đọc thêm, rất có thể đọc bài viết rất "có tâm" này của người sáng tác Phan Hoàng nhé:
https://viblo.asia/p/data-visualization-voi-thuat-toan-t-sne-su-dung-tensorflow-projector-924l
JAAz
ZPM
Đây là tác dụng Visualize của mình:

Hoặc các bạn cũng có thể xem thẳng tại: https://hoanganhpham1006.fips.edu.vn.io/face-detector-Visualize/
Các bạn hãy lựa chọn t-SNE rồi chờ cho nó training khoảng chừng 300-400 iter rồi dừng nhé. Bài toán training ở đây là training để đưa từ không khí 128 chiều về không gian 3 chiều, hoàn toàn không tương quan tới việc đào tạo và giảng dạy mình viết trong bài bác này
Do mình training cũng chưa đủ lâu, nên các hình ảnh cũng chưa thực sự phân cụm một cách rõ ràng, tuy nhiên những ảnh cùng 1 bạn hoặc 2 fan giống nhau hầu như nằm khá sát nhau trong không khí này!
Vậy là họ đã có một quy mô để gửi từ ảnh khuôn khía cạnh sang vector phù hợp ý đồ vật của bọn chúng ta. Giờ bọn họ sẽ lịch sự bước ở đầu cuối nhé!
Xác minh tính danh khuôn mặt
Cách đơn giản và dễ dàng và không thua kém hiệu quả đó là tính khoảng cách Euclit của vector đặc thù khuôn mặt đang đề xuất nhận dạng với những vector đặc thù khác, và lấy vector GẦN NÓ NHẤT làm hiệu quả xác minh
# cùng với mỗi khung người mặt phát hiện tại ra...frame = image
Text(image, names
Ngoài ra để có thể tăng tính đúng đắn hơn nữa, chúng ta hãy thêm 1 "ngưỡng khoảng cách tối đa". Giả dụ vector họ cần khẳng định nằm quá xa so với những vector còn lại, thì kỹ năng cao bọn chúng không cần của fan nào trong các dữ liệu chúng ta đang có
Kết luậnNhư vậy tôi đã xây dựng dứt hệ thống nhấn dạng khuôn khía cạnh của mình. Hy vọng các các bạn sẽ có thể triển khai theo với thành công! Mọi vướng mắc hãy còn lại dưới phản hồi nhé, mình siêu sẵn lòng nhằm giải đáp!
Face Recognition là bài toán nhận dạng và xác thực người phụ thuộc vào khuôn mặt của họ. Đối cùng với con bạn thì đó là 1 trong nhiệm vụ rất solo giản, thậm chí là ở giữa những điều kiện môi trường xung quanh khác nhau, tuổi tác cố đổi, team mũ, treo kính, … tuy nhiên, so với máy tính thì nó vẫn còn đó là một thử thách khó khăn vào vài thập kỷ qua cho tới tận ngày nay. Vào thời đại nở rộ của kiến thức nhân tạo, tận dụng sức mạnh của các thuật toán DL với lượng dữ liệu vô cùng lớn, chúng ta có thể tạo ra những models hiện nay đại, được cho phép biểu diễn khuôn mặt thành các vectors đặc trưng trong không gian nhiều chiều. Để tự đó, máy tính có thể thực hiện nhận diện ra từng người riêng biệt, mà thậm chí còn quá qua kỹ năng của con tín đồ trong một số trường hợp.
2. Phân loại
Face Recognition bao gồm thể tạo thành 3 vấn đề nhỏ:
Face Authentication: tiêu giảm quyền truy cập của một bạn đến một mối cung cấp tài nguyên làm sao đó.Face Verification: xác thực một người phù hợp với ID của họ.Face Identification: Gán đúng đắn tên của người.Ba việc này thực chất chỉ không giống nhau ở mục đích sử dụng công dụng nhận diện khuôn mặt vào câu hỏi gì, còn về thực chất vẫn là phân các loại xem khuôn mặt đề xuất nhận diện tất cả thuộc vào nhóm nào trong bộ tài liệu cho trước xuất xắc không?
Tất cả những việc này đều cần được được giải quyết trong cả 3 trường hợp:
Người vào ảnhNgười trong file video
Người thực (stream real-time từ camera)
Tuy nhiên, cũng lại xuất hiện thêm thêm một câu hỏi con bé nữa, chính là đôi khi bọn họ cần biệt lập đâu là fan thật, đâu là fan giả (người trong đoạn phim hay ảnh). Bởi nếu bọn họ đối xử với cả 3 trường hợp đều hệt nhau thì rất hoàn toàn có thể kẻ gian sẽ lợi dụng để truy cập trái phép vào khối hệ thống thông qua 1 bức ảnh, cái mà rất thuận tiện có được.
3. Luồng xử trí của việc Face Recognition
Bài toán Face Recognition đề nghị phải bao hàm tối thiếu hụt 3 bước sau:
Bước 1: Face Detection - Xác xác định trí của khuôn mặt trong ảnh (hoặc video frame). Vùng này đang được lưu lại bằng một hình chữ nhật bao quanh.Bước 2: Face Extraction (Face Embedding) - Trích xuất đặc trưng của khuôn phương diện thành một vector đặc trưng trong không khí nhiều chiểu (thường là 128 chiều).Bước 3: Face Classification (Face Authentication - Face Verification - Face Identification).Ngoài 3 bước trên, trong thực tế bọn họ thường bổ sung thêm một số bước nhằm tăng độ đúng đắn nhận diện:
Image Preprocessing: Xử lý giảm nhiễu, bớt mờ, sút kích thước, chuyển sang hình ảnh xám, chuẩn hóa, …Face Aligment: Nếu hình ảnh khuôn phương diện bị nghiêng thì chỉnh sửa lại làm thế nào cho ngay ngắn.Kết thích hợp nhiều phương thức khác nhau tại cách 3.
3. Face Detection
Face Detection là bước đầu tiên trong câu hỏi Face Recognition, có vai trò rất cao trong việc nâng cao độ đúng đắn của cục bộ hệ thống. Đầu vào của nó là 1 bức hình ảnh có đựng mặt người, cổng đầu ra của nó sẽ là các tọa độ của vùng cất khuôn mặt, hay thể hiện bởi một hình chữ nhật bao quanh khuôn mặt đó.
Có 2 cách thức tiếp cận để giải quyết vấn đề ở cách này:
Feature-based: Sử dụng những bộ lọc bằng tay (hand-crafted filters) nhằm tìm kiếm và định vị vị trí khuôn mặt trong ảnh. Cách thức này rất cấp tốc và kết quả trong đk gần lý tưởng, cơ mà không công dụng trong điều kiện phức hợp hơn.
Điều kiện ngay sát lý tưởng


Image-based: Sử dụng những thuật toán DL nhằm học và tự động hóa định vị vị trí khuôn khía cạnh dựa trên toàn thể bức ảnh. Ưu điểm của phương pháp này là độ đúng chuẩn cao hơn so với phương pháp Feature-based, tuy nhiên tốc độ triển khai thì lại đủng đỉnh hơn. Phụ thuộc vào điều kiện ví dụ của từng vấn đề mà ta chọn phương thức phù hợp. VD: chạy trên thiết bị nào (PC giỏi Embedded Device), bao gồm cần Real-time tốt không, điều kiện môi trường xung xung quanh ra sao, …
Dưới đây là bảng tổng hợp các thư viện với thuật toán đến mỗi cách thức này:

Nhìn chung, phương pháp Image-based gồm sử dụng những thuật toán DL nên độ chính xác cao rộng so với cách thức Feature-based. Tuy vậy đổi lại, xét đến tốc độ triển khai thì Feature-based lại là kẻ chiến thắng. Tuy nhiên, điều này chỉ thể hiện rõ rệt nếu họ chạy trên các thiết bị có cấu hình thấp, giao diện như các thiết bị nhúng, còn nếu chạy xe trên PC hay server thì sự khác biệt về vận tốc thực thi thân 2 phương thức là không đáng kể.
4. Face Embedding
Đây là bước thứ 2 trong việc Face Recognition. Input của chính nó là bức ảnh khuôn mặt vẫn tìm ra ở cách 1, còn Output là 1 trong những Vector những chiều thể hiện đặc thù của khuôn phương diện đó.
Hai thuật toán phổ cập nhất hiện nay để triển khai Face Embedding là Face
Net và VGGNet.
Face
Net, that directly learns a mapping from face images to a compact Euclidean space where distances directly correspond to lớn a measure of face similarity. <…> Our method uses a deep convolutional network trained khổng lồ directly optimize the embedding itself, rather than an intermediate bottleneck layer as in previous deep learning approaches. Khổng lồ train, we use triplets of roughly aligned matching / non-matching face patches generated using a novel online triplet mining method.— Face
Net: A Unified Embedding for Face Recognition và Clustering, 2015.
… we show how a very large scale dataset (2.6M images, over 2.6K people) can be assembled by a combination of automation và human in the loop— Deep Face Recognition, 2015.
Cả 2 thuật toán này đều sở hữu Pre-trained model. Họ hoàn toàn hoàn toàn có thể sử dụng bọn chúng một cách miễn phí trong những dự án của mình. Mình đang đi cụ thể hơn về kiểu cách dùng từng thuật toán này trong những bài tiếp theo.
5. Face Classification
Nhiệm vụ của bước này là phân nhiều loại khuôn mặt vào các nhóm xác định trước vào tập dữ liệu, dựa vào Vector đặc trưng của chúng. Họ có 3 phương pháp:
Dựa vào lúc cách: tính toán và so sánh khoảng cách giữa các Vectors. Khoảng cách càng nhỏ tuổi chứng tỏ các Vectors càng tương đương nhau. Thuật toán kNN là đại diện thay mặt tiêu biểu mang đến việc áp dụng khoảng cách để phân loại, ta có thể áp dụng nó. Khoảng cách ở đây có thể sử dụng cách làm Cosine hoặc Euclidean. Ưu điểm của phương pháp này là đối kháng giản, triển khai nhanh nếu số lượng khuôn phương diện không nhiều. điểm yếu kém là độ chính xác không cao, vận tốc thực thi bớt nếu số lượng khuôn khía cạnh tăng lên.Sử dụng ML: Ta rất có thể dùng các Vectors đặc thù của khuôn khía cạnh để huấn luyện và đào tạo một ML model, với các thuật toán như SVM, Decision Tree, … Thuật toán SVM thường xuyên được thực hiện nhiều hơn. Cách thức này cân đối giữa tốc độ thực hiện và độ chủ yếu xác.Sử dụng DL: tương tự vậy, ta cũng rất có thể huấn luyện một DL model đơn giản (3-5 FC layers) từ những Vectors đặc trưng của khuôn mặt. Phương thức này thường sẽ có độ chủ yếu xác cao nhất (nếu DL model đủ tốt), tuy thế tốc độ thực hiện lại lờ đờ nhất.
Ngoài ra, trong số bài toán thực tế, nhằm tăng độ đúng đắn lên tối đa có thể, chúng ta cũng có thể kết hợp phương pháp 1 với 3, hoặc cách thức 1 cùng 2.
Xem thêm: Uống thuốc tránh thai nhiều có hại không ? tác dụng phụ là gì?
6. Kết luận
Trong bài viết này, mình đã cùng các bạn khám phá câu hỏi Face Recognition, ráng thể:
Face Recognition là một trong những vấn đề tầm thường của việc khẳng định hoặc xác minh bạn trong hình ảnh và video.Face Recognition là một trong quá trình bao gồm Face Detection, Face Embedding và Face Recongition.Các thuật tóan, những mô hình hoàn toàn có thể sử dụng tại từng tiến độ và ưu/nhược điểm của chúng.Trong bài xích tiếp theo, mình vẫn hướng dẫn bạn cách tiến hành bài toán Face Identification và Face Verification bằng quy mô VGGFace2. Mời các bạn đón đọc!