Quy trình thực nghiệm lần 1

Một phần của tài liệu Phân loại phong cách thiết kế nội thất dùng học sâu và ứng dụng thực tế đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin (Trang 94)

4.3.1. Thu thập dữ liệu.

4.3.1.1. Tại sao thu thập dữ liệu quan trọng?

Thu thập dữ liệu cho phép chúng ta biết được các tính chất đặc trưng của một thông tin nào đó mà chúng ta có thể sử dụng các mẫu lặp đi lặp lại để phân tích dữ liệu. Từ những mẫu đó, ta có thể xây dựng các mô hình dự đoán bằng cách sử dụng các thuật toán học máy để tìm kiếm xu hướng và dự đoán những thay đổi trong tương lai.

Các mô hình dự đoán chỉ tốt khi dữ liệu mà chúng được xây dựng, vì vậy phương pháp sử dụng để thu thập dữ liệu tốt là rất quan trọng để phát triển các mô hình hiệu tốt. Dữ liệu phải có lỗi, hạn chế các trường hợp bất thường và chứa thông tin liên quan đến mục đích cần dự đoán. Ví dụ, giá nhà đất thì thông tin về vị trí, hướng nhà, mật độ dân số ở đó sẽ có ích rất nhiều, còn yếu tố thời tiết không ảnh hưởng đến giá nhà đất lắm nên chúng ta sẽ không cần bỏ vào bộ dữ liệu thu thập.

4.3.1.2. Các thao tác thu thập dữ liệu.

Nhóm đã dựa trên 1 tập dữ liệu có sẵn cung cấp bởi TS. Nguyễn Thiên Bảo và nhóm mở rộng bộ dữ liệu lên bởi số lượng mẫu của 1 nhãn có số lượng chênh lệnh và quá ít, sau đây là một số phương pháp mà nhóm đã áp dụng để tìm thêm dữ liệu:

• Ứng dụng chức năng tìm kiếm của công cụ hỗ trợ tìm kiếm hình ảnh (Google Image) để tìm ra những hình có tag và nội dung hình ảnh tương tự.

• Dựa các bộ sưu tập được các chuyên gia trong lĩnh vực được công khai.

• Phân loại thủ công có chọn lọc.

4.3.2. Chuẩn bị, khám phá, làm sạch và nhất quán dữ liệu. 4.3.2.1. Định dạng HDF5 là gì? 4.3.2.1. Định dạng HDF5 là gì?

Bởi nhóm không có nhiều tài nguyên nên nhóm sẽ quyết định sử dụng các nền tảng cho phép sử dụng tài nguyên miễn phí như: Google Colab, và cụ thể là dự án này sẽ áp dụng trên Kaggle, vấn đề nhóm gặp phải là việc di chuyển 1 lượng lớn ảnh lên internet là khá vất vả, để giảm thời gian cho vấn đề này, nhóm đã nén dữ liệu dưới định dạng HDF5 (*.h5). Vậy HDF5 là gì?

Trang | 78 HDF5 là một định dạng được thiết kế để lưu trữ các mảng số lớn thuộc loại đồng nhất. Nó đặc biệt tiện dụng khi bạn cần sắp xếp các mô hình dữ liệu của mình theo kiểu phân cấp và bạn cũng cần một cách nhanh chóng để truy xuất dữ liệu.

Các đặc điểm của file HDF5:

• Truy vấn tốc độ cao và tiết kiệm dung lượng lưu trữ.

• Đa nền tảng, thư viện thao tác HDF5 có nhiều ngôn ngữ như C/C++, Java, Python, Golang....

• Không giới hạn kích thước (Lưu ý rằng vẫn phụ thuộc vào dung lượng RAM hiện có).

• Dễ dàng chia sẻ, vì nó giống như dạng nén và thành duy nhất 1 file.

4.3.2.2. Các bước thực hiện.

Các bước thực hiện theo trình tự:

• Khám phá dữ liệu, thông kê số lượng cũng như xem xét chất lượng của dữ liệu.

• Chia tập dữ liệu thành 2 phần là: tập huấn luyện và tập kiểm thử/thẩm định. Tập sẽ được chia ở tỉ lệ 8 : 2. Bởi lẻ chia như vậy vì khi tập huấn luyện có quá ít thì mô hình sẽ không tốt. Ví dụ, thi ngoài đời thực ta có 10 đề thi thì với một người chưa có năng lực làm bài thi trước đó làm 8 đề thi thử (huấn luyện với điều kiện có học tập), thì năng lực người ấy sẽ tăng lên, tăng khả năng làm bài trong 2 đề thi kiểm tra còn lại (tăng khả năng dự đoán). Còn nếu thay bằng tỉ lệ khác mà tỉ lệ tập thử nghiệm nhiều hơn thì khả năng học tập của mô hình sẽ giảm xuống.

• Đọc dữ liệu ảnh và đồng nhất dữ liệu.

- Thực hiện đọc dữ liệu hình ở chế độ màu RGB bằng thư viện OpenCV- Python sang dữ liệu mảng.

- Thay đổi kích thước ảnh về một kích thước chung 224x224. - Đồng thời chuyển đổi label thành vị trí thứ tự của chúng.

• Chuẩn hóa dữ liệu và nén thành file HDF5.

- Chia mảng dữ liệu cho 255 (Giá trị max trong hệ màu RGB để đưa mảng giá trị nằm trong khoảng [0, 1]).

Trang | 79 - Khi chuẩn hóa sẽ có 2 vấn đề là dữ liệu của chúng ta sẽ từ định dạng

unit8 trở thành float64, và ta có thể chọn 1 trong những lựa chọn sau là float32 và float16 thì độ chính xác sẽ bị giảm 1 một nửa.

- Xuất ra file định dạng *.h5.

Việc đọc tập dữ liệu huấn luyện và tập dữ liệu thử nghiệm lặp lại tương tự các bước trên, kết quả sau cùng chúng ta sẽ thu được 2 file HDF5: 1 file chứa dữ liệu cho tập huấn luyện và 1 file chứa dữ liệu cho thử nghiệm/thẩm định.

Trang | 80

4.3.3. Chọn mô hình sẽ huấn luyện.

Mục đích của dự án là ứng dụng học sâu để rút trích các đặc trưng của ảnh để phân loại ảnh và một trong những mô hình Deep Learning tiên tiến đó là Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) cho phép chúng ta thực hiện được điều này. Keras là một thư viện phần mềm mã nguồn mở cung cấp giao diện Python cho các mạng nơron nhân tạo. Trong đó Keras còn cung cấp các mô hình dựng sẵn phục vụ như cầu học tập, nghiên cứu và mở rộng.

Trong nghiên cứu này, nhóm sẽ tập trung đào tạo tại các mô hình CNN phổ biến được Keras cung cấp (tham khảo ở Bảng 4.2) và kiểm tra mức độ phù hợp của các mô hình.

Một số mô hình học sâu CNN nhóm sẽ thực hiện huấn luyện đào tạo lại:

• VGG16. • VGG19. • ResNet50. • ResNet152. • InceptionV3. • DenseNet121. • DenseNet201. • Xception.

Trang | 81

Bảng 4.2: Bảng thông kê các mô hình SOTAs thư viện Keras cung cấp31.

Model Size(Mb) Top-1

Accuracy32

Top-5

Accuracy Parameters Depth

33 Xception 88 MB 0.790 0.945 22,910,480 126 VGG16 528 MB 0.713 0.901 138,357,544 23 VGG19 549 MB 0.713 0.900 143,667,240 26 ResNet50 98 MB 0.749 0.921 25,636,712 - ResNet101 171 MB 0.764 0.928 44,707,176 - ResNet152 232 MB 0.766 0.931 60,419,944 - ResNet50V2 98 MB 0.760 0.930 25,613,800 - InceptionV3 92 MB 0.779 0.937 23,851,784 159 InceptionResNetV2 215 MB 0.803 0.953 55,873,736 572 MobileNet 16 MB 0.704 0.895 4,253,864 88 MobileNetV2 14 MB 0.713 0.901 3,538,984 88 DenseNet121 33 MB 0.750 0.923 8,062,504 121 DenseNet169 57 MB 0.762 0.932 14,307,880 169 DenseNet201 80 MB 0.773 0.936 20,242,984 201 NASNetMobile 23 MB 0.744 0.919 5,326,716 - NASNetLarge 343 MB 0.825 0.960 88,949,818 - EfficientNetB0 29 MB - - 5,330,571 - EfficientNetB1 31 MB - - 7,856,239 - EfficientNetB2 36 MB - - 9,177,569 - EfficientNetB3 48 MB - - 12,320,535 - EfficientNetB4 75 MB - - 19,466,823 - EfficientNetB5 118 MB - - 30,562,527 - EfficientNetB6 166 MB - - 43,265,143 - EfficientNetB7 256 MB - - 66,658,687 -

31 Bảng thống kê các mô hình đã dựng sẵn được tham khảo trên Keras. Keras Applications.

32 Đề cập đến hiệu xuất của mô hình được tính trên tập dữ liệu ImageNet.

Trang | 82

4.3.4. Huấn luyện mô hình đã chọn trên tập dữ liệu. 4.3.4.1. Mô hình SOTAs cung cấp bởi Keras. 4.3.4.1. Mô hình SOTAs cung cấp bởi Keras.

Khi muốn gọi mô hình để sử dụng ta sử dụng thư viện của Keras trên python. Và gọi bằng cú pháp: tf.keras.applications.<tên mô hình>(<các tham số tùy chọn>).

Trong đó <các tham số tùy chọn> có các tham số chung như:

include_top: kiểu dữ liệu boolean dùng để chấp nhận đính kèm thêm lớp

fully-connected hay không, mặc định sẽ là True, mình sẽ pre-train đưa ra số lớp khác nên trong lúc huấn luyện ta sẽ tự tạo lại lớp này cho mô hình cần huấn luyện nên ta cho giá trị tham số này là False.

weights: sẽ có 2 lựa chọn cho chúng ta đó là None và “imagenet”, khi chọn

None thì các trọng số của model bạn sẽ cho những giá trị ngẫu nhiên, còn với tùy chọn “imagenet” thì model chúng ta sẽ lấy trọng số của model được huấn luyện trước đó sẵn có. Trong dự án này nhóm sẽ lấy giá trị trọng số trước đó của “imagenet” để đào tạo lại tiếp cho mô hình.

input_shape: một tham quan trọng khác là kích thước đầu vào của ảnh, chúng

ta có thể tùy chỉnh kích thước này tùy thuộc vào mục tiêu và bước chuẩn bị dữ liệu của chúng ta như thế nào. Giá trị thường thấy ở giá trị đầu vào ở các mô hình là 224 × 224, một số khác có thể là 331 × 331, 299 × 299, …Trong dự án này nhóm sẽ sử dụng các kích thước khác nhau để đánh giá mô hình theo kích thước của chúng. Các kích thước sẽ là: 128 × 128, 160 × 160, 192 × 192, 224 × 224 𝑣à 256 × 256.

classes: Là số lớp được chỉ định để mô hình có thể phân loại với điều kiện là

tham số include_top là True và weights là None.

• Và một số tham số khác tùy thuộc vào mô hình. Và trong dự án này thì chúng ta đều cho chúng ở mặc định.

Trang | 83

4.3.4.2. Đề xuất mô hình cho tranfer-learning.

• Mô hình 1 với các tham số của mô hình đào đạo trước đóng băng toàn bộ:

Model: "sequential"

_______________________________________________________________________________ Layer (type) Output Shape Param #

====================================================================== [option_model] (Functional) (None, [option], [option], [option]) [option]

_______________________________________________________________________________ flatten (Flatten) (None, [option]) 0

_______________________________________________________________________________ dense (Dense) (None, 1024) [option]

_______________________________________________________________________________ dropout (Dropout) (None, 1024) 0

_______________________________________________________________________________ dense_1 (Dense) (None, 5) [option]

======================================================================

• Mô hình 2 với huấn luyện loại toàn bộ mô hình đào đạo trước:

Model: "sequential"

_______________________________________________________________________________ Layer (type) Output Shape Param #

====================================================================== [option_model] (Functional) (None, [option], [option], [option]) [option]

_______________________________________________________________________________ max_pooling2d (MaxPooling2D) (None, [option], [option], [option]) 0

_______________________________________________________________________________ flatten (Flatten) (None, [option]) 0

_______________________________________________________________________________ dense (Dense) (None, 5) [option]

Trang | 84

4.3.4.3. Các bước thực hiện huấn luyện mô hình.

• Chúng ta sẽ thực hiện huấn luyện mô hình trên Kaggle, những bước đầu chúng ta sẽ tạo tài khoản trên Kaggle.

Hình 4.18: Trang chủ của Kaggle.

Hình 4.19: Trang đăng ký của Kaggle.

• Tạo 1 notebook mới với ngôn ngữ Python, loại Notebook và cài đặt nâng cao ở phần máy gia tốc chúng ta có thể chọn 1 trong những tùy chọn CPU, GPU, TPU v3-8. Chọn TPU v3-8 để tốc độ huấn luyện được cải thiện hơn.

Trang | 85

Hình 4.20: Thực hiện tạo notebook mới trên Kaggle.

• Lưu dữ liệu từ file HDF5 trước đó đã lưu lên trên Kaggle.

Hình 4.21: Upload dữ liệu trên Kaggle.

• Đọc dữ liệu từ file HDF5 trên Kaggle. - Đọc thông tin nhãn.

Trang | 86 - Đọc tập dữ liệu thử nghiệm/thẩm định.

• Chuyển đổi nhãn nhiều lớp thành nhãn nhị phân.

• Thử kiểm tra có hỗ trợ máy giá tốc TPU hay không, nếu có sẽ sử dụng máy giá tốc là TPU.

• Tạo mô hình để đào tạo. Ở đây chúng ta sẽ lưu ý chúng ta sẽ đánh giá qua 2 mô hình đã đề xuất.

• Tạo function learning rate reduction.

• Đào tạo mô hình.

4.3.5. Đánh giá mô hình.

• Hiển thị thông tin độ mất mát(loss) và độ chính xác(accuracy), biểu diễn hai đại lượng này trên biểu đồ theo số epochs.

Hình 4.22: Kết quả thông tin độ mất mát và độ chính xác của mô hình DenseNet201 huấn lại toàn bộ.

• Hiển thị thông tin báo cáo phân loại của mô hình qua các thông số: precision, recall, f1-score, support.

Trang | 87

Hình 4.23: Các thông số của Classification report: precision, recall, f1-score, support.

• Hiển thị thông tin confusion matrix.

Trang | 88

4.3.6. Dự đoán.

• Hiển thị các dự đoán đúng.

Trang | 89

• Hiển thị các dự đoán sai.

Trang | 90

4.3.7. So sánh kết quả giữa các mô hình.

Bảng 4.3: Kết quả thống kê tỷ lệ chính xác của các mô hình chỉ huấn luyện trên FC layer.

REPORT TRANING MODELS WITH ONLY FC LAYER

Size Xception VGG16 VGG19 ResNet50 ResNet152 InceptionV3 DenseNet121 DenseNet201

128x128 63,38% 70,40% 69,07% 45,92% 42,88% 65,46% 72,87% 73,81% 160x160 66,22% 72,49% 71,16% 50,47% 45,92% 68,88% 77,04% 76,47% 192x192 67,17% 74,19% 73,24% 49,72% 46,11% 68,31% 77,42% 79,32% 224x224 69,07% 74,57% 72,87% 45,92% 49,53% 71,92% 77,61% 79,32% 256x256 73,24% 74,57% 72,30% 42,13% 46,87% 72,87% 77,80% 77,61% Min 63,38% 70,40% 69,07% 42,13% 42,88% 65,46% 72,87% 73,81% Average 67,82% 73,24% 71,73% 46,83% 46,26% 69,49% 76,55% 77,31% Max 73,24% 74,57% 73,24% 50,47% 49,53% 72,87% 77,80% 79,32%

Trang | 91

Bảng 4.4: Kết quả thống kê tỷ lệ chính xác của mô hình huấn luyện lại toàn bộ.

REPORT TRANING MODELS WITH ALL TRAINABLE PARAMS

Size Xception VGG16 VGG19 ResNet50 ResNet152 InceptionV3 DenseNet121 DenseNet201

128x128 76,47% 51,61% 49,15% 70,97% 39,47% 72,49% 74,76% 74,57% 160x160 79,51% 54,08% 55,98% 73,81% 73,62% 74,95% 77,99% 77,61% 192x192 80,46% 50,47% 49,53% 71,73% 47,06% 75,90% 77,99% 75,52% 224x224 82,16% 50,09% 48,01% 74,76% 70,02% 76,66% 77,80% 73,24% 256x256 82,73% 50,85% 47,06% 63,57% 65,84% 76,66% 70,97% 71,16% Min 76,47% 50,09% 47,06% 63,57% 39,47% 72,49% 70,97% 71,16% Average 80,27% 51,42% 49,94% 70,97% 59,20% 75,33% 75,90% 74,42% Max 82,73% 54,08% 55,98% 74,76% 73,62% 76,66% 77,99% 77,61%

Trang | 92

Bảng 4.5: Kết quả thống kê tỷ lệ chính xác của mô hình huấn luyện lại toàn bộ trên data cải thiện lần 1.

REPORT TRANING MODELS WITH ALL TRAINABLE PARAMS - 1ST DATA IMPROVEMENT

Size Xception VGG16 VGG19 ResNet50 ResNet152 InceptionV3 DenseNet121 DenseNet201

224x224 86,49% 52,64% 52,48% 79,97% 79,66% 79,66% 82,92% 83,07%

Bảng 4.6: Kết quả thống kê tỷ lệ chính xác của mô hình huấn luyện lại toàn bộ trên data cải thiện lần 2.

REPORT TRANING MODELS WITH ALL TRAINABLE PARAMS – 2ND DATA IMPROVEMENT

Size Xception VGG16 VGG19 ResNet50 ResNet152 InceptionV3 DenseNet121 DenseNet201

224x224 91,17% 69,67% 62,67% 84,33% 81,83% 86,00% 90,17% 87,33%

Bảng 4.7: Kết quả thống kê tỷ lệ chính xác của mô hình huấn luyện lại toàn bộ trên data cải thiện lần 3.

REPORT TRANING MODELS WITH ALL TRAINABLE PARAMS – 3RD DATA IMPROVEMENT

Size Xception VGG16 VGG19 ResNet50 ResNet152 InceptionV3 DenseNet121 DenseNet201

Trang | 93

4.3.8. Triển khai ứng dụng.

Hình 4.27: Tổng quát hệ thống triển khai lần 1.

4.3.8.1. Tạo API với các mô hình có tỉ lệ chính xác cao.

Sau khi so sánh kết quả của tất cả mô hình sau khi đào tạo, ta có thể rút ra được 3 mô hình có tỷ lệ dự đoán chính xác cao nhất đó là:

• Xception 🥇 91,30%.

• DenseNet201 🥈 87,92%.

• InceptionV3 🥉 86,75%.

Sau khi đã xác định và tạo ra các mô hình, chúng ta sẽ ứng dụng tạo ra các API tích hợp để sử dụng được cho nhiều nền tảng khác nhau. Để tích hợp ứng dựng phân loại phong cách thiết kế nội thất, chúng ta sẽ tạo một Web Server chứa API Gateway và Web App chịu trách nhiệm phân phối API và đồng thời một website đơn giản dùng để dự đoán phong cách thiết kế nội thất.

Để xây dựng Web Server nhóm đã xây dựng trên nền tảng web tối giản và không phụ thuộc nền vào các thư viện bên ngoài. Bên cạnh đó chúng ta có những thư viện đi kèm để sử dụng các mô hình đã huấn luyện, xử lý ảnh và các nhiệm vụ khác gồm: Keras, Tensorflow, Pillow…

Trang | 94

• Xây dựng các lớp cho từng mô hình, ở các file: ModelDenseNet201.py, ModelInceptionV3.py, ModelXception.py.

- Áp dụng Singleton Pattern trên mỗi lớp để gọi mô hình khi gần thiết, giúp tránh phải gọi một phiên bản mới của mô hình, bởi khi gọi mô hình mất một khoảng thời gian khá lâu, đồng thời sẽ chiến nhiều dung lượng bộ nhớ khi gọi.

- Có các hàm như sau trên đồng thời các lớp là: Hàm tạo, Hàm có nhiệm vụ nhận lấy đường dẫn đến mô hình, Hàm tạo ra mô hình mới có trọng số ban đầu của “imagenet” của Keras và Hàm gọi mô hình.

• Xây dựng lớp tổng quát: ModelGeneral.py. Có có thuộc tính tinh chỉnh như kích thước ảnh đầu vào, đường dẫn của các mô hình,…Trong đó có các hàm chức năng như sau: Hàm đọc nhãn để trả về kết quả dự đoán, Hàm gọi lại tạo các mô hình ban đầu, Hàm chỉ định các trọng số cho mô hình, Hàm trả về kết

Một phần của tài liệu Phân loại phong cách thiết kế nội thất dùng học sâu và ứng dụng thực tế đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin (Trang 94)