Avatar
Ba
Phần 3 - Giải thích chi tiết các chỉ số của Box dự đoán
Tags
Yolo

Phần 3 - Cùng phân tích kỹ các chỉ số của Box dự đoán

Trong Phần 2 - Giải thích đầu ra và đầu vào của mô hình YOLO , khái niệm Box dự đoán đã được đề cập dùng để khoanh vuông đối tượng chúng ta cần nhận diện.

1) Nhắc lại một số khái niệm trong phần trước

Trong bài này chúng ta cùng đào sâu 5 chỉ số mã YOLO cần học cho mỗi box này.

Như chúng ta đã biết, một bounding box nhãn có hai điểm min và max. Vậy từ hai giá trị này làm thế nào để chúng ta bố trí dữ liệu để đào tạo bao gồm 5 giá trị x, y, w, h, confidence đã được đề cập trong phần 2.

2) Ô chứa tâm của box dự đoán

Trong bài trước chúng ta đã nhắc đến YOLO sẽ chia ảnh thành S x S ô, mỗi một ô này sẽ dự đoán ra B box dự đoán, trường hợp này đang đặt B = 2. Tâm của hai box này sẽ nằm trong ô. Cho nên khi tiến hành dự đoán YOLO sẽ phải xác định vị trí của tâm tỉ lệ với chiều của ô này, trường hợp này là 64.

3) Các chỉ số của box dự đoán

3.1) Chỉ số chiều dài (w), chiều cao (h)

Với hai giá trị minmax ta có thể tính ra được:

Chiều dài của box dự đoán

box_width = xmax - xmin

Giá trị w là tỉ lệ giữa chiều dài của box và chiều dài của ảnh

w = box_width / image_width

3.2) Chỉ số tâm của box (x, y)

Tọa độ tâm của bounding box theo chiều của ảnh

x_center = (xmax + xmin) / 2

y_center = (ymax + ymin) / 2

Chiều một ô trường hợp này

cell_size = 64

Dòng hiện tại của ô

row = y_center // cell_size

col = x_center // cell_size

Trong trường hợp này ô chứa tâm nằm ở dòng có chỉ mục tính từ 0 là dòng số 5 và cột số 4. Nhiệm vụ tính dòng và cột là để tỉm ra:

Khoảng cách từ tâm bounxing box tới viền của ô hiện tại (màu xanh)

a = x_center - col x cell_size

b = y_center - row x cell_size

Tỉ lệ của khoảng cách này trên chiều của ô

x = a / cell_size

y = b / cell_size

Đây chính là cặp x, y mà YOLO sẽ cố gắng học

3.3) Chỉ số tự tin - confidence

  • Với nhãn thì chỉ số này sẽ bằng 1 vì nhãn chính là grounding true box

  • Với dự đoán của YOLO thì chỉ số này được đo lượng bằng giá trị IOU, độ đo thể hiện sự khớp giữa box dự đoán và grounding true box. IOU là giá trị thể hiện sự giao thoa giữa hai box bất kỳ. Nếu hai box giao thoa càng nhiều thì giá trị này càng lớn.

Để tính IOU ta cần tính diện tích phần giao và diện tích phần hợp, sau đó tính tỉ lệ giữa hai phần này.

3.1.1) Cách tính diện tích phần giao:

Để tính diện tích phần giao, ta cần đi tìm hai tọa độ của hình chữ nhật phần giao:

  • Tọa độ bên trái nằm trên: (i_min_x, i_min_y)

  • Tọa độ bên phải nằm dưới: (i_max_x, i_max_y)

Cách tìm ra tọa độ trái bên trên:

Chú ý rằng có khả năng box A nằm trước box B hoặc ngược lại cho nên ta cần thiết kế theo cách tổng hợp như sau:

Tọa độ bên trái nằm trên: (i_min_x, i_min_y)

  • i_min_x = max(a_min_x, b_min_x)

  • i_min_y = max(a_min_y, b_min_y)

Tương tự ta có thể tọa độ bên phải nằm dưới: (i_max_x, i_max_y)

  • i_max_x = min(a_max_x, b_max_x)

  • i_max_y = min(a_max_y, b_max_y)

Sau khi biết hai tọa độ này bạn có thể tính ra chiều dài và chiều cao của phần giao:

Chiều dài của phần giao

intersection_width = i_max_x - i_min_x

Chiều cao của phần giao

intersection_height = i_max_y - i_min_y

Diện tích của phần giao

I = intersection_width x intersection_height

Chú ý: Diện tích này có thể âm trong trường hợp hai box không đè lên nhau nên cần so sánh với 0 khi lập trình.

3.1.2) Cách tính diện tích phần hợp:

Diện tích phần hợp bằng tổng diện tích của A và B trừ đi diện tích phần giao:

U = A + B - I

3.1.3) Cách lập trình IOU như sau:

def calculate_iou(A, B):
    x1_inter = max(A[0], B[0])
    y1_inter = max(A[1], B[1])
    x2_inter = min(A[2], B[2])
    y2_inter = min(A[3], B[3])

    # Tính diện tích phần giao
    intersection = max(0, x2_inter - x1_inter) * max(0, y2_inter - y1_inter)

    # Tính diện tích của A và B
    area_A = (A[2] - A[0]) * (A[3] - A[1])
    area_B = (B[2] - B[0]) * (B[3] - B[1])

    # Tính diện tích phần hợp
    union = area_A + area_B - intersection

    # Tính IOU
    iou = intersection / union if union > 0 else 0

    return iou

Giá trị này chính là chỉ số thứ 5 mà YOLO cần dự đoán được.

Vậy là bạn đã cùng tìm hiểu chi tiết các giá trị nằm trong box dự đoán đầu ra của YOLO.

Trong những bài tiếp theo chúng ta sẽ đi sâu và kiến trúc mô hình YOLO nhé.