TensorFlow là một công cụ linh hoạt để tạo các mô hình máy học.
Trong bài đăng này, chúng ta sẽ xem cách tạo hệ thống nhận dạng khuôn mặt với TensorFlow, một khung học máy mã nguồn mở. Chúng ta sẽ xem xét các quy trình thiết yếu để tạo ra một hệ thống nhận dạng khuôn mặt thành công, từ việc thu thập và chuẩn bị dữ liệu đến đào tạo và đánh giá một mô hình.
Bạn sẽ có trải nghiệm trực tiếp với TensorFlow để tạo nhận dạng khuôn mặt với sự trợ giúp của các đoạn mã và ví dụ thực tế. Bạn được hoan nghênh theo dõi khi chúng tôi tiến hành.
Giới thiệu về TensorFlow
TensorFlow là một thư viện mã nguồn mở và miễn phí. Nó là một hộp công cụ toán học tượng trưng sử dụng luồng dữ liệu và lập trình khả vi. Bạn có thể xử lý nhiều tác vụ với nó, bao gồm cả tác vụ sâu mạng lưới thần kinh đào tạo.
TensorFlow mạnh mẽ và dễ thích nghi. Tương tự như vậy, nó là một công cụ tuyệt vời để phát triển và triển khai các mô hình học máy. Bạn có thể xây dựng các mô hình phức tạp với nhiều lớp và phép toán tensor. Ngoài ra, các mô hình dựng sẵn trong thư viện có thể được tinh chỉnh cho các nhu cầu cụ thể.
Hơn nữa, TensorFlow có một cộng đồng người dùng khổng lồ và ngày càng mở rộng. Vì vậy, có rất nhiều thông tin và trợ giúp cho những cá nhân mới sử dụng nền tảng này.
TensorFlow phổ biến cho học máy một phần vì nó cung cấp quy trình làm việc từ đầu đến cuối. Vì vậy, bạn có thể dễ dàng xây dựng, đào tạo và triển khai các mô hình. Nó cung cấp các công cụ và chiến lược để cải thiện và nhân rộng các mô hình để phù hợp với các nhu cầu cụ thể. Nó thay đổi từ tiền xử lý dữ liệu đến triển khai mô hình.
Nhận dạng khuôn mặt là gì?
Nhận dạng khuôn mặt là một thị giác máy tính nhiệm vụ xác định danh tính của một người dựa trên khuôn mặt của họ. Kỹ thuật này nhận dạng các đặc điểm trên khuôn mặt, chẳng hạn như hình dạng và kết cấu của mắt, mũi và miệng.
Và, nó so sánh chúng với cơ sở dữ liệu về các khuôn mặt đã biết để xác định sự trùng khớp. Nhận dạng khuôn mặt có một số cách sử dụng, bao gồm hệ thống bảo mật, sắp xếp ảnh và xác thực sinh trắc học.
Độ chính xác của các thuật toán nhận dạng khuôn mặt đã tăng lên đáng kể trong những năm gần đây nhờ những đột phá trong học máy.
Nhập thư viện cần thiết
Trước khi bắt đầu bất cứ điều gì, chúng ta cần nhập các thư viện cần thiết cho mô hình của mình. Tensorflow (tf) được nhập và sử dụng để tạo và huấn luyện mô hình. <(p>
“numpy” thực hiện các phép tính toán học và xử lý dữ liệu.
“matplotlib.pyplot” được nhập dưới dạng plt và được sử dụng cho biểu đồ dữ liệu và trực quan hóa.
Cuối cùng, "fetch lfw people" được nhập từ sklearn. bộ dữ liệu và được sử dụng để tải bộ dữ liệu nhận dạng khuôn mặt. Chức năng này là một phần của bộ công cụ scikit-learning. Nhờ chức năng này, chúng tôi không phải tải lên một tập dữ liệu khác. Điều này đã được xây dựng trong sckit-learning.
Và, nó cung cấp cho bạn quyền truy cập vào một loạt các bộ dữ liệu cho máy học các ứng dụng. Trong trường hợp này, chúng tôi sử dụng phương pháp tìm nạp lfw người để truy xuất tập dữ liệu “Khuôn mặt được gắn nhãn trong tự nhiên” (LFW). Nó bao gồm các bức ảnh chụp khuôn mặt của mọi người cũng như các nhãn đi kèm với họ.
Các thư viện này rất quan trọng trong việc triển khai và đánh giá mô hình nhận dạng khuôn mặt của chúng tôi.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Tiền xử lý và tải bộ dữ liệu nhận dạng khuôn mặt
Trong phần này, chúng tôi sử dụng chức năng “tìm nạp người” để xử lý trước dữ liệu nhận dạng khuôn mặt. Đầu tiên, chúng tôi sử dụng tìm nạp lfw người với tùy chọn “khuôn mặt tối thiểu cho mỗi người=60”. Điều này cho thấy rằng chúng tôi chỉ muốn bao gồm những người có ít nhất 60 ảnh trong tập dữ liệu. Do đó, chúng tôi đảm bảo rằng mô hình của chúng tôi có đủ dữ liệu để tìm hiểu. Ngoài ra, điều này làm giảm nguy cơ trang bị quá mức.
Sau đó, dữ liệu và nhãn từ đối tượng khuôn mặt được trích xuất và gán cho các biến X và y. X hol.
Chúng tôi hiện đã sẵn sàng đào tạo mô hình nhận dạng khuôn mặt của mình bằng cách sử dụng dữ liệu và nhãn được xử lý trước.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Tách tập huấn luyện và tập kiểm tra
Trong bước này, chúng tôi chia tập dữ liệu nhận dạng khuôn mặt của mình thành hai nửa bằng cách sử dụng phương pháp phân tách thử nghiệm đào tạo từ lựa chọn sklearn.model. Mục tiêu của sự phân chia này là để đánh giá hiệu suất của mô hình của chúng tôi sau khi đào tạo
Chức năng phân tách thử nghiệm đào tạo chấp nhận làm dữ liệu đầu vào X và nhãn y. Và, nó chia chúng thành tập huấn luyện và kiểm tra. Chúng tôi chọn kích thước thử nghiệm = 0.2 trong ví dụ này. Điều này ngụ ý rằng 20% dữ liệu sẽ được sử dụng làm tập kiểm tra và 80% làm tập huấn luyện. Hơn nữa, chúng tôi sử dụng trạng thái ngẫu nhiên = 42 để đảm bảo rằng dữ liệu được phân chia một cách nhất quán mỗi khi mã được thực hiện.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Chuẩn bị dữ liệu
Mục đích của tiền xử lý dữ liệu là để chuẩn bị cho việc đưa dữ liệu vào mô hình. Dữ liệu được xử lý trước trong mã này bằng cách chia mỗi điểm dữ liệu cho 255.
Điều gì đã thúc đẩy chúng tôi đạt được điều này? Chuẩn hóa là một quy trình tiền xử lý được sử dụng trong học máy để đảm bảo rằng tất cả các tính năng đều có cùng tỷ lệ. Trong trường hợp này, chia cho 255 chia tỷ lệ dữ liệu thành một phạm vi từ 0 đến 1, đây là bước chuẩn hóa dữ liệu hình ảnh thông thường.
Điều này tăng tốc độ hội tụ của mô hình và có thể tăng hiệu suất của nó.
X_train = X_train / 255.0
X_test = X_test / 255.0
Tạo Chế độ
Chúng tôi muốn xác định cá nhân có khuôn mặt xuất hiện trong ảnh. Trong trường hợp này, chúng tôi sẽ sử dụng một mạng được kết nối đầy đủ, thường được gọi là mạng dày đặc. Đó là một mạng lưới thần kinh nhân tạo được sử dụng để tạo mô hình.
Mạng thần kinh nhân tạo được mô phỏng theo cách bộ não con người hoạt động và được tổ chức. Chúng được tạo thành từ các nút xử lý thông tin hoặc tế bào thần kinh được liên kết với nhau. Mỗi nơ-ron trong một lớp trong mạng dày đặc được liên kết với mọi nơ-ron trong lớp bên trên nó.
Mô hình có bốn lớp trong mã này. Để được đưa vào lớp tiếp theo, dữ liệu đầu vào được làm phẳng trong lớp đầu tiên thành một mảng một chiều. Theo đó, 128 và 64 tế bào thần kinh trong hai lớp tiếp theo được liên kết hoàn toàn.
Chức năng kích hoạt ReLU là một chức năng kích hoạt duy nhất được sử dụng bởi các lớp này. Cùng với đó, chúng ta có thể lấy mô hình để tìm hiểu mối tương quan phi tuyến tính giữa đầu vào và đầu ra. Lớp cuối cùng sử dụng chức năng kích hoạt softmax để đưa ra dự đoán. Và, nó là một lớp được kết nối đầy đủ với càng nhiều nơ-ron thì càng có nhiều lớp tiềm năng.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
Biên soạn mô hình
Mô hình được biên dịch bằng chức năng “biên dịch”. Chúng ta cần chuẩn bị mô hình để đào tạo. Vì vậy, chúng tôi sẽ xác định trình tối ưu hóa, hàm mất mát và số liệu sẽ được sử dụng để đánh giá mô hình.
Trong quá trình đào tạo, trình tối ưu hóa chịu trách nhiệm thay đổi các tham số của mô hình. Trình tối ưu hóa “adam” là một kỹ thuật tối ưu hóa học sâu phổ biến.
Chúng tôi sử dụng hàm mất mát để đánh giá hiệu suất của mô hình trên dữ liệu huấn luyện. Bởi vì các nhãn mục tiêu là các số nguyên phản ánh lớp của hình ảnh chứ không phải là các vectơ được mã hóa một lần nóng, nên hàm mất mát “crossentropy phân loại thưa thớt” là thuận lợi.
Cuối cùng, chúng tôi xác định các số liệu để đánh giá mô hình, trong trường hợp này là “độ chính xác”.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Đào tạo người mẫu
Chúng ta sẽ sử dụng hàm “fit” để huấn luyện mô hình.
Chúng tôi sẽ cung cấp dữ liệu đào tạo (đào tạo X) và các nhãn liên quan (đào tạo y), cũng như đặt số lượng kỷ nguyên (lặp lại) để chạy là 10. Quy trình đào tạo sửa đổi trọng số mô hình để giảm tổn thất (sự khác biệt giữa dự đoán và nhãn thực) và cải thiện độ chính xác của dữ liệu đào tạo.
model.fit(X_train, y_train, epochs=10)
Đánh giá mô hình
Bây giờ, chúng ta cần đánh giá mô hình được đào tạo trên dữ liệu thử nghiệm. Chúng tôi sử dụng tổn thất thử nghiệm và độ chính xác thử nghiệm được sử dụng để đánh giá hiệu suất của mô hình. Trên dữ liệu thử nghiệm X test và test nhãn y test, chúng ta cần gọi “hàm model.evaluate”
Hàm xuất ra độ chính xác kiểm tra và mất kiểm tra. Các biến kiểm tra tổn thất và kiểm tra độ chính xác, tương ứng, chứa các giá trị này. Cuối cùng, chúng tôi sử dụng chức năng “in” để xuất độ chính xác của bài kiểm tra.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Dự đoán các lớp và nhận các lớp dự đoán
Sử dụng mô hình đào tạo và dữ liệu thử nghiệm, thuật toán đưa ra dự đoán. Khi dữ liệu thử nghiệm được chuyển đến phương thức “model.predict”, nó sẽ xuất ra một loạt các dự đoán cho từng ảnh trong bộ thử nghiệm.
Sau đó, tên lớp mục tiêu cho mỗi ảnh được truy xuất từ danh sách “tên mục tiêu” bằng cách sử dụng hàm “np.argmax” để xác định chỉ mục có xác suất dự đoán lớn nhất. Chỉ số này sau đó được sử dụng để xác định lớp dự đoán cho mỗi hình ảnh.
Sử dụng khả năng hiểu danh sách, tất cả các dự đoán trong mảng "dự đoán" đều tuân theo phương thức này, dẫn đến danh sách "các lớp dự đoán".
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Trực quan hóa các dự đoán
Bây giờ chúng ta có thể thấy mô hình của chúng ta trông như thế nào.
Để đánh giá mức độ hoạt động của mô hình, 10 ảnh đầu tiên và dự đoán của chúng sẽ được hiển thị. Nó sẽ vẽ các bức ảnh theo thang độ xám và hiển thị cả lớp thực tế của hình ảnh và lớp được dự đoán bởi mô hình bằng cách sử dụng mô-đun matplotlib.pyplot.
Hàm “imshow” được sử dụng bởi vòng lặp for để vẽ từng ảnh trong số 10 ảnh bộ thử nghiệm đầu tiên. Tên mục tiêu[y test[i]] và lớp dự đoán[i] được sử dụng để xác định lớp thực và lớp dự đoán của hình ảnh tương ứng. Các tiêu đề của mỗi ô sau đó được chỉ định bởi các phân loại này.
Cuối cùng, biểu đồ được hiển thị bằng phương thức plt.show().
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
Tổng kết
TensorFlow cung cấp một môi trường hoàn chỉnh và linh hoạt để tạo các mô hình máy học.
Bằng cách tinh chỉnh mô hình để đáp ứng các yêu cầu cụ thể hoặc bằng cách thêm các phát triển mới trong máy học, độ chính xác của mô hình có thể tăng hơn nữa.
TensorFlow và nhận dạng khuôn mặt có thể sẽ được sử dụng ngày càng nhiều trong các ngành như hệ thống bảo mật, xác thực sinh trắc học và chăm sóc sức khỏe trong tương lai. Chúng ta sẽ sớm thấy những đổi mới hấp dẫn.
Bình luận