Chào toàn thể anh em Mì Ai. Hôm nay chúng ta sẽ tìm hiểu sâu một chút về mAP, một metric đo lường hiệu quả của model Object Detection (OD) mà chúng ta đã dùng trước đây.
Đầu tiên mình xin nói trước là Mì AI là một cộng đồng thiên về thực hành, các nội dung về lý thuyết đều tìm hiểu ở dạng cơ bản nhất để có ý niệm trong đầu nó là cái gì? Dùng ra sao? Do đó, mọi thông tin phía bên dưới có thể sẽ gây “phản cảm” hoặc “khó chịu” với các bạn đã làm AI chuyên nghiệp, mong các bạn bỏ quá!
Còn bây giờ thì bắt đầu thôi!
Object Detection là làm gì?
Bài toán OD thì model cần phải làm 2 task:
- Xác định sự xuất hiện của các đối tượng trong ảnh bằng cách predict bounding box
- Gán class cho đối tượng đó.
Và khi thực hiện gán class, model sẽ gán với một Probality nhất định. Ví dụ: 90% đây là chó, 10% đây là mèo.
Chúng ta cần xác định một Confident Threshold cho model, ví dụ trên 50%, trên 60% hay thậm chí trên 80% thì mới được coi là dự đoán đúng class đó.
Cần một metric cho Object Detection model
Trong cuộc sống, khi chúng ta làm gì, chúng ta cũng cần đặt ra tiêu chí để xác định rằng việc chúng ta làm đã đúng mục đích chưa, đã mang lại hiệu quả chưa.
Trong AI, khi chúng ta train model chẳng hạn, thì chúng ta cũng phải đặt ra cho mình tiêu chí đo lường khi nào thì dừng việc train? với model có được thì chúng ta đã đạt được yêu cầu đề ra hay chưa? Đo lường qua tiêu chí gì?
Với một model phân loại Chó/Mèo đơn giản đi. Thì chúng ta thấy bài toán có thể đo lường qua Precision, Recall, Confusion Metric, Accuracy…
Còn với một model OD thì chúng ta sẽ làm quen với Precision, Recall, AP và mAP.
mAP sẽ là một tiêu chí đo lường của các model Object Detection.
Để tìm hiểu mAP chúng ta sẽ đi qua lần lượt các khái niệm IoU, Precision, Recall, Precision Recall Curve, AUC, AP và mAP nhé!
Tìm hiểu về IoU
IoU viết tắt của Intersection over Union, tạm dịch: Giao trên Hợp (cấm bỏ chữ trên đi nhá =)) ). Để hiểu rõ hơn các bạn nhìn vào hình dưới rồi mình sẽ giải thích:
Chú ý với hình trên:
- Màu đỏ là Ground Truth: Là nhãn thực. Với bài toán OD thì đây là bounding box thực bao quanh vật thể, đã được gán nhãn.
- Màu xanh green là Predict Bounding Box: Là khung chữ nhật được model dự đoán ra.
- Vùng màu xanh blue bên trên là vùng giao giữa Ground Truth và Predict Bounding Box
- Vùng màu xanh blue bên dưới là vùng hợp giữa Ground Truth và Predict Bounding Box
- IoU là tỷ lệ giữa giao và hợp
Như vậy đánh giá qua thì IoU càng lớn thì càng tốt, đồng nghĩa với việc phần giao lớn và phần hợp nhỏ (nhãn dự đoán ra giống với nhãn thực).
Ví dụ với hình dưới với IoU 0.7899 và 0.9472 thì rõ ráng với mức 0.9472 nhãn dự đoán sát với nhãn thực hơn.
Thế còn Precision, Recall và Precision Recall Curve là cái gì?
Thực ra mình đã có một bài trên Mì AI nói về Precision và Recall rồi, các bạn có thể tìm đọc lại tại đây. Tại đây mình chỉ nhắc lại ngắn gọn thôi nhé:
Precision – đại diện cho độ tin cậy của model.
Nó sẽ cho biết rằng trong những cái model dự đoán là Positive thì có bao nhiêu % là Positive thật. Ví dụ: 10 ca bệnh được đưa vào khám, trong đó có 8 ca bệnh được model dự đoán là ung thư. Cơ mà thực tế chỉ có 5 ông là ung thư thật còn lại 3 ông là model dự đoán sai.
Vậy thì :
Precision – Độ tin cậy
= Dự đoán là Ung thư và đúng là thế (True Positive) / Tổng số dự đoán là Ung thư (#Positive predictions)
= Dự đoán là Ung thư và đúng là thế (True Positive)/ [ Số dự đoán đúng là ung thư và đúng là thế (True Positive) + Số dự đoán là ung thư nhưng sai lòi (False Positive) ]
= 5 / (5+3)
= 5/8 = 0.625
Recall – đại diện cho độ nhạy của model
Nó sẽ cho biết model có thể tóm đúng được bao nhiêu Positive trong dữ liệu được cho. Ví dụ: 10 ca bệnh vào khám, trong đó có 5 ca bệnh là ung thư thật. Giả sử model nhận diện được 3 ông là ung thư, 7 ông còn lại là bình thường
Vậy thì:
Recall
= Dự đoán là Ung thư và đúng là thế (True Positive) / Tổng số bệnh nhân ung thư thật trong dữ liệu
= 3 / 5
= 0.6
Thế còn Precision Recall Curve là cái quái gì nữa?
Đoạn này chúng ta nhắc đến một khái niệm mới là IoU threshold (ngưỡng). Lý do chúng ta cần khái niệm này là vì, với các dự đoán của model, nếu IoU> threshold đó thì được coi là True Positive (nhận chuẩn) và ngược lại nếu < threshold thì sẽ coi là False Positive (nhận là Positive nhưng bị sai).
Từ đó, chúng ta thay đổi IoU threshold, tính toán ra Precision và Recall tại các mức đó và vẽ ra được Precision Recall Curve như sau (threshold chạy từ 0 đến 1 với bước nhảy 0.001 chăng hạn)
Đến đây chắc các bạn lại hỏi thế vẽ cái đường này ra làm gì? Và đây là câu trả lời.
Chúng ta vẽ ra cái đồ thị trên là để tính AP – Average Precision. AP chính là vùng diện tích màu xanh nằm dưới đường cong Precision Recall nói trên.
- AP lớn nếu vùng này lớn, suy ra đường cong có xu hướng gần góc trên bên phải và có nghĩa là tại các threshold khác nhau thì Precision và Recall đều khá cao. Từ đó suy ra model tốt.
- AP nhỏ thì cả Precision và Recall đều khá thấp và model không tôt.
Vậy là chúng ta đã nắm được AP. Tiếp phát cuối mAP!
Trùm cuối, mAP là gì?
Rồi như vậy với mỗi class trong bài toán ta sẽ có một giá trị AP. Còn mAP là gì thì đang có nhiều khái niệm khác nhau trong nhiều bài toán, ngữ cảnh khác nhau. Trong bài này thì đơn giản mAP là Mean Average Precision là trung bình cộng giá trị AP của các class khác nhau, vậy thôi!
Lý thuyết là vậy, còn trong các bài toán hiện tại thì khi chúng ta dùng các repo như YOLO chẳng hạn thì họ luôn làm các việc tính toán này cho chúng ta rồi. Chúng ta chỉ cần train sao cho mAP lớn nhất có thể và in ra mà thôi :).
Bạn nào muốn tìm hiểu chuyên sâu có thể google thêm và thử tính toán để trải nghiệm nhé!
Mình xin nhấn mạnh đây là một cách tính trong vô vàn cách tính AP và mAP. Các bạn đừng ngạc nhiên khi thấy một cách tính khác. Tuy nhiên các bạn chỉ cần nhớ là mAP càng lớn thì model càng tốt nhá 😀
Chúc các bạn thành công!
#MìAI
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube
Chào admin, ở đoạn tính AP, bị mất hình ạ. Link cũng không vào được.
Thanks bạn nha!
Chào admin, bài này admin nói phần “Từ đó, chúng ta thay đổi IoU threshold, tính toán ra Precision và Recall tại các mức đó và vẽ ra được Precision Recall Curve như sau (threshold chạy từ 0 đến 1 với bước nhảy 0.001 chăng hạn)” là chưa chính xác rồi ạ.
AP của 1 class là được tính dựa trên 1 giá trị threshold duy nhất. Ví dụ: AP50, AP75 lần lượt ứng với threshold IoU 0.5 và 0.75.
Và AP được tính bằng trung bình các giá trị Precision tại các giá trị Recall thay đổi (giả sử Recall chạy từ 0 đến 1 với bước nhảy 0.001 chẳng hạn), chứ không phải tại các giá trị threhold thay đổi. Từ đó mới vẽ ra Precision Recall Curve như trên.
Cảm ơn anh đã rất tích cực đóng góp cho cộng đồng.
Cảm ơn bạn đã chỉ ra nhé. Hihi. Mình sẽ update kiến thức ngay!