tensorflow图像检测代码问题

1. 问题描述

教学的演示代码中发现一个问题,去年的代码,用的是tf1.14,准确率以及IOU能到90%+,但今年用tf2.12.0,准确率降低了非常多,而且iou降的根本就没法看了。代码只是将模型的激活函数层Activation('sigmoid')的激活函数由relu修改为了sigmoid,也正是因为做了这部分修改,准确率从60%上升到了82%。

2. 整个代码解决问题

该代码首先是生成了5w个8*8像素的图片,然后再在里面随机生成一个黑色的小方块,训练深度模型用来检测方框的边界。

3. 具体代码

具体代码如下,不依赖其他的包即可运行。

import numpy as np #处理科学数组的苦
import warnings 
import matplotlib.pyplot as plt  #画图的库
import matplotlib  #画图的苦
%matplotlib inline
warnings.filterwarnings("ignore")
num_imgs = 50000

img_size = 8
min_object_size = 1
max_object_size = 4
num_objects = 1
show_img_idx = 10

bboxes = np.zeros((num_imgs, num_objects, 4))
imgs = np.zeros((num_imgs, img_size, img_size))

for i_img in range(num_imgs):
    for i_object in range(num_objects):
        w, h = np.random.randint(min_object_size, max_object_size, size=2)
        x = np.random.randint(0, img_size - w)
        y = np.random.randint(0, img_size - h)
        imgs[i_img, x:x+w, y:y+h] = 1.  
        bboxes[i_img, i_object] = [x, y, w, h]
        
#print( imgs[show_img_idx], bboxes[show_img_idx])
plt.imshow(imgs[show_img_idx].T, cmap='Greys', interpolation='none', origin='lower', extent=[0, img_size, 0, img_size])
X = (imgs.reshape(num_imgs, -1) - np.mean(imgs)) / np.std(imgs)   #归一化操作
y = bboxes.reshape(num_imgs, -1) / img_size   #

# Split training and test.
i = int(0.8 * num_imgs)
train_X = X[:i]
test_X = X[i:]
train_y = y[:i]
test_y = y[i:]

test_imgs = imgs[i:]
test_bboxes = bboxes[i:]
# Build the model.
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout
from tensorflow.keras.optimizers import SGD, Adam


model = Sequential([Dense(256, input_dim=train_X.shape[-1]), 
                    Dropout(0.2), 
                    Activation('sigmoid'), 
                    Dense(test_y.shape[-1])
                   ])
#model.compile('adadelta', 'mse') 
model.compile(optimizer=Adam(), loss='mse', metrics=['accuracy'])
model.summary()
# Train
model.fit(train_X, train_y, epochs=30, validation_data=(test_X, test_y), verbose=2) #300 4.6900
# Predict bounding boxes on the test images.
pred_y = model.predict(test_X)
pred_bboxes = pred_y *img_size
pred_bboxes = pred_bboxes.reshape(len(pred_bboxes), num_objects, -1)
def IOU(bbox1, bbox2):
    '''Calculate overlap between two bounding boxes [x, y, w, h] as the area of intersection over the area of unity'''
    x1, y1, w1, h1 = bbox1[0], bbox1[1], bbox1[2], bbox1[3]
    x2, y2, w2, h2 = bbox2[0], bbox2[1], bbox2[2], bbox2[3]

    w_I = min(x1 + w1, x2 + w2) - max(x1, x2)
    h_I = min(y1 + h1, y2 + h2) - max(y1, y2)
    if w_I <= 0 or h_I <= 0:  # no overlap
        return 0.
    I = w_I * h_I

    U = w1 * h1 + w2 * h2 - I

    return I / U

summed_IOU = 0.
for pred_bbox, test_bbox in zip(pred_bboxes.reshape(-1, 4), test_bboxes.reshape(-1, 4)):
    #print(pred_bbox, test_bbox)
    this_iou = IOU(pred_bbox, test_bbox)
    #print(this_iou)
    summed_IOU += this_iou
mean_IOU = summed_IOU/len(pred_bboxes)
print("平均IOU为 ", mean_IOU)

Epoch 30/30
1250/1250 - 3s - loss: 5.1984e-04 - accuracy: 0.8519 - val_loss: 0.0012 - val_accuracy: 0.8214 - 3s/epoch - 3ms/step

IOU为0.52626

太奇怪了,求大佬解答,有以下怀疑点。

1、版本更新,导致激活函数有不同。

2、tf版本的更新使得训练模型的步骤出现了问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uView u-parse 在nvue页面中无作用踩坑

问题起因&#xff1a; 在uni-app开发的app nvue页面中有需要回显渲染字符串形式的富文本内容 但使用v-html和uniapp的rich-text组件都无法起到作用&#xff0c;就想到了使用uView中u-parse进行尝试。 uView我是使用uniApp插件市场导入的方式将插件导入项目的uni_modules中 …

2024年教你学浪视频抓取#小浪助手

在2024年&#xff0c;学浪平台已经成为学习者们追逐知识、获取学习资源的热门平台之一。然而&#xff0c;尽管学习平台提供了丰富多样的学习内容&#xff0c;但有时候我们还是希望能够将这些学习资源下载下来&#xff0c;以便随时随地进行学习。那么&#xff0c;如何学习学浪视…

【layoutlmv3推理】无法识别的pdf使用ocr识别代码demo实例

目录 前情提要一、安装依赖1、直接安装的依赖2、需要编译的依赖1&#xff09;Leptonica2&#xff09;icu3&#xff09;Tesseract 3、需要自行配置的依赖 二、模型下载三、更改transformers源码四、加载光学字符识别语言包五、运行代码 前情提要 在做pdf转文本时&#xff0c;发…

用于割草机器人,商用服务型机器人的陀螺仪

介绍一款EPSON推出适用于割草机器人&#xff0c;商用服务型机器人的高精度陀螺仪模组GGPM61&#xff0c;具体型号为GGPM61-C01。模组GGPM61是一款基于QMEMS传感器的低成本航向角输出的传感器模组&#xff0c;它可以输出加速度、角速度及姿态角等信息&#xff0c;为控制机器人运…

航空业微服务架构中台的构建与实践

随着航空业的快速发展&#xff0c;航空公司需要面对更加复杂的业务环境和客户需求。在这样的背景下&#xff0c;构建一个稳健、高效的微服务架构中台成为了航空公司的当务之急。本文将探讨航空业微服务架构中台的设计理念、关键技术以及实践经验&#xff0c;帮助航空公司构建具…

「Java开发指南」如何利用MyEclipse启用Spring DSL?(二)

本教程将引导您通过启用Spring DSL和使用Service Spring DSL抽象来引导Spring和Spring代码生成项目&#xff0c;本教程中学习的技能也可以很容易地应用于其他抽象。在本教程中&#xff0c;您将学习如何&#xff1a; 为Spring DSL初始化一个项目创建一个模型包创建一个服务和操…

面向多源异质遥感影像地物分类的自监督预训练方法

源自&#xff1a;测绘学报 作者&#xff1a;薛志祥, 余旭初, 刘景正, 杨国鹏, 刘冰, 余岸竹, 周嘉男, 金上鸿 摘 要 近年来,深度学习改变了遥感图像处理的方法。由于标注高质量样本费时费力,标签样本数量不足的现实问题会严重影响深层神经网络模型的性能。为解决这一突出矛盾…

将本地项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮&#xff0c;新建一个项目 新建空白项目 项目名称与本地新建项目名称相同&#xff0c;其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下&#xff0c;右击 git bash here打开命令窗口 初始化…

MappedStatement解析流程

前言 之前写了一篇博文&#xff0c;介绍了mybatis的解析过程&#xff0c;其中mapper标签只演示了如何使用&#xff0c;这篇博文我们来探究mapper标签解析流程 源码解析 核心方法入口 引入mapper方式 使用相对于类路径的资源引用使用完全限定资源定位符&#xff08;URL&…

“五之链”第十六期沙龙活动在呆马科技成功举办

2024年4月19日&#xff0c;由临沂呆码区块链网络科技有限公司&#xff08;呆马科技&#xff09;承办的第十六期“五之链”物流主题沙龙活动成功举办。此次活动邀请了政府相关部门、知名科研院所、物流企业等20余家单位参与&#xff0c;共同探讨物流数据要素流通与智能应用的发展…

新版ONENET(2024/4/24)通过view3.0可视化保姆级教程(一学就会)附效果图

⏩ 大家好哇&#xff01;我是小光&#xff0c;想要成为系统架构师的嵌入式爱好者。 ⏩上一篇是STM32通过ESP8266连接最新版的ONENET&#xff0c;成功将数据上传之后&#xff0c;本篇文章使用ONENET的view3.0可视化对数据进行可视化做一个详细教程。 ⏩感谢你的阅读&#xff0c;…

AnaTraf网络流量分析仪:实时分析工具助您优化网络架构

导言&#xff1a; 在如今高度互联的数字时代&#xff0c;网络流量分析成为了企业和组织必备的工具之一。AnaTraf网络流量分析仪作为一款高性能的实时网络流量分析工具&#xff0c;不仅能够帮助用户进行全流量回溯分析、网络流量监控和网络性能分析&#xff0c;更可以快速排除网…

两天速通阿里

感觉这一周太梦幻了&#xff0c;就像一个梦&#xff0c;很不真实~~~ 感觉这个暑期&#xff0c;我的运气占了99成&#xff0c;实力只有百分之一 4.15上午 腾讯csig 腾讯云部门&#xff0c;面完秒进入复试状态 4.16下午 美团优选供应链部门&#xff0c;4.18上午发二面 4.17晚上 阿…

C#基础|属性Property之读写特性和经典总结

哈喽&#xff0c;你好&#xff0c;我是雷工。 本节学习属性特性——控制读写操作&#xff0c;以下为学习笔记。 01 只读属性 写法1&#xff1a;直接去掉set方法&#xff0c;可以在定义的时候初始化。 示例&#xff1a; public string CourseName{get&#xff1b;}“雷工笔记…

2024年学浪提取视频#小浪助手

2024年&#xff0c;学习视频已经成为人们获取知识和提升技能的重要途径&#xff0c;而学浪视频平台以其丰富多样的学习资源备受瞩目。然而&#xff0c;有时我们可能只需要其中的一小部分内容&#xff0c;而不想将整个视频都下载下来。在这个时候&#xff0c;小浪助手作为一款强…

软件无线电系列——Nyquist采样定理

本节目录 一、Nyquist采样定理 1、Nyquist采样定理的定义 2、Nyquist采样定理的证明本节内容 一、Nyquist采样定理 如果对某一时间连续信号进行采样&#xff0c;当采样速率达到一定数值时&#xff0c;就可以根据这些采样值准确地确定原信号。 1、Nyquist采样定理的定义 何为Ny…

这操作真牛!APT杜绝软件包被篡改

0x00 简介 我们介绍了传统包管理器、新型包管理器的工作方式&#xff0c;其中用了大篇幅介绍 APT 包管理器&#xff0c;但是没有对安全人员比较关心的软件包校验问题进行介绍 0x01 大众疑问环节 这部分主要是从常规 Linux 使用者的视角&#xff0c;提出一些平时工作过程中的…

到底什么是爬虫

1. 引言 在数据驱动的世界里&#xff0c;网络爬虫&#xff08;Web Crawling&#xff09;技术扮演着获取和处理网上数据的关键角色。无论是为了数据分析、机器学习项目的数据集构建还是简单地监测网页变化&#xff0c;学习如何创建一个基本的网页爬虫可以大大提升你的工作效率和…

万兆以太网MAC设计(7)ARP协议报文格式详解以及ARP层模块设计

文章目录 前言&#xff1a;1、ARP协议详解2、ARP工作机制 二、ARP_RX模块设计三、ARP_TX模块设计四、ARP_table模块5、仿真5.1、发送端5.2、接收端5.3、缓存表 总结 前言&#xff1a; 1、ARP协议详解 ARP数据格式&#xff1a; 硬件类型:表示硬件地址的类型。它的值为1表示以太…

postman接口自动化

1.基础知识 1.打开postman新建一个文件夹。 &#xff08;建立每一部分文件夹可以更好的管理接口信息&#xff09; 2.postman基本介绍 这里用到的是我自己的一个项目。 params&#xff1a;查询字符串&#xff0c;一般作为url的一部分。 authorization &#xff1a;鉴权&…