Cấp phép YOLO
Quay lại Bảng thuật ngữ Ultralytics

Hungarian Algorithm

Thuật toán Hungary tìm phép gán một-một có chi phí tối thiểu giữa hai tập hợp, hỗ trợ theo dõi đối tượng và huấn luyện phát hiện trong thị giác máy tính.

Thuật toán Hungary là một phương pháp tối ưu hóa chính xác, tìm cách ghép cặp một-một có chi phí thấp nhất sao cho mọi phần tử trong tập hợp nhỏ hơn được ghép với một phần tử của tập hợp còn lại. Thuật toán tối ưu hóa tổng chi phí của tất cả các cặp được chọn. Trong thị giác máy tính, thuật toán kết nối các kết quả phát hiện với đối tượng được theo dõi hoặc các dự đoán với mục tiêu huấn luyện.

Harold W. Kuhn giới thiệu thuật toán này vào năm 1955 trong Phương pháp Hungary cho bài toán phân công. Phương pháp Hungary và thuật toán Kuhn–Munkres là các tên gọi khác nhau của cùng một họ thuật toán. Tên gọi này vinh danh các nhà toán học Hungary Dénes Kőnig và Jenő Egerváry, những người có công trình đặt nền tảng cho phương pháp.

Cách hoạt động của thuật toán Hungary#

Đầu vào là một ma trận chi phí: mỗi hàng biểu diễn một phần tử từ tập hợp này, mỗi cột biểu diễn một phần tử từ tập hợp kia, và mỗi ô cho biết chi phí ghép cặp chúng. Với ma trận vuông, lời giải chọn chính xác một ô trong mỗi hàng và mỗi cột. Chiến lược tham lam chọn các cặp riêng lẻ có vẻ hấp dẫn; phép ghép Hungary tìm tổng chi phí tối thiểu trên toàn cục.

Trong quy trình rút gọn ma trận kinh điển, hãy trừ giá trị nhỏ nhất của mỗi hàng khỏi tất cả phần tử trong hàng đó, rồi trừ giá trị nhỏ nhất của mỗi cột khỏi tất cả phần tử trong cột đó. Các phép rút gọn này giữ nguyên phép gán đầy đủ tốt nhất vì mỗi phép gán sử dụng mỗi hàng và cột đúng một lần. Che tất cả các số 0 bằng số đường ngang và dọc ít nhất có thể. Nếu cần n đường để che một ma trận n x n, hãy chọn n số 0 sao cho không có hai số nào cùng hàng hoặc cùng cột. Nếu không, hãy trừ giá trị nhỏ nhất chưa được che khỏi các phần tử chưa được che, cộng giá trị đó tại các giao điểm của các đường che, rồi lặp lại bước kiểm tra. Tính chi phí của phép gán bằng ma trận ban đầu.

Các cách triển khai thuật toán Hungary hiệu quả chạy trong thời gian O(n³) với ma trận vuông, so với n! phép gán đầy đủ có thể có.

Ứng dụng trong computer vision#

Theo dõi nhiều đối tượng. Thiết kế SORT ban đầu kết hợp phép gán Hungary với bộ lọc Kalman, dùng để dự đoán vị trí của từng vệt theo dõi. Giao điểm trên hợp đo mức độ chồng lấp giữa các hộp giới hạn được dự đoán và được phát hiện. Bản triển khai tham chiếu của SORT giải bài toán gán bằng LAPJV hoặc SciPy, loại bỏ các liên kết có độ chồng lấp thấp và tạo định danh cho các kết quả phát hiện chưa được ghép.

Huấn luyện phát hiện đối tượng. DETR sử dụng phép ghép Hungary để ghép các dự đoán không có thứ tự với các đối tượng được gán nhãn. Transformer tạo ra các vị trí dự đoán, còn phép ghép kết hợp chi phí phân loại và chi phí định vị hộp. Khi có đủ vị trí, mỗi mục tiêu nhận được một dự đoán, nhờ đó hàm mất mát không phụ thuộc vào thứ tự chú thích; các vị trí không được ghép sẽ học lớp "không có đối tượng". Ultralytics áp dụng công thức gán này trong RT-DETR: HungarianMatcher kết hợp chi phí phân loại, khoảng cách tọa độ L1 và chi phí IoU tổng quát. Backend gán tuyến tính sử dụng bộ giải Jonker–Volgenant đã được sửa đổi để chọn các cặp huấn luyện.

Ghép cặp Hungary trong Python#

Gói Python munkres triển khai phương pháp Hungary. Cài đặt gói bằng pip install munkres, sau đó giải ma trận chi phí mẫu:

from munkres import Munkres

costs = [
    [5, 9, 1],
    [10, 3, 2],
    [8, 7, 4],
]
solver = Munkres()
assignments = solver.compute(costs)
# Read costs from the original matrix.
minimum_cost = sum(costs[row][col] for row, col in assignments)
print(f"Minimum total cost: {minimum_cost}")

Đầu ra là Minimum total cost: 12, tổng nhỏ nhất có thể đạt được khi chọn một ô trong mỗi hàng và mỗi cột.

Bài toán phân công là bài toán cần giải; thuật toán Hungary là một bộ giải. Triệt tiêu phi cực đại loại bỏ các kết quả phát hiện cạnh tranh trong cùng một ảnh. Tái định danh đối tượng cung cấp thông tin ngoại hình để liên kết, thường thông qua các vector nhúng được so sánh bằng độ tương đồng cosine. Các điểm số này có thể được dùng làm chi phí ghép cặp.

Kích thước hai nhóm không bằng nhau sẽ tạo ra ma trận hình chữ nhật. Việc theo dõi cũng cần các quy tắc từ chối hoặc phần tử giả có chi phí chưa ghép được xác định để xử lý các kết quả phát hiện bị thiếu và đối tượng mới xuất hiện. Liên kết sai gây ra hiện tượng chuyển đổi định danh: ID của một vệt theo dõi được chuyển sang đối tượng khác.

Bộ giải gán tuyến tính của SciPy giải cùng bài toán tối ưu hóa bằng thuật toán Jonker–Volgenant đã được sửa đổi. Với ma trận hình chữ nhật r x c, bộ giải trả về chính xác min(r, c) cặp khi tồn tại phép gán đầy đủ khả thi.

Khám phá các giải pháp

Thị giác máy tính trong thể thao

Thị giác máy tính trong thể thao

Khám phá cách Ultralytics YOLO thúc đẩy thị giác máy tính trong thể thao với khả năng theo dõi cầu thủ và bóng, phân tích hiệu suất, cung cấp thông tin chuyên sâu cho huấn luyện và hỗ trợ phục hồi cho vận động viên.
Tìm hiểu thêm
Thị giác máy tính cho ảnh hàng không

Thị giác máy tính cho ảnh hàng không

Chuyển hình ảnh từ drone và ảnh hàng không thành thông tin chuyên sâu theo thời gian thực cho nông nghiệp, nuôi trồng thủy sản, bảo tồn và phân tích không gian địa lý với Ultralytics YOLO.
Tìm hiểu thêm
Thị giác máy tính trong hàng không vũ trụ

Thị giác máy tính trong hàng không vũ trụ

Ứng dụng computer vision trong ngành hàng không vũ trụ với Ultralytics YOLO cho kiểm tra máy bay, phát hiện dị vật trên đường băng (FOD), vận hành mặt đất tại sân bay và phát hiện lỗi vật liệu composite.
Tìm hiểu thêm
Computer vision trong lĩnh vực an ninh

Computer vision trong lĩnh vực an ninh

Bảo vệ mọi địa điểm bằng model Ultralytics YOLO. Vision AI hỗ trợ giám sát vành đai, phát hiện mối đe dọa, nhận dạng biển số và an toàn nơi làm việc.
Tìm hiểu thêm
Computer vision trong robotics

Computer vision trong robotics

Tăng cường năng lực cho máy móc thông minh bằng model Ultralytics YOLO. Vision AI trong lĩnh vực robotics hỗ trợ điều hướng tự động, nhận thức, theo dõi đối tượng và điều khiển theo thời gian thực.
Tìm hiểu thêm
Thị giác máy tính trong logistics

Thị giác máy tính trong logistics

Tinh giản hoạt động logistics với các model Ultralytics YOLO. Vision AI hỗ trợ kiểm tra kiện hàng, phân loại, theo dõi phương tiện và giám sát an toàn kho hàng theo thời gian thực.
Tìm hiểu thêm
Thị giác máy tính trong bán lẻ

Thị giác máy tính trong bán lẻ

Định hình lại hoạt động bán lẻ với các model Ultralytics YOLO. Vision AI hỗ trợ theo dõi hàng tồn kho, giám sát kệ hàng, quản lý hàng chờ và phân tích khách hàng thông minh hơn.
Tìm hiểu thêm
Thị giác máy tính trong chăm sóc sức khỏe

Thị giác máy tính trong chăm sóc sức khỏe

Xây dựng các giải pháp chăm sóc sức khỏe với model Ultralytics YOLO. Vision AI trong chăm sóc sức khỏe hỗ trợ xử lý hình ảnh y tế nhanh hơn, chẩn đoán thông minh hơn và theo dõi bệnh nhân.
Tìm hiểu thêm
Thị giác máy tính trong sản xuất

Thị giác máy tính trong sản xuất

Tối ưu hóa sản xuất bằng các model Ultralytics YOLO. Vision AI thúc đẩy kiểm soát chất lượng, phát hiện lỗi, tuân thủ PPE và tự động hóa dây chuyền lắp ráp.
Tìm hiểu thêm
Thị giác máy tính trong ngành ô tô

Thị giác máy tính trong ngành ô tô

Ứng dụng thị giác máy tính trong ngành ô tô với các model Ultralytics YOLO. Vision AI nâng cao an toàn giao thông, hỗ trợ người lái và tự động hóa phương tiện để tạo nên những tuyến đường thông minh hơn.
Tìm hiểu thêm
Thị giác máy tính trong nông nghiệp

Thị giác máy tính trong nông nghiệp

Ứng dụng AI thị giác vào nông nghiệp thông minh với các model Ultralytics YOLO. Hỗ trợ giám sát cây trồng, theo dõi vật nuôi và canh tác chính xác để nâng cao năng suất một cách thông minh hơn.
Tìm hiểu thêm

Hãy cùng nhau kiến tạo tương lai của AI!

Bắt đầu hành trình hướng đến tương lai của machine learning