深度学习安全帽图像识别从0-1

这一周看了很多的关于YOLO算法布置的教程,本文将会拿出一些认为为对代码布置有用的文章视频进行记录总结,记录从0开始布置图像识别的教程。文章包括三部分,分别是Github使用、Python环境配置和安全帽检测项目实操。

Github 使用

学习github网站使用:还不会使用 GitHub ? GitHub 教程来了!万字图文详解 - 知乎 (zhihu.com)

这篇文章中整体逻辑和讲解比较容易看懂,包括Github 网站的功能,Github 的下载和一些使用的方式,比如目前常使用的功能,下载源码到本地,举例:

完整操作,以安全帽识别为例共有两种方法

第一种:键盘操作打开window+R 输入cmd,进入想要下载github代码的位置

复制Github 网站的链接,输入 '''git clone https://目标github网址.git''' 代码,提示下载成功

直接复制代码用就行↓↓↓↓

git clone https://github.com/PeterH0323/Smart_Construction

打开文件夹查看是否安装成功。

第二种方式是在Releases中,找到作者已经打包好的文件,直接下载后在电脑中解压。

和第一种相比各有利弊,有的作者懒得整理压缩包。

Python环境配置

因为之前用python的时候,都是嫌配置环境比较麻烦,所以一直没有系统学习,但是以后要总用到了,所以还是系统的看了下文章和教程。

从0开始运行YOLOV5:1、YOLOV5 CPU运行环境搭建_哔哩哔哩_bilibili

b站的这个视频讲的还是不错的,加上一些文章的补充就够用了。

首先先捋顺一下逻辑,要配置环境最简单的就是下载已经集成好的模块,比如说是Anaconda3,因为有的项目需要使用python=3.7,有的需要使用python=3.10,要是每次都单独下载太麻烦了,使用Anaconda3就可以减少这种麻烦;后续要使用的包也选择集成的比如Ultralytics(YOLO各个版本项目集成一键下载,包含torchs等小包),如果没有这种大的集成,就去翻翻项目所使用的requirements.txt文件,也能一键配置。

比如使用YOLOv5和YOLOv8为例,虽然环境都是一个系列大同小异,但是为了保险起见,还是将他们的分开配置,就需要建两个环境。

键盘操作打开window+R 输入cmd

后续要涉及下载,先都设置为国内的下载源,谁快用谁,这个是清华的:

#设置清华下载源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

接下来依次输入代码

#建立环境与需要的py版本
conda create -n safehat python=3.10 

#检查环境是否安装成功
conda info -e         
   
#激活新的环境           
activate safehat   

#若有大集成,就直接安装环境中需要的库,比如YOLO                
pip install ultralytics  
#若有的是requirements.txt,就输入以下代码
pip install -r requirements.txt           

环境建好以后就可以配置了,我的是Pycharm,左上角【文件】→【打开(选择要项目文件夹)】→【设置】→【python解释器】→【设置标志,添加】→【Conda】→【现有环境】→【文件夹路径如图,配置的环境在Anaconda3/envs下】

然后查看一下自己配置好的环境中的包对不对,要是没有问题,就可以跑项目了。

安全帽检测项目实操

课程①:PeterH0323/Smart_Construction: Base on YOLOv5 Head Person Helmet Detection on Construction Sites,基于目标检测工地安全帽和禁入危险区域识别系统,🚀😆附 YOLOv5 训练自己的数据集超详细教程🚀😆2021.3新增可视化界面❗❗ (github.com)

这个链接是基于yolov5来检测安全帽,里面涉及到一些模块在未来也是可以使用的,比如说VOC格式的数据集转换成YOLOv5训练需要用到的格式、数据文件的排列树方式、与后面的可视化部分。

在学习的过程中,再阅读多篇的文章后,学习到,在CPU上运行的YOLOv5在部分能力上要强于YOLOv8,仅仅是一小部分。But,在GPU上运行的YOLOv8,无论实在运行速度还是运行结果的准确性上,都要强于YOLOv5,那为什么不直接跑v8模型呢?

于是我就找到了这个课程②:基于yolov8,训练一个安全帽识别的目标检测模型_哔哩哔哩_bilibili

在这个视频中,作者讲明了如何操作能使得代码跑起来,短短十分钟全是干货。

数据集在Kaggle中下载获取。

因为是调包来完成,所以需要敲出启动代码。


safehat.yaml

下面代码最后一行,数据集有打了很多标签,比如Person之类的,我们只需要第0个和第2个就行了,就是带和不带安全帽,代码需要建 **.yaml的格式。

# 训练数据图片存储的位置
train: D:\Deeplearning\Helmet testing\archive\css-data\train\images
# 验证数据图片存储的位置
val: D:\Deeplearning\Helmet testing\archive\css-data\valid\images
# 测试数据图片存储的位置
test: D:\Deeplearning\Helmet testing\archive\css-data\test\images

# number of classes
nc: 10

# class names
#names: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
#Hardhat - 安全帽
#Mask - 口罩
#NO-Hardhat - 无安全帽
#NO-Mask - 无口罩
#NO-Safety Vest - 无安全背心
#Person - 人
#Safety Cone - 安全锥a
#Safety Vest - 安全背心
#machinery - 机械(挖掘机)
#vehicle - 车辆
names: [Hardhat, Mask, NO-Hardhat, NO-Mask, NO-Safety Vest, Person, Safety Cone, Safety Vest, machinery, vehicle]

yolo_train.py

接下来建训练启动代码,直接调用ultralytics中的YOLO走接口,'data='后面改成上一步建的*.yaml文件,最后再验证后,就能得到模型文件**.bt。

from ultralytics import YOLO  # 导入Yolo模块

# 利用x yolo v8的预训练模型,这个模型是在yolov8训练了coco数据集训练的通用目标检测模型,
# 我们将它作为基础模型,在该模型的基础上,训练安全帽检测
model = YOLO('yolov8n.pt')  # 加载预训练模型

# 训练用户自定义的数据集,数据的配置文件存放在safehat.yaml中,epochs参数不设为100代表训练100代
model.train(data='safehat.yaml', epochs=5)

# 使用验证集验证效果
model.val()

yolo_test.py

训练的启动代码建成后就可以开始了,但是为了完整性,我们一口气将测试的代码也完成,这部分不完全相同于教学视频中的代码,我进行了小小的更改。视频中是单个数据测试需要一个一个输入,但是我有一个文件夹的图片需要识别标注,所以我就把代码改为了遍历整个文件夹的形式。

from ultralytics import YOLO  # 导入在训练中导入yolo模块
import os
import glob

# 导入训练好的模型best.pt
model = YOLO(r'D:\Deeplearning\Helmet testing\archive\runs\detect\train3\weights\best.pt')

# 定义包含源文件的目录
source_dir = r'D:\Deeplearning\Helmet testing\archive\source_files'

# 获取源目录中所有图像和视频文件的列表
file_types = ('*.jpg',  '*.jfif', '*.mp4')  # 根据需要添加或删除文件类型
files_grabbed = []
for files in file_types:
    files_grabbed.extend(glob.glob(os.path.join(source_dir, files)))

# 对每个文件进行预测
for file in files_grabbed:
    model.predict(file, save=True, classes=[0, 2], line_width=4)

最后文件夹应该是长这个样子的。

运行train代码,对模型进行训练,找到best.bt就是你训练出来最好的模型,再利用这个模型,对你输入的图片进行定位识别,因为我的电脑配置不是很ok,视频中的up跑了100轮用了一下午,我就只跑了五轮,花了一个半小时的时间,需要根据自己电脑配置量力而行.......

最后放一下跑的成果吧,视频图片都有,这里就只放下图片:

以上就是一周内学到的知识与安全帽的流程,到此也算是结束了。


这时候,我弟发来了消息

于是,我试试

安全帽是没识别出来,但是这..........

也算是画的是栩栩如生吧!!!

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值