YOLOv5入门

模型检测

关键参数

weights:训练好的模型文件

image-20230803192833654

source: 检测的目标,可以是单张图片、文件夹、屏幕或者摄像头等

image-20230803192903522

conf-thres: 置信度闯值,越低框越多,越高框越少

iou-thres: IOU闻值,越低框越少,越少框越多

torch.hub检测方法

安装Jupyter

命令行输入以下代码

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterlab
conda install ipykernel

image-20230803193551027

激活环境

python -m ipykernel install --name yolov5

image-20230803200817611

新建Jupyter文件

hub_detect.ipynb

image-20230803193329230

import torch#Model
model = torch.hub.load("./","yolov5s",source= "local")#Images
img = "./data/images/zidane.jpg"# Inference
results = model(img)# Results
results.show()

注意运行环境,在下yolov5

image-20230803200936030

数据集构建

视频放在data02文件夹下

抽取视频帧

import cv2
import matplotlib.pyplot as plt
#%%
# 打开视频文件
video = cv2.VideoCapture("./BVN.mp4")
# 读取一帧
ret, frame = video.read()plt.imshow(frame)plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))video = cv2.VideoCapture("./BVN.mp4")
num = 0         # 计数器
save_step = 30  # 间隔帧
while True:ret, frame = video.read()if not ret:breaknum += 1if num % save_step == 0:cv2.imwrite("./images/" + str(num) + ".jpg", frame)

安装标准工具labelimg

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple labelimg

使用labelimg

  • 终端输入labelimg

  • 打开需要标注的文件夹images

image-20230803225027177

  • 设置保存路径

image-20230803225658417

  • 点击下图的标志,将保存格式改为YOLO

image-20230803225332505

  • 开启自动保存

image-20230803225752233

  • 开始标注,鼠标右键点击Create RectBox

image-20230803225938948

  • 框出两个人物,并命名

image-20230803230054984

  • 切换下一张图片,继续标准(快捷键A下一张,D下一张,W创建RectBox)

  • 标准完成后,文件夹内容如图所示

image-20230803232028650

模型训练

调整文件命名

命名严格一致,不能改

image-20230803232326057

文件调整

image-20230803232806766

image-20230803232740636

设置yaml文件

  1. 复制coco128.yaml文件,并命名为bvn.yaml

image-20230803233606669

  1. 修改bvn.yaml

image-20230803234334745

  1. 修改train.py

文件名改为bvn

workers设置为1

image-20230803233922856

image-20230804002329930

  1. 运行train.py,训练模型

中间肯能需要下载一写东西,比较慢,慢慢等(可以挂个梯子)

报错,查看下面的报错解决

image-20230804010009222

报错解决

页面文件太小,无法完成操作

训练过程中,发生下图所示的报错,同时pycharm崩溃

image-20230804000941294

1. 更改虚拟内存

  1. 进入高级系统设置,应该都会进,就不说过程了

image-20230804002758867

  1. 设置虚拟内存大小

image-20230804003012617

2. 减小占用内容大小

  1. 新建一个fixNvPe.py程序
# Simple script to disable ASLR and make .nv_fatb sections read-only
# Requires: pefile  ( python -m pip install pefile )
# Usage:  fixNvPe.py --input path/to/*.dllimport argparse
import pefile
import glob
import os
import shutildef main(args):failures = []for file in glob.glob( args.input, recursive=args.recursive ):print(f"\n---\nChecking {file}...")pe = pefile.PE(file, fast_load=True)nvbSect = [ section for section in pe.sections if section.Name.decode().startswith(".nv_fatb")]if len(nvbSect) == 1:sect = nvbSect[0]size = sect.Misc_VirtualSizeaslr = pe.OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASEwritable = 0 != ( sect.Characteristics & pefile.SECTION_CHARACTERISTICS['IMAGE_SCN_MEM_WRITE'] )print(f"Found NV FatBin! Size: {size/1024/1024:0.2f}MB  ASLR: {aslr}  Writable: {writable}")if (writable or aslr) and size > 0:print("- Modifying DLL")if args.backup:bakFile = f"{file}_bak"print(f"- Backing up [{file}] -> [{bakFile}]")if os.path.exists( bakFile ):print( f"- Warning: Backup file already exists ({bakFile}), not modifying file! Delete the 'bak' to allow modification")failures.append( file )continuetry:shutil.copy2( file, bakFile)except Exception as e:print( f"- Failed to create backup! [{str(e)}], not modifying file!")failures.append( file )continue# Disable ASLR for DLL, and disable writing for sectionpe.OPTIONAL_HEADER.DllCharacteristics &= ~pefile.DLL_CHARACTERISTICS['IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE']sect.Characteristics = sect.Characteristics & ~pefile.SECTION_CHARACTERISTICS['IMAGE_SCN_MEM_WRITE']try:newFile = f"{file}_mod"print( f"- Writing modified DLL to [{newFile}]")pe.write( newFile )pe.close()print( f"- Moving modified DLL to [{file}]")os.remove( file )shutil.move( newFile, file )except Exception as e:print( f"- Failed to write modified DLL! [{str(e)}]")failures.append( file )continueprint("\n\nDone!")if len(failures) > 0:print("***WARNING**** These files needed modification but failed: ")for failure in failures:print( f" - {failure}")def parseArgs():parser = argparse.ArgumentParser( description="Disable ASLR and make .nv_fatb sections read-only", formatter_class=argparse.ArgumentDefaultsHelpFormatter )parser.add_argument('--input', help="Glob to parse", default="*.dll")parser.add_argument('--backup', help="Backup modified files", default=True, required=False)parser.add_argument('--recursive', '-r', default=False, action='store_true', help="Recurse into subdirectories")return parser.parse_args()###############################
# program entry point
#
if __name__ == "__main__":args = parseArgs()main( args )
  1. 安装pefile
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pefile

image-20230804001137635

  1. 终端运行fixNvPe.py文件
python fixNvPe.py --input E:\kaifa\Anaconda3\envs\yolov5\lib\site-packages\torch\lib\cudnn_adv_infer64_8.dll

intput后面的路径,就是报错那里,后面给的路径

出现下图所示表示执行完毕

image-20230804001547119

RuntimeError: CUDA out of memory.

解决方式:

换小模型

image-20230804004234793

AttributeError: ‘FreeTypeFont’ object has no attribute ‘getsize’

image-20230804004739957

这是因为安装了新版本的 Pillow (10),pip install tf-models-official删除了该getsize 功能,降级到 Pillow 9.5 解决了该问题

解决方式:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Pillow==9.5

查看日志

终端输入tensorboard --logdir runs

image-20230804010221749

训练效果检测

命令行输入以下命令

python detect.py  --weights runs/train/exp/weights/best.pt --source data02/BVN.mp4 --view-img

image-20230804011029138

image-20230804011220424

image-20230804011303814

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/53282.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv-32 图像平滑处理-高斯滤波cv2.GaussianBlur()

在进行均值滤波和方框滤波时,其邻域内每个像素的权重是相等的。在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重 的和。 基本原理 在高斯滤波中,卷积核中的值不…

阶段总结(linux基础)

目录 一、初始linux系统 二、基本操作命令 三、目录结构 四、文件及目录管理命令 查看文件内容 创建文件 五、用户与组管理 六、文件权限与压缩管理 七、磁盘管理 八、系统程序与进程管理 管理机制 文件系统损坏 grub引导故障 磁盘资源耗尽 程序与进程的区别 查…

layui之layer弹出层的icon数字及效果展示

layer的icon样式 icon如果在信息提示弹出层值(type为0)可以传入0-6,icon与图标对应关系如下: 如果是加载层(type为3)可以传入0-2,icon与图标对应关系如下:

【Java】批量生成条码

批量生成PDF条码 效果图: //调用下方接口注意编码格式if(CollectionUtil.isNotEmpty(productExList)){String exportFileName URLEncoder.encode("商品条码", "UTF-8") DateUtil.format(new Date(), "yyyyMMddHHmmss");response.…

“科创中国”青百会轮值主席吴甜:以大语言模型为代表的AI将引发产业变革

8月1日,“科创中国”青年百人会(后文简称青百会)联合百度举办“青创汇”高端对话,围绕人工智能技术创新与产业发展交流研讨,同时正式成立“科创中国”青年百人会女性工作委员会。该委员会将鼓励更多女性投身科技创新事…

AP2400 LED汽车摩灯照明电源驱动 过EMC DC-DC降压恒流IC

产品特点 宽输入电压范围:5V~100V 可设定电流范围:10mA~6000mA 固定工作频率:150KHZ 内置抖频电路,降低对其他设备的 EMI干扰 平均电流模式采样,恒流精度更高 0-100%占空比控制&#xff0…

快速制作美容行业预约小程序

随着科技的不断进步,移动互联网的快速发展,小程序成为了很多行业迅速发展的利器。对于美容行业来说,一款美容预约小程序不仅可以方便用户进行预约,还可以提升美容店铺的服务质量和管理效率。下面,我们来介绍一下如何快…

Unreal Engine 各种编译运行模式的区别和应用场景

DebugGame: DebugGame模式用于在开发过程中进行调试。在这个模式下,项目会以调试模式编译,并包含调试符号(debug symbols)。这样,你可以在游戏中设置断点、查看变量的值以及进行代码调试。但由于包含调试符号,生成的可…

【力扣】21. 合并两个有序链表 <链表指针>

【力扣】21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2 输入:l1 [], l2 [] 输出:…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 2

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨,在1995年出版的《未来之路》一书中,提及“物物互联”。1998年麻省理工学院提出,当时被称作EPC系统的物联网构想。2005年11月,国际电信联盟发布《ITU互联网…

kettle 连接jdbc

DM JDBC连接 oracle JDBC连接 PG JDBC连接 SQLSERVER JDBC连接

C++---list常用接口和模拟实现

list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数,拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…