
오늘은 딥러닝 객체탐지를 위한 SAM, FastSAM, RT-DETR 모델에 대한 설명과 함께 간단한 실습을 진행할 것이에요!
그러니 아래의 실습 준비를 위한 코드 작성 및 실행 그리고 객체 탐지에 사용할 사진과 동영상 파일이 필요해요!
물론 기초적인 것을 하는 것이라 1~2장이나 짧은 시간의 동영상 정도면 충분해요!
해당 게시글에서 사용한 사진 출처 : https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%96%87%EA%B2%8C-%EC%8D%AC-%EC%98%A4%EB%A0%8C%EC%A7%80-%EA%B3%BC%EC%9D%BC%EA%B3%BC-%EB%85%B9%EC%83%89-%EB%91%A5%EA%B7%BC-%EA%B3%BC%EC%9D%BC-M_xIaxQE3Ms
나머지 실습에 필요한 영상이나 사진은 본인이 원하는 것을 찾아서 파일 위치와 파일명 및 확장자 부분만 수정해서 사용할 것
# 내 구글 드라이브 속 데이터를 사용할 수 있도록 마운트
from google.colab import drive
drive.mount('/content/drive')
# 구글 드라이브 속 작업위치 변경
%cd /content/drive/MyDrive/내가 원하는 위치
# 실습활 모델들을 사용할 수 있도록 ultralytics 라이브러리 설치
!pip install -q ultralytics
Meta에서 개발한 SAM는 이미지와 동영상 모두에서 객체를 실시간으로 분할(Segmentation)할 수 있는 강력한 비전 모델이에요.
기존 SAM에서 발전된 형태로, 메모리 메커니즘을 통해 영상 속 객체를 시간에 따라 추적할 수 있어요!
# 모델 가져오기
from ultralytics import SAM
# 추론 : 영역을 분리할 bbox 설정
img_name = './images/과일들.jpg'
# YOLO는 (x1, y1, x2, y2)
result = model(img_name,bboxes=[(209,171,357,336)])
# 결과 시각화
import matplotlib.pyplot as plt
import cv2
plt.figure(figsize=(5, 5))
plt.imshow(cv2.cvtColor(result[0].plot(), cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()
# 추론 : 영역을 분리할 여러 위치[[x1, y1], [x2, y2]]를 설정
# labels = 표시할 인덱스
result = model(img_name, points=[(390, 86), (485, 196)], labels=[1, 1])
plt.figure(figsize=(5, 5))
plt.imshow(cv2.cvtColor(result[0].plot(), cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()
# 동영상 분할
video_name = './data/test_movie2.mp4'
model(video_name)
# 예측 결과 영상이 runs/segment/predictxx/test_movie2.avi
# 동영상 분할
video_name = './data/test_movie2.mp4'
model(video_name)
# 예측 결과 영상이 runs/segment/predictxx/test_movie2.avi
# 비디오 분할 및 객체 추적
from ultralytics.models.sam import SAM2VideoPredictor
# conf=0.25 : 해당 신뢰도 이상만 출력
# task : 용도
setting = dict(conf=0.25, task='segment', mode='predict', imgsz=1024, model='sam2_b.pt')
predictor= SAM2VideoPredictor(overrides=setting)
result = predictor(video_name, points=[300, 200], labels=[1])
# 시각화
from moviepy.editor import VideoFileClip
VideoFileClip('./runs/segment/predict/test_movie2.avi').ipython_display(width=500)
model = SAM('./model/mobile_sam.pt')
# 동영상으로 멀티포인트 영역을 검출
result = model.predict(source=video_name, points=[[300, 300], [720, 50]], labels=[1,1])
FastSAM은 SAM의 대체 모델로, YOLOv8-seg 기반으로 훨씬 빠르게 작동해요!
가벼운 모델로 저사양 환경에서도 실시간 객체 분할 가능해요!
from ultralytics import FastSAM
model = FastSAM('./model/FastSAM-s.pt')
# 전체 객체 추론
everything_results = model('./images/fruit.png', device='cuda', retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# 텍스트 프롬프트 기반
result = model('./images/fruit.png', texts=['ananas'])
RT-DETR(Real-Time DEtection TRansformer)는 Baidu에서 만든 실시간 객체 탐지기에요!.
기존 DETR은 느렸지만, 이건 하이브리드 인코더 + NMS-Free 구조로 빠르고 정확해요!
from ultralytics import RTDETR
model = RTDETR('./model/rtdetr-l.pt')
# 예측
result = model('./images/fruit.png')
results = model.train(data='coco8.yaml', epochs=100, imgsz=640)
model = RTDETR('./runs/detect/train/weights/best.pt')
result = model('./images/109_bus.jpg')
| 모델 | 분류 | 특징 | 장점 |
|---|---|---|---|
| SAM2 | Segmentation | 실시간 + 메모리 기반 추적 | 고정밀 객체 추적 |
| FastSAM | Segmentation | YOLO 기반 경량화 모델 | 실시간 속도, 텍스트 지원 |
| RT-DETR | Detection | Transformer 기반 NMS-Free 감지 | 정확도 + 실시간성 |
작성일 : 2025.07.03
작성자 : 발라