-
Notifications
You must be signed in to change notification settings - Fork 0
Vineyard Wildlife Realtime Camera MVP
학습이 잘 되고 백엔드 비교까지 끝나도, 실제 카메라 + 추론 + 텍스트 출력 파이프라인 까지 묶지 않으면 의미가 없습니다.
이 문서는:
- picamera2로 실시간 캡처 → ncnn FP16 추론 → 박스 영상 + 검출 텍스트 로그까지 묶은 MVP의 산출물
- 라이브 환경에서 측정한 FPS와 false positive 패턴
- 데모 전 보완 카드
를 정리합니다. 학습 시점 mAP가 좋아도 현장에선 어떤 식으로 어긋날 수 있는지 가장 잘 보여주는 트랙입니다.
picamera2 실시간 캡처 + ncnn FP16 multi-class YOLO 추론 + bbox 그려진 MP4 + 검출 텍스트 로그 + JSON 통계.
| 인자 | 기본값 | 의미 |
|---|---|---|
--model |
multiclass 320 ncnn FP16 디렉토리 | 모델 경로 (ncnn 디렉토리 또는 .pt) |
--imgsz |
320 | 추론 해상도 |
--conf |
0.5 | 신뢰도 임계값 |
--iou |
0.45 | NMS IoU 임계값 |
--width / --height |
640 / 480 | 카메라 캡처 해상도 |
--duration |
20.0 | 캡처 시간 (초) |
--fps-cap |
15.0 | 처리 FPS 상한 (CPU 보호) |
--out-dir / --prefix |
outputs/captures, rtdetect | 출력 위치/이름 |
| 파일 | 내용 |
|---|---|
<prefix>_<ts>.mp4 |
bbox + 라벨 + 프레임 메타 오버레이된 영상 |
<prefix>_<ts>.detections.log |
TSV (frame t_sec class conf x1 y1 x2 y2) |
<prefix>_<ts>.json |
전체 통계 (achieved_fps, inference_ms p95/mean, class_hits) |
검출이 발생할 때마다:
[DETECT f12 t= 1.05s] roe_deer conf=0.823 bbox=[145,80,512,440]
TSV 로그도 같은 정보를 머신 파싱 가능한 포맷으로 남깁니다:
# frame t_sec class conf x1 y1 x2 y2
12 1.05 roe_deer 0.823 145 80 512 440
- 검출:
raccoon conf=0.945 - 박스 위치 정확
- annotation 파이프라인 정상 확인

| 항목 | 값 |
|---|---|
| 캡처 시간 | 15초 |
| 처리 프레임 | 133 |
| 달성 FPS | 8.81 |
| 추론 mean / p95 | 100.8 / 103.7 ms |
| 검출 | 0건 (예상 — 단색 벽) |
| 항목 | 값 |
|---|---|
| 캡처 시간 | 15초 |
| 처리 프레임 | 116 |
| 달성 FPS | 7.73 (1차보다 낮음 — 매 프레임 annotation 비용) |
| 추론 mean / p95 | 115.3 / 129.8 ms |
| 검출 | 111건 (96% 프레임에서) |
| 검출 클래스 | bird 100% — false positive |
| Bbox |
[407, 263, 550, 451] 일관 (선풍기 머리 위치) |
| Conf 분포 | 0.50 ~ 0.69 |

좌측: 1차 — 단색 천장이라 검출 0건 (의도한 sanity). 우측: 2차 — 선풍기 헤드를
bird 0.50으로 오인. 검출 박스가 모든 프레임에서 거의 같은 좌표에 일관되게 그려짐 (단순 1프레임 노이즈가 아니라 패턴화된 false positive).
흰색·은색 둥근 물체(선풍기 헤드)를 새로 잘못 인식.
| 요인 | 설명 |
|---|---|
| 학습 데이터 분포 | 야외 / IR 카메라트랩 위주 |
| 실내 분포 | 학습 분포에 거의 없음 |
| bird 클래스 자체의 약점 | 5종 중 test mAP 가장 낮음 (0.617 @ 320) |
| 선풍기 형태 | 둥근 흰색 → 새의 몸체 윤곽과 유사 |
학습 mAP 단계에서는 "조류가 다른 종보다 약하구나" 로만 보였지만, 카메라 단계에서는 "실내 인공물에 100% false positive" 로 드러났습니다.

| 카드 | 효과 | 비용 |
|---|---|---|
| conf 임계값 0.5 → 0.7 | bird FP 80%+ 제거 (대부분 0.5~0.65 범위) | 진짜 새 미검출 가능성 ↑ |
| 클래스별 임계값 (bird만 0.8) | 선택적 필터링, 다른 종 그대로 | 인자 추가 |
| 시간 일관성 필터 (N프레임 연속) | 1프레임 노이즈 제거 | 약 0.3s 지연 |
| 모션 게이트 | 정지 영상에서 미검출 → 선풍기 안 도는 상태 안전 | 모션 감지 코드 추가 |
데모용 1차 카드는 "conf 0.7 + bird만 0.8" 조합이 가장 비용/효과 좋아 보입니다.
| 문제 | 원인 | 대응 |
|---|---|---|
| 재부팅 2회 (val·양자화 도중) | CPU 풀로드 + 쿨링 부재 → 82°C → thermal shutdown | 외부 선풍기 임시 적용으로 38°C 유지 |
/tmp 스크립트 날아감 |
tmpfs 재부팅 시 휘발 | 영구 디스크에 로그 + 스크립트 idempotent화 |
| SSH 끊김 시 작업 중단 | nohup 미사용 |
nohup + 영구 로그 경로로 SSH 의존 제거 |
| 카메라 실내 false positive | bird 클래스 + 학습 분포 mismatch | conf 임계값 + 클래스별 임계값 + 시간 일관성 필터 |
- conf 0.7로 라이브 재테스트 (false positive 제거 확인)
- 실제 동물 사진(폰 화면)을 카메라 앞에 띄워 진짜 검출 확인
- 클래스별 임계값 옵션 추가 (
--class-conf bird:0.8,roe_deer:0.5,...) - 1시간 연속 안정성 테스트 (발열·메모리 추이)
- (선택) Flask + MJPEG 웹 스트리밍으로 데모 시연 강화
- multi-scale 학습 다시 시도 (torch+ultralytics 호환성 이슈 우회 후)
bird mAP 0.617이 학습 단계에서는 그냥 "낮네" 였습니다. 카메라 단계에서는 100% false positive로 드러났습니다. 학습 mAP는 운영 약점의 1차 지표.
야외 IR 카메라트랩 위주 데이터를 실내 일반 카메라에 그대로 쓰면 일반화에 실패합니다. deploy 환경의 분포 가정을 학습 단계부터 의식해야 합니다.
TSV 로그 + JSON 통계 + MP4 영상 3종을 매 실행마다 남기게 한 덕분에, 데모 전 보완 카드(conf 임계값 0.7) 같은 결정이 측정 기반으로 나올 수 있었습니다.
picamera2 초기화, RGB↔BGR 변환, fps cap, annotation 비용, 헤드리스 환경 출력 검증 등 의외로 챙길 게 많았습니다. 학습 코드와 카메라 코드는 같은 파이썬이지만 별개의 시스템이라고 생각하는 게 맞았습니다.
- RPi 4 추론 백엔드 비교 — 이 MVP가 사용한 ncnn FP16 선택의 근거
- 야생동물 5종 multi-class 학습 변천사 — bird 클래스가 왜 약점인지의 학습 단계 신호
- INT8 양자화 진단 — 왜 INT8이 아니라 FP16으로 갔는지
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
- 포트폴리오 : 포트폴리오