使用深度学习模型训练无人机视角下行人检测数据集 建立基于深度学习的行人检测系统 无人机行人检测数据集的训练及应用
文章目录
- 使用深度学习模型训练无人机视角下行人检测数据集 建立基于深度学习的行人检测系统 无人机行人检测数据集的训练及应用
- 环境配置
- 安装依赖
- 数据准备
- 模型训练
- 推理代码
- 视频处理
- 环境配置
- 加载模型与执行推理
- 对单张图片进行行人检测
- 对视频流或视频文件进行行人检测
以下文字及代码仅供参考学习。
无人机行人检测数据集,检测无人机视角下步行和骑车的人
标签为people
1
使用深度学习模型训练无人机视角下的行人和骑车人检测系统,并进行推理,我们可以采用YOLOv5作为示例框架。以下是详细的环境配置、数据准备、模型训练以及推理代码。
环境配置
首先,确保你的开发环境已准备好。这里以YOLOv5为例:
安装依赖
- 创建并激活虚拟环境(可选但推荐):
python-mvenv yolov5-envsourceyolov5-env/bin/activate# 在Windows上使用 `yolov5-env\Scripts\activate`- 克隆YOLOv5仓库:
gitclone https://github.com/ultralytics/yolov5cdyolov5- 安装必要的依赖:
pipinstall-rrequirements.txt数据准备
假设你已经有了一个标注好的无人机视角下行人和骑车人的数据集,格式为YOLO格式(每个图像有一个对应的.txt文件,其中包含边界框信息和类别标签)。你需要创建一个配置文件(如data.yaml),用于指定训练和验证数据集路径及类别信息:
train:./path/to/train/imagesval:./path/to/val/imagesnc:1# number of classesnames:['people']# class names模型训练
使用以下命令开始训练你的模型。你可以从头开始训练,或者使用预训练权重来加速训练过程:
python train.py--img640--batch16--epochs50--data./path/to/data.yaml--weightsyolov5s.pt--img: 输入图像尺寸。--batch: 批量大小。--epochs: 训练周期数。--data: 数据集配置文件的路径。--weights: 预训练权重文件的路径。
推理代码
训练完成后,可以使用以下Python脚本对新视频或图像进行推理:
fromultralyticsimportYOLOimportcv2# 加载训练好的模型model=YOLO('runs/train/exp/weights/best.pt')# 替换为你的最佳模型路径defdetect_people(image_path):""" 对给定图像执行行人和骑车人检测。 :param image_path: 图像文件路径。 """img=cv2.imread(image_path)# 进行推理results=model(img)# 处理结果并绘制边界框forresultinresults:boxes=result.boxes.cpu().numpy()forboxinboxes: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函数,使其能够读取并处理视频帧:
defprocess_video(video_path=0):""" 处理视频流或视频文件。 :param video_path: 视频文件路径或摄像头设备ID,默认为0表示使用默认摄像头。 """cap=cv2.VideoCapture(video_path)whilecap.isOpened():ret,frame=cap.read()ifnotret:break# 对每一帧进行推理results=model(frame)# 绘制结果forresultinresults:boxes=result.boxes.cpu().numpy()forboxinboxes: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)ifcv2.waitKey(1)&0xFF==ord('q'):# 按Q键退出breakcap.release()cv2.destroyAllWindows()if__name__=='__main__':# 运行时指定视频文件路径或留空以使用摄像头process_video(video_path='path/to/your/video.mp4')# 替换为你的视频文件路径或留空建立一个基于深度学习的行人检测系统,利用训练好的权重文件(例如YOLOv5模型的best.pt),主要涉及到环境配置、加载模型、执行推理等步骤。以下是一个详细的指南,帮助你快速搭建这样一个系统。
环境配置
首先确保你的环境中已安装了必要的库和依赖项。这里以YOLOv5为例进行说明:
创建并激活虚拟环境(可选但推荐):
python-mvenv yolov5-envsourceyolov5-env/bin/activate# 在Windows上使用 `yolov5-env\Scripts\activate`克隆YOLOv5仓库:
gitclone https://github.com/ultralytics/yolov5cdyolov5安装必要的依赖:
pipinstall-rrequirements.txt
加载模型与执行推理
假设你已经有了训练好的权重文件(如best.pt),接下来可以按照以下步骤加载模型并对新的图像或视频进行推理。
对单张图片进行行人检测
以下是一个简单的Python脚本示例,演示如何对单张图片执行行人检测:
frompathlibimportPathimportcv2fromultralyticsimportYOLO# 加载预训练的YOLOv5模型model=YOLO('path/to/your/best.pt')# 替换为你的模型路径defdetect_people(image_path):""" 对给定图像执行行人检测。 :param image_path: 图像文件路径。 """img=cv2.imread(image_path)# 进行推理results=model.predict(img)# 处理结果并绘制边界框forresultinresults:boxes=result.boxes.cpu().numpy()forboxinboxes:r=box.xyxy[0].astype(int)ifmodel.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函数,使其能够读取并处理视频帧:
defprocess_video(video_path=0):""" 处理视频流或视频文件。 :param video_path: 视频文件路径或摄像头设备ID,默认为0表示使用默认摄像头。 """cap=cv2.VideoCapture(video_path)whilecap.isOpened():ret,frame=cap.read()ifnotret:break# 对每一帧进行推理results=model.predict(frame)# 绘制结果forresultinresults:boxes=result.boxes.cpu().numpy()forboxinboxes:r=box.xyxy[0].astype(int)ifmodel.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)ifcv2.waitKey(1)&0xFF==ord('q'):# 按Q键退出breakcap.release()cv2.destroyAllWindows()if__name__=='__main__':# 运行时指定视频文件路径或留空以使用摄像头process_video(video_path='path/to/your/video.mp4')# 替换为你的视频文件路径或留空基本框架,你可以根据实际需要进一步定制,比如增加更复杂的目标跟踪算法、优化性能或改进用户界面等。请确保将代码中的路径替换为你自己的数据集路径和模型路径。仅供参考。