无人机红外图像下极小目标检测数据集,无人机红外小目标检测数据集 低空安防、机场净空监测、反无人机系统、鸟类迁徙监控 YOLOv8** 构建的 **无人机红外图像下极小目标检测系统
无人机红外图像下极小目标检测数据集,8302张,yolo和voc两种标注方式
4类,标注数量:
Plane:飞机 2163
Drone:无人机 3120
Heli:直升机 2217
Bird:鸟类 1958
image num: 8302

1

1

以下是 无人机红外图像下极小目标检测数据集 的完整统计表格:
📊 无人机红外极小目标检测数据集统计表
| 序号 | 英文类别名称 | 中文类别名称 | 标注框数量 |
|---|---|---|---|
| 1 | Plane | 飞机 | 2,163 |
| 2 | Drone | 无人机 | 3,120 |
| 3 | Heli | 直升机 | 2,217 |
| 4 | Bird | 鸟类 | 1,958 |
| 总计 | — | — | 9,458 |
- 图像总数:8,302 张
- 图像模态:红外(IR)图像
- 目标特点:极小目标(通常 < 32×32 像素)
- 标注格式:同时提供 YOLO (.txt) 和 PASCAL VOC (.xml) 两种格式
- 应用场景:低空安防、机场净空监测、反无人机系统、鸟类迁徙监控等
数据集适用于 红外小目标检测、弱信号识别、多类空中目标分类与跟踪 等前沿研究与工程应用。
基于 YOLOv8 构建的 无人机红外图像下极小目标检测系统 的详细代码实现。该系统支持:
- 加载红外图像
- 使用 YOLOv8 模型进行推理
- 提供 Web 界面上传与可视化(Flask)
- 支持 YOLO 和 VOC 格式数据训练(本例使用 YOLO 格式)
📁 一、项目结构
infrared_small_target_detection_yolov8/ ├── data/ │ └── dataset.yaml # 数据集配置(4类) ├── models/ │ └── best.pt # 训练好的 YOLOv8 模型 ├── static/ │ ├── uploads/ # 用户上传图像 │ └── results/ # 检测结果图 ├── templates/ │ ├── index.html # 主页(上传界面) │ └── result.html # 结果展示 ├── app.py # Flask Web 应用 ├── detect.py # 核心检测模块 ├── requirements.txt └── README.md 📦 二、环境依赖(requirements.txt)
ultralytics==8.2.0 flask==2.3.3 opencv-python==4.8.0 numpy==1.24.3 Pillow==9.5.0 matplotlib 安装:
pip install -r requirements.txt 📄 三、数据集配置 data/dataset.yaml
train: ../data/images/train val: ../data/images/val test: ../data/images/test nc:4names:['Plane','Drone','Heli','Bird']🔍 四、核心检测模块 detect.py
# detect.pyimport cv2 import os from ultralytics import YOLO # 中英文类别名称映射 CLASS_NAMES ={0:"飞机",# Plane1:"无人机",# Drone2:"直升机",# Heli3:"鸟类"# Bird}defrun_detection(input_path, output_dir="static/results", model_path="models/best.pt"):""" 对单张红外图像进行极小目标检测 :param input_path: 输入图像路径 :param output_dir: 输出目录 :param model_path: 模型路径 :return: (输出图像路径, 检测统计) """ model = YOLO(model_path) img = cv2.imread(input_path)if img isNone:raise ValueError("无法读取图像,请检查路径") results = model(img, conf=0.4)# 设置置信度阈值为0.4 annotated_img = img.copy() boxes = results[0].boxes class_counts ={name:0for name in CLASS_NAMES.values()}for box in boxes: x1, y1, x2, y2 =map(int, box.xyxy[0]) conf =float(box.conf[0]) cls_id =int(box.cls[0])if cls_id notin CLASS_NAMES:continue class_name = CLASS_NAMES[cls_id] class_counts[class_name]+=1# 绘制边界框和标签 color =(0,255,0)# 默认绿色,可根据需要调整颜色 cv2.rectangle(annotated_img,(x1, y1),(x2, y2), color,2) label =f"{class_name}{conf:.2f}" cv2.putText(annotated_img, label,(x1, y1 -10), cv2.FONT_HERSHEY_SIMPLEX,0.5, color,1)# 保存标注后的图像 os.makedirs(output_dir, exist_ok=True) filename = os.path.basename(input_path) output_path = os.path.join(output_dir,f"det_{filename}") cv2.imwrite(output_path, annotated_img)return output_path, class_counts 🌐 五、Web 应用 app.py
# app.pyfrom flask import Flask, render_template, request, redirect, url_for, send_from_directory import os from detect import run_detection app = Flask(__name__) UPLOAD_FOLDER ='static/uploads' RESULT_FOLDER ='static/results' ALLOWED_EXTENSIONS ={'png','jpg','jpeg'} app.config['UPLOAD_FOLDER']= UPLOAD_FOLDER app.config['RESULT_FOLDER']= RESULT_FOLDER defallowed_file(filename):return'.'in filename and filename.rsplit('.',1)[1].lower()in ALLOWED_EXTENSIONS @app.route('/')defindex():return render_template('index.html')@app.route('/upload', methods=['POST'])defupload_file():if'file'notin request.files:return redirect(request.url)file= request.files['file']iffile.filename ==''ornot allowed_file(file.filename):return redirect(request.url)# 保存上传文件 filename =file.filename filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)file.save(filepath)try:# 执行检测 output_path, counts = run_detection( filepath, output_dir=app.config['RESULT_FOLDER'], model_path="models/best.pt") result_filename = os.path.basename(output_path)except Exception as e:returnf"<h2>检测失败:{str(e)}</h2>"# 过滤掉数量为0的类别 non_zero_counts ={k: v for k, v in counts.items()if v >0}return render_template('result.html', original=filename, detected=result_filename, counts=non_zero_counts)if __name__ =='__main__': app.run(debug=True, host='0.0.0.0', port=5000)🖼️ 六、前端模板
templates/index.html
<!DOCTYPEhtml><html><head><title>红外极小目标检测系统</title><style>body{font-family: Arial;text-align: center;margin-top: 40px;}.btn{padding: 8px 16px;margin: 5px;background: #007bff;color: white;border: none;cursor: pointer;}.btn:hover{background: #0069d9;}</style></head><body><h2>🔍 无人机红外极小目标检测系统</h2><formmethod="post"enctype="multipart/form-data"action="/upload"><inputtype="file"name="file"accept="image/*"required><br><br><buttontype="submit"class="btn">上传并检测</button></form></body></html>templates/result.html
<!DOCTYPEhtml><html><head><title>检测结果</title><style>body{font-family: Arial;margin: 20px;}img{max-width: 95%;margin: 10px;border: 1px solid #ddd;}.stats{background: #f8f9fa;padding: 15px;border-radius: 5px;margin: 20px 0;}.item{display: inline-block;margin-right: 15px;}</style></head><body><h2>📊 检测结果</h2><imgsrc="{{ url_for('static', filename='uploads/' + original) }}"alt="原始图"><imgsrc="{{ url_for('static', filename='results/' + detected) }}"alt="检测结果"><divclass="stats"><strong>检测到的目标:</strong> {% for name, count in counts.items() %} <spanclass="item">{{ name }}: {{ count }} 处</span> {% endfor %} </div><ahref="/">← 返回上传</a></body></html>▶️ 七、运行系统
python app.py 访问:http://localhost:5000
🎯 八、系统特点
| 特性 | 说明 |
|---|---|
| 🔥 红外图像处理 | 针对极小目标设计,适用于低空安防等场景 |
| 🚁 多类空中目标 | 包含飞机、无人机、直升机、鸟类四类目标 |
| 🖼️ 中文标签显示 | 前端直接显示中文设备名 |
| 📊 统计计数 | 显示每类目标检测数量 |
| 🚀 轻量部署 | Flask + YOLOv8,适合边缘服务器 |
💡 扩展建议
- 视频流检测:接入 RTSP 视频流实现实时监控
- 模型优化:针对极小目标,考虑增加数据增强策略或采用更高级的网络架构
- API 接口:提供
/api/detect供其他系统调用 - 移动端适配:响应式设计以适应不同设备