Áp dụng model Faster R-CNN tự huấn luyện vào hệ thống SlowFast

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.

  1. 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).

  1. 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.

  1. 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
  1. 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.

Thẻ: SlowFast Faster R-CNN Detectron2 video action recognition custom object detection

Đăng vào ngày 7 tháng 7 lúc 07:59