使用深度学习模型训练无人机视角下行人检测数据集 建立基于深度学习的行人检测系统 无人机行人检测数据集的训练及应用
以下文字及代码仅供参考学习。
无人机行人检测数据集,检测无人机视角下步行和骑车的人

标签为people
1
使用深度学习模型训练无人机视角下的行人和骑车人检测系统,并进行推理,我们可以采用YOLOv5作为示例框架。以下是详细的环境配置、数据准备、模型训练以及推理代码。
环境配置
首先,确保你的开发环境已准备好。这里以YOLOv5为例:
安装依赖
- 创建并激活虚拟环境(可选但推荐):
python -m venv yolov5-env
source yolov5-env/bin/activate # 在Windows上使用 `yolov5-env\Scripts\activate`
- 克隆YOLOv5仓库:
git clone https://github.com/ultralytics/yolov5
cd yolov5
- 安装必要的依赖:
pip install -r requirements.txt
数据准备
假设你已经有了一个标注好的无人机视角下行人和骑车人的数据集,格式为YOLO格式(每个图像有一个对应的.txt
文件,其中包含边界框信息和类别标签)。你需要创建一个配置文件(如data.yaml
),用于指定训练和验证数据集路径及类别信息:
train: ./path/to/train/images
val: ./path/to/val/images
nc: 1 # number of classes
names: ['people'] # class names
模型训练
使用以下命令开始训练你的模型。你可以从头开始训练,或者使用预训练权重来加速训练过程:
python train.py --img 640 --batch 16 --epochs 50 --data ./path/to/data.yaml --weights yolov5s.pt
--img
: 输入图像尺寸。--batch
: 批量大小。--epochs
: 训练周期数。--data
: 数据集配置文件的路径。--weights
: 预训练权重文件的路径。
推理代码
训练完成后,可以使用以下Python脚本对新视频或图像进行推理:
from ultralytics import YOLO
import cv2
# 加载训练好的模型
model = YOLO('runs/train/exp/weights/best.pt') # 替换为你的最佳模型路径
def detect_people(image_path):
"""
对给定图像执行行人和骑车人检测。
:param image_path: 图像文件路径。
"""
img = cv2.imread(image_path)
# 进行推理
results = model(img)
# 处理结果并绘制边界框
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
r = box.xyxy[0].astype(int)
cv2.rectangle(img, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
cls = int(box.cls[0])
label = f'people {box.conf[0]:.2f}'
cv2.putText(img, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# 显示结果
cv2.imshow('People Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
# 调用detect_people函数处理单张图片
detect_people('path/to/test/image.jpg') # 替换为你的测试图像路径
视频处理
如果同学想要处理视频流或视频文件,可以稍微修改上述detect_people
函数,使其能够读取并处理视频帧:
def process_video(video_path=0):
"""
处理视频流或视频文件。
:param video_path: 视频文件路径或摄像头设备ID,默认为0表示使用默认摄像头。
"""
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 对每一帧进行推理
results = model(frame)
# 绘制结果
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
r = box.xyxy[0].astype(int)
cv2.rectangle(frame, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
cls = int(box.cls[0])
label = f'people {box.conf[0]:.2f}'
cv2.putText(frame, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# 显示结果
cv2.imshow('People Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 按Q键退出
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
# 运行时指定视频文件路径或留空以使用摄像头
process_video(video_path='path/to/your/video.mp4') # 替换为你的视频文件路径或留空
建立一个基于深度学习的行人检测系统,利用训练好的权重文件(例如YOLOv5模型的best.pt
),主要涉及到环境配置、加载模型、执行推理等步骤。以下是一个详细的指南,帮助你快速搭建这样一个系统。
环境配置
首先确保你的环境中已安装了必要的库和依赖项。这里以YOLOv5为例进行说明:
-
创建并激活虚拟环境(可选但推荐):
python -m venv yolov5-env source yolov5-env/bin/activate # 在Windows上使用 `yolov5-env\Scripts\activate`
-
克隆YOLOv5仓库:
git clone https://github.com/ultralytics/yolov5 cd yolov5
-
安装必要的依赖:
pip install -r requirements.txt
加载模型与执行推理
假设你已经有了训练好的权重文件(如best.pt
),接下来可以按照以下步骤加载模型并对新的图像或视频进行推理。
对单张图片进行行人检测
以下是一个简单的Python脚本示例,演示如何对单张图片执行行人检测:
from pathlib import Path
import cv2
from ultralytics import YOLO
# 加载预训练的YOLOv5模型
model = YOLO('path/to/your/best.pt') # 替换为你的模型路径
def detect_people(image_path):
"""
对给定图像执行行人检测。
:param image_path: 图像文件路径。
"""
img = cv2.imread(image_path)
# 进行推理
results = model.predict(img)
# 处理结果并绘制边界框
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
r = box.xyxy[0].astype(int)
if model.names[int(box.cls)] == 'people': # 假设类别名为'people'
cv2.rectangle(img, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
label = f'{model.names[int(box.cls)]} {box.conf:.2f}'
cv2.putText(img, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# 显示结果
cv2.imshow('People Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
# 调用detect_people函数处理单张图片
detect_people('path/to/test/image.jpg') # 替换为你的测试图像路径
对视频流或视频文件进行行人检测
如果想要处理视频流或视频文件,可以稍微修改上述detect_people
函数,使其能够读取并处理视频帧:
def process_video(video_path=0):
"""
处理视频流或视频文件。
:param video_path: 视频文件路径或摄像头设备ID,默认为0表示使用默认摄像头。
"""
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 对每一帧进行推理
results = model.predict(frame)
# 绘制结果
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
r = box.xyxy[0].astype(int)
if model.names[int(box.cls)] == 'people': # 假设类别名为'people'
cv2.rectangle(frame, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
label = f'{model.names[int(box.cls)]} {box.conf:.2f}'
cv2.putText(frame, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# 显示结果
cv2.imshow('People Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 按Q键退出
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
# 运行时指定视频文件路径或留空以使用摄像头
process_video(video_path='path/to/your/video.mp4') # 替换为你的视频文件路径或留空
基本框架,你可以根据实际需要进一步定制,比如增加更复杂的目标跟踪算法、优化性能或改进用户界面等。请确保将代码中的路径替换为你自己的数据集路径和模型路径。仅供参考。