MMDetection - Image Segmentation

dumbbelldore·2025년 1월 16일
0

zero-base 33기

목록 보기
80/97

1. Image Segmentation

  • 디지털 이미지를 픽셀 단위로 분석하여 이미지를 구성하는 개별 객체나 영역을 구분하는 기술

  • 컴퓨터 비전 분야에서 널리 사용되며, 객체 탐지나 분류보다 더 세밀하게 이미지 데이터를 처리함

  • Image Segmentation vs. Object Detection

    구분Image SegmentationObject Detection
    출력픽셀 단위로 분할된 마스크바운딩 박스와 클래스 레이블
    정밀도높은 정밀도로 객체를 분리상대적으로 정밀도가 낮음
    사용 사례의료 영상, 자율주행 등사람 탐지, 물체 식별, 보안 시스템

2. Mask R-CNN

  • Mask R-CNN은 Image Segmentation을 수행하는 대표 모델
  • 바운딩 박스와 클래스 레이블뿐 아니라, 픽셀 단위의 마스크까지 사용하여 예측하므로 정확도가 높음
  • 주요 구성요소
    • Backbone: 특징 추출(ResNet, ResNeXt 등 사용)
    • Region Proposal Network(RPN): 후보 영역 생성
    • ROI Align: 후보 영역에서 픽셀 정렬
    • Mask Head: 픽셀 단위 마스크 생성

3. 예제 코드

3-1. Mask R-CNN 다운로드

  • MMDetection이 설치된 경로로 이동하여 bash에 다음 명령어 입력
mim download mmdet --config mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco --dest ./checkpoints

3-2. Mask R-CNN 로드

  • 단일 이미지를 처리할 때는 모델 초기화와 추론을 동시에 수행할 수 있는 DefInference()를 사용
  • 여러 이미지를 처리하거나 모델의 반복 사용이 필요한 경우, init_detector()로 모델을 초기화하고 inference_detector()로 추론을 하는 방식을 사용
import mmcv
import mmengine
from mmdet.apis import init_detector, inference_detector
from mmdet.utils import register_all_modules
import os

MMDET_PATH = "/workspace/mmdetection"

config_file = os.path.join(MMDET_PATH,
                           "checkpoints/mask-rcnn_r50-caffe_fpn_ms-poly-3x_coco.py")
checkpoint_file = os.path.join(MMDET_PATH,
                               "checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth")
device = "cuda:0"

register_all_modules() # MMDetection에서 제공하는 모든 모듈을 한 번에 등록함 (필수)

model = init_detector(config_file, checkpoint_file, device=device) # 모델 초기화

3-3. Segmentation 수행

image = mmcv.imread(os.path.join(MMDET_PATH, "demo/demo.jpg"),
					channel_order="rgb")
res = inference_detector(model, image)

3-4. 시각화

from mmdet.registry import VISUALIZERS

visualizer = VISUALIZERS.build(model.cfg.visualizer) # Visulaizer 빌드
visualizer.dataset_meta = model.dataset_meta # 모델의 메타데이터 입력

# 모델의 추론 결과 입력
visualizer.add_datasample(
    "result",
    image,
    data_sample = res,
    draw_gt = None,
    wait_time = 0,
)

# 시각화
visualizer.show()

*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글