-
Notifications
You must be signed in to change notification settings - Fork 0
Drone Yield Prediction Closeup Test 2026 05 19
이전: Drone-Yield-Prediction-Pipeline-2026-05 (전체 파이프라인 + 121장 batch) 본 페이지: GSD 정상 4장만 분리해서 면적-무게 모델 검증
121장 batch에서 GSD 측정 일관성 부족이 발견되어 (보드 mask가 송이에 가려짐), GSD 정상으로 판정된 test_data 4장만 분리 재실험. 면적→무게 모델 비교 결과 w = 11.74 × A^0.78 수식이 4장 합계 오차 ±5% 이내로 SAM3 + 회귀 조합이 최고. 다만 fit에 쓴 4 점으로 evaluate한 결과라 진정한 회귀 아님 — 30-50+ 송이 GT 추가 수집 필요.
| 사진 | Setup | 송이 | GSD (mm/px) | GT (g, berry-only) |
|---|---|---|---|---|
| IMG_8106 | 책상 ABC 합 (한 덩어리) | 1 | 0.182 | A+B+C = 931 |
| IMG_8157 | 나무 AB (세로 매달림) | 2 | 0.338 | A=327, B=204 |
| IMG_8159 | 나무 AB 다른 각도 | 2 | 0.342 | A=327, B=204 |
| IMG_8170 | 나무 C 단독 매달림 | 1 | 0.423 | C=400 |
공통: 흰 보드 (16×48cm) reference가 송이와 별개 영역에 있어 mask 정상 검출.
[1] Reference 검출
SAM3 text "white paper card" → mask → minAreaRect → 짧은 변 px
[2] GSD
GSD (mm/px) = 16cm / short_side_px
[3] 송이 검출 (variant별)
- SAM3 text "grape bunch" 직접
- YOLO (yolov8m / yolo11m) bbox → SAM3 box prompt → mask
[4] 면적
area (cm²) = mask_pixel_count × GSD² / 100
[5] 무게 환산 (두 모델 비교)
Model A (volume): w = 0.252 × A^1.5 (구 부피 가정 V = 4/3·π·R³)
Model B (regression): w = 11.74 × A^0.78 (test_data 4점 fit)
GT 송이 수: IMG_8106 = 1, IMG_8157 = 2, IMG_8159 = 2, IMG_8170 = 1, 합 6
| 사진 | GT N | SAM3 N | yolov8m N | yolo11m N |
|---|---|---|---|---|
| IMG_8106 ABC합 | 1 | 1 ✓ | 1 ✓ | 1 ✓ |
| IMG_8157 AB | 2 | 2 ✓ | 3 (+1 오탐) | 4 (+2 오탐) |
| IMG_8159 AB | 2 | 2 ✓ | 3 (+1 오탐) | 4 (+2 오탐) |
| IMG_8170 C | 1 | 1 ✓ | 1 ✓ | 2 (+1 오탐) |
| 합 | 6 | 6 ✓ | 8 (+2) | 11 (+5) |
YOLO 오탐 패턴: 사람 신발/그림자/잎 어두운 영역을 송이로 잘못 검출 (drone domain 학습 → close-up domain shift).
회귀: w = 11.74 × A^0.78
| 사진 | GT (g) | SAM3 A→g | err | yolov8m A→g | err | yolo11m A→g | err |
|---|---|---|---|---|---|---|---|
| IMG_8106 | 931 | 270cm² → 925g | −0.6% | 275 → 939g | +0.9% | 227 → 809g | −13.1% |
| IMG_8157 | 531 | 103 → 506g | −4.7% | 121 → 613g | +15.4% | 134 → 702g | +32.2% |
| IMG_8159 | 531 | 100 → 497g | −6.4% | 120 → 610g | +14.8% | 140 → 731g | +37.7% |
| IMG_8170 | 400 | 90 → 392g | −2.1% | 92 → 400g | +0.1% | 175 → 766g | +91.6% |
| TOTAL | 2393 | 563 → 2320g | −3.1% ✓ | 609 → 2562g | +7.0% | 676 → 3008g | +25.7% |
SAM3 + 회귀 모델 조합이 close-up에서 가장 정확 (총합 −3.1%).
| 가설 | 식 | 4장 합계 오차 | 설명 |
|---|---|---|---|
| 단순 면적 (×1) | w = k·A^1 | +31% | 2D ↔ 무게 직접 비례 가정 |
| 단순 ×2 | w = 2·A | +163% | "앞뒤 합치면 2배" 가설 |
| 부피 비례 | w = k·A^1.5 | ±5~30% | 3D 구 부피 가정 |
| 데이터 fit | w = 11.74·A^0.78 | ±0~10% | test_data fit (overfit) |
α = 0.78 (1과 1.5 사이, 1보다 작음)
이유 추정: 큰 송이일수록 berry 사이 빈 공간 + 잎/줄기 영역이 mask에 더 많이 포함 → 면적이 무게 대비 조금 부풀려 측정됨. 따라서 면적이 두 배가 되면 무게는 1.72배 (2^0.78), 단순 2배 아님.
⚠ 현재 결과를 production 정확도로 보면 안 됨
| 항목 | 현 상태 |
|---|---|
| fit 데이터 수 | 4 송이 (이상적 50-100) |
| train/test 분리 | 안 함 (fit한 데이터로 evaluate) |
| 일반화 검증 | 0 |
| 같은 송이 여러 각도 처리 | 부분 (송이당 1 면적만 사용) |
| GSD 정확도 | 의문 (사람이 보드 들고 있음 → 깊이 차이) |
| 품종 다양성 | 머루 한 종만 |
→ ±10% 오차는 fit에 잘 맞은 결과 (overfit), 새 송이 일반화 X.
- 보드를 송이 옆에 따로 두기 — 위에 올려 가리지 말 것 (SAM3 보드 mask 온전 검출)
- 보드와 송이는 같은 평면에 — 깊이 차이 → GSD 오차
- 사람이 보드 들지 말기 — 자세/거리 가변
- 각 setup마다 단독 보드 사진 1장 추가 — 인접 사진에 GSD propagate
| 측정 | 단위 |
|---|---|
| 송이 총무게 | g |
| 가지/줄기 | g |
| berry-only | g |
| 송이 30-50개 / 품종 (이상 100개) | — |
| 단계 | 내용 | 예상 |
|---|---|---|
| 1. 추가 GT 수집 | 30-50 송이 + 다양한 크기 | 1-2개월 |
| 2. train/test 분리 검증 | ±15% 이내 달성 | 1-2개월 |
| 3. 드론 환경 calibration | 기둥(6cm) reference로 GSD 검증 | 1 시즌 |
| 4. 자동 처리 파이프라인 | 드론 영상 → kg 자동 출력 | 6-12개월 |
| 5. 시범 운용 | 1-2 농가 1 시즌 | 1 시즌 |
각 사진 상단에 산출식 + 두 모델 (부피 vs 회귀) 예측 + GT 비교 표시.












/mnt/nas3/.../20260518_머루_측정데이터/test_data/
├── IMG_8106.JPG, IMG_8157.JPG, IMG_8159.JPG, IMG_8170.JPG
└── results/
├── sam3_text/ (overlay ×4 + json + csv)
├── yolov8m/ (overlay ×4 + json + csv)
└── yolo11m/ (overlay ×4 + json + csv)
-
src/segmentation/bunch_measure_closeup_batch.py— VARIANT 옵션으로 3 모델 지원 -
src/segmentation/closeup_overlay_yield.py— 두 모델 (부피 + 회귀) overlay -
src/calibration/board_rectify.py— 보드 aspect ratio 검증
# Batch (각 모델)
for v in sam3_text yolov8m yolo11m; do
IMG_DIR="/mnt/nas3/.../test_data" VARIANT=$v DEVICE=0 \
python src/segmentation/bunch_measure_closeup_batch.py
done
# Overlay (두 모델 비교 + GT)
for v in sam3_text yolov8m yolo11m; do
RESULTS_DIR="/mnt/nas3/.../test_data/results/$v" \
K_VOL_DESK=0.252 K_VOL_WIN=0.252 K_VOL_TREE=0.252 \
python src/segmentation/closeup_overlay_yield.py
done- close-up에선 SAM3 text가 압도적 — 검출률/오탐/정확도 모두 우세. YOLO는 drone domain 전용.
- 단순 ×2 아님 — 실측 fit α=0.78. 면적이 무게에 정비례하지 않음.
- 현재 회귀는 PoC 수준 — 4 점 fit, 일반화 보장 X. 50+ GT 추가가 진정한 모델.
- GSD 일관성이 가장 큰 에러 원인 — 보드 mask 가려짐, 평면 차이가 모델 오류보다 큰 영향.
- 드론 적용 시엔 별도 calibration 필수 — 기둥(6cm) reference로 동일 알고리즘 검증 필요.
Deepvisions | AI Engineer 2026.03 ~ 재직중
2026.05 ~ | @ Deepvisions 캠퍼스 CCTV 4대 · 자전거 OCR + 차량 공회전 다중 신호
2026.04 ~ | @ Deepvisions 포도밭 침입 탐지 (5종 multi-class · 라즈베리파이 4 실시간)
2026.03 ~ | @ Deepvisions 드론 이미지 기반 객체 탐지 + GSD calibration + 수확량 예측
- 프로젝트 메인
- 관련 연구 종합 + 한계 (2026-05) ← 최신
- 수확량 close-up 4장 + 3-Model (2026-05-19)
- 드론 포도 수확량 예측 — 파이프라인 (2026-05)
- 드론 포도송이 탐지 — 학습 변천사 (2026-04)
- SAM3 vs Fine-tuned YOLO
- Grounding DINO vs YOLO Top3 비교 요약
- YOLO Baseline Top3 비교 요약
- YOLO Model Comparison Summary
- 포도 탐지를 위한 데이터 수집
- 포도 수확량 측정을 위한 Object Detection
2025.03 ~ 2025.08 | 카카오테크부트캠프 | ✅ 종료 AI 기반 데스크테리어 추천 서비스
- Name: Woody (이동재)
- Focus: Vision AI, LLM Integration, Backend Engineering
- GitHub: @ehdwo0427
- Email: ehdwo0427@naver.com
- 포트폴리오 : 포트폴리오