TL;DR
SAM 3를 사용한 대규모 자동 라벨링에서 실제로 문제를 일으키는 요소들은 모델 자체보다는 전처리, 프롬프트 문구, 임계값 운영, 그리고 형식적 수출 오류입니다. 비전 임베딩을 한 번만 계산해 재사용하면 멀티클래스 작업에서 백본 호출을 크게 줄여 처리 비용과 시간을 절감할 수 있습니다. 해상도는 1008px 네이티브 동작으로 인해 업스케일과 다운스케일 각각의 실패 모드가 있으므로 작은 객체는 1008px 크롭으로 처리하고 EXIF 회전 정보를 먼저 적용해야 합니다. 프롬프트는 짧고 단수 명사 위주로 만들고 빈 이미지에서 오탐이 있는지 dev 셋으로 검증하며, confidence 점수는 저장해 놓고 오프라인으로 스윕하면 반복 추론을 피할 수 있습니다.
합의점 vs 논쟁점
합의점
- 대규모 자동 라벨링에서는 백본 연산을 중복하지 않는 구조가 효율성과 비용 측면에서 핵심입니다. 비전 임베딩을 재사용하면 모델 파라미터 수와 입력 크기에 따라 상당한 계산량 절감이 가능하므로 멀티클래스 파이프라인 설계 시 기본 패턴으로 삼아야 합니다.
- 이미지를 단순히 전체 리사이즈하는 방식은 작은 객체에 치명적이며 EXIF 회전 미처리는 마스크와 화면 간 불일치를 초래하므로 전처리 단계에서 적절한 해상도 전략과 EXIF 적용을 반드시 포함해야 합니다.
실용적 조언
- 프롬프트는 짧고 구체적인 단수 명사구를 사용하고 한 번에 하나의 개념만 요청해야 합니다. 프롬프트가 빈 이미지에서 오탐을 내지 않는지 검증용 샘플로 테스트한 뒤 시작하며, 오탐이 많다면 임계값을 건드리기 전에 수식어를 추가해 프롬프트를 좁히는 방식으로 조정합니다. 또한 서로 다른 형용사가 실제로 다른 시각적 세트를 반환할 수 있으므로 실전에서는 몇 가지 대안 프롬프트를 비교 검증해야 합니다.
- 임계값 스윕은 점수( confidence scores )를 저장한 뒤 오프라인에서 진행하면 반복 추론 비용을 피할 수 있습니다. 검증용 소규모 dev 셋을 설정해 낮은 임계값에서 false-positive가 급증하는 지점을 찾아 약간 위에서 멈추고, 면적 비율(med area%)이 급락하면 작은 점들만 추가되는 현상으로 판단하여 최소 면적 필터를 사용하는 방식으로 보정합니다. 마스크 임계값(mask threshold)은 픽셀 단위로 결과를 바꾸므로 추론 재실행 없이 스윕할 수 없습니다.
- 라벨을 자동으로 파일로 내보낼 때는 포맷 세부에 주의해야 합니다. pycocotools.mask.encode는 Fortran 연속 배열을 요구하고 반환된 counts 필드는 bytes이므로 JSON 저장 전 ASCII로 디코딩해야 합니다. 또한 YOLO 형식처럼 검출이 없는 이미지에는 빈 .txt 파일을 만들어 negative 샘플로 확실히 표시해야 데이터셋이 누락으로 해석되는 것을 방지합니다.
- 자동 라벨링 결과는 집계 지표만으로 신뢰하기 어렵기 때문에 실제 오버레이를 눈으로 확인해야 합니다. confidence가 낮은 것부터 정렬된 컨택트 시트를 만들어 10초 내외로 훑어보면 프롬프트가 특정 배경을 계속 분할하는 식의 대규모 실패를 빠르게 찾아낼 수 있습니다. 시각적 점검을 워크플로우에 정기적으로 포함하면 조용한 실패를 조기에 차단할 수 있습니다.
섹션별 상세
vision_embeds = model.get_vision_features(pixel_values=inputs.pixel_values)
for prompt in prompts:
text_inputs = processor(text=prompt, return_tensors="pt").to(model.device)
outputs = model(vision_embeds=vision_embeds, **text_inputs)
# decode / postprocess per prompt여러 프롬프트를 한 이미지에 적용할 때 백본을 한 번만 실행하도록 구성한 예시로, pixel_values로부터 얻은 vision_embeds를 반복 사용하여 텍스트 조건화와 마스크 디코드만 반복합니다. 대규모 멀티클래스 라벨링에서 백본 호출 횟수를 줄여 처리 속도와 비용을 거의 N배 수준으로 개선할 수 있는 구현 패턴입니다. 이 접근법은 반대로 한 프롬프트를 여러 이미지에 적용할 때 get_text_features를 재사용하는 형태로도 응용됩니다.
용어 해설
- 프롬프트 가능 개념 분할(Promptable Concept Segmentation)
- — 짧은 명사구를 입력으로 받아 이미지 내 해당 개념의 모든 인스턴스를 분할하는 방식으로, 클릭이나 고정 클래스 목록 없이 텍스트 프롬프트만으로 대규모 자동 라벨링이 가능하게 만듭니다. SAM 3가 이 방식을 사용하여 이미지 전체에서 'forklift' 같은 개념을 찾아 마스크를 반환합니다. 이 접근법 때문에 별도 위치 지정 신호 없이 unattended labeling 워크플로우를 구성할 수 있습니다.
- 비전 임베딩 재사용(Vision embedding reuse)
- — 이미지 픽셀을 백본에 한번만 통과시켜 얻은 비전 특성(vision embeddings)을 여러 프롬프트에서 재사용하는 최적화 기법입니다. 입력 이미지를 여러 클래스 프롬프트와 조합할 때 백본 연산을 반복하지 않아 GPU 비용과 시간을 크게 줄입니다. SAM 3에서는 vision_embeds 인자를 넘겨 백본 실행을 회피하고 텍스트 조건화와 마스크 디코드만 반복할 수 있습니다.
- 1008px 기본 해상도(1008px native resolution)
- — SAM 3의 기본 처리 해상도는 1008픽셀로 모델 입력이 이 해상도에 최적화되어 있습니다. 작은 이미지를 이를 위해 업스케일하면 경계가 뭉개지고 큰 이미지를 다운스케일하면 작은 객체가 손실되는 실패 모드가 발생합니다. 작은 대상이 중요할 때는 전체 이미지 리사이즈 대신 겹치는 1008px 크롭을 만들어 분할한 뒤 오프셋으로 병합하는 방법을 권장합니다.
- ImageOps.exif_transpose
- — 스마트폰 등에서 저장된 EXIF 회전 정보를 적용해 이미지 픽셀 배열을 실제 화면과 일치시키는 전처리 함수로, 회전 정보를 반영하지 않으면 마스크가 저장된 방향과 다르게 출력됩니다. SAM 3 파이프라인에서 가장 처음에 호출하면 orientation 관련 마스크 불일치를 방지할 수 있습니다. EXIF를 적용하지 않은 상태에서는 보이는 화면과 다른 정렬의 라벨이 생성됩니다.
- pycocotools RLE
- — COCO 포맷의 마스크를 RLE로 인코딩할 때 pycocotools가 요구하는 입력 특성과 출력 형식에 관한 구현적 요구사항입니다. 인코딩 전 마스크를 np.asfortranarray()로 변환하지 않으면 내부적으로 전치된 배열이 생성되어 잘못된 RLE가 만들어지고, counts 필드는 바이트로 반환되므로 JSON 직렬화 위해 ASCII로 디코딩해야 합니다. 이들 세부를 놓치면 silent error가 발생하거나 downstream 툴이 RLE를 읽지 못합니다.
코드 예제
from transformers import Sam3Model, Sam3Processor
model = Sam3Model.from_pretrained("facebook/sam3").to("cuda").eval()
processor = Sam3Processor.from_pretrained("facebook/sam3")
inputs = processor(images=image, text="forklift", return_tensors="pt").to(model.device)
with torch.inference_mode():
outputs = model(**inputs)
results = processor.post_process_instance_segmentation(
outputs, threshold=0.5, mask_threshold=0.5,
target_sizes=inputs["original_sizes"].tolist(),
)[0]
# results["masks"] / ["boxes"] / ["scores"]간단한 단일 이미지·단일 프롬프트 실행 예시 코드로, SAM 3를 불러오고 processor로 입력을 만들며 모델 추론 결과를 post_process_instance_segmentation으로 후처리하는 전체 흐름을 보여줍니다. 이 스니펫은 프롬프트 하나에 대해 이미지 전체를 한 번만 처리하는 가장 기본적인 사용 형태를 전달합니다. 실무에서는 이 결과에서 마스크, 바운딩박스, 점수 정보를 추출하여 라벨 파일로 변환하거나 임계값 스윕에 사용할 수 있습니다.
언급된 도구
COCO RLE 마스크 인코딩 및 디코딩
객체 검출 라벨 포맷 관행(검출 없음은 빈 파일로 표시)
이미지의 EXIF 회전 정보를 픽셀에 적용하여 올바른 방향으로 정렬
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.