将基于 YOLOv8 进行模型训练使用 FLIR 数据集 如何训练配对的红外可见光行人车辆目标检测数据集 建立深度学习红外可见光车辆行人检测系统 推理识别检测 行人 车辆
文章目录
- 一、环境搭建
- 1. 安装 CUDA 驱动和 Anaconda
- 2. 创建 Python 虚拟环境
- 3. 安装 PyTorch 和其他依赖
- 二、数据准备
- 三、模型训练
- 1. 加载预训练模型
- 2. 开始训练
- 四、模型推理
- 1. 推理单张图片
- 2. 批量推理
- 五、模型评估
以下文字及代码仅供参考学习使用。
数据集描述:
FLIR配对行人车辆目标检测数据集,10400+张
数据集包含3个类别,为pedestrian,bicycle,car,jpg图片和txt标签
1
使用 FLIR 数据集进行行人、自行车和汽车的目标检测任务,将基于 YOLOv8 进行模型训练、推理及评估。以下将详细介绍如何设置环境、准备数据、训练模型以及进行推理和评估。
一、环境搭建
1. 安装 CUDA 驱动和 Anaconda
确保系统已经安装了 CUDA 驱动,并且可以通过命令nvidia-smi查看 GPU 信息。
下载并安装 Anaconda 来管理 Python 环境。
2. 创建 Python 虚拟环境
打开终端或 Anaconda Prompt:
# 创建名为 flir_yolo 的环境conda create-nflir_yolopython=3.8# 激活环境conda activate flir_yolo3. 安装 PyTorch 和其他依赖
根据 CUDA 版本选择合适的 PyTorch 安装命令:
pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 pipinstallultralytics opencv-python matplotlib numpy tqdm tensorboard scikit-learn验证是否成功:
python-c"import torch; print(torch.cuda.is_available())"应输出True。
二、数据准备
假设数据集结构如下:
flir_dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/ └── data.yaml创建一个data.yaml文件来描述数据集的路径和类别信息:
# data.yamltrain:./flir_dataset/images/trainval:./flir_dataset/images/valnc:3names:['pedestrian','bicycle','car']确保每个子文件夹内的图像和标签文件名一一对应,且已经按照train和val分割好。
三、模型训练
1. 加载预训练模型
从 Ultralytics 加载 YOLOv8 的一个预训练模型作为起点:
fromultralyticsimportYOLO model=YOLO('yolov8s.pt')# 或者选择其他尺寸的模型2. 开始训练
使用您的数据集对模型进行微调:
results=model.train(data='path/to/data.yaml',# 替换为您的 data.yaml 文件路径epochs=100,# 根据需要调整batch=16,# 调整以适应 GPU 内存imgsz=640,# 图像大小project='runs/detect/flir',name='yolov8s_flir')四、模型推理
1. 推理单张图片
加载训练好的模型并对新图像进行预测:
fromultralyticsimportYOLOimportcv2fromPILimportImage model=YOLO('runs/detect/flir/yolov8s_flir/weights/best.pt')results=model('path/to/new_image.jpg')# 显示结果forrinresults:im_array=r.plot()# 绘制边界框和标签im=Image.fromarray(im_array[...,::-1])# RGB PIL imageim.show()2. 批量推理
编写脚本来遍历整个文件夹中的所有图像,并应用上述推理步骤。简单的批量推理示例:仅供参考
importos source_dir='path/to/test_images'# 测试图像所在目录output_dir='runs/detect/output'os.makedirs(output_dir,exist_ok=True)forfilenameinos.listdir(source_dir):iffilename.endswith('.jpg')orfilename.endswith('.png'):img_path=os.path.join(source_dir,filename)results=model(img_path)forrinresults:im_array=r.plot()im=Image.fromarray(im_array[...,::-1])output_path=os.path.join(output_dir,filename)im.save(output_path)print(f"Saved{output_path}")五、模型评估
在验证集上评估模型性能:
metrics=model.val(data='path/to/data.yaml',split='val')print(f"mAP50:{metrics.box.map50:.4f}")print(f"mAP50-95:{metrics.box.map:.4f}")