深度学习框架目标检测算法YOLOV8模型如何训练 红外-可见光对齐目标检测数据集 红外目标检测数据集的训练及应用
文章目录
- 🛠️ 一、环境搭建全流程(Windows/Linux)
- 1. 安装 CUDA 驱动(GPU 支持)
- ✅ 检查显卡驱动是否支持 CUDA
- ✅ 安装 PyTorch 所需的 CUDA(通过 PyTorch 官网)
- 2. 安装 Anaconda
- 3. 创建 Python 虚拟环境
- 4. 安装必要依赖
- 1. 安装 CUDA 驱动(GPU 支持)
- 📁 二、数据集结构设计(红外-可见光对齐)
- ✅ 方案 A:双通道输入(推荐用于对齐数据)
- ✅ 方案 B:分别训练(简单易行)
- 数据集结构(YOLO 格式)
- `data_ir.yaml`(红外数据)
- `data_vis.yaml`(可见光数据)
- 🚀 三、调用官方预训练模型并训练(YOLOv8)
- 1. 训练红外图像模型(train_ir.py)
- 2. 训练可见光模型(train_vis.py)
- 🔍 四、推理代码(detect.py)
- 单图推理(支持双模态)
- 📊 五、评估代码(evaluate.py)
- 🧠 六、高级功能建议(可选)
- ✅ 1. 多模态融合策略(后期融合)
- ✅ 2. 导出为 ONNX/TensorRT(加速部署)
- ✅ 3. 构建 Web 系统(Flask)
数据集描述:
红外目标检测数据集。红外-可见光对齐目标检测数据集。总共4200个图片对,共8400张。voc、yolo标注格式
1
1
1
使用 YOLOv8 实现双模态(红外 + 可见光)目标检测系统的构建。
✅ 目标:
- 使用 红外和可见光图像对 进行目标检测
- 支持 VOC / YOLO 标注格式
- 使用官方预训练 YOLOv8 模型进行迁移学习
- 提供完整训练、推理、评估代码
- 包含 CUDA、Anaconda、虚拟环境、依赖安装等全过程
🛠️ 一、环境搭建全流程(Windows/Linux)
1. 安装 CUDA 驱动(GPU 支持)
✅ 检查显卡驱动是否支持 CUDA
nvidia-smi
输出应显示驱动版本和 CUDA 版本(如 CUDA Version: 12.2)。
⚠️ 若无输出,请安装最新 NVIDIA 驱动:https://www.nvidia.com/Download/index.aspx
✅ 安装 PyTorch 所需的 CUDA(通过 PyTorch 官网)
访问:https://pytorch.org/get-started/locally/
选择命令(推荐 CUDA 11.8 或 12.1):
# 示例:CUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
验证:
import torch
print(torch.cuda.is_available())# 应为 True
print(torch.__version__)# 查看版本
2. 安装 Anaconda
下载地址:https://www.anaconda.com/products/distribution
安装后验证:
conda --version
3. 创建 Python 虚拟环境
# 创建环境(Python 3.9 推荐)
conda create -n infrared_detection python=3.9
conda activate infrared_detection
# 升级 pip
pip install --upgrade pip
4. 安装必要依赖
pip install ultralytics opencv-python matplotlib numpy tqdm pillow scikit-learn
✅
ultralytics:YOLOv8 官方库
✅opencv-python:图像处理
✅matplotlib:可视化
✅tqdm:进度条
验证安装:
from ultralytics import YOLO
print("✅ Ultralytics installed!")
📁 二、数据集结构设计(红外-可见光对齐)
✅ 方案 A:双通道输入(推荐用于对齐数据)
将红外与可见光拼接为 3通道输入(如 R=IR, G=VIS, B=IR) 或 4通道(需修改模型)
✅ 方案 B:分别训练(简单易行)
- 分别在红外图像上训练一个模型
- 在可见光图像上训练另一个模型
- 后期融合结果(本教程采用此方式演示)
数据集结构(YOLO 格式)
infrared_visible_dataset/
├── images/
│ ├── train/
│ │ ├── ir_0001.jpg
│ │ ├── vis_0001.jpg
│ │ └── ...
│ ├── val/
│ └── test/
├── labels/
│ ├── train/
│ │ ├── ir_0001.txt
│ │ ├── vis_0001.txt
│ │ └── ...
│ ├── val/
│ └── test/
├── data_ir.yaml
├── data_vis.yaml
data_ir.yaml(红外数据)
train: ./infrared_visible_dataset/images/train_ir
val: ./infrared_visible_dataset/images/val_ir
test: ./infrared_visible_dataset/images/test_ir
nc:4
names:['Plane','Drone','Heli','Bird']
data_vis.yaml(可见光数据)
train: ./infrared_visible_dataset/images/train_vis
val: ./infrared_visible_dataset/images/val_vis
test: ./infrared_visible_dataset/images/test_vis
nc:4
names:['Plane','Drone','Heli','Bird']
💡 说明:
train_ir,val_ir:只包含红外图像train_vis,val_vis:只包含可见光图像.txt文件格式为 YOLO:class_id x_center y_center width height(归一化)
🚀 三、调用官方预训练模型并训练(YOLOv8)
1. 训练红外图像模型(train_ir.py)
# train_ir.py
from ultralytics import YOLO
import torch
deftrain_infrared_model():
# 检查设备
device =0if torch.cuda.is_available()else'cpu'
print(f"Using device: {device}")
# 加载官方预训练模型(推荐 yolov8s 或 yolov8m)
model = YOLO('yolov8s.pt')# 自动下载
# 开始训练
results = model.train(
data='infrared_visible_dataset/data_ir.yaml',
epochs=150,
imgsz=640,
batch=16,
name='ir_yolov8s',
project='runs/detect',
save=True,
save_period=10,
device=device,
workers=4,
patience=30,
optimizer='AdamW',
lr0=0.001,
augment=True,
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=10.0,
translate=0.2,
scale=0.5,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1
)
print("✅ 红外模型训练完成!")
return results
if __name__ =='__main__':
train_infrared_model()
2. 训练可见光模型(train_vis.py)
# train_vis.py
from ultralytics import YOLO
import torch
deftrain_visible_model():
device =0if torch.cuda.is_available()else'cpu'
model = YOLO('yolov8s.pt')
results = model.train(
data='infrared_visible_dataset/data_vis.yaml',
epochs=150,
imgsz=640,
batch=16,
name='vis_yolov8s',
project='runs/detect',
save=True,
device=device,
workers=4,
patience=30,
lr0=0.001
)
print("✅ 可见光模型训练完成!")
return results
if __name__ =='__main__':
train_visible_model()
📦 模型保存路径:
- 红外:
runs/detect/ir_yolov8s/weights/best.pt- 可见光:
runs/detect/vis_yolov8s/weights/best.pt
🔍 四、推理代码(detect.py)
单图推理(支持双模态)
# detect.py
from ultralytics import YOLO
import cv2
import numpy as np
classMultiModalDetector:
def__init__(self, ir_model_path='runs/detect/ir_yolov8s/weights/best.pt',
vis_model_path='runs/detect/vis_yolov8s/weights/best.pt'):
self.ir_model = YOLO(ir_model_path)
self.vis_model = YOLO(vis_model_path)
defdetect(self, ir_image_path, vis_image_path, conf=0.4, output_path='fusion_result.jpg'):
# 红外检测
ir_results = self.ir_model.predict(source=ir_image_path, conf=conf, verbose=False)
ir_img = ir_results[0].plot()
# 可见光检测
vis_results = self.vis_model.predict(source=vis_image_path, conf=conf, verbose=False)
vis_img = vis_results[0].plot()
# 拼接对比图
combined = np.hstack([ir_img, vis_img])
cv2.imwrite(output_path, combined)
print(f"✅ 检测完成,结果保存至: {output_path}")
# 返回原始检测结果(可用于融合)
return ir_results[0], vis_results[0]
# 使用示例
if __name__ =='__main__':
detector = MultiModalDetector()
ir_result, vis_result = detector.detect(
ir_image_path='test_ir.jpg',
vis_image_path='test_vis.jpg'
)
📊 五、评估代码(evaluate.py)
# evaluate.py
from ultralytics import YOLO
defevaluate_model(model_path, data_yaml):
model = YOLO(model_path)
metrics = model.val(
data=data_yaml,
batch=16,
imgsz=640,
device=0if torch.cuda.is_available()else'cpu',
save_json=True,
conf_thres=0.001,
iou_thres=0.6
)
print(f"✅ mAP@0.5: {metrics.box.map50:.4f}")
print(f"✅ mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")
print("\n📊 各类别 AP@0.5:")
for i, name inenumerate(metrics.names.values()):
print(f" {name}: {metrics.box.ap[i]:.4f}")
# 评估红外模型
print("🔍 红外模型评估:")
evaluate_model('runs/detect/ir_yolov8s/weights/best.pt','infrared_visible_dataset/data_ir.yaml')
# 评估可见光模型
print("\n🔍 可见光模型评估:")
evaluate_model('runs/detect/vis_yolov8s/weights/best.pt','infrared_visible_dataset/data_vis.yaml')
🧠 六、高级功能建议(可选)
✅ 1. 多模态融合策略(后期融合)
deffuse_results(ir_result, vis_result, iou_thres=0.5):
from ultralytics.engine.results import Results
# 使用 NMS 或 Soft-NMS 融合两个检测结果
# 可基于置信度加权平均
pass
✅ 2. 导出为 ONNX/TensorRT(加速部署)
model = YOLO('runs/detect/ir_yolov8s/weights/best.pt')
model.export(format='onnx', dynamic=True, opset=13)
model.export(format='engine', device=0)# TensorRT
✅ 3. 构建 Web 系统(Flask)
from flask import Flask, request, send_file
app = Flask(__name__)
detector = MultiModalDetector()
@app.route('/detect', methods=['POST'])
defrun_detection():
ir = request.files['ir']
vis = request.files['vis']
ir_path ='temp_ir.jpg'
vis_path ='temp_vis.jpg'
ir.save(ir_path)
vis.save(vis_path)
detector.detect(ir_path, vis_path, output_path='result.jpg')
return send_file('result.jpg', mimetype='image/jpeg')
以上文字及代码仅供参考学习使用。
微信扫描下方的二维码阅读本文

Comments NOTHING