Supervision: Roboflow가 공개한, 모델에 구애받지 않는 재사용 가능한 컴퓨터 비전 도구 라이브러리

Supervision 프로젝트 소개

컴퓨터 비전(Computer Vision) 모델을 개발하다 보면, 탐지(Detection) 결과를 시각화하고, 여러 모델의 출력 형식을 통일하고, 데이터셋을 관리하는 반복적인 작업들이 쌓이게 됩니다. 모델마다 다른 출력 형식을 처리하는 코드를 매번 새로 작성하는 것은 비효율적이며, 특히 여러 프레임워크를 병행해 사용할 때는 더욱 그렇습니다. Roboflow가 공개한 오픈소스 라이브러리 Supervision은 바로 이 문제를 해결하기 위해 설계되었습니다. Supervision은 컴퓨터 비전 작업에서 재사용 가능한 도구들을 제공하며, 모델에 종속되지 않는(model-agnostic) 방식으로 다양한 탐지 및 세그멘테이션 프레임워크와 통합됩니다.

Supervision은 2023년부터 꾸준히 발전해 온 프로젝트로, 현재 GitHub에서 37,900개 이상의 스타를 받을 만큼 활발히 사용되고 있습니다. MIT 라이선스로 공개되어 있어 개인 연구부터 상업적 프로젝트까지 자유롭게 활용할 수 있습니다. Ultralytics, Transformers, MMDetection, Roboflow Inference 등 주요 컴퓨터 비전 프레임워크와의 기본 통합을 제공하여, 단일한 인터페이스로 다양한 모델의 출력을 일관되게 다룰 수 있습니다. 특히 Python 3.9 이상을 지원하며 pip install supervision 한 줄로 설치할 수 있어 접근성이 높습니다.

Supervision의 세 가지 핵심 기능

Supervision의 기능은 크게 탐지 데이터 표준화, 어노테이션(Annotation) 시각화, 데이터셋 관리의 세 축으로 구성됩니다.

Supervision의 탐지 결과 표준화 (sv.Detections)

컴퓨터 비전 모델마다 출력 형식이 다르다는 점은 개발자들이 자주 겪는 불편함 중 하나입니다. Supervision은 sv.Detections 클래스를 통해 다양한 모델의 탐지 결과를 단일한 표준 형식으로 변환합니다. 현재 11가지 이상의 소스에서 탐지 결과를 로드할 수 있으며, Ultralytics의 YOLO 계열 모델부터 Hugging Face Transformers, MMDetection에 이르기까지 폭넓게 지원합니다. 변환된 sv.Detections 객체는 바운딩 박스 좌표, 클래스 ID, 신뢰도 점수, 마스크 정보 등을 일관된 방식으로 담고 있어, 이후 필터링, 추적, 시각화 등 다양한 후처리 작업에 통일된 API로 연결됩니다.

import supervision as sv
from PIL import Image
from rfdetr import RFDETRSmall

# 모델 로드 및 추론
image = Image.open("image.jpg")
model = RFDETRSmall()
detections = model.predict(image, threshold=0.5)

# sv.Detections로 표준화된 결과 사용
print(len(detections))  # 탐지된 객체 수: 예) 5

Supervision의 커스터마이징 가능한 어노테이터 (Annotators)

시각화는 컴퓨터 비전 개발에서 디버깅과 결과 확인에 필수적입니다. Supervision은 20가지 이상의 고도로 커스터마이징 가능한 어노테이터를 제공합니다. 바운딩 박스(Bounding Box), 마스크(Mask), 원(Circle), 점(Dot), 삼각형(Triangle) 등 다양한 형태의 시각화 도구가 포함되어 있으며, 색상, 두께, 투명도 등을 세밀하게 조절할 수 있습니다. 또한 여러 어노테이터를 조합하여 복잡한 시각화 파이프라인을 구성하는 것도 가능합니다. 이미지뿐 아니라 비디오에도 적용되어, 실시간 탐지 결과를 프레임별로 시각화하거나 객체 추적 궤적을 그리는 데 활용할 수 있습니다.

import supervision as sv

# 바운딩 박스와 라벨 어노테이터 구성
bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=2, color=sv.Color.RED)
label_annotator = sv.LabelAnnotator(text_scale=0.5)

import cv2
import numpy as np
frame = cv2.imread("image.jpg")

# 어노테이션 적용
annotated_frame = bounding_box_annotator.annotate(scene=frame, detections=detections)
annotated_frame = label_annotator.annotate(scene=annotated_frame, detections=detections)

Supervision의 데이터셋 관리 유틸리티

데이터셋 관리는 머신러닝 파이프라인에서 적지 않은 비중을 차지합니다. Supervision은 YOLO, Pascal VOC, COCO 형식의 데이터셋을 로드하고, 분할하고, 병합하고, 변환하는 기능을 제공합니다. 데이터셋을 훈련/검증/테스트 세트로 쉽게 나누거나, 여러 소스의 데이터셋을 하나로 합치는 작업이 단 몇 줄의 코드로 가능합니다. 특히 온디맨드 이미지 로딩(On-demand Image Loading)을 지원하여 대규모 데이터셋을 메모리 효율적으로 다룰 수 있습니다.

Supervision의 고급 활용: 추적과 존 분석

단순 탐지를 넘어, Supervision은 바이트트랙(ByteTrack) 등의 알고리즘을 통한 객체 추적(Object Tracking), LineZone을 이용한 선 통과 카운팅, PolygonZone을 이용한 영역 내 객체 수 집계 등 고급 분석 기능도 포함합니다. 이를 활용하면 교차로 차량 통행량 측정, 매장 내 고객 동선 분석, 특정 구역에서의 체류 시간 분석 같은 실제 응용 시나리오를 구현할 수 있습니다. 공식 문서 사이트(supervision.roboflow.com)에서는 차량 속도 추정, 드웰 타임(Dwell Time) 분석 등의 엔드투엔드 튜토리얼 예제를 제공합니다.

Supervision 설치 및 시작하기

# pip으로 설치
pip install supervision

# 최신 개발 버전 설치
pip install git+https://github.com/roboflow/supervision.git

설치 후에는 import supervision as sv로 라이브러리를 불러올 수 있습니다. 기본적인 사용 흐름은 모델로 추론을 실행하고, 결과를 sv.Detections로 변환하고, 원하는 어노테이터로 시각화하는 순서를 따릅니다. 공식 문서 사이트에는 다양한 모델 통합 예제, 어노테이터 설정 가이드, Jupyter 노트북 예제 등이 잘 정리되어 있어 빠르게 시작하는 데 도움이 됩니다.

라이선스

Supervision 프로젝트는 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용, 수정, 배포할 수 있습니다.

:books: Supervision 문서 사이트

:github: Supervision 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

2개의 좋아요