드론 탐지 데이터셋 가이드: 작은 UAV를 대상으로 Ultralytics YOLO 학습하기
DUT Anti-UAV, Drone-vs-Bird 및 열화상 드론 탐지 데이터셋을 비교한 다음, Ultralytics YOLO26을 학습시켜 작은 드론을 탐지하고 오경보를 줄이세요.

UAV 탐지 및 추적 벤치마크에 따르면 Drone-vs-Bird 데이터의 드론 평균 크기는 34 x 23픽셀입니다. 가상의 3840 x 2160 프레임에 이 크기의 드론이 있다고 가정해 보세요. 탐지기가 기본으로 사용하는 640픽셀 크기로 조정하면 드론은 약 5.7 x 3.8픽셀로 줄어듭니다.
대드론 대응팀은 선택한 데이터셋부터 배포할 모델에 이르기까지 객체가 계속 식별되도록 해야 합니다. 이 가이드에서는 Ultralytics YOLO26을 사용해 네 가지 핵심 결정을 다룹니다. 학습에 사용할 드론 탐지 데이터셋, 사용할 이미지 크기, SAHI 타일 추론을 추가할 시점, 그리고 전반적인 mAP가 멀리 있는 드론의 미탐지를 감추지 않도록 객체 크기별로 모델을 평가하는 방법입니다.

대부분의 "드론 탐지 데이터셋"은 잘못된 질문에 답합니다#
드론 탐지 데이터셋을 검색하는 사람들은 보통 두 가지 작업 중 하나를 염두에 둡니다.
- 드론 탐지(대-UAV 또는 대드론 탐지): 지상 또는 공중 카메라로 하늘, 나무 또는 건물을 배경으로 작은 항공기를 찾습니다. 드론 이미지가 필요하며, 가능하다면 새와 기타 유사 객체 이미지도 포함해야 합니다.
- 드론에서 촬영한 영상의 객체 탐지: 드론에 장착된 카메라가 아래를 향해 사람, 자동차, 건물을 촬영합니다. VisDrone은 이 작업의 표준 벤치마크입니다. 보행자부터 버스까지 10개 클래스의 항공 이미지 8,629개가 포함되어 있으며, 드론 클래스는 없습니다.
VisDrone의 객체는 작고 밀집되어 있으므로 대-UAV 대응팀에도 유용합니다. 자체 데이터가 준비되기 전에 이미지 크기와 슬라이싱 같은 소형 객체 설정을 시험하기에 적합한 공개 데이터셋입니다. 항공 애플리케이션 자체에 대해서는 드론 운용에서의 컴퓨터 비전 개요를 참조하세요. 이 글의 나머지 부분에서는 첫 번째 작업인 드론 탐지를 다룹니다.
카메라와 시점에 맞는 데이터셋 선택#
적합한 공개 데이터셋은 카메라가 지상과 공중 중 어디에 설치되는지, 가시광선과 열적외선 중 무엇을 촬영하는지, 객체가 얼마나 멀리 비행하는지에 따라 달라집니다.
| 데이터셋 | 영상 종류 | 크기 | 적합한 용도 |
|---|---|---|---|
| Drone-vs-Bird | RGB 비디오, 720 x 576~3840 x 2160 | 주석이 지정된 학습 시퀀스 77개 | 지상 카메라, 새가 함께 등장하는 드론 영상 |
| DUT Anti-UAV | RGB 이미지, 240 x 160~5616 x 3744 | 이미지 10,000개(학습 5,200개 / 검증 2,600개 / 테스트 2,200개), 추적 비디오 20개 추가 | 가시광선 기반 첫 베이스라인 |
| Det-Fly | RGB, 3840 x 2160 | 이미지 13,271개 | DJI Mavic의 공대공 시점 영상 |
| Anti-UAV | RGB 및 열화상 비디오 페어 | 비디오 페어 318개 | 두 모달리티를 모두 사용하는 주야간 추적 |
| Anti-UAV410 | 열적외선 비디오 | 비디오 410개(학습 200개 / 검증 90개 / 테스트 120개) | 열화상 탐지 및 추적 |
| LRDDv3 | 거리 레이블이 포함된 4K RGB 및 640 x 512 IR | RGB 이미지 102,532개, 페어링된 IR 이미지 29,630개 | 원거리 드론의 거리를 고려한 평가 |
Drone-vs-Bird의 개수는 챌린지의 2021년 및 ICASSP 2023 에디션에 배포된 77개 시퀀스 학습 세트를 가리키며, 해상도 정보는 SynDroneVision 서베이에 보고되어 있습니다. 해당 서베이에서는 Det-Fly와 Anti-UAV도 다루며, LRDDv3 논문에서는 자체 데이터셋을 설명합니다. 데이터셋마다 라이선스와 접근 조건이 다르므로 상업적으로 사용하기 전에 확인하세요.
여러 데이터셋으로 학습하고 하나는 테스트용으로 따로 보관하세요#
학습에 사용한 데이터셋에서 성능이 우수한 모델도 다른 데이터셋에서는 제대로 작동하지 않을 수 있습니다. LRDDv3 저자들은 여러 데이터셋으로 Ultralytics YOLO11m 모델을 학습하고 각 모델을 Det-Fly에서 테스트했습니다. Drone-vs-Bird로 학습한 모델은 해당 데이터셋에서 mAP50 0.484를 기록했고, DUT Anti-UAV로 학습한 모델은 0.431을 기록했습니다.
따라서 카메라와 촬영 거리에 맞는 소스 두세 개를 결합하고, 모두 YOLO 탐지 형식으로 변환하세요. 그런 다음 클래스 ID를 일관되게 재매핑하고, 누락된 새 주석을 보완한 뒤, 프레임이나 타일을 추출하기 전에 비행 또는 비디오 단위로 분할하세요. 프레임 단위로 분할하면 한 비행에서 나온 거의 동일한 프레임이 학습 및 테스트 데이터에 모두 들어가 점수가 부풀려질 수 있습니다. 완전한 데이터셋 하나 또는 자체 현장의 영상을 학습에서 제외해 테스트 세트로 사용하고, 오경보를 측정할 수 있도록 새만 있는 영상과 빈 하늘 영상도 포함하세요.
드론뿐 아니라 새에도 레이블을 지정하세요#
새는 비전 기반 드론 탐지에서 오경보를 일으키는 흔한 원인입니다. Drone-vs-Bird에는 방해 객체로 새가 포함되어 있지만 클래스로 레이블이 지정되어 있지 않으므로, 2개 클래스 데이터셋을 만들려면 새의 박스를 추가해야 합니다. 2025년 소형 드론 연구에서는 드론 및 새 클래스로 YOLO11m을 학습하고 추론 시 새 예측을 무시했습니다. 해당 실험에서 2개 클래스 모델은 드론 전용 모델보다 드론을 약간 더 잘 탐지했습니다.
공개 데이터로 베이스라인을 만들고, 자체 영상으로 프로덕션에 적용할 수 있습니다. Ultralytics Platform 주석 도구를 사용하면 자체 카메라 영상의 프레임에 드론과 새의 박스를 지정할 수 있으며, 합성 데이터를 활용하면 드문 배경과 각도를 추가할 수 있습니다. AVSS 2021 Drone-vs-Bird 대회 1위 솔루션은 실제 이미지와 합성 이미지로 파인튜닝한 Ultralytics YOLOv5 탐지기와 칼만 필터 추적기를 사용해 희미하고 먼 드론의 신뢰도를 높였습니다.
이미지 크기에 따라 크기 조정 후 드론이 남아 있는지가 결정됩니다#
YOLO26은 각 이미지의 가장 긴 변이 imgsz에 맞도록 크기를 조정하며, 기본값은 640입니다. 크기 조정 후 픽셀이 거의 남지 않는 드론은 탐지기가 활용할 정보가 부족합니다. imgsz을 늘리는 것이 첫 번째 해결책이며, 학습 문서와 파인튜닝 가이드 모두 작은 객체가 포함된 데이터셋에는 imgsz=1280를 권장합니다.
비용은 대체로 픽셀 수에 비례하므로 1280은 640보다 약 4배의 연산량이 필요합니다. 기준을 잡자면 YOLO26 문서에 따르면 COCO val2017에서 640픽셀 입력을 사용할 때 NVIDIA T4에서 TensorRT 10, 배치 1 및 nms=False 구성으로 YOLO26n은 1.7ms, YOLO26s는 2.5ms입니다. 이 수치는 드론 데이터나 1280픽셀 측정값이 아니므로 실제 구성에서 직접 시간을 측정하세요.

유용한 시작 기준은 Ultralytics Academy 지연 시간 강의에서 제시합니다. 가장 작은 중요 객체가 해당 크기에서 약 10픽셀 이상일 때 그 크기를 시험해 볼 가치가 있습니다. 예산이 제한적이라면 동일한 드론 검증 세트에서 더 높은 해상도의 소형 모델과 더 낮은 해상도의 대형 모델을 비교하고, 목표 지연 시간 내에서 작은 드론을 더 많이 탐지하는 모델을 선택하세요.
YOLO26은 후보 선택 단계에서 작은 객체를 유지합니다#
이미지 크기가 충분하더라도 모델은 작은 박스에서 학습해야 합니다. YOLO26의 소형 타깃 인식 레이블 할당(STAL)이 이 문제를 해결하는 데 도움이 됩니다. v8.4.199의 표준 P3~P5 YOLO26 모델에서 STAL은 원래 회귀 타깃을 보존하면서 후보 선택을 위해 16픽셀보다 작은 박스 변의 크기를 16픽셀로 확장하므로, 작은 드론에 후보 앵커가 할당되지 않을 가능성이 줄어듭니다.
가장 작은 객체를 위해 아키텍처를 변경할 수도 있습니다. YOLO26에는 P3~P5에 더해 특징 피라미드에 스트라이드 4 출력 레벨을 추가하는 yolo26-p2.yaml 변형이 포함되어 있습니다. 입력 크기가 640 x 640일 때 YOLO26n의 비융합 연산량은 6.1에서 9.5 GFLOPs로 증가합니다. P2는 사전 학습된 P2 가중치 없이 YAML 아키텍처로 제공되므로, YOLO("yolo26n-p2.yaml")로 모델을 생성한 다음 자체 데이터로 학습해야 합니다.
SAHI 타일 추론으로 4K 프레임의 세부 정보를 온전히 유지하세요#
1280픽셀에서도 4K 프레임은 모델에 입력되기 전에 가로 폭의 3분의 2를 잃습니다. SAHI(Slicing Aided Hyper Inference)는 Ultralytics YOLO26과 통합되어 이 손실을 방지합니다. 프레임을 겹치는 슬라이스로 나누고 각 슬라이스에서 모델을 실행한 뒤 박스를 전체 이미지에 다시 병합하므로, 인접한 슬라이스에 걸친 드론도 한 번만 계산됩니다. SAHI 논문에서는 이 방법과 슬라이싱을 활용한 파인튜닝 변형을 설명합니다.

슬라이스 크기와 모델 입력 크기를 별도로 설정한 다음, 홀드아웃 영상에서 결과 드론 크기를 테스트하세요. 1280으로 크기를 조정한 전체 4K 프레임으로 학습한 모델은 네이티브 해상도 1280픽셀 슬라이스에서 드론이 실제보다 3배 작게 보이는 상태로 학습했습니다. 이 크기 차이가 성능을 저해한다면 SAHI 논문처럼 전체 해상도 학습 프레임에서 크롭을 만들어 파인튜닝하고, 동일한 테스트 세트에서 전체 프레임 모델과 비교하세요. 인접한 슬라이스 사이에 20% 겹침을 적용해 시작하고 슬라이스 경계에서의 미탐지를 확인하세요.
처리량은 예측 가능합니다. 겹침 비율이 0.2인 1280 x 1280 설정에서는 3840 x 2160 프레임을 4개 열과 2개 행으로 나누므로, SAHI의 추가 전체 이미지 예측을 비활성화하면 한 번 대신 8번의 순전파가 필요합니다. 이 방식은 녹화 영상, 경보 검토 및 성능이 높은 엣지 GPU에 적합합니다. 모든 프레임을 최대 프레임 속도로 처리해야 하는 카메라라면 하늘 영역만 슬라이스하거나, 주기적으로 슬라이스 스캔을 실행하거나 레이더 같은 다른 센서의 신호에 따라 실행하세요.
크기와 클래스별로 탐지기를 평가하세요#
전체 평균 정밀도(mAP)는 클래스별 AP의 평균입니다. 이 2개 클래스 데이터셋에서는 새 성능이 낮은 드론 탐지 성능을 감출 수 있으며, 드론 클래스 안에서도 전반적인 높은 점수가 가장 작은 크기 구간의 낮은 재현율을 가릴 수 있습니다. 결과를 신뢰하기 전에 클래스 및 크기별로 점수를 세분화하세요.
탐지 데이터셋에서 save_json=True을 사용한 검증은 COCO의 크기 구간에 따라 소형, 중형, 대형 객체 AP를 추가로 계산하며, faster-coco-eval을 사용합니다. 구간은 박스 면적이 32 x 32픽셀 미만, 96 x 96픽셀 이하, 그리고 그보다 큰 경우입니다. 이 수치는 두 클래스를 모두 포함합니다. SynDroneVision 서베이에 따르면 Drone-vs-Bird에서 주석이 지정된 드론 대부분은 32 x 32픽셀보다 작으므로, 드론 전용 AP_small과 재현율을 확인하세요.
이 수치를 얻으려면 원본 이미지 픽셀의 박스 면적을 기준으로, 일치하는 정답 주석과 비교해 predictions.json을 평가하세요. Ultralytics는 원본 이미지 좌표로 박스를 기록하고 이미지 파일명을 이미지 ID로 사용하며 사용자 정의 클래스는 1부터 번호를 매기므로, 여기서는 드론이 카테고리 1이고 새가 카테고리 2입니다. 테스트 레이블을 동일한 이미지 ID와 카테고리 ID를 사용하도록 COCO 형식 JSON으로 변환한 다음, 평가 대상을 catIds=[1]로 제한하세요.
COCO의 소형 구간은 장거리 작업에 사용하기에는 범위가 넓습니다. 면적 구간에 12픽셀 드론과 30 x 30 드론이 함께 포함되기 때문입니다. 같은 방식으로 더 세밀한 면적 범위를 정의하세요. 예를 들어 면적 64픽셀 미만(8 x 8), 64~256(16 x 16), 256~1,024(32 x 32)로 나누고 각 구간에서 드론 AP와 재현율을 확인할 수 있습니다. LRDDv3처럼 레이블에 거리가 포함되어 있다면 거리별 재현율도 보고하세요. 정밀도도 함께 표시하고 새만 있는 프레임과 빈 하늘 프레임에서 드론 예측이 발생한 횟수를 별도로 집계하세요.

다음 두 가지 습관을 지키면 수치를 신뢰할 수 있습니다.
- 배포 시 사용할 크기로 검증하세요. 1280으로 학습하고 640으로 검증하면 드론이 학습 시 크기의 절반으로 보이므로, 모델 자체와 무관한 이유로 점수가 하락합니다.
- mAP50-95는 주의해서 해석하세요. 10픽셀 박스에서 2픽셀 이동하면 IoU의 상당 부분을 잃으므로 엄격한 임계값은 작은 타깃에 불리하게 작용합니다. 놓친 드론을 파악하려면 재현율을 추적하고, IoU 0.5를 충족하는 올바른 클래스의 탐지에는 AP50을 사용하세요.
YOLO26 드론 탐지기 학습, 슬라이싱 및 평가#
다음 단계에 따라 드론 및 새 데이터셋을 병합한 뒤, 동일한 홀드아웃 테스트 세트에서 전체 이미지 추론과 슬라이스 추론을 비교할 수 있습니다.
-
pip install -U ultralytics sahi으로 패키지를 설치합니다. -
새를 두 번째 클래스로 지정하고 홀드아웃 테스트 분할을 포함하는 데이터셋 YAML을 작성합니다.
path: datasets/drones
train: images/train
val: images/val
test: images/test
names:
0: drone
1: bird- 사전 학습된 가중치에서 1280으로 학습합니다.
batch=-1을 사용하면 GPU 메모리의 약 60%를 사용하는 배치 크기를 AutoBatch가 선택합니다.
from ultralytics import YOLO
model = YOLO("yolo26s.pt")
model.train(data="drones.yaml", epochs=100, imgsz=1280, batch=-1, name="drone_1280")- 동일한 해상도의 테스트 분할에서 전체 이미지 베이스라인을 평가합니다. 실행 폴더에
predictions.json이 저장됩니다.
best = YOLO("runs/detect/drone_1280/weights/best.pt")
metrics = best.val(data="drones.yaml", split="test", imgsz=1280, save_json=True)- SAHI의 추가 전체 이미지 추론을 비활성화하고, 동일한 테스트 이미지의 예측을 원본 이미지 좌표로 슬라이스 단위로 내보냅니다.
import json
from pathlib import Path
from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction
detector = AutoDetectionModel.from_pretrained(
model_type="ultralytics",
model_path="runs/detect/drone_1280/weights/best.pt",
confidence_threshold=0.001,
image_size=1280,
device="cuda:0",
)
preds = []
for img in sorted(Path("datasets/drones/images/test").glob("*.jpg")):
result = get_sliced_prediction(
str(img),
detector,
slice_height=1280,
slice_width=1280,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
perform_standard_pred=False,
)
image_id = int(img.stem) if img.stem.isnumeric() else img.stem
for p in result.to_coco_predictions(image_id=image_id):
p["category_id"] += 1 # predictions.json의 1부터 시작하는 ID에 맞춥니다
preds.append(p)
Path("sahi_predictions.json").write_text(json.dumps(preds))- 동일한 정답 데이터와 드론 클래스만 사용해 두 예측 파일을 모두 평가합니다.
from faster_coco_eval import COCO, COCOeval_faster
gt = COCO("test_coco.json") # COCO 형식으로 된 테스트 레이블
for name in ["runs/detect/val/predictions.json", "sahi_predictions.json"]:
ev = COCOeval_faster(gt, gt.loadRes(name), "bbox")
ev.params.catIds = [1] # drone
ev.evaluate()
ev.accumulate()
ev.summarize()크기별 드론 AP, 새만 있는 프레임과 빈 하늘 프레임에서의 드론 예측, 배포 하드웨어에서 프레임당 종단 간 지연 시간을 비교하세요. 작은 드론에서 얻는 성능 향상이 추가 추론 횟수만큼 가치가 있을 때만 슬라이싱을 유지하세요.
-
별도의 전체 이미지 예시로 프레임 간 추적을 수행합니다.
best.track(source="perimeter.mp4", imgsz=1280, tracker="bytetrack.yaml")은 추적 모드를 사용하며 위에서 생성한 SAHI 예측을 사용하지 않습니다. ByteTrack은 트랙이 만료되기 전에 이후 탐지 결과가 기존 트랙과 일치하면 손실된 트랙을 다시 활성화할 수 있습니다. -
엣지 디바이스용으로 내보냅니다. 카메라에 NVIDIA Jetson을 사용하는 경우
best.export(format="engine", imgsz=1280, half=True)로 TensorRT 형식으로 내보내고 Jetson 가이드를 따르세요. 배포 해상도에서 디바이스의 지연 시간을 측정하세요.
GPU에서 1280픽셀 학습을 처리할 수 없다면 동일한 데이터셋과 인수로 Ultralytics Platform의 클라우드 학습을 사용할 수 있습니다.
이 방식으로 드론 탐지기를 개발해야 하는 대상#
이 워크플로는 공항 주변, 교도소, 경기장 또는 주요 기반 시설처럼 고정된 장소를 보호하기 위해 RGB 또는 열화상 카메라로 하늘을 감시하는 팀에 적합합니다. 보안 배포에서 레이더 또는 RF 센서에 비전을 추가하는 시스템 통합업체에도 적합합니다. 두 경우 모두 카메라가 드론을 수십 픽셀 크기로만 포착하는 거리에서도 드론을 인식해야 합니다.
DUT Anti-UAV와 Drone-vs-Bird로 베이스라인을 시작하고, 새 레이블과 자체 영상을 추가한 뒤, YOLO26을 1280으로 학습하고 드론 전용 AP_small, 재현율 및 새 오경보를 기준으로 모든 변경 사항을 평가하세요. 프레임이 4K 이상이고 슬라이스 평가에서 작은 드론의 성능 향상이 확인되면 SAHI를 추가하세요. 더 넓은 문제를 다루려면 소형 객체 탐지 가이드와 소형 객체 mAP 체크리스트를 참조하세요.
자주 묻는 질문
카메라와 시점에 따라 다릅니다. RGB 이미지 10,000개가 포함된 DUT Anti-UAV는 가시광선 탐지를 시작하기에 실용적인 베이스라인입니다. Drone-vs-Bird는 새가 함께 등장하는 지상 카메라 비디오를 제공하고, Det-Fly는 3840 x 2160 공대공 시점을 다루며, Anti-UAV410은 열적외선을 다루고, LRDDv3에는 거리 레이블이 포함되어 있습니다. 둘 이상의 데이터셋으로 학습하고 하나는 테스트용으로 제외하세요.
아니요. VisDrone에는 드론에서 촬영한 이미지가 포함되어 있으며 보행자, 자동차, 버스 등 10개 클래스로 레이블이 지정되어 있지만 드론 클래스는 없습니다. 이미지 크기와 SAHI 슬라이싱 같은 소형 객체 설정을 시험하는 데는 유용하지만, 드론을 탐지하려면 DUT Anti-UAV 또는 Drone-vs-Bird와 같은 대-UAV 데이터셋이 필요합니다.
기본 크기인 640에서 드론이 약 10픽셀보다 작아진다면
imgsz=1280을 사용해 보세요. YOLO26은 각 이미지의 가장 긴 변을imgsz로 조정하므로, 값을 높이면 드론의 픽셀을 더 많이 유지할 수 있으며 연산량은 640보다 약 4배 증가합니다. 학습에 사용한 크기로 검증하고 배포하세요.네. SAHI는
AutoDetectionModel.from_pretrained(model_type="ultralytics", image_size=1280, ...)을 통해 YOLO26 가중치를 불러오고 겹치는 슬라이스마다 모델을 실행한 뒤 박스를 병합합니다.perform_standard_pred=False을 사용하면 3840 x 2160 프레임을 0.2 겹침 비율로 1280픽셀 슬라이스로 나눌 때 순전파가 8회 발생합니다. 동일한 테스트 세트에서 슬라이스 결과를 전체 이미지 베이스라인과 비교해 평가하세요.탐지 데이터셋에서
save_json=True을 사용해 검증하면 모든 클래스를 합산한 소형, 중형, 대형 객체 AP를 얻을 수 있습니다. 드론 전용 결과를 얻으려면 저장된predictions.json을 이미지 ID와 카테고리 ID가 일치하는 COCO 형식 정답 데이터와 비교해 평가하고, 드론 카테고리만 대상으로 제한한 뒤 더 세밀한 구간에는 원본 이미지 픽셀 기준 박스 면적을 사용하세요.네. 새를 레이블이 지정된 클래스로 포함하고 오경보 테스트에도 활용하세요. 새는 오경보의 흔한 원인이며, 2025년 YOLO11m 실험에서는 드론 및 새 모델이 드론 전용 모델보다 드론을 약간 더 잘 탐지했습니다. Drone-vs-Bird에는 새 레이블이 없으므로 직접 박스를 추가하고, 드론 경보만 필요하다면 추론 시 새 예측을 무시하세요.
작성자
댓글
질문하거나 결과를 공유하거나 다른 사람을 도와주세요.










