3.2.1. Tiền xử lý ảnh đầu vào
Các dữ liệu ảnh sau khi được thu thập, sẽ được định dạng đúng chuẩn. Để làm được điều đĩ, chương trình sử dụng hàm detect_crop_images.
def detect_crop_images(source_folder, dataset_folder, input_size=(224, 224),
77 detector = MyFaceRecognition()
list_persons = next(os.walk(source_folder))[1]
data = {}
total_faces = 0
for person in list_persons: # print('Ten nguoi: ', person)
person_folder = dataset_folder + '/' + person # crop anh vao day # print('Crop anh den: ', person_folder)
if not os.path.exists(person_folder):
os.mkdir(person_folder) all_file_person = []
source_folder_person = source_folder + '/' + person # nguon anh o day
all_files = glob.glob(os.path.join(source_folder_person, filetype)) all_file_person = all_file_person + all_files # noi vao list chung num_faces = 0
for filename in all_file_person:
cimg = cv2.imread(filename, cv2.IMREAD_COLOR)
faces, fconf = detector.get_face_locations_from_image(cimg) if len(faces) == 0:
print('The file [', filename, '] has NO faces') else:
icof = np.argmax(fconf) (le, to, ri, bo) = faces[icof] num_faces += 1
f = cimg[to:bo, le:ri]
f = cv2.resize(f, input_size)
newfile = '{}/{}'.format(person_folder, os.path.basename(filename))
cv2.imwrite(newfile, f)
data[person] = '#file[{}]#faces[{}]>'.format(len(all_file_person), num_faces)
78 total_faces += num_faces
print('Total faces :', total_faces)
Kết thúc quá trình thu được các hình ảnh khuơn mặt được cắt trong tập dữ liệu ảnh ban đầu. A.Minh #file[10]#faces[10]> Anh2 #file[10]#faces[10]> Anhz #file[10]#faces[10]> Hieu #file[10]#faces[10]> Ly #file[10]#faces[10]> N.Linh #file[10]#faces[10]> Ngocj #file[10]#faces[10]> Nhung #file[29]#faces[29]> NK.Linh #file[10]#faces[10]> P.Linh #file[10]#faces[10]> T.Dungz #file[10]#faces[10]> The file [ C:/Users/Dell/PycharmProjects/luanvan/DuLieu/T.Duong\T.Duong_10.jpg ] has NO faces T.Duong #file[10]#faces[9]> T.Minh #file[10]#faces[10]> Taif #file[10]#faces[10]> Thow #file[9]#faces[9]> Thuw #file[10]#faces[10]> Tuaan #file[10]#faces[10]>
79
Hình 3.5. Tiền xử lý ảnh đầu vào
3.2.2. Đào tạo mơ hình
3.2.2.1. Đào tạo mơ hình sử dụng VGG19 Model: "vgg19"
_________________________________________________________________
Layer (type) Output Shape Param #
===========================================================
input_1 (InputLayer) (None, 224, 224, 3) 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928
80
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 112, 112, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 112, 112, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 56, 56, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 56, 56, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 56, 56, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 56, 56, 256) 590080
_________________________________________________________________
block3_conv4 (Conv2D) (None, 56, 56, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 28, 28, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808
81
block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808
_________________________________________________________________
block4_conv4 (Conv2D) (None, 28, 28, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 14, 14, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_conv4 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 7, 7, 512) 0
=========================================================== ====== Total params: 20,024,384 Trainable params: 20,024,384 Non-trainable params: 0 _________________________________________________________________
Để đào tạo mơ hình, sử dụng hàm: train_model(data, kfold=0, batch_size=32, epochs=800, file_model=file_model)
82 Train on 326 samples, validate on 326 samples
Epoch 1/800
32/326 [=>............................] - ETA: 1:12 - loss: 3.6542 - accuracy: 0.0000e+0020
64/326 [====>.........................] - ETA: 55s - loss: 3.5146 - accuracy: 0.
96/326 [=======>......................] - ETA: 46s - loss: 3.5196 - accuracy: 0.0625
128/326 [==========>...................] - ETA: 39s - loss: 3.5402 - accuracy: 0.0781
160/326 [=============>................] - ETA: 33s - loss: 3.5934 - accuracy: 0.0688
192/326 [================>.............] - ETA: 27s - loss: 3.6211 - accuracy: 0.0677
224/326 [===================>..........] - ETA: 20s - loss: 3.5477 - accuracy: 0.0848
256/326 [======================>.......] - ETA: 14s - loss: 3.5224 - accuracy: 0.0977 288/326 [=========================>....] - ETA: 7s - loss: 3.4816 - accuracy: 0.1111 320/326 [============================>.] - ETA: 1s - loss: 3.4803 - accuracy: 0.1156 326/326 [==============================] - 126s 387ms/step - loss: 3.4706 - accuracy: 0.1166 - val_loss: 2.8721 - val_accuracy: 0.2055
... …
Train on 326 samples, validate on 326 samples
Epoch 8/500
83
64/326 [====>.........................] - ETA: 3:34 - loss: 2.6621 - accuracy: 0.3594
96/326 [=======>......................] - ETA: 3:06 - loss: 2.5810 - accuracy: 0.3438
128/326 [==========>...................] - ETA: 2:42 - loss: 2.6438 - accuracy: 0.2891
160/326 [=============>................] - ETA: 2:18 - loss: 2.5922 - accuracy: 0.3125
192/326 [================>.............] - ETA: 1:53 - loss: 2.5875 - accuracy: 0.3177
224/326 [===================>..........] - ETA: 1:28 - loss: 2.5429 - accuracy: 0.3348
256/326 [======================>.......] - ETA: 1:01 - loss: 2.5160 - accuracy: 0.3242 288/326 [=========================>....] - ETA: 34s - loss: 2.5037 - accuracy: 0.3264 320/326 [============================>.] - ETA: 5s - loss: 2.4717 - accuracy: 0.3500 326/326 [==============================] - 391s 1s/step - loss: 2.4664 - accuracy: 0.3528 - val_loss: 1.9142 - val_accuracy: 0.7730
… …
3.2.2.2. Đào tạo mơ hình sử dụng VGGFace
Sau khi hàm “train_model_vggface2” được thực thi, tơi sẽ lưu được đặc điểm của vectơ đặc trưng
Ánh
2883.298936008796 [0. 0.58305746 0.03847307 ... 0. 0. 0. ]
84 2707.753454275997 [0.00867799 0.4274315 0. ... 0. 0.10263711 0. ] Ánh 3014.080108361857 [0. 0.69755274 0. ... 0. 0. 0. ] Ánh 2412.010435999153 [0. 0.3058706 0. ... 0. 0.09233981 0. ] Ánh 2422.9461588565246 [0. 0.23302683 0. ... 0. 0.18553653 0. ] Ánh 2586.883506562215 [0. 0.6001291 0. ... 0. 0. 0. ] Ánh 2412.010435999153 [0. 0.3058706 0. ... 0. 0.09233981 0. ] Ánh 2707.0579214012578 [0.02150691 0.4510759 0. ... 0. 0.02627229 0. ] Ánh 2992.6141943948987 [0.02647755 2.1552732 0. ... 0. 0. 0. ] Ánh 2753.485983449107 [0. 1.5469936 0. ... 0. 0.00511852 0. ] Bình 2180.545473160724 [0. 0. 2.1420603 ... 0. 0. 0. ] Bình 2294.8290945459958 [0. 0. 3.2472253 ... 0. 0. 0. ] Bình
85 2196.69224794034 [0. 0. 0.10020959 ... 0. 0. 0. ] Bình 2119.315781671641 [0. 0.00566028 2.7314048 ... 0. 0. 0. ] Bình 2435.415145179344 [0. 0.14158954 0.31862143 ... 0. 0. 0. ] Bình 2104.260617945183 [0. 0.48825687 1.4548975 ... 0. 0. 0. ] Bình 2391.295520850532 [0. 0. 0.20456891 ... 0. 0. 0.1279975 ] Bình 2178.413314857695 [0. 0. 1.3313946 ... 0. 0. 0. ] Bình 2332.1839250274206 [0. 0.03570962 1.4569236 ... 0. 0. 0. ] Bình 2420.7618221260846 [0.06393409 0.27952382 0.06272814 ... 0. 0. 0. ] … …
Sau khi hồn tất các cơng đoạn trong xử lý trước dữ liệu, tiến hành đào tạo mơ hình. Hồn tất quá trình đào tạo mơ hình thu được file “model.h5”. File “model.h5” sẽ lưu trữ mơ hình được đào tạo làm cơ sở cho quá trình nhận dạng được thực thi.
86
3.2.3. Nhận diện khuơn mặt qua Camera
Hình 3.6. Kết quả nhận diện bằng Camera - mơ hình VGG19
87
3.2.4. Nhận diện khuơn mặt qua ảnh cĩ sẵn
Hình 3.8. Ảnh nhận diện qua File - mơ hình VGG face
88
3.2.5. Đánh giá kết quả
Sau khi tiến hành cài đặt và chạy thử chương trình thử nghiệm, cĩ thể nhận thấy rằng, khi số lượng ảnh huấn luyện nhiều thì độ chính xác của các phương pháp cũng tăng lên. Điều này là hiển nhiên vì càng nhiều mẫu huấn luyện thì càng cĩ nhiều đặc trưng cho các lớp dữ liệu trong khơng gian các khuơn mặt. Kết quả thực nghiệm cho thấy mơ hình đạt được độ chính xác tương đối cao và ổn định trong mơi trường thực tế, khơng bị ảnh hưởng bởi các yếu tố tự nhiên và con người.
Mơ hình VGG19 Mơ hình VGG FACE
- Mạng đào tạo: VGG19 - Mạng đào tạo: Resnet50 - Tham số: 143,667,240 - Tham số: 25,636,712
- Đào tạo trên tập dữ liệu ImageNet. ImageNet là một tập dữ liệu rất nổi tiếng trong lĩnh vực computer vision, là một tập dữ liệu khổng lồ với 14,197,122 ảnh và 1000 class.
- Đào tạo trên tập dữ liệu VGGFace2. Hình ảnh được tải xuống từ Tìm kiếm hình ảnh của Google và cĩ nhiều biến thể về tư thế, độ tuổi, ánh sáng, dân tộc và nghề nghiệp (ví dụ: diễn viên, vận động viên, chính trị gia). Bộ dữ liệu chứa 3,31 triệu ảnh của 9131 đối tượng, với trung bình 362,6 ảnh cho mỗi đối tượng - Độ sâu: 19 layer - Độ sâu: 50 layer
Bảng 3.2. Bảng so sánh mơ hình VGG19 - VGG Face
Mơ hình VGG19 sử dụng tập dữ liệu imagenet để đào tạo, tập imagenet gồm rất nhiều
đối tượng như con người, động vật (chĩ, mèo, …), sự vật (ơ tơ, xe lửa). mơ hình VGG face, tập dữ liệu chỉ gồm các khuơn mặt nên với bài tốn nhận dạng khuơn mặt của học sinh bằng phương pháp học chuyển giao thì sử dụng mơ hình VGG face cho độ chính xác cao hơn, thời gian nhanh hơn (VGG face khơng cần traning dữ liệu).
89 Mơ hình đào tạo Số lần traning dữ liệu Thời gian huấn luyện (phút) Độ chính xác (% trên tập test) Thời gian nhận dạng (giây) VGG19 500 428 95.7 1.4 VGG FACE - - 97.3 0.8
Bảng 3.3. Bảng so sánh hiệu quả mơ hình VGG19 - VGGFACE
Kết luận chương
Xuất phát từ tính cấp thiết của việc nhận dạng học sinh và nhằm kiểm chứng tính đúng đắn của thuật tốn nhận dạng khuơn mặt, chương 3 của luận văn đã trình bày cách thức xây dựng chương trình mơ phỏng. Từ việc chuẩn bị, thu thập mẫu dữ liệu nhằm đạt được yêu cầu đặt ra của bài tốn. Kết quả kiểm chứng cho thấy đây là một phương pháp kết hợp cho hiệu quả tốt. Cụ thể là việc nhận dạng vẫn cho kết quả tốt khi thay đổi tư thế, gĩc nghiêng của khuơn mặt, khi ảnh trước webcam được thu thập trong các điều kiện sáng khác nhau.
90
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
❖ Kết luận • Ưu điểm:
- Xây dựng được chương trình thực nghiệm hệ thống nhận dạng khuơn mặt sử dụng phương pháp học chuyển giao của mạng nơron tích chập.
- Thực hiện được q trình thử nghiệm đánh giá tính khả thi của giải pháp
- Đề tài cĩ tính ứng dụng cao trong thực tế phục vụ một số lĩnh vực như nhận dạng học sinh, kiểm sốt các nhân viên vào ra cơ quan.
• Hạn chế:
- Số lượng cơ sở dữ liệu hình ảnh cịn mở mức hạn chế, các hình ảnh chưa phong phú và đa dạng.
- Quá trình nhận dạng khuơn mặt chỉ đạt hiệu quả cao trong điều kiện mơi trường thuận lợi, ánh sáng tốt.
❖ Hướng phát triển
- Trong thời gian tới mục tiêu là khắc phục những điểm hạn chế nêu trên.
91
TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt
[1] Phạm Văn Dũng, Mạng nơron trong bài tốn nhận dạng khuơn mặt và ứng
dụng. Luận văn thạc sĩ, trường Đại học Cơng Nghệ Thơng Tin và Truyền Thơng Thái Nguyên (2016).
[2] Dương Thăng Long, Trần Tiến Dũng, Nguyễn Thị Nhung. Phương pháp hỗ
trợ giám sát, đánh giá quá trình học tập của người học trực tuyến dựa trên mơ hình nhận dạng khuơn mặt của mạng nơron tích chập. Tạp chí khoa học
trường Đại học Mở Hà Nội, Số 77, 2021.
[3] Phạm Thành Huân. Tìm hiểu đặc trưng lồi 3D và bài tốn phát hiện mặt người trong ảnh. Đồ án tốt nghiệp, trường Đại học dân lập Hải Phịng (2013).
[4] Nguyễn Thị Thu Hằng, Nghiên cứu về mạng nơron tích chập và ứng dụng
cho bài tốn nhận dạng biển số xe. Luận văn thạc sĩ, trường Đại học Cơng Nghệ - Đại học Quốc Gia Hà Nội (2016).
[5] Nguyễn Văn Danh, Nhận dạng mặt người bằng máy học chuyên sâu. Luận văn thạc sĩ, trường Đại học Sư Phạm Thành Phố Hồ Chí Minh (2017).
[6] Dương Thăng Long, Bùi Thế Hùng. Một phương pháp nhận dạng khuơn mặt
dựa trên mạng nơron tích chập. Tạp chí khoa học Viện Đại học Mở Hà Nội,
Số 58, 2019.
Website tham khảo
[8] https://phamdinhkhanh.github.io/2020/04/15/TransferLearning.html [9] https://viblo.asia [10] https://Forum.machinelearningcoban.com [11] http://www.nawapi.gov.vn [12] https://dlapplications.github.io/2018-07-06-CNN [13] http://kdientu.duytan.edu.vn/media/50176/ly-thuyet-mang-neural.pdf [14] https://keras.io/api/applications/