Phân loại xe hơi bằng mạng nơ-ron tích chập YOLOv3

MỤC LỤC

TÌM HIỂU CÔNG NGHỆ MÔ HÌNH YoLov3

Trong mạng Darknet53, nó dùng để lấy các feature extractor, gồm 53 lớp tích chập theo sau đó là các lớp chuẩn hóa batch normalization và lớp hàm kích hoạt Learky ReLU. Ở Darknet53, nó bao gồm các filter kích thước 1x1 với 3x3 ( khá tương đồng mạng ResNet).Khác với machine learning, chúng ta phải tự chọn các filter, trong deap learing (cụ thể là trong mạng Darknet53), các filter hay kernel này do thuật toán gradient sinh ra tuân theo phân phối chuẩn. Giá trị sai số này sau đó truyền ngược về các filters và sử dụng để điều chỉnh các filters để để giảm thiểu sự khác biệt giữ dự đoán và kết quả thực tế.

Mỗi khối residual bao gồm hai lớp tích chập, lớp tích chập thứ nhất có kernel kích thước 1x1 và lớp tích chập thứ 2 có kernel với kích thước 3x3. YoLov3 còn có thể xử lý hình ảnh theo lô (batch) tức cho một lô ảnh vào cùng một lúc để xử lý song song với GPU, điều này làm tăng tốc độ huấn luyện rất nhiều lần, chính vì vậy, chúng ta cần phải thay đổi kích thước ảnh về một mẫu cụ thể để xử lý song song. Trong YoLov3, đối tượng dự đoán được sử dụng lới tích chập với kích thước là 1x1, nên kích thước dự đoán bằng chính kích thước của feature map trước nó.

Trong đó, 5 thuộc tính là mô tả tọa độ trung tâm x,y của bounding box, kích thước theo chiều cao và chiều rộng và xác suất chứa đối tượng trong bounding box; còn N là một vector chưa xác suất của từng class. Tiếp theo, ở lớp pháp hiện thang thứ 2 được tạo ra ở lớp thứ 94 cho một kích thước phát hiện (hoặc phân loại) mới là 26x26xN. Trước hết, YoLo loại bỏ tất cả các cell mà không chứa đối tượng, tức xác suất nằm dưới ngưỡng nào nào đó (giả sử pc <0.5).

Tiếp theo, ta sử dụng thuật toán Non-max suppression (viết tắt là NMS) để chỉ chọn 1 bounding box cho 1 cell, cũng có nghĩa 1 đối tượng chỉ có 1 bounding box. Đối với bộ dữ liệu ảnh để thực hiện huấn luyện, nó cần phải định dạng cứ một file ảnh thì cần 1 file .txt với tên giống hệt nhau. Như đã đề cập ở quá trình lặp ta sử dụng batch , tức số ảnh đưa vào cho một lần lặp để cải thiện lại weight, và weight có thể bị dao động rất lớn.

Overfitting được hiểu là làm rất tốt trên tập training data nhưng lại rất tồi trên tập test, giống như việc mạng nơ-ron đã nghi nhớ câu trả lời tất cả hình ảnh trong training data, nhưng lại không học được khái niệm cơ bản. Đầu tiên ta phải thu thập tập dữ liệu ảnh (chẳng hạn có thể lên đến hàng trăm nghìn ảnh) rồi sau đó tạo bounding box cho mỗi class trong ảnh ( gán nhãn). Trước hết, ta có khái niệm Overfitting, là hiện tượng khi mô hình xây dựng thể hiện được chi tiết bộ dữ liệu huấn luyện.

Precision (độ chính xác) đại diện cho phần trăm dự đoán chính xác của các bounding box và cho thấy độ tin cậy của mô hình đã đào tạo để phát hiện phân loại các loại đối tượng. Recall (độ triệu hồi) đại diện cho phần trăm dự đoán đúng của tất cả các bounding box kết quả đúng trong tất cả các bounding box đúng.

Hình 3.2 Khối residual thứ 1 của Darknet53
Hình 3.2 Khối residual thứ 1 của Darknet53

XÂY DỰNG ỨNG DỤNG PHÂN LỚP ẢNH XE HƠI VÀ THỬ NGHIỆM

Biểu đồ use case như hình 4.2 của ứng dụng phân lớp xe hơi với tác nhân là con người thông qua các thao tác với phần mềm để thực hiện phân loại xe. Bộ dữ liệu dành cho việc huấn luyện (cars_traindataset) gồm 8144 ảnh xe hơi đơn của các hãng đã nêu ở mục 4.1 .Và 1 file thông tin cars_train_annos.mat gán nhãn thương hiệu và năm phát hành cho từng ảnh xe. Mục đích chính của em là để giảm thời gian huấn luyện ( vì thời gian gian huấn luyện rất tốn kém, chỉ với 49 classes, em đã mất gần nửa tháng huấn luyện liên tục trên Google Colab).

Bộ dữ liệu dành cho thử nghiệm và test (cars_testdataset)gồm 8041 ảnh xe hơi đơn của các hãng đã nêu ở mục 4.1. Và cũng có 1 file .mat gán nhãn thương hiệu và năm phát hành cho từng xe. tên hãng + năm phát hành). Mà hai file thông tin .mat đã cho là 1 file lớn chứa toàn bộ thông tin của 8144 ảnh dành cho huấn luyện (cars_train_annos.mat) và 1 file lớn chứa toàn bộ thông tin của 8041 ảnh dành cho việc thử nghiệm (cars_test_annos_withlabels.mat). File cấu hình là một phần rất quan trọng trong YoLov3 như đã đề cập ở mục 3.3.1, nó là các thông số đầu vào cho mô hình YoLov3, là các tham số của mạng Darknet53 (thực chất là là các lớp tích chập).

Trong thời gian huấn luyện, cứ mỗi 1000 lần lặp (do đã cấu hình burn_in =1000) thì sẽ sinh ra 1 file weight, như vậy để hoàn thiện quá trình huấn luyện sẽ sinh ra 49 file Weights đúng như em đã thực hành. ❖ Đánh giá và lựa chọn file Weight tốt nhất. Việc huấn luyện xong đã sinh ra 49 file weights. Trong 49 file Weights, chúng ta lựa chọn 1 file Weight duy nhất được coi là tốt nhất. Để đánh giá chỉ số mAP cho mỗi file Weights, ta thực hiện trên môi trường window như sau:. 1) Vào môi trường Anaconda Prompt 2) Di chuyển con trỏ đến darknet.exe. darknet.exe detector map cfg\car_data.data. cfg\yolov3_car_train.cfg backup\yolov3_car_train_5000.weights 4) Ta có được kết quả như sau:. 5) Làm tương tự như với yolov3_car_train_5000.weights cho tất cả các file Weights. • Cài đặt Opencv để phục vụ cho vấn đề liên quan xử lý ảnh như vẽ bounding box, chèn tên hãng và độ chính xác trên bounding box, đọc và hiển thị ảnh đầu vào, thay đổi kích thước ảnh, và truyền tham số cho mạng Darknet53 qua file Weight, …. • File main.py chịu trách nhiệm cài đặt giao diện và thông qua qua thành phần open_file.py để lấy đường dẫn của ảnh, rồi gửi tới image để xử lý phân lớp.

• File image_.py chịu trách nhiệm phân lớp hình ảnh, nó sẽ trỏ đến các file classes.names, yolov3_car_train.cfg, yolo3_car_train_46000.weights để lấy dữ liệu. • File yolov3_car_train_46000.weights chứa thông tin các trọng trong mô hình YoLov3 đã được huấn luyện ( là kết quả từ pha huấn luyện). • File standard_value.py chịu trách nhiệm đọc các dữ liệu của 2 file cars_meta.mat và cars_test_annos_withlabels.mat để lưu trữ lại thông tin nhãn của từng ảnh.

Sau khi người dùng lựa chọn được ảnh sẽ hiển thị ảnh gốc trước, rồi lựa chọn lần nữa sẽ hiển thị hình ảnh phân loại như hình sau (4.10). Bộ dữ liệu cars_testdataset có 8041 ảnh của 49 hãng ô tô đã nêu, nó hoàn toàn độc lập với bộ dữ liệu để huấn luyện cars_traindataset có 8144 ảnh. Các thang đo được sử dụng được sử dụng trong kịch bản thử nghiệm của mục 4.4.2 là precision, recall, F1-score, độ tin cậy, độ chính xác(accuracy).

• Thu thập dữ liệu cars_traindataset (8144 ảnh) dùng để huấn luyện, cars_testdataset (8044 ảnh) dùng để thử nghiệm, thực hiện xử lý gán nhãn theo hãng xe hơi chuyển đổi sang định dạng đầu vào của mô hình YoLov3. Trên đây là toàn bộ các nội dung em đã trình bày trong đồ án tốt nghiệp về đề tài xây dựng ứng dụng “phân loại xe hơi” (car image classification) bằng cách vận dụng thuật toán học sâu mạng Darknet53 (mạng nơ-ron tích chập) của mô hình Yolov3.

Hình 4.2 Biểu đồ use case của ứng dụng
Hình 4.2 Biểu đồ use case của ứng dụng