智能检测小目标无人机、飞机、直升机检测数据集、摄像头视频图片检测、低空安防数据集、反无人机数据集小目标检测、无人机检测、飞机检测、直升机检测、低空目标识别、安防目标检测、飞行器检测数据集
智能检测小目标无人机、飞机、直升机检测数据集,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 类别标注明细
| 序号 | 英文类别 | 中文类别 | 含该类别图像数 | 标注框总数 |
|---|---|---|---|---|
| 0 | AirPlane | 固定翼飞机 | 2535 | 2535 |
| 1 | Drone | 无人机 | 4728 | 4812 |
| 2 | Helicopter | 直升机 | 2523 | 2628 |
1.3 YOLO 类别列表
names=["AirPlane","Drone","Helicopter"]二、应用场景
- 低空安防监测:园区、机场、军事区域、重要场馆低空目标预警,识别违规无人机、飞行器。
- 空域管控:城市空域、机场净空区智能巡检,自动统计飞行器数量、类型。
- 视觉算法研发:小目标检测算法训练、对比实验、学术研究、竞赛使用。
- 嵌入式/边缘部署:安防摄像头、无人机反制设备、便携巡检终端本地检测。
- 可视化检测系统:搭配PyQt界面,做成桌面客户端,用于日常巡检、演示、项目落地。
三、YOLOv11n 全套训练代码
3.1 环境依赖
# Python 3.8 环境执行pipinstallultralytics torch opencv-python PyQt5 numpy pillow3.2 数据集配置文件aircraft.yaml
path:./aircraft_datasettrain:images/trainval:images/valtest:images/testnc:3names:0:AirPlane1:Drone2:Helicopter3.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_())五、项目文件清单
- 数据集文件
- 11998张 512×512 图像
- YOLO 格式
.txt标签、VOC 格式.xml标签 - 数据集配置
aircraft.yaml
- 模型代码文件
train.py训练脚本predict.py推理脚本- 训练完成权重
best.pt/last.pt
- PyQt5 界面文件
ui_main.py主程序代码- 可选:
.ui界面文件、图标资源.qrc
- 环境说明
- 运行环境:Python 3.8 + torch + ultralytics + opencv-python + PyQt5
- 支持系统:Windows、Linux(CPU版本)