附录2-tensorflow目标检测

news2024/9/21 0:34:13

源码来自作者Bubbliiiing,我对参考链接的代码略有修改,网盘地址

链接:百度网盘 请输入提取码 提取码:dvb1

目录

1  参考链接

2  环境

3  数据集准备

3.1  VOCdevkit/VOC2007

3.2  model_data/voc_classes.txt

3.3  voc_annotation.py

4  训练 train.py

5  训练结果

6  预测

7  其他

7.1  多线程训练

7.2  二次训练

7.3  学习速率


1  参考链接

源码地址 GitHub - bubbliiiing/yolo3-tf2: 这是一个yolo3-tf2的源码,可以用于训练自己的模型。

博客地址 睿智的目标检测51——Tensorflow2搭建yolo3目标检测平台_Bubbliiiing的博客-CSDN博客_yolo3

视频地址 睿智的目标检测51——Tensorflow2搭建yolo3目标检测平台_Bubbliiiing的博客-CSDN博客_yolo3

2  环境

  • 系统 Linux
  • 显卡 NVIDIA GeForce RTX 3060
  • CUDA 11.1
  • CUDNN 无 (cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2与cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2都查不到)

python版本3.6,环境如下

我直接用这个whl装的,tensorflow_gpu-2.6.0-cp36-cp36m-manylinux2010_x86_64.whl

装完之后将keras降到了2.6.0

训练时默认使用GPU资源进行训练

项目放在home下,项目命名为tensorflow_object_detection

3  数据集准备

数据集为877张图像,4分类,其中speedlimit 705个框,crosswalk 174个框,traffclight 154个框,stop 88个框

3.1  VOCdevkit/VOC2007

在项目路径下的VOCdevkit/VOC2007中,将Annotations放入标注的XML文件,JPEGImages放入标注的图片文件(必须是jpg格式的图像,其他格式的不行)

进入ImageSets/Main,删除其中的所有内容

删除项目路径下的 2007_train.txt与2007_val.txt

3.2  model_data/voc_classes.txt

打开项目路径下model_data中的voc_classes.txt

将里面的内容改为自己要训练的类别,顺序无所谓

3.3  voc_annotation.py

不需要改动代码直接运行 voc_annotation.py

运行后会生成这些文件

4  训练 train.py

根据需要修改这里的epoch

然后直接运行就好了,一些warning可以无视掉

在训练开始的时候会给一些提示,可根据这里的提示修改上面的epoch,比如我现在就将epoch设置为569

  • 训练会持续很长事件

5  训练结果

训练结束后会在logs中出现一些文件,我们预测的时候使用 best_epoch_weights.h5 就可以了

我们可以在训练过程中,或者在训练好的loss文件中,查看loss情况

在epoch_loss.txt中可以查看具体的数值

  • 看下面这两个哪个都行

6  预测

我简单改了一下源代码中yolo.py的detect_image方法,目的是拿到预测的信息,而不是直接得到图像

  • 文件名改为了Suyu_yolo.py,下面的predict.py中会进行调用

然后改了一下源码中的predict.py(文件名我改为了Suyu_predict.py)

import time
import cv2
import numpy as np
import tensorflow as tf
from PIL import Image
from Suyu_yolo import YOLO
from utils.utils import get_classes

gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)

yolo = YOLO()

class_names,num_classes = get_classes('model_data/voc_classes.txt')
img = './img/road344.jpg'
image = Image.open(img)
out_boxes, out_scores, out_classes = yolo.detect_image(image)

result_img = cv2.imread(img)
for i, c in list(enumerate(out_classes)):
    predicted_class = class_names[int(c)]
    box = out_boxes[i]
    score = out_scores[i]

    top, left, bottom, right = box

    top = max(0, np.floor(top).astype('int32'))
    left = max(0, np.floor(left).astype('int32'))
    bottom = min(image.size[1], np.floor(bottom).astype('int32'))
    right = min(image.size[0], np.floor(right).astype('int32'))

    label = '{} {:.2f}'.format(predicted_class, score)
    print(label)

    cv2.rectangle(result_img,(left,top),(right,bottom),(0,255,0),2)
    cv2.putText(result_img,label,(left,top+5),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2)

cv2.imshow('result_img',result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

之后我们将一张图像放在文件夹img中

之后运行predict.py就可以得到结果了

7  其他

7.1  多线程训练

将train.py中的num_workers置为0可以进行多线程训练

7.2  二次训练

每一次都从0开始训练耗费时间太多,所以我们需要对训练好的模型进行二次训练

首先读取一次训练,训练好的模型

将其更改为一次训练的epoch数

将其更改为最终的轮数,我上面初始写的500,这里写的1000,就表明再训练500轮

二次训练的初始loss值是根据你之前训练好的模型来的,所以初始的loss值不会像没训练过一样高(20多)

7.3  学习速率

训练结束后,如果我们发现loss值没有走低的趋势的时候(或训练过程中,我们可以停止训练,然后使用最近一次的h5文件进行二次训练二次训练),我们可以尝试降低学习率

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

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

相关文章

Github每日精选(第100期): 从超过 50 亿的自然语言中获得洞察力ossinsight

介绍 OSS Insight 是一个强大的工具,通过分析超过 5 亿行的 GitHub 事件数据,提供对开源世界的全面、有价值和趋势洞察。 OSS Insight 的Data Explorer提供了一种探索 GitHub 数据的新方法。只需用自然语言提出您的问题,Data Explorer 就会…

PMP应该如何备考?

备考之初的我们,总会四处搜索PMP备考经验,希望能拿到那些高分通关前辈的备考经验和方法。众所周知PMP考试因为有35个学时培训的基本要求,所以肯定是要通过培训机构报名的。 一,首先我们需要了解到新的考纲 1.PMP模块划分发生变化…

开关电源环路稳定性分析(11)——观察法找零极点

大家好,这里是大话硬件。 这篇文章主要是分享如何用观察法直接写出补偿网络中的零极点的表达式。 在前面的文章中,我们分别整理了OTA和OPA型的补偿网络,当时有下面的结论。 针对某个固定的补偿网络,我们可以用数学的方法推导补偿…

2W薪资必备技能 —— Python接口自动化测试

目录 一、基础准备 1. 环境搭建 2. 接口基础知识 2.1 接口分类 2.2 接口请求类型 二、Requests 快速上手 1. requests基础 1.1 发送请求 1.2 参数传递 1.3 接口响应 1.4 接口其他处理 2. requests 高级应用 2.1 会话对象 2.2 请求与响应对象 2.3 准备的请求 2.…

设置软件以管理员权限开机自启动,MemReduct为例

目录 一.MemReduct 1.简介 2.下载方式 二.问题描述 三.具体操作 1.在windows搜索框搜索"任务计划程序" 并打开 2.在右方操作栏点击创建任务 3.常规选项 4.操作选项 5.触发器选项 6.条件选项 7.启动 一.MemReduct 1.简介 支持中文,是一个很方便的内存清理软…

pyTorch下载和cuda下载以及学习笔记

pytorch官方网站,cuda官方网站 CUDA下载:https://developer.nvidia.com/cuda-toolkit-archive CUDNN下载:https://developer.nvidia.com/rdp/cudnn-download pytorch下载:pytorch.org 任务管理器中只显示CUDA占用的专用内存&#…

postman实现接口测试详细教程

各位小伙伴大家好, 今天为大家带来postman实战接口测试详细教程 一、通过接口文档集合抓包分析接口 通过fiddler抓包获取到注册接口URL地址及相关参数数据,并通过接口文档分析接口参数内容及参数说明, 如有必要的依赖条件必须进行梳理, 如token等 Fiddler抓包注册接口请求与…

领英精灵和领英助理哪个好?为什么领英精灵是LinkedIn最好的配套工具?

领英精灵和领英助理哪个好?这是很多使用领英工具的人会问的问题,这2个工具我都有使用过,下面说说我使用后的感受和区别: 公司背景 首先从他们的公司背景看,领英精灵是汇聚了国内领英专家针对领英规则设计的&#xff…

32、基于51单片机红外智能垃圾桶系统设计

摘要 随着现代化进程的日益推进,科技越来越发达,人们的生活水平也提高了,城市化程度越来越高,与此同时也带了许多问题,生活垃圾越来越多垃圾设施却不够完善。无论是在公共场合还是家庭厨房的垃圾大都是没有盖或者有盖…

C语言——指针(进阶详解)

文章目录指针概念的回顾1.字符指针1.1字符指针练习题2.指针数组3.数组指针3.1数组指针的定义3.2 &数组名和数组名的区别3.3数组指针的使用3.4一组简单的练习题4.数组和指针作为函数参数4.1一维数组传参**总结**4.2二维数组传参**总结**4.3一级指针传参**总结**4.4二级指针传…

Spring Boot RCE到内存马探索

前言 SpringBootVulExploit是Spring Boot漏洞Check list,但在真正的环境中进行漏洞利用还是有一段距离的,因此衍生出了SpringBootExploit工具。本文是对该Check list到内存马探索之路的记录。再此过程中学到了很多知识,收获了很多&#xff0…

线性双功能PEG羧酸Acetic Acid-PEG-Acetic Acid,AA-PEG-AA,羧酸PEG羧酸

产品名称: 1、英文:Acetic Acid-PEG-Acetic Acid AA-PEG-AA 2、中文:羧酸-聚乙二醇-羧酸 产品介绍: AA-PEG-AA是一种线性双功能PEG羧酸试剂。PEG和COOH基团之间存在亚甲基(CH2)键。AA-PEG-AA也称为CM-P…

测试平台系列——编写oss管理页面

上一节我们编写好了oss相关的crud接口,那这一节我们就得为oss数据的管理编写一个新的页面了。 即将做的是一个极度精简的文件管理页面。 效果图 因为我每次都是写完一段代码,然后编写对应教程,所以效果图这种东西自然是不在话下: 图片可以…

更改SAP GUI登录界面信息

在SAP GUI的登录界面,左部输入登录信息如客户端、用户名、密码等,右部空余部分可维护一些登录信息文本,如登录的产品、客户端说明及注意事项等,此项操作详见SAP Notes 205487 – Own text on SAPGui logon screen 维护文档使用的…

从春节后央行的首批罚单,看金融反欺诈反洗钱的复杂性

目录 个人信息保护的问题 征信管理的问题 反洗钱与反欺诈的问题 金融欺诈愈加复杂多变 金融机构如何增强反欺诈反洗钱 春节后,央行公示首批罚单。其中,厦门银行被中国人民银行福州中心支行给予警告,并没收违法所得767.17元,处…

30个HTML+CSS前端开发案例(五)

30个HTMLCSS前端开发案例(21-25)本人说明全屏加载动画效果代码实现效果吃豆豆动画效果代码实现效果鼠标悬停3D翻转效果代码实现效果3D旋转木马效果代码实现效果flex弹性布局-酷狗音乐播放列表代码实现效果资源包本人说明 本专栏为记录博主的毕业设计而开…

论文阅读 | Restormer: Efficient Transformer for High-Resolution Image Restoration

前言:CVPR2022oral 用transformer应用到low-level任务 Restormer: Efficient Transformer for High-Resolution Image Restoration 引言 low-level task 如deblurring\denoising\dehazing等任务多是基于CNN做的,这样的局限性有二: 第一是卷…

文献综述,参考文献引用

知网完成文献综述 点击已选: 点导出题录 点自定义,点摘要,点预览 复制到剪切板 参考文献如何在论文中标注引用 国内外研究综述 简单介绍主题和所用理论,用第一段写综述的总结。 【 ...作...在西方国家已经有...多年的历史&…

基于应力的拓扑优化的高效3D灵敏度分析代码(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【FFMPEG源码分析】从ffplay源码摸清ffmpeg框架(三)

从ffplay源码分析这篇文章中可以知道int stream_component_open(VideoState *is, int stream_index)函数是创建和初始化decoder的入口。本篇文章从此入口看下ffmpeg中decoder的内部结构是什么样子。 同样先提出几个问题,带着问题梳理源码,效率贼快啊 ff…