智能检测小目标无人机、飞机、直升机检测数据集、摄像头视频图片检测、低空安防数据集、反无人机数据集小目标检测、无人机检测、飞机检测、直升机检测、低空目标识别、安防目标检测、飞行器检测数据集

智能检测小目标无人机、飞机、直升机检测数据集,11998张,yolo和voc两种标注方式
图像尺寸:512*512
类别数量:3类
训练集图像数量:10799; 验证集图像数量:603; 测试集图像数量:596
类别名称: 每一类图像数 ,每一类标注数
AirPlane: 2535,2535
Drone: 4728,4812
Helicopter: 2523,2628
image num: 11998

一、数据集信息表格

1.1 基础信息表

项目详细内容
数据集名称小目标无人机、飞机、直升机检测数据集
总图像数量11998 张
图像分辨率512×512
标注格式YOLO、VOC 双格式
类别总数3 类
训练集10799 张
验证集603 张
测试集596 张
适配模型YOLOv11n(轻量模型)
推荐训练轮数50 epoch
运行环境Python 3.8、OpenCV、PyTorch、PyQt5

模型代码:提供全部训练及测试源代码,模型训练使用yolov11n训练,50个epoch训练结果,map如描述图所示。

qt界面:运行界面采用pyqt5编写, 提供全部源代码,支持图片、视频及摄像头进行检测: 界面可实时显示目标位置、目标总数、置信度等信息: 支持检测结果保存;本项目已经训练好模型,配置好环境后可直接使用,运行效果见描述图像

系统环境:python=3.8 opencv-python PyQt5 torch
文件:
1.完整的数据集文件(包括图像,yolo格式的txt文件、yaml文件,voc格式的xml文件等)
2.模型代码完整程序文件(.py .pt等)
3.qt界面源文件、图标(.ui、.qrc、.py等)




1.2 类别标注明细

序号英文类别中文类别含该类别图像数标注框总数
0AirPlane固定翼飞机25352535
1Drone无人机47284812
2Helicopter直升机25232628

1.3 YOLO 类别列表

names=["AirPlane","Drone","Helicopter"]

二、应用场景

  1. 低空安防监测:园区、机场、军事区域、重要场馆低空目标预警,识别违规无人机、飞行器。
  2. 空域管控:城市空域、机场净空区智能巡检,自动统计飞行器数量、类型。
  3. 视觉算法研发:小目标检测算法训练、对比实验、学术研究、竞赛使用。
  4. 嵌入式/边缘部署:安防摄像头、无人机反制设备、便携巡检终端本地检测。
  5. 可视化检测系统:搭配PyQt界面,做成桌面客户端,用于日常巡检、演示、项目落地。

三、YOLOv11n 全套训练代码

3.1 环境依赖

# Python 3.8 环境执行pipinstallultralytics torch opencv-python PyQt5 numpy pillow

3.2 数据集配置文件aircraft.yaml

path:./aircraft_datasettrain:images/trainval:images/valtest:images/testnc:3names:0:AirPlane1:Drone2:Helicopter

3.3 训练代码train.py(固定 50 epoch)

fromultralyticsimportYOLOdeftrain_aircraft():# 加载YOLOv11n轻量化模型model=YOLO("yolov11n.yaml")# 训练参数model.train(data="aircraft.yaml",epochs=50,imgsz=512,batch=16,device=0,# CPU运行改为 device="cpu"workers=4,patience=10,amp=True,mosaic=1.0,project="runs/train",name="aircraft_det",exist_ok=True)print("训练完成,最优模型已保存至 runs/train/aircraft_det/weights/best.pt")if__name__=="__main__":train_aircraft()

3.4 纯模型推理代码predict.py

fromultralyticsimportYOLO# 加载训练好的权重model=YOLO("runs/train/aircraft_det/weights/best.pt")# 单张图片检测# res = model("test.jpg", save=True, conf=0.25)# 图片文件夹批量检测# res = model("./test_imgs/", save=True, conf=0.25)# 视频检测# res = model("test.mp4", save=True, conf=0.25)# 本地摄像头实时检测res=model(0,save=True,conf=0.25)

3.5 数据集目录结构

aircraft_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ # YOLO txt 标注文件 │ ├── train/ │ ├── val/ │ └── test/ ├── voc_labels/ # VOC xml 标注文件 └── aircraft.yaml

四、PyQt5 可视化检测界面完整代码

4.1 UI 布局(简化版,可自行用Qt Designer编辑.ui文件)

4.1.1 主界面代码ui_main.py

importsysimportcv2importosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QLabel,QFileDialog,QTextEdit,QVBoxLayout,QWidget,QHBoxLayout)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromultralyticsimportYOLO# 推理子线程(防止界面卡顿)classDetectThread(QThread):signal_img=pyqtSignal(object)signal_info=pyqtSignal(str)def__init__(self,model,source,save_path):super().__init__()self.model=model self.source=source self.save_path=save_path self.running=Truedefrun(self):ifnotos.path.exists(self.save_path):os.makedirs(self.save_path)idx=0# 视频/摄像头推理cap=cv2.VideoCapture(self.source)whileself.running:ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=0.25)res_frame=results[0].plot()# 统计目标cls_count={}forboxinresults[0].boxes.cls:cls_name=self.model.names[int(box)]cls_count[cls_name]=cls_count.get(cls_name,0)+1total=sum(cls_count.values())info_text=f"目标总数:{total}| 类别统计:{str(cls_count)}"self.signal_img.emit(res_frame)self.signal_info.emit(info_text)# 保存结果save_name=os.path.join(self.save_path,f"res_{idx}.jpg")cv2.imwrite(save_name,res_frame)idx+=1cap.release()defstop_thread(self):self.running=False# 主窗口classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("飞行器目标检测系统")self.resize(1200,800)# 加载训练好的模型self.model=YOLO("runs/train/aircraft_det/weights/best.pt")self.detect_thread=Noneself.save_dir="./detect_result"# 布局main_widget=QWidget()self.setCentralWidget(main_widget)main_layout=QHBoxLayout(main_widget)# 左侧显示区域self.img_label=QLabel()self.img_label.setAlignment(Qt.AlignCenter)self.img_label.setStyleSheet("background-color:#000;")main_layout.addWidget(self.img_label,3)# 右侧控制区域right_widget=QWidget()right_layout=QVBoxLayout(right_widget)self.btn_img=QPushButton("打开图片检测")self.btn_video=QPushButton("打开视频检测")self.btn_camera=QPushButton("开启摄像头")self.btn_stop=QPushButton("停止检测")self.info_text=QTextEdit()self.info_text.setReadOnly(True)# 绑定事件self.btn_img.clicked.connect(self.detect_image)self.btn_video.clicked.connect(self.detect_video)self.btn_camera.clicked.connect(self.detect_camera)self.btn_stop.clicked.connect(self.stop_detect)right_layout.addWidget(self.btn_img)right_layout.addWidget(self.btn_video)right_layout.addWidget(self.btn_camera)right_layout.addWidget(self.btn_stop)right_layout.addWidget(QLabel("检测信息:"))right_layout.addWidget(self.info_text)main_layout.addWidget(right_widget,1)defshow_frame(self,frame):rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,ch=rgb.shape bytes_per_line=ch*w qt_img=QImage(rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(qt_img).scaled(self.img_label.size(),Qt.KeepAspectRatio))defshow_info(self,text):self.info_text.append(text)defstart_thread(self,source):self.stop_detect()self.detect_thread=DetectThread(self.model,source,self.save_dir)self.detect_thread.signal_img.connect(self.show_frame)self.detect_thread.signal_info.connect(self.show_info)self.detect_thread.start()defdetect_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","Image Files(*.jpg *.png *.jpeg)")ifpath:img=cv2.imread(path)res=self.model(img,conf=0.25)res_img=res[0].plot()self.show_frame(res_img)# 统计信息cls_count={}forboxinres[0].boxes.cls:cls_name=self.model.names[int(box)]cls_count[cls_name]=cls_count.get(cls_name,0)+1total=sum(cls_count.values())self.info_text.append(f"图片检测 | 目标总数:{total}|{cls_count}")# 保存ifnotos.path.exists(self.save_dir):os.makedirs(self.save_dir)cv2.imwrite(os.path.join(self.save_dir,"img_result.jpg"),res_img)defdetect_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Video Files(*.mp4 *.avi)")ifpath:self.start_thread(path)defdetect_camera(self):self.start_thread(0)defstop_detect(self):ifself.detect_threadandself.detect_thread.isRunning():self.detect_thread.stop_thread()self.detect_thread.quit()self.detect_thread.wait()defcloseEvent(self,event):self.stop_detect()event.accept()if__name__=="__main__":app=QApplication(sys.argv)win=MainWindow()win.show()sys.exit(app.exec_())

五、项目文件清单

  1. 数据集文件
    • 11998张 512×512 图像
    • YOLO 格式.txt标签、VOC 格式.xml标签
    • 数据集配置aircraft.yaml
  2. 模型代码文件
    • train.py训练脚本
    • predict.py推理脚本
    • 训练完成权重best.pt/last.pt
  3. PyQt5 界面文件
    • ui_main.py主程序代码
    • 可选:.ui界面文件、图标资源.qrc
  4. 环境说明
    • 运行环境:Python 3.8 + torch + ultralytics + opencv-python + PyQt5
    • 支持系统:Windows、Linux(CPU版本)