MMDetection: bộ công cụ phát hiện đối tượng OpenMMLab
MMDetection là bộ công cụ PyTorch của OpenMMLab cho phát hiện đối tượng, phân đoạn instance và phân đoạn panoptic, xây dựng theo hướng hoán đổi thành phần qua file config thay vì sửa code huấn luyện. Danh mục kiến trúc khá sâu, từ Faster R-CNN, các biến thể DETR, tới RTMDet mới hơn. Sự đa dạng đó có cái giá: MMEngine và MMCV là hai dependency bắt buộc trước khi chạy được mô hình đầu tiên, và hệ thống config cần thời gian thực sự để làm quen.
MMDetection là gì?
MMDetection là bộ công cụ mã nguồn mở cho phát hiện đối tượng, xây dựng trên PyTorch, thuộc dự án OpenMMLab. Nó gộp phát hiện đối tượng, phân đoạn instance, phân đoạn panoptic và phát hiện bán giám sát vào một framework module hóa, nơi backbone, neck và head được hoán đổi qua file config thay vì sửa code. MMDetection phụ thuộc vào MMEngine và MMCV cho huấn luyện và các phép toán thị giác máy tính cốt lõi.
Tính năng chính: thiết kế module hóa và hỗ trợ đa tác vụ
- ✓Thiết kế module hóa: README mô tả framework được tách thành các thành phần riêng — backbone, neck, head — mà bạn kết hợp lại thành một detector tùy chỉnh thay vì kế thừa một khối code liền.
- ✓Hỗ trợ đa tác vụ ngay từ đầu: phát hiện đối tượng, phân đoạn instance, phân đoạn panoptic và phát hiện đối tượng bán giám sát đều chạy qua cùng một codebase.
- ✓Kho kiến trúc rộng, trải từ Fast R-CNN, Faster R-CNN, RetinaNet, Cascade R-CNN, YOLOv3, DETR, Deformable DETR, DINO, GLIP đến RTMDet, cùng các backbone như Swin Transformer và ConvNeXt.
- ✓RTMDet, dòng detector thời gian thực mới hơn, đạt 52.8 AP trên COCO object detection ở tốc độ 322 FPS (TRT FP16, batch size 1, RTX 3090) theo đúng bảng benchmark trong README.
- ✓Các phép toán bbox và mask chạy trên GPU — README nói tốc độ huấn luyện nhanh hơn hoặc tương đương Detectron2, maskrcnn-benchmark và SimpleDet.
- ✓MM-Grounding-DINO, bản triển khai mã nguồn mở của Grounding DINO cho phát hiện open-vocabulary và phrase grounding, đi kèm trọng số pretrained Swin-B và Swin-L đã phát hành.
Cài đặt MMDetection
Bản thân README không có lệnh cài đặt — nó dẫn tới hướng dẫn 'Installation' chính thức trên mmdetection.readthedocs.io cho các bước pip/conda cụ thể, nên các lệnh chính xác không xuất hiện trong nguồn mà chúng tôi có. Điều được ghi rõ trực tiếp: nhánh main của MMDetection cần PyTorch 1.8 trở lên, và nó phụ thuộc vào hai thư viện chị em trong OpenMMLab là MMEngine (huấn luyện) và MMCV (các phép toán thị giác máy tính cốt lõi), cần cài cùng lúc. Ngoài phần này, trình tự cài đặt cụ thể không được ghi rõ trong README, và bạn sẽ cần theo hướng dẫn được liên kết.
Chạy một mô hình phát hiện đối tượng bằng file config
README của MMDetection không trình bày trực tiếp một file config hay lệnh huấn luyện cụ thể ngay trên trang — nó dẫn tới các hướng dẫn riêng 'Learn about Configs' và 'Inference with existing models', nên cú pháp lệnh chính xác không được ghi rõ trong nguồn hiện có. Về mặt khái niệm, quy trình làm việc đi theo hướng config: bạn chọn hoặc viết một file config lắp ráp các module backbone, neck và head, rồi trỏ script train/test vào file config đó thay vì sửa code Python huấn luyện trực tiếp. Có hướng dẫn riêng 'Train with customized datasets', và 'Finetuning Models' để tinh chỉnh từ trọng số pretrained.
Các use case và quy trình làm việc phổ biến
- •Huấn luyện một detector tùy chỉnh trên dataset định dạng COCO của riêng bạn cho một danh sách lớp cụ thể.
- •Đổi backbone (ví dụ Swin Transformer hoặc ConvNeXt) trên một detection head có sẵn để so sánh đánh đổi giữa độ chính xác và tốc độ mà không phải viết lại vòng lặp huấn luyện.
- •Chạy phân đoạn instance với Mask R-CNN hoặc các phương pháp mới hơn như Mask2Former trên cùng codebase dùng cho phát hiện đối tượng.
- •Phát hiện thời gian thực hoặc phát hiện đối tượng xoay (rotated object detection) với RTMDet, theo các benchmark được công bố trên COCO và DOTA.
- •Phát hiện open-vocabulary hoặc phrase-grounding qua MM-Grounding-DINO.
Điểm mạnh của bộ công cụ MMDetection
- ✓Bao phủ nhiều tác vụ: phát hiện đối tượng, phân đoạn instance, phân đoạn panoptic và phát hiện bán giám sát dùng chung một hệ thống config, nên bạn không phải đổi codebase khi đổi tác vụ.
- ✓Kho kiến trúc sâu: từ Fast R-CNN qua DETR, DINO cho tới RTMDet, phần lớn các paper phát hiện đối tượng nổi bật vài năm gần đây đã có sẵn bản triển khai ở đây.
- ✓README chứng minh tốc độ bằng số liệu cụ thể, không phải tính từ mơ hồ — bảng benchmark của RTMDet đưa ra AP và FPS cụ thể trên COCO và DOTA.
- ✓Vẫn đang phát triển: MM-Grounding-DINO với trọng số Swin-B/Swin-L đã phát hành cho thấy dự án vẫn ra detector mới, không chỉ bảo trì cái cũ.
Hạn chế và thách thức
- △Tùy biến qua file config có đường cong học tập thật sự: bạn đang ghép các đối tượng config Python tham chiếu tới các module đã đăng ký, khác hẳn kiểu train.py với cờ argparse thông thường.
- △README không ghi rõ lệnh cài đặt hay lệnh sử dụng ngay trên trang — mọi thứ đều dẫn ra tài liệu ngoài, nên bạn không thể chạy được chỉ từ README.
- △Dùng MMDetection nghĩa là cũng phải dùng MMEngine và MMCV như dependency bắt buộc, tức thêm bề mặt để debug khi có gì đó hỏng trong chuỗi phụ thuộc.
- △Nhánh main nhắm tới PyTorch 1.8 trở lên; README không nêu giới hạn trên, nên việc chốt phiên bản PyTorch/CUDA tương thích là việc bạn phải tự kiểm chứng chứ không đọc được thẳng từ trang.
MMDetection vs Detectron2, MMYOLO, and other alternatives
Câu hỏi thường gặp
Nhánh main của MMDetection yêu cầu PyTorch 1.8 trở lên, theo README của dự án. README không nêu rõ phiên bản Python cụ thể trong nội dung hiện có, nên hãy kiểm tra hướng dẫn cài đặt được liên kết để biết ma trận tương thích Python chính xác.
MMDetection hỗ trợ huấn luyện trên dataset tùy chỉnh — tài liệu có hẳn hướng dẫn 'Train with customized datasets' bên cạnh các hướng dẫn huấn luyện mô hình có sẵn trên dataset chuẩn như COCO.
README của MMDetection nói tốc độ huấn luyện của mình nhanh hơn hoặc tương đương Detectron2 trên các mô hình mà nó hỗ trợ. Cả hai đều là bộ công cụ phát hiện đối tượng trên PyTorch; MMDetection còn gắn thêm với hệ sinh thái OpenMMLab rộng hơn (MMEngine, MMCV) thay vì đứng độc lập.
MMDetection có RTMDet, một dòng detector thời gian thực; README báo cáo 52.8 AP trên COCO object detection ở 322 FPS (TRT FP16, batch size 1, RTX 3090), đáp ứng nhu cầu thời gian thực bên cạnh các mô hình kiểu YOLO khác trong hệ sinh thái OpenMMLab.
MMDetection được phát hành theo giấy phép Apache 2.0, cho phép sử dụng thương mại, chỉnh sửa và phân phối lại, kể cả trong sản phẩm độc quyền, miễn tuân theo các điều khoản ghi công và thông báo tiêu chuẩn của giấy phép.
MMDetection được xây dựng trên nền MMEngine và MMCV chứ không phải một lựa chọn tách rời — README nói rõ cả hai được toolbox phụ thuộc rất nhiều, nên đây là thành phần bắt buộc chứ không phải tùy chọn thêm vào khi cài MMDetection.
Vấn đề mà nó giải quyết
Nghiên cứu phát hiện đối tượng cho ra một kiến trúc mới sau mỗi vài tháng — một backbone mới, một detection head mới, một loss mới — và việc triển khai lại từng cái từ paper để so sánh với thứ bạn đang chạy là cả một dự án riêng. Vấn đề MMDetection giải quyết chính là khoảng cách so sánh đó: nó triển khai lại một danh sách dài các detector đã công bố (từ Fast R-CNN tới RTMDet tới DINO) trong một codebase dùng chung, để chuyển giữa các kiến trúc là đổi config chứ không phải viết lại từ đầu.
Ai nên thử — và ai nên bỏ qua
Nên thử MMDetection nếu bạn là researcher hoặc engineer cần nhiều hơn một kiến trúc phát hiện đối tượng trong vòng đời một dự án — so sánh Faster R-CNN với RTMDet với một biến thể DETR dựa trên transformer chỉ là đổi config ở đây, không phải viết lại từ đầu. Nó cũng hợp với các team đã ở trong hệ sinh thái OpenMMLab (MMCV, MMEngine) hoặc đang xây dựng trên MM-Grounding-DINO cho phát hiện open-vocabulary. Bỏ qua nó nếu bạn chỉ cần một mô hình YOLO chạy được trong một buổi chiều với ít dependency nhất có thể — hệ thống config và chuỗi MMEngine/MMCV là nhiều bộ máy hơn mức một dự án một kiến trúc cần.
Repo liên quan
Muốn nghe thêm một ý kiến về mmdetection?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về mmdetection.
