본문 바로가기
C.W.K.
Stream
Lesson 06 of 06 · published

실전 — 객체 탐지 파이프라인

~8 min · keras-cv

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

트랙의 요소를 하나로 조립해

이 마무리 실습은 백본, 탐지 출력 헤드, 이미지 증강, from_preset 관용구를 실제로 실행되는 파이프라인에 묶어. 이후 객체 탐지 문제에서도 같은 구조를 재사용하고 데이터셋과 클래스 목록만 바꾸면 돼.

추론과 미세 조정의 두 부분

첫 번째 코드 블록은 COCO로 사전 학습된 탐지기를 불러오고, 이미지를 모델이 기대하는 크기로 바꿔 배치한 뒤 predict()를 호출해 상자·클래스·신뢰도를 읽는 추론 흐름이야. 이것만으로 COCO의 80개 클래스에 쓸 만한 탐지기를 얻어.

두 번째 코드 블록은 사용자 클래스 미세 조정을 다뤄. 사전 학습된 백본이 있는 탐지기를 불러오고 백본을 고정한 뒤 클래스 수에 맞는 출력 헤드를 붙여 주석 자료로 학습해. 백본이 시각 특징을 이미 알고 있으므로 처음부터 학습할 때보다 훨씬 적은 자료와 계산으로, 레이블이 붙은 이미지 수백 장만으로도 쓸 만한 시제품을 만들 수 있어.

운영 탐지에서 모델 코드는 작은 부분이야. 깨끗한 주석, 올바른 상자 형식, 누수 없는 학습·검증 분할, 필요한 정밀도와 재현율에 맞춘 신뢰도 문턱이 YOLO 크기 선택보다 더 중요해.

Code

추론: YOLOV8로 이미지 한 장에서 객체 찾기·python
import keras_cv

# Load pretrained YOLOV8
model = keras_cv.models.YOLOV8Detector.from_preset(
    "yolo_v8_m_coco",
)

# Prepare image
image = keras.utils.load_img("photo.jpg", target_size=(640, 640))
image_array = keras.utils.img_to_array(image)
image_batch = keras.ops.expand_dims(image_array, axis=0)

# Run detection
predictions = model.predict(image_batch)
# Process bounding boxes, classes, and confidence scores
미세 조정: 사용자 클래스 수에 맞춘 탐지 출력 헤드·python
# Start from a pretrained backbone, new head for YOUR classes
detector = keras_cv.models.YOLOV8Detector.from_preset(
    "yolo_v8_s_backbone_coco",   # backbone weights only
    num_classes=len(my_class_names),
    bounding_box_format="xywh",  # MUST match your dataset
)

detector.compile(
    optimizer=keras.optimizers.Adam(1e-4),
    box_loss="ciou",
    classification_loss="binary_crossentropy",
)
detector.fit(train_ds, validation_data=val_ds, epochs=20)

# Persist and reload — same model, no extra glue
detector.save("my_detector.keras")
reloaded = keras.models.load_model("my_detector.keras")

External links

Exercise

작은 객체 탐지 데이터셋을 고르거나 Label Studio 같은 도구로 이미지 약 50장에 직접 주석을 달아. bounding_box_format을 정확히 지정하고 처음 몇 에포크는 백본을 고정한 뒤 풀어 YOLOv8s를 미세 조정해. 작은 데이터셋의 현실적인 목표인 mAP 0.4 이상을 노려. .save("...keras")로 저장한 뒤 새 프로세스에서 다시 불러와 추론이 되는지 확인하고, mAP를 가장 크게 올린 단일 변경을 기록해.
Hint
mAP가 0에 가깝다면 학습률보다 상자 형식과 레이블→클래스 색인 대응을 먼저 의심해. 학습 배치 몇 개의 상자를 그려 입력 주석부터 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.