目标检测——yoloV3案例

news2024/11/27 2:16:57

目录

  • 数据获取
  • TFrecord文件
    • 什么是TFrecord文件
    • 将数据转换成TFrecord文件
    • 读取TFrecord文件
    • 数据处理
  • 模型构建
  • 模型训练
    • 损失函数的计算
    • 正负样本的设定
    • 模型训练
      • 获取数据集
      • 加载模型
      • 模型训练
  • 模型预测

数据获取

在这里插入图片描述
labellmage使用方法
在这里插入图片描述
在这里插入图片描述

TFrecord文件

在这里插入图片描述

什么是TFrecord文件

在这里插入图片描述
在这里插入图片描述

将数据转换成TFrecord文件

在这里插入图片描述

from dataset.vocdata_tfrecord import load_labels,write_to_tfrecord
#1
datapath='./VOCdevkit/VOC2007/'
#2
all_xml=load_labels(datapath,'train')
#3
tfrecord_path='./yolov3/dataset/voc_train.tfrecords'
#4
img_path=os.path.join(datapath,'JPEGImages')
#5
write_to_tfrecord(all_xml,tfrecord_path,img_path)

读取TFrecord文件

from dataset.get_tfdata import getdata
dataset=getdata('./dataset/voc_val.tfrecords')
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

#数据展示
#1获取类别信息
from utils.config_utils import read_class_names
classes=read_class_names('config/classname')
#2创建画布
plt.figure(15,10)
#3获取数据遍历
i=0
for image,width,height,boxes,boxes_category in datasets.take(3):
    #4划分不同的坐标轴
    plt.subplot(1,3,i+1)
    #5显示图像:plt.imshow()
    plt.imshow(image)
    #6显示box,遍历所有的bbox,rectange进行绘制
    ax=plt.gca()
    for j in range(boxes.shape[0]):
        rect=Rectangle((boxes[j,0],boxes[j,1]),boxes[j,2] -boxes[j,0],boxes[j,3]-boxes[j,1],color='r',fill=False)
        ax.add_patch(rect)
        #7显示类别
        label_id=boxes_category[j]
        label=classes.get(label_id.numpy())
        ax.text(boxes[j,0],boxes[j,1]+8,label,color='w',size=11,backgroundcolor='none')
    i+=1
plt.show()

在这里插入图片描述

数据处理

在这里插入图片描述

from dataset.preprocess import preprocess
#2创建画布
plt.figure(15,10)
#3获取数据遍历
i=0
for image,width,height,boxes,boxes_category in datasets.take(3):
    #进行数据处理
    image,boxes=preprocess(image,boxes)
    #4划分不同的坐标轴
    plt.subplot(1,3,i+1)
    #5显示图像:plt.imshow()
    plt.imshow(image)
    #6显示box,遍历所有的bbox,rectange进行绘制
    ax=plt.gca()
    for j in range(boxes.shape[0]):
        rect=Rectangle((boxes[j,0],boxes[j,1]),boxes[j,2] -boxes[j,0],boxes[j,3]-boxes[j,1],color='r',fill=False)
        ax.add_patch(rect)
        #7显示类别
        label_id=boxes_category[j]
        label=classes.get(label_id.numpy())
        ax.text(boxes[j,0],boxes[j,1]+8,label,color='w',size=11,backgroundcolor='none')
    i+=1
plt.show()

在这里插入图片描述

模型构建

在这里插入图片描述

模型训练

from model.yolov3 import YOLOv3 
yolov3=YOLOv3((416,416,3),80)
yolov3.summary()

损失函数的计算

在这里插入图片描述

from core.loss import Loss
yolov3_loss=Loss((416,416,3),80)

正负样本的设定

在这里插入图片描述
在这里插入图片描述

from core.bbox_target import bbox_to_target
#获取数据进行目标值设置
for image,width,height,boxes,labels in dataset.take[1]:
    #获取目标值
    label1,label2,label3=bbox_to_target(boxes,label,num_classes=20)
import tensorflow as tf
#获取正样本索引
tf.where(tf.equal(label[...,4],1))
#坐标值
label1[12,12,0,0:4]
label1[12,12,0,5:]

模型训练

在这里插入图片描述

获取数据集

from dataset.preprocess import dataset
batch_size=1
trainset=dataset('dataset/voc_train.tfrecords',batch_size)

加载模型

from model.yoloV3 import YOLOv3
yolov3=YOLOv3((416,416,3),20)

from core.loss import Loss
yoloV3_loss=Loss((416,416,3),20)

模型训练

在这里插入图片描述
在这里插入图片描述

#1定义优化器
optimizer=tf.keras.optimizers.SGD(learning_rate=0.1,momentum=0.9)
#2设置epoch
for epoch in range(2):
    for (batch,inputs) in enumerate(trainset):
        images,labels=inputs
        #3计算损失函数进行参数更新
        #3.1定义上下文缓解
        with tf.GradientTape() as Tape:
            #3.2将图像送入网络中
            outputs=yoloV3(image)
            #3.3计算损失函数
            loss=yoloV3_loss([*outputs,*labels])
            #3.4计算梯度
            grads=Tape.gradient(loss,yolov3.trainable_variables)
            #3.5梯度更新
            optimizer.apply_gradients(zip(grads,yolov3.trainable_variables))
            print(loss)
yolov3.save('yolov3.h5')

模型预测

在这里插入图片描述
在这里插入图片描述

#1
img=cv2.imread('image.jpg')
#2
predicter=Predict(class_num=80,yolov3='weights/yolov3.h5')
#3
boundings=predicter(img)
#4
plt.imshow(img[:,:,::-1])

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python暴力破解wifi密码

python破解WiFi密码 无图形化界面版图形化界面版 刚开始怀着是以为可以自动生成并匹配密码进行破解,然后才知道都需要使用密码本,破解都不知道要猴年马月去了。。。。。但可以研究理解一下代码过程 使用pycharm需要调试一下,比较麻烦&#xf…

【Docker】Docker网络与存储(三)

前言: Docker网络与存储的作用是实现容器之间的通信和数据持久化,以便有效地部署、扩展和管理容器化应用程序。 文章目录 Docker网络桥接网络容器之间的通信 覆盖网络创建一个覆盖网络 Docker存储卷 总结 Docker网络 Docker网络是在容器之间提供通信的机…

速成版-带您一天学完python自动化测试(selenium)

Selenium是一套web网站的程序自动化操作解决方案。我们通过编写自动化程序,使得自动完成浏览器界面的相关操作,除了能够自动化的完成相关操作,还能从web页面获取相关信息,然后通过程序进行分析处理,本质上就是提升从网…

微信小程序的微信一键登录与验证码登录

验证码登录 <template><view class"wx-login"><view class"login-Box"><text class"title">欢迎登录</text><text class"subTitle">再就业男团系统</text><view class"login-Form…

pytorch安装GPU版本 (Cuda12.1)教程: Windows、Mac和Linux系统快速安装指南

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

java List的stream().collect()方法实战

文章目录 订单类测试类测试结果 这几天在做银联的银行卡对账时&#xff0c;一开始只使用参考号来确定一笔交易&#xff0c;但是这样是不严谨的&#xff0c;项目经理要求使用商户号、终端号、流水号、批次号、参考号五个数据项来确定唯一性&#xff0c;所以本次list转map是在此背…

分布式调用与高并发处理 Nginx

一、初识Nginx 1.1 Nginx概述 Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。Nginx 专为性能优化而开发&#xff0c;使用异步非阻塞事件驱动模型。 常见服务…

小程序如何上传商品

​小程序作为一种便捷的电商平台&#xff0c;上传商品是非常重要的一步。本文将为你提供一个完整的小程序上传商品教程&#xff0c;帮助你轻松上架自己的商品。 一、进入商品管理页面 在个人中心点击管理入口&#xff0c;然后找到“商品管理”菜单并点击。 2. 点击“添加商品…

【C++初阶】容器适配器模拟实现栈和队列(附源码)

一.容器适配器 其实在使用模板时&#xff0c;我们不仅可以使用类模板&#xff0c;还可以使用容器模板&#xff0c;这就是一个容器适配器&#xff0c;我们可任意给模板实例化不同的容器&#xff0c;然后就可以使用容器里的接口。 template<class T,class Containers> 我们…

轮播图添加删除

轮播图页面和对话框搭建 页面简单布局 <template><div id"banner"><el-space direction"vertical" :size"20" style"width: 100%"><h1>轮播图管理</h1><div style"text-align: right"&g…

【论文阅读】DQnet: Cross-Model Detail Querying for Camouflaged Object Detection

DQnet: Cross-Model Detail Querying for Camouflaged Object Detection DQnet&#xff1a;伪装目标检测中的跨模型细节查询 论文地址&#xff1a;https://arxiv.org/abs/2212.08296 这篇文章提出了一个交叉模型框架&#xff08;CNN-Transformer并行&#xff09;来检测伪装目…

Cocoapods 集成与初始化 - swift

基于新的 swift 工程集成 cocoapods,操作过程与 object-c 类似, 如下操作基于已成功安装 cocoapods 的基础之上; 首先,终端访问到工程根目录下 cd xxx工程文件夹路径xxx 其次,创建 Podfile 文件 vim Podfile 再其次,创建成功后工程根目录下会得到一个 Podfile 文件,通过终…

MySQL事务机制、导入导出、数据表设计案例(六)

目录 一、数据库事务机制1.1 undo和redo日志1.2 开启事务、提交事务、回滚事务1.3 事务的ACID属性1.4 事务的并发性1.4.1 业务案例1&#xff1a;抢车票1.4.2 业务案例2&#xff1a;转账1.4.3 业务案例3 电商涨价1.4.4 事务的序列化 二、数据导出与导入2.1 SQL文件的导出与导入2…

【操作教程】在EasyCVR平台实现播放MP4视频的两种方法

目前EasyCVR平台可支持国标GB28181、RTSP/Onvif、RTMP、海康Ehome、SDK等方式接入&#xff0c;这些接入方式主要是针对设备或视频流的接入。在有些项目现场也会遇到播放MP4视频文件的需求&#xff0c;今天我们来介绍下&#xff0c;如何在EasyCVR平台实现MP4视频文件的播放&…

vue-element-template管理模板(一)

模板下载 选择分支&#xff1a;https://github.com/PanJiaChen/vue-admin-template/tree/permission-control 端口修改、关闭Eslint 修改vue.config.js文件&#xff08;用放大镜搜索“9528”定位文件&#xff09; const port 9528 lintOnSave: false国际化设置 import lo…

PHP8知识详解:PHP是什么?

PHP是什么&#xff1f; 杨泽业从下面几点为你讲清楚什么是PHP。 1、PHP最开始是Personal Home Page&#xff08;个人主页&#xff09;的缩写&#xff0c;已经正式更名为 “PHP: Hypertext Preprocessor”&#xff0c;超文本预处理器的字母缩写。 2、PHP是一种被广泛应用的、…

改进的减法优化器算法优化BP神经网络---回归+分类两种案例

今天采用前一阵改进最为成功的智能优化算法---融合黄金正弦的减法优化器算法(GSABO)优化BP神经网络。该算法不仅是2023年较新的算法&#xff0c;而且改进后的收敛速度和寻优精度都是极佳&#xff01;点击链接跳转GSABO算法&#xff1a;融合黄金正弦&#xff0c;十种混沌映射&am…

【在英伟达nvidia的jetson-orin-nx-工控机入门了解-自我学习-资料记录-熟悉了解】

【在英伟达nvidia的jetson-orin-nx-工控机入门了解-自我学习-资料记录-熟悉了解】 1、概述2、实验环境3-1初次接触工控机版本-真的好多-新手一脸懵逼3-2 啥是载板和核心板3-3 查看资源资料3-4 了解外设资源3-5 查看博客论坛3-6 底层配置pinmux3-7 Linux驱动开发3-8 AI相关3-8 j…

【基于CentOS 7 的NFS服务】

目录 一、概述 二、应用场景 三、安装 四、启动服务 五、目录结构 1.nfs的主配置文件 2.存储配置文件 六、命令解析 1.共享存储管理命令 2.共享目录查看 七、配置 八、客户端访问 1.查看nfs服务器的共享目录 2.挂载 九、实际案例 一、概述 network filesystemt…

7.12 redis未授权访问漏洞

在1.txt添加存在redis未授权访问漏洞的IP redis.py输入脚本 redis-cli exe -h IP -p 端口号