반응형
wb_sunny 최근 일주일 공유
초급 프로젝트를 시작하였습니다. 알약을 탐지하고 분류하는 프로젝트이며, 다들 VS Code로 프로젝트를 해본 경험이 없다 보니까 어떻게 해야 할지 정말 많은 시간을 고민하고 고민하였습니다. 제가 생각한 이번 목표는 빠르게 모델을 가져다 쓰고 하이퍼파라미터를 수정하며 실험하기, 그리고 VS Code와 Python에 팀원들이 친해지기로 방향성을 잡고 큰 그림을 그렸습니다. 그렇다 보니 생각을 많이 하고 준비를 하느라 블로그 작성할 시간이 없어서 이제야 쓰게 되었습니다. 저희 팀의 상황을 공유하며 블로그를 마무리하고자 합니다.
medication 프로젝트 소개
YOLO로 이미지 속 알약을 탐지하고 종류를 분류하는 프로젝트입니다.

팀명은 파이리 · Part2 1팀이라 "파이리"로 지었습니다
| 입력 | 여러 알약이 함께 놓인 이미지 |
| 출력 | 알약별 바운딩 박스 + 클래스 + 신뢰도 |
| 데이터 | Kaggle 대회 ai14-level-project 제공 데이터 (AI Hub 「경구약제 이미지 데이터」 조합경구약제 기반) |
| 평가 지표 | Kaggle 리더보드 mAP[0.75:0.95], 최종 순위는 Private Score 기준 |
| 팀 · 기간 | 4명 / 약 2주 |
데이터 현황
| 항목 | 값 |
|---|---|
| train 이미지 | 232장 |
| 박스(JSON) | 763개 |
| 클래스 | 56개 |
| test 이미지 | 842장 |
| 이미지당 알약 수 | 2알 7장 / 3알 151장 / 4알 74장 |
| 이미지 크기 | 976 × 1280 |
어노테이션은 (이미지 × 알약)당 JSON 1개인 COCO 형식이고, bbox는 (x, y, w, h) 픽셀 좌표입니다. 이걸 YOLO 형식으로 변환하고, 같은 조합을 여러 각도로 찍은 사진이 train과 val에 섞이지 않도록 조합 단위로 8:2 분할했습니다.
실행 순서
bash
uv run --env-file .env python src/download_data.py # 1. Kaggle 데이터 다운로드
uv run python src/make_yolo.py # 2. 라벨 정리 + COCO JSON → YOLO 변환 + train/val 분할
uv run python src/check_yolo.py # 변환 결과 검증
uv run python src/train.py # 3. 학습 + val 평가 + 실험 기록
uv run python src/visualize.py # 4. val 예측 시각화 · 실패 사례 · 클래스별 점수
uv run python src/predict.py # 5. test 예측 → Kaggle 제출 파일
groups 팀 협업 방식
저희 팀은 하나의 기능을 다 같이 만듭니다. 제가 가이드라인으로 함수 이름과 함수 동작을 주석으로 공유하며 약 20~30분 정도 각자 시간을 주어 각자 코딩을 하고, 하나씩 리뷰를 하였습니다.
- 장점: 개성이 높은 각자의 코드를 볼 수 있었고 서로 배울 수 있었습니다
- 단점: 속도가 느리다고 생각하였습니다
그래도 저희 팀원들이 "나 코드 열심히 짜봤어"라는 경험을 할 수 있음에 저는 만족했습니다. 기본적으로 시각화하는 코드나 파일 정리하는 코드는 클로드 코드를 통해서 작성하였고, 나머지는 직접 코딩하면서 작성을 하였습니다.
하이퍼파라미터 스터디
저희 팀은 yolo26n 모델을 사용하였으며, 사용되는 하이퍼파라미터 내용에 대한 지식이 부족한 것 같아서 자료를 클로드 코드로 제작하여 팀원들에게 설명하였습니다. 그리고 서로 궁금한 점을 공유하며 다 같이 2시간 정도 공부를 하였습니다.

실험 전 하이퍼파라미터 스터디 자료
science 실험 기록
현재는 더 높은 성능을 올리기 위해서 각자 하이퍼파라미터를 수정하며 작업을 하고 있습니다. 제가 돌린 내용을 간단히 공유드리겠습니다.
| 실험 | 설정 | mAP75-95 | Kaggle |
|---|---|---|---|
| 1 | 하이퍼파라미터 설정 없음(기본값) | 0.7225 | 0.21944 |
| 2 | epochs 100 / imgsz 960 / batch 8 / lr 0.001 | 0.9321 | 0.39139 |
| 3 | 2번 + 전처리(라벨 오류 이미지 제외) | 0.9534 | 0.39071 |
1. 하이퍼파라미터를 설정하지 않음
mAP75-95: 0.7225 / kaggle_score: 0.21944
2. epochs 100 / imgsz 960 / batch 8 / lr 0.001
mAP75-95: 0.9321 / kaggle_score: 0.39139
점수가 크게 올랐지만, 실패 사례를 확인해보니 라벨 오류가 있는 이미지가 11장 있어서 전처리가 필요하다고 판단했습니다.

2번 실험 실패 사례 (박스 위 = 모델 예측, 아래 = 정답 라벨)

2번 실험 학습 곡선 (box loss · cls loss · val mAP)
3. 2번 설정 + 전처리 적용
전처리 내용: 라벨 없는 이미지, 중복 라벨 이미지, 이미지 밖 bbox를 가진 이미지를 제외했습니다.
mAP75-95: 0.9534 / kaggle_score: 0.39071
val 점수는 올랐지만 Kaggle 점수는 오히려 미세하게 떨어져서, 차이가 미묘하여 전처리 효과는 없어 보인다고 판단했습니다.
다만 특이한 점은 2번 실험보다 loss 값이 더 왔다 갔다 거린다는 것이었습니다. 특히 val box loss가 계속 출렁이는 모습이 신경 쓰였습니다. 전처리로 이미지 수가 줄어들면서 val이 39장까지 작아졌다 보니 흔들림이 더 커진 것인지, 학습률 자체가 후반까지 충분히 안 내려간 것인지 판단이 서지 않았습니다. 이 부분을 해결하려면
momentum이나 lrf(최종 학습률 비율)를 건드려야 하나 고민을 하였습니다.
3번 실험 실패 사례

3번 실험 학습 곡선
내일 실험은 전처리를 유지한 채 loss가 흔들리는 부분부터 잡아보려고 합니다. momentum이나 lrf를 조정해보고, 그 다음으로 cls 비중을 올리는 실험을 해볼까 합니다.
nights_stay 오늘 하루 회고
진심으로 이제야 실험을 한다는 생각이 들었고, 수정하고 결과를 바탕으로 분석하고 생각하여 다음으로 나아가는 방향성이 제가 바라던 방향성입니다. 거기다가 재미를 더하는 요소들인 것 같아서 너무나 만족하였습니다. 팀원들의 표정도 이전보다 밝아진 것을 확인하였으며, 내일도 잘될 것이라고 생각합니다.
무엇보다 팀원들이 이제 실험 용어를 써가며 "이렇게 결과가 나왔는데 이게 문제인 것 같아, 다음에는 이렇게 실험할 예정이다"라고 서로 공유하는 문화가 잘 형성된 것 같아서 너무나 만족했습니다!
반응형
'AI' 카테고리의 다른 글
| [부트캠프 43일차] 생성 모델 정리 (0) | 2026.09.04 |
|---|---|
| [부트캠프 40일차] 위클리 페이퍼, Segmentation 정리 (0) | 2026.09.01 |
| [부트캠프 38일차] 객체 인식 정리 (0) | 2026.08.28 |
| [부트캠프 33일차] 사전학습 모델과, XAI (0) | 2026.08.21 |
| [부트캠프 31일차] 전이학습 정리와 AI 역량 어필 전략 세미나 (0) | 2026.08.19 |
