挑战一星期复现一个项目——安全帽项目

news/2025/2/21 4:49:48

本项目为识别安全帽项目,基于yoloV5模型,接下来,我将一步一步展示我的完整复现过程以及遇到的问题和解决方案。

前言

我们在利用GPU进行深度学习的时候,都要去NVIDIA的官网下载CUDA的安装程序和cudnn的压缩包,然后再进行很繁琐的系统环境配置。不仅环境配置麻烦,而且还特别容易配置错误,特别还有CUDA和cudnn版本的对应也特别容易搞错,但是利用anaconda安装配置pytorch和paddlepaddle环境的时候会自动帮我们配置好cuda和cudnn。

一、直接创建虚拟环境(不介绍如何安装Anconda了,自行百度搜索)

第一步:

  • win+R 输入cmd,打开终端
  • conda env list 用来查看有哪些环境

可以看出来,新安装的anaconda只有一个base环境
在这里插入图片描述
这里先讲一下anaconda环境,首先base环境是一个大的环境,类似一个很大的一个房子(但是没有房间),当我们每创建一个环境就都会相当于在这个大房子里面用隔板创建一个房间,然后这个房间里面可以安装我们所需要的包,这样管理起来就比较方便。如图可以比较直观的诠释anaconda的环境。
在这里插入图片描述

  • conda create -n pytorch python=3.8 创建虚拟环境conda create -n 环境名字(英文) python=x.x(python版本),我就是创建了一个名字叫pytorchpython是3.8版本的环境。
  • conda remove --name myenv --all 假设环境名称为myenv,此方法为删除环境

通过在终端命令行输入conda create -n pytorch python=3.8,会显示下面的内容。在这里插入图片描述
出现如下形式则安装成功。
在这里插入图片描述
在终端命令命令行输入conda activate pytorch,则会进入该环境。
进入环境之后,则需要安装相应的包,安装pytorch-gup版的环境,由于pytorch的官网在国外,下载相关的环境包是比较慢的,所以我们给环境换源。在pytorch环境下执行如下的命名给环境换清华源。

python">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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes

在这里插入图片描述
然后打开pytorch的官网:https://pytorch.org/,
首先查看电脑的显卡版本,步骤为:此电脑右击–>管理–>设备管理器–>显示适配器。就可以看到电脑显卡的版本了。如图,可以看到我的是一块RTX3050显卡。
在这里插入图片描述
有显卡驱动的,可以直接在桌面右键,找到英伟达驱动控制面板打开就好了。
在这里插入图片描述
在这里插入图片描述
显卡驱动的下载地址:https://www.nvidia.cn/drivers/lookup/(可能打开比较慢,多打开几遍)。
在这里插入图片描述
在这里插入图片描述
然后根据自己的电脑的配置去选择驱动。这里Notebooks是笔记本的意思,所以如果你是笔记本电脑,那么产品系列那个选项就要选择(Notebooks)的。还有那个下载类型有两种一个是Studio版本,一个是Game Ready版本。其实两个版本都差不多,一个是偏办公用,一个是偏游戏娱乐。按如下操作将驱动下载下来。然后点击下载来的程序,不断的下一步就好了。
安装(更新)好了显卡驱动以后。我们按下win+R组合键,打开cmd命令窗口。输入如下的命令。nvidia-smi
在这里插入图片描述

由于刚才我们通过驱动检测到我的显卡为 RTX3050,最高支持cuda12.6版本,所以我们选择cuda12.6版本的cuda,然后将下面红色框框中的内容复制下来在这里插入图片描述
由于cuda12.6提示不能用,建议我们用pip下载,因此我们使用pip的。
在这里插入图片描述
当我运行此命令pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118出现了下面的错误,
在这里插入图片描述
因此,我们换个命令行pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu126出现以下内容,则表示安装成功。
在这里插入图片描述

二、项目开始

2.1 数据集准备

https://pan.baidu.com/s/1WwNX-bU9fD_mAofasn7E4A?pwd=6x9r
上面的链接为数据集的链接,下载即可。
下载好数据集之后,用第三步“数据集格式转换与划分”中将voc数据格式转换为yolo数据格式的代码,完成数据集的划分。
在划分数据集之前,你的数据集结构应该是这样子的:
在这里插入图片描述
在这里插入图片描述
当数据集划分后,除了在VOC2007路径下多了yolo格式的数据文件夹:
在这里插入图片描述
在VOCdevkit路径下会多出两个文件夹,分别是images和labels,里面其实就是划分的训练集和验证集。
在这里插入图片描述
进入yolov5下载的GitHub网站下载代码:https://github.com/ultralytics/yolov5/tree/v5.0
通过下面这个链接下载5s这个权重文件:https://pan.baidu.com/s/10uyMTanqm9DQvSFctiyYQQ?pwd=wnlt
数据集的放置:放置到你解压源代码文件后的yolov5-5.0路径下就可以了,与data、models、runs等文件夹是同路径的。

2.2 数据集标注

首先通过Anaconda安装labelimg,在Anaconda命令行窗口中依次输入下列代码,安装labelimg依赖的第三方库。

python"># 进入自己创建的虚拟环境
conda activate mytorch

# 安装相关的库
pip install PyQt5 -i https://pypi.douban.com/simple
pip install pyqt5-tools -i https://pypi.douban.com/simple 
pip install lxml -i https://pypi.douban.com/simple 
pip install labelimg -i https://pypi.douban.com/simple 
#若安装失败,则去掉-i 网址   

然后在Anaconda Prompt终端输入labelimg指令进入到labelimg标注界面,labelimg的标注模式分为VOC和YOLO两种,两种模式下生成的标注文件分别为.xml文件和.txt文件,因此在进行标注前需要优先选择好标注的模式。进入labelimg标注工具的初始化界面如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 划分训练集和验证集

运行prepare_data.py在yolov5项目文件夹下生成yolov5_train.txt和yolov5_val.txt,在VOCdevkit / VOC2007目录下可以看到生成了YOLOLabels文件夹 ;另外,在VOCdevkit目录下生成了images和labels文件夹。
注意:yolov5_train.txt和yolov5_val.txt分别给出了训练图片文件和验证图片文件的列表,含有每个图片的路径和文件名。
在这里插入图片描述
在这里插入图片描述

2.4 修改配置文件

修改配置文件:data/voc_hat.yaml和models/yolov5s_hat.yaml参数——训练集和验证集数据加载路径、标注的类别数、标签类别名称
在这里插入图片描述
以上内容,便是完整的全部项目,需要完整的项目可以私信。


http://www.niftyadmin.cn/n/5860174.html

相关文章

基于python深度学习遥感影像地物分类与目标识别、分割

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…

海康 Java SDK 升级 JNA 版本

海康 Java SDK 依赖 JNA 3.0.9,业务中已经使用了更高版本的 JNA,所以需要升级,记录一下从 JNA 3.0.9 升级 JNA 5.15.0 的方法。 海康 Java SDK 核心类是 HCNetSDK,JNA 升级需要处理继承自 com.sun.jna.Structure 类,覆…

WebSocket(WS)协议系列(一)基本概念

ws协议是什么? WebSocket(WS)协议是一种网络通信协议,提供了全双工、单连接、低延迟的通信方式,通常用于浏览器和服务器之间的实时数据交换。与传统的HTTP协议相比,WebSocket允许在客户端和服务器之间建立…

越权漏洞及其修复方法

越权漏洞及其修复方法 1. 越权漏洞的定义 **越权漏洞(Authorization Bypass Vulnerability)**是指攻击者通过某种方式绕过权限控制,访问或操作其无权访问的资源或功能。这种漏洞通常发生在身份验证和权限管理机制不完善的情况下。 越权漏洞…

自由学习记录(36)

Linux Linux 是一个开源的操作系统,其内核及大部分组件都遵循自由软件许可证(如 GPL),允许用户查看、修改和分发代码。这种开放性使得开发者和企业可以根据自己的需求定制系统​。 “Linux”严格来说只是指由Linus Torvalds最初开…

Linux的基础指令和环境部署,项目部署实战(下)

目录 上一篇:Linxu的基础指令和环境部署,项目部署实战(上)-CSDN博客 1. 搭建Java部署环境 1.1 apt apt常用命令 列出所有的软件包 更新软件包数据库 安装软件包 移除软件包 1.2 JDK 1.2.1. 更新 1.2.2. 安装openjdk&am…

内核数据结构用法(2)list

list 在 Linux 内核中&#xff0c;链表操作是通过一组宏和函数来实现的&#xff0c;这些操作通常用来管理和遍历链表。以下是一些常用的链表函数和宏的具体用法。 1. 定义链表节点 首先&#xff0c;你需要定义一个包含 struct list_head 的结构体&#xff1a; #include <…

C++(23):lambda可以省略()

C越来越多的使用了lambda&#xff0c;C23也进一步的放宽了对lambda的限制&#xff0c;这一次&#xff0c;如果lambda没有参数列表&#xff0c;那么可以直接省略掉()&#xff1a; #include <iostream> using namespace std;void func() {auto f []{cout<<"in…