Giới thiệu
Khi xử lý các khung hình hoặcvideo có mật độ người cao, đối tượng thường có kích thước nhỏ, bị che khuất nhiều. Trong những trường hợp này, việc sử dụng model Faster R-CNN được huấn luyện riêng cho bộ dữ liệu mục tiêu giúp nâng cao độ chính xác trong phát hiện người. Các bước để huấn luyện Faster R-CNN với Detectron2 đã được trình bày trong tài liệu trước, còn bài viết này tập trung vào việc tích hợp model Faster R-CNN tự huấn luyện đã lưu vào hệ thống SlowFast để thực hiện dự đoán hành động.
- Cấu hình đường dẫn đến checkpoint của Faster R-CNN tùy chỉnh
Giả sử trọng số đã huấn luyện của Faster R-CNN (كت tests model_final.pth) nằm tại một đường dẫn cụ thể, ví dụ: /home/user/model/output/model_final.pth. Trong file cấu hình của SlowFast (SLOWFAST_32x2_R101_50_50s4.yaml), cần cập nhật hai mục chính liên quan đếnDetectron2:
DEMO:
ENABLE: True
LABEL_FILE_PATH: "/path/to/ava.json"
INPUT_VIDEO: "/path/to/input_video.mp4"
OUTPUT_FILE: "/path/to/output_video.mp4"
DETECTRON2_CFG: "COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"
DETECTRON2_WEIGHTS: "/home/user/model/output/model_final.pth"
Lưu ý: Không sửa đổi các tham số huấn luyện (TRAIN, SOLVER, v.v.) vì ở chế độ demo, hệ thống chỉ sử dụng để suy luận (ENABLE: False đối với TRAIN).
- Tùy chỉnh mô hình phát hiện vật thể (Detectron2Predictor)
Trong file /SlowFast-master/slowfast/visualization/predictor.py, lớp Detectron2Predictor cần được chỉnh sửa one-off để phù hợp với trường hợp sử dụng module phát hiện người tự huấn luyện. Cụ thể, cần ghi đè một số cấu hình mặc định của Detectron2:
class Detectron2Predictor:
def __init__(self, cfg, gpu_id=None):
self.cfg = get_cfg()
self.cfg.merge_from_file(
model_zoo.get_config_file(cfg.DEMO.DETECTRON2_CFG)
)
self.cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.65 # ngưỡng tin cậy
self.cfg.MODEL.WEIGHTS = cfg.DEMO.DETECTRON2_WEIGHTS
self.cfg.INPUT.FORMAT = cfg.DEMO.INPUT_FORMAT
# ... [thiết lập thiết bị GPU/CPU như bình thường]
# Tùy chỉnh bổ sung cho model tự huấn luyện
if cfg.DEMO.USE_CUSTOM_DETECTOR:
self.cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1
self.cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 256
self.cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.55
Hàm __call__ trong lớp này xử lý frame trung tâm của mỗi yêu cầu và lọc chỉ giữ các kết quả thuộc lớp ‘người’ (tức lớp 0):
def __call__(self, task):
mid_frame = task.frames[len(task.frames) // 2]
outputs = self.predictor(mid_frame)
if "instances" not in outputs:
task.add_bboxes(torch.empty((0, 4), device=mid_frame.device))
return task
instances = outputs["instances"]
keep = instances.pred_classes == 0
pred_boxes = instances.pred_boxes.tensor[keep]
task.add_bboxes(pred_boxes)
return task
Để giữ tính linh hoạt, nên giới thiệu biến cấu hình USE_CUSTOM_DETECTOR trong file .yaml và truyền vào hệ thống để kích hoạt block tùy chỉnh trên.
- Cập nhật file cấu hình để bật tùy chọn tùy chỉnh
Giả sử bạn muốn dễ dàng bật tắt chế độ sử dụng model phát hiện người riêng, hãy thêm vào Config Node:
DEMO:
ENABLE: True
USE_CUSTOM_DETECTOR: True # bật chế độ dùng Faster R-CNN riêng
DETECTRON2_CFG: "COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"
DETECTRON2_WEIGHTS: "/path/to/your/model_final.pth"
# ... các thông số khác
- Chạy inference
Sau khi hoàn tất các bước trên, chạy inference với lệnh:
python tools/run_net.py \
--cfg demo/AVA/SLOWFAST_32x2_R101_50_50s4.yaml
Kết quả đầu ra là một video đã được ghi nhãn hành động, nơi các bounding box người được trích xuất bằng Faster R-CNN tự huấn luyện, và từng hộp này được đưa vào SlowFast để dự đoán hành động.