본문 바로가기
무기체계와 소프트웨어/인공지능과 머신러닝 AI Machine Learning

공개 데이터로 만든 드론 탐지 AI, mAP 0.958 뒤에 숨은 것들

by xdots 2026. 9. 28.

1. 왜 카메라 기반 드론 탐지인가

안티 드론 시스템은 보통 레이더, RF 탐지기, EO/IR 카메라, 음향 센서를 겹쳐 쓴다. 레이더는 멀리 보지만 새와 구분이 어렵고, RF 탐지기는 기종을 알려주지만 통신 없이 자율비행하는 드론은 못 잡는다. 카메라와 AI는 그 사이에서 "이게 정말 드론인가?"를 확인하는 역할을 맡는다. 대신 멀리 있는 작은 드론과 새를 구분하는 데 약하고, 오경보가 많다.

이번 실험은 이 카메라+AI 모듈 하나에 집중했다. 대응(무력화) 기술은 다루지 않는다.

2. (Data) Seraphim Drone Detection Dataset

항목 내용
규모 83,483장 (train 75,134 / test 8,349)
형식 YOLO, 640×640 (리사이즈+패딩), 클래스 1개(drone)
구성 23개 공개 데이터셋 통합
라이선스 CC BY 4.0

데이터셋 카드에는 실제 촬영 사진 외에 홍보용 이미지와 합성 이미지가 섞여 있고, 이것이 실제 공중 환경에서의 일반화에 영향을 줄 수 있다고 적혀 있다.

3. (데이터 들여다보기) 현실보다 가깝고, 중앙에 있다.

학습용으로 2만 장을 무작위로 뽑아 분포를 봤다.

[그림 1] 크기 구간, 크기 분포, 위치 분포 그래프

  • 32×32픽셀보다 작은 드론은 약 24%, 96×96픽셀 이상의 큰 드론이 **약 44%**로 가장 많았다.
  • 크기 분포는 봉우리가 두 개다. 중간 거리 촬영과 근접 촬영으로 나뉜다.
  • 드론 위치는 화면 정중앙에 강하게 몰려 있다.

[그림 2] 샘플 이미지

샘플 사진을 보면 이유가 보인다. 조종기를 든 손이 화면에 찍힌 조종자 시점 영상이 많고, 좌우 반전이나 강한 노이즈처럼 원본 데이터셋의 증강이 그대로 남은 사진도 있다.

실제 안티 드론 상황에서 위협은 멀리서, 작게, 화면 어디에서나 나타난다. 가깝고 중앙에 있는 드론 위주의 데이터는 모델을 실제보다 좋아 보이게 만들 수 있다. 그래서 전체 평균 하나가 아니라 크기별로 나눠 평가하기로 했다.

4. (학습) YOLO11n

가장 작은 nano 모델을 고른 이유는 두 가지다. 무료 Colab에서 빠르게 돌릴 수 있고, 안티 드론 장비처럼 작은 기기에서 돌아가야 하는 상황에 가장 현실적이기 때문이다.

test셋 전체(8,348장) 결과

Precision Recall mAP50 mAP50-95
0.951 0.911 0.958 0.664

숫자만 보면 훌륭하다. 하지만 mAP는 모든 신뢰도 임계값을 평균한 값이라, 운용자가 실제로 정해야 하는 "임계값 하나"에서의 성능은 알려주지 않는다.

5. (mAP 너머) 운용 곡선

안티 드론에서 중요한 질문은 두 가지다.

  • 재현율(Recall): 실제 드론을 몇 % 찾았나? 놓친 드론은 곧 방어 실패다.
  • FPPI(False Positives Per Image): 이미지 한 장당 드론이 아닌 것을 드론이라고 한 횟수. 오경보가 잦으면 운용자가 경보를 무시하게 된다.

신뢰도 임계값을 0.05부터 0.9까지 바꿔 가며 두 지표의 관계를 그렸다.

[그림 3] 운용 곡선 + 크기별 재현율

곡선은 세 구간으로 나뉜다.

  • 임계값 0.05~0.35: 임계값을 낮춰도 재현율은 3~4%p 오르는 데 그치고, 오경보는 10배 가까이 늘어난다.
  • 임계값 0.5 부근: 꺾이는 지점. 재현율 0.874, FPPI 0.0272.
  • 임계값 0.65 이상: 오경보를 줄이려고 임계값을 올리면 재현율이 급격히 무너진다(0.8에서 약 0.47).

FPPI 0.0272는 "100장에 오경보 약 3번"이라 괜찮아 보인다. 하지만 카메라가 초당 30프레임으로 계속 탐지한다고 가정하면 이렇게 된다.

0.0272 × 30프레임 × 3,600초 ≈ 시간당 약 2,900번의 오탐지

단일 프레임 탐지기만으로는 운용이 불가능하고, 여러 프레임 연속 확인이나 다른 센서와의 교차 확인이 필수라는 것이 숫자로 드러난다. 다만 test셋은 연속 영상이 아닌 독립된 사진이라, 이 계산은 규모를 가늠하는 참고용이다.

6. (크기별 재현율) 예상보다 차이가 작았다.

임계값 Tiny (<16px) Small (16~32px) Medium (32~96px) Large (≥96px)
0.25 0.89 0.92 0.92 0.94
0.5 0.851 0.863 0.836 0.910

처음 예상은 "작은 드론일수록 크게 놓칠 것"이었다. 실제로 Large가 가장 높긴 하지만, Tiny와의 차이는 6%p 정도로 생각보다 작았다. 임계값 0.5에서는 Medium이 Small보다 오히려 낮기도 하다.

가능한 해석은 이 데이터의 작은 드론 상당수가 맑은 하늘처럼 단순한 배경에 찍혀 있어서, 크기는 작아도 구분이 쉬웠을 수 있다는 것이다. 아직 확인하지 않은 가설이다. 이 결과를 "작은 드론도 잘 찾는다"로 받아들이기보다는, 이 데이터의 작은 드론이 실제 전장의 작은 드론만큼 어렵지 않을 수 있다는 신호로 읽는 편이 안전해 보인다.

7. 오경보를 직접 들여다보니

임계값 0.25에서 test셋 8,349장 중 643장(약 7.7%)에서 오탐이 한 번 이상 나왔다. 오탐이 가장 많은 사진들을 모아 봤다.

유형 사례 원인
라벨 누락 드론 6대가 찍혔는데 정답 라벨은 1개 데이터 문제
화면 UI에 반응 조종 앱 화면 속 드론 아이콘 조종자 시점 영상의 특성
근접 사진의 중복 박스 드론 부품, 케이스 속 드론 홍보·제품 사진의 특성
실제 혼동 사람, 먼 배경 물체 모델 문제

가장 인상적이었던 것은 첫 번째 유형이다. 모델은 6대를 모두 맞게 찾았는데, 정답 라벨이 1개뿐이라 5개가 오탐으로 계산됐다. 오경보율 숫자의 일부는 모델이 아니라 정답이 틀려서 생긴 것이다. "모델이 틀렸다"와 "정답이 틀렸다"를 구분하지 않으면, 숫자를 잘못 해석하게 된다.

8. (경량화) INT8로 1.85배

안티 드론 장비는 GPU 없는 작은 기기에서 돌아가야 하는 경우가 많다. 학습한 모델을 OpenVINO INT8로 변환해 CPU에서 비교했다.

[그림 5] FP32 vs INT8 정확도와 속도

모델 mAP50 mAP50-95 CPU 추론 시간
FP32 (PyTorch) 0.958 0.664 123.9 ms (약 8 FPS)
INT8 (OpenVINO) 0.957 0.661 67.0 ms (약 15 FPS)

정확도는 사실상 그대로이고, 속도는 1.85배 빨라졌다. 두 가지는 짚어 둔다.

  • 이 1.85배에는 양자화 효과와 실행 엔진(PyTorch → OpenVINO) 교체 효과가 섞여 있다. 둘을 나누려면 OpenVINO FP32도 따로 측정해야 한다.
  • Colab CPU(Intel Xeon 2.0GHz, 코어 2개 수준) 기준이라, 실제 엣지 장비의 절대 속도와는 다르다. 같은 환경에서의 상대 비교로 봐야 한다.

INT8 변환에는 보정(calibration) 단계가 있는데, 기본값으로 검증셋 전체(3,756장)를 쓰면 15분 넘게 걸린다. fraction=0.1로 10%만 써도 충분했다.

학습한 모델(best.pt)과 재현용 Colab 노트북을 허깅페이스에 올렸다. 
https://huggingface.co/greatkoko/drone-detection-yolo11n

브라우저 데모: https://huggingface.co/spaces/greatkoko/drone-detection-demo

데이터 출처: Seraphim Drone Detection Dataset (Łukasz Grzybowski / Seraphim Defence Systems, CC BY 4.0), https://huggingface.co/datasets/lgrzybowski/seraphim-drone-detection-dataset

728x90