Bài toán nhận dạng biển báo giao thông năm 2024

Ngày nay, cơ sở hạ tầng giao thông ngày càng phát triển, việc phát hiện biển báo để cung cấp thông tin đến người tham gia giao thông là một điều rất quan trọng. Tận dụng những kiến thức đã được học ở môn Machine Learning, kết hợp với những điều gần gũi với đời sống. Nhóm chúng em đã chọn đề tài “Phát hiện các loại biển báo giao thông phổ biến ở Làng Đại học” làm đề tài nghiên cứu. Giúp mọi người có thể hiểu đâu là biển báo giao thông và chúng có ý nghĩa thế nào.

Mô tả bài toán:

  1. Input: Một bức ảnh có chứa biển báo bất kỳ.
  2. Output: Ảnh input với bounding box khoanh vùng có biển báo và tên biển báo

Bài toán nhận dạng biển báo giao thông năm 2024
Bài toán nhận dạng biển báo giao thông năm 2024

Để xây dựng được mô hình như yêu cầu bài toán đó, ta cần phải trải qua 2 bước:

  1. Tìm biển báo(*).
  2. Phân loại biển báo(* *).

Phát hiện biển báo:

  1. Quét bức ảnh input bằng một cửa sổ trượt từ trái sang phải và từ trên xuống dưới.
  2. Trích xuất đặc trưng ở mỗi vùng scan qua trên hình.
  3. Sử dụng model phân loại biển báo(* *) để dựng đoán xem vùng đó có chứa biển báo hay không.
  4. Tổng hợp lại các vùng có chứa biển báo thỏa mãn để có một vùng duy nhất (Final bounding boxes)

Xây dựng Scanner

Để có thể tìm được vật thể chúng ta cần tìm, ta cần phải quét toàn bộ trên bức hình. Vì vật thể có thể nằm bất cứ đâu trên hình và có kích thước ngẫu nhiên. Cho nên chúng ta cần xây dụng “scanner” theo 2 tiêu chí sau:

  • Kích thước ảnh quét: Ta cần phải quét trên bức ảnh với nhiều kích thước khác nhau để có thể tìm ra được vật thể. Gọi tắt là kỹ thuật “Image Pyramid”.

Bài toán nhận dạng biển báo giao thông năm 2024

  • Phạm vi quét: Ta cần phải quét phạm vi toàn bức ảnh. Cho nên cần xây dựng một cửa sổ trượt để quét lần lượt toàn bộ bức ảnh theo chiều từ trên xuống và trái sang phải.(Sliding window)

Bài toán nhận dạng biển báo giao thông năm 2024

Trích xuất đặc trưng ở mỗi vùng scan trên hình

  • Ta sẽ sử dụng HOG((histogram of oriented gradients) để trích xuất đặc trưng trên những vùng mà cửa sổ trượt qua.
  • HOG là một feature descriptor được sử dụng trong computer vision và xử lý hình ảnh, dùng để detect một đối tượng. Các khái niệm về HOG được nêu ra từ năm 1986 tuy nhiên cho đến năm 2005 HOG mới được sử dụng rộng rãi sau khi Navneet Dalal và Bill Triggs công bố những bổ sung về HOG. HOG tương tự như các biểu đồ edge orientation, scale-invariant feature transform descriptors (như sift, surf ,..), shape contexts nhưng HOG được tính toán trên một lưới dày đặc các cell và chuẩn hóa sự tương phản giữa các block để nâng cao độ chính xác. HOG được sử dụng chủ yếu để mô tả hình dạng và sự xuất hiện của một object trong ảnh.

Bài toán nhận dạng biển báo giao thông năm 2024

Dự đoán đối tượng trong cửa sổ trượt

  • Ta sẽ sử dụng một model đã được train về các loại biển báo phổ biến trong làng đại học để dự đoán xem có biển báo trong cửa sổ hay không.
  • Sau khi dự đoán, nếu có đối tượng biển báo trong hình thì ta sẽ tiến hành trả về tọa độ vị trí của đối tượng.
  • Model sử dụng trong bài toán này: SVM và KNN

Support Vector Machine là gì?

  • Là thuật toán thường được áp dụng trong bài toán phân lớp, áp dụng cho cả dữ liệu tuyến tính và không tuyến tính.
  • Mục tiêu: tìm được một mặt phân cách (siêu phẳng trong không gian đa chiều) sao cho tất cả các điểm dữ liệu cùng loại đều nằm về một phía riêng biệt của mặt phân cách đó.

Bài toán nhận dạng biển báo giao thông năm 2024

Tổng hợp lại các khung viền

  • Trong lúc trượt cửa sổ, tùy thuộc vào bước nhảy, sẽ có nhiều cửa sổ thỏa mãn điều kiện có chứa biển báo. Cho nên chúng ta cần phải chọn ra một cửa sổ tối ưu nhất.
  • Để làm được điều đó chúng ta sẽ sử dụng kỹ thuật Non-maximum Suppression (NMS)

Bài toán nhận dạng biển báo giao thông năm 2024
Bài toán nhận dạng biển báo giao thông năm 2024

Non-maximum Suppression (NMS)

Input: Một danh sách B là các cửa sổ thỏa mãn, cùng với các xác suất dự đoán tương ứng và cuối cùng là ngưỡng overlap N.
Output: Danh sách D các cửa sổ tối ưu cuối cùng.

Các bước thực hiện:

  • Chọn cửa sổ có xác suất dự đoán cao nhất. Xóa nó khỏi B và đưa nó vào D.
  • Tính giá trị IOU(Intersection over Union)(Giá trị IOU được sử dụng để tính toán sự trùng lặp của 2 khung cửa sổ) của cửa sổ mới được chọn với những cửa sổ còn lại. Nếu giá trị IOU lớn hơn ngưỡng N thì ta sẽ xóa nó khỏi lớp B
  • Tiếp tục chọn cửa sổ có xác suất dự đoán cao nhất còn lại. Quay về bước 2
  • Lặp cho tới khi không còn giá trị nào trong B

Bài toán nhận dạng biển báo giao thông năm 2024


Mô hình phân loại biển báo

Mô hình này mục đích là để đưa ra kết quả dự đoán xem trong cửa sổ trượt đó có biển báo hay không và chúng thuộc loại nào.

Các bước xây dựng:

  1. Thu thập dữ liệu
  2. Xử lý dữ liệu
  3. Phân chia dữ liệu Training và Testing
  4. Chọn model và training
  5. Đánh giá mô hình và nhận xét

Thu thập dữ liệu:

Dữ liệu là những bức ảnh biển báo giao thông nhóm tự chụp bằng điện thoại. Tùy thuộc vào tần suất xuất hiện nên số ảnh ở mỗi lớp có sự chênh lệch Ảnh không chứa biển báo: SceneClass13 gồm 3000 tấm

Bài toán nhận dạng biển báo giao thông năm 2024

Số lượng

Bao gồm 6 classes và 1 class ảnh ngoại cảnh(ảnh không chứa biển báo)

Training:
  • Biển Speed limit (40km/h): 109 tấm
  • Biển W.207b sign: 108 tấm
  • Biển Pedestrians:88 tấm
  • Biển No entry: 92 tấm
  • Biển Keep right: 66 tấm
  • Biển Roundabout mandatory: 41 tấm
  • SceneClass13: 3000 tấm(chỉ dùng 1000 tấm)
Testing:
  • Biển Speed limit (40km/h): 18 tấm
  • Biển W.207b sign: 24 tấm
  • Biển Pedestrians: 27 tấm
  • Biển No entry: 11 tấm
  • Biển Keep right: 8 tấm
  • Biển Roundabout mandatory: 6 tấm
  • SceneClass13: 156 tấm

Xử lý dữ liệu

Xử lý dữ liệu bao gồm các bước như sau:

  1. Cắt vùng có chứa biển báo ra khỏi ảnh ban đầu bằng công cụ “Crop” trong Image trên Windows 10.

Bài toán nhận dạng biển báo giao thông năm 2024

  1. Chuyển ảnh từ ảnh màu RGB sang ảnh xám.

Bài toán nhận dạng biển báo giao thông năm 2024

  1. Resize bức ảnh về chung một kích thước duy nhất là 64x64.
  2. Sử dụng HOG để trích xuất đặc trưng cho bức ảnh. Ta sẽ được các vector 8100x1 để chuẩn bị cho bước training.

Chọn model và training

Dùng model SVM và KNN để training. Model được import từ scikit-learn. Ở SVM cần quan tâm tới các hyperparameters như sau:

  • C: 0.01
  • Probability=true
  • Random_state=42
  • Kernel=”linear”

Gọi phương thức model.fit để thực hiện training. Sau khi training xong ta sẽ lưu model lại cho những lần dự đoán tiếp theo.