Tensorflow加载Vgg预训练模型的几个注意事项

深度学习12—VGG19实现 state_dict = load_state_dict_from_url(model_urls['vgg19'],model_dir='./model' ,progress=progress)#预训练模型地址。accuracy=((out.argmax(1)==label).sum()).clone().detach().cpu().numpy()#正确预测的总和比测试集的长度,即预测正确的精度。image=torch.reshape(image,(1,3,224,224))#四维图形,RGB三个通。 阅读详情

    写这个博客的关键Bug: Value passed to parameter 'input' has DataType uint8 not in list of allowed values: float16, bfloat16, float32, float64。本博客将围绕 加载图片 和 保存图片到本地 来详细解释和解决上述的Bug及其引出来的一系列Bug。

 

加载图片

    首先,造成上述Bug的代码如下所示

image_path = "data/test.jpg" # 本地的测试图片

image_raw = tf.gfile.GFile(image_path, 'rb').read()
# 一定要tf.float(),否则会报错
image_decoded = tf.image.decode_jpeg(image_raw)

# 扩展图片的维度,从三维变成四维,符合Vgg19的输入接口
image_expand_dim = tf.expand_dims(image_decoded, 0)

# 定义Vgg19模型
vgg19 = VGG19(data_path)
net = vgg19.feed_forward(image_expand_dim, 'vgg19')
print(net)

    上述代码是加载Vgg19预训练模型,并传入图片得到所有层的特征图,具体的代码实现和原理讲解可参考我的另一篇博客:Tensorflow加载Vgg预训练模型。那么,为什么代码会出现: Value passed to parameter 'input' has DataType uint8 not in list of allowed values: float16, bfloat16, float32, float64,这个Bug呢?

    这句英文翻译过来是指:传递的值类型是uint8,但是接受的参数类型必须是float的那几种。故原因就是传入值的数据类型错了,那么如何解决这个Bug呢,很简单

image_path = "data/test.jpg" # 本地的测试图片

image_raw = tf.gfile.GFile(image_path, 'rb').read()
# 一定要tf.float(),否则会报错
image_decoded = tf.to_float(tf.image.decode_jpeg(image_raw))

# 扩展图片的维度,从三维变成四维,符合Vgg19的输入接口
image_expand_dim = tf.expand_dims(image_decoded, 0)

# 定义Vgg19模型
vgg19 = VGG19(data_path)
net = vgg19.feed_forward(image_expand_dim, 'vgg19')
print(net)

    这两个代码块唯一的变动就是:image_decoded结果在输出前加了一个tf.float(),将其转换为float类型。

    在tensorflow API中,tf.image.decode_jpeg()默认读取的图片数据格式为unit8,而不是float。uint8数据的范围在(0, 255)中,正好符合图片的像素范围(0, 255)。但是,保存在本地的Vgg19预训练模型的数据接口为float,所以才造成了本文开头的Bug。

    这里还要提一点,若是使用PIL的方法来加载图片,则不会出现上述的Bug,因为通过PIL得到的图片格式是float,而不是uint8,故不需要转换。

    很多同学可能会疑惑,若是强行改变了原图片的数据格式,从uint8类型转变成float,会不会导致数据改变或者出错?故我做了下面这个实验:

image_path = "data/3.jpg"

image_raw = tf.gfile.GFile(image_path, 'rb').read()

image_unit8 = tf.image.decode_jpeg(image_raw)
image_float = tf.to_float(image_unit8)

with tf.Session() as sess:
    image_unit8_, image_float_ = sess.run([image_unit8, image_float])

print("image_unit8_", image_unit8_)
print("image_float_ ", image_float_ )


代码结果如下:
    image_unit8_
        [180, 192, 204],
        [183, 195, 207],
        [186, 198, 210],
        ...,
        [191, 205, 218],
        [191, 205, 218],
        [190, 204, 217]],

    image_float_ 
        [180., 192., 204.],
        [183., 195., 207.],
        [186., 198., 210.],
        ...,
        [191., 205., 218.],
        [191., 205., 218.],
        [190., 204., 217.]],

    可以看到,数据根本没有变化,只是后面多加了个小数点,变得只有类型,而没有强制改变值,故同学们不需要过度担心。

    

保存图片到本地

    在加载图片的时候,为了使用保存在本地的预训练Vgg19模型,我们需要将读取的图片由uint8格式转换成float格式。那若是我们想将已经转换为float格式的图片再保存到本地,该怎么做呢?

    首先,我们根据上述的文字的意思读取图片,并且将其转换为float格式,在将读取的图片再次保存到本地之前,我们首先可视化一下转换格式后的图片,代码如下:

import tensorflow as tf

from matplotlib import pyplot as plt

image_path = "data/boat.jpg"
 
image_raw = tf.gfile.GFile(image_path, 'rb').read()
image_decoded = tf.image.decode_jpeg(image_raw)
image_decoded = tf.to_float(image_decoded)
 
with tf.Session() as sess:
    image_decoded_ = sess.run(image_decoded)
    plt.imshow(image_decoded_)
    plt.show()

生成的图片如下图所示:

转换为float格式的图片
左原图,右float格式图

    左边是原图,右边是转换为float格式的图片,可见将图片转换为float格式,虽然数值没有造成太大影响,但是若想将图片保存到本地就会出现问题。

    说了这么多,只为了说一点,在保存图片到本地之前,需要将其格式从float转回uint8,否则会造成一系列错误:图片显示异常,API报错等。正确的保存代码如下:

save_path = "data/boat_copy.jpg"

image_uint = tf.cast(image_decoded, tf.uint8)

with tf.Session() as sess:
    with open(save_path, 'wb') as img:
        image_saved = sess.run(tf.image.encode_jpeg(image_uint))
        img.write(image_saved)

    其中只有一句话最关键,即tf.cast(image_decoded, tf.uint8)。

 

备注:本文为作者原创,转载需注明出处!

Tensorflow如何直接使用预训练模型(vgg16为例) Tensorflow如何直接使用预训练模型(vgg16为例) 本文链接: 主流的CNN模型基本都会使用VGG16或者ResNet等网络作为预训练模型,正好有个朋友和我说发给他一个VGG16的预训练模型和代码,我就整理了一下。在这里也分享一下,方便大家直接使用。 系统环境 Tensorflow-gpu 1.12.0 Python 3.5.2 资料来源 官方slim说明 https://gith... 阅读详情

相关推荐

SSD-Tensorflow 学习三:在自己的数据集上微调(优化)

踩了很多坑,花费了好久好久,内心的崩溃程度,还是自己太菜。 在所有的准备工作都down了之后,接下来就需要使用模型在自己的数据集上进行训练。SSD-Tensorflow 官网上给出的建议是:可以先在imageNet预训练的模型的基础上利用自己的数据集对网络模型进行微调,即固定骨干网络参数,对附加网络结构进行训练,当模型收敛达到0.5mAP的时候,再对所有参数进行微调。 预训练模型:models...

juwenkailaodi的博客 1977

使用预训练模型:vgg19识别图像

【代码】使用预训练模型:vgg19识别图像。

amen_yanwang的博客 853

【人工智能】迁移学习在Python中的应用:微调预训练模型的实战指南

迁移学习是深度学习中一项重要技术,通过利用预训练模型的知识,可以在小数据集上实现高效学习,显著降低训练成本。特别是在数据稀缺的场景下,迁移学习成为一种非常有吸引力的解决方案。本文从理论到实践全面解析迁移学习的核心概念,并通过详细的 Python 代码示例,展示如何使用 PyTorch 和 TensorFlow 微调预训练模型。我们将应用预训练的 ResNet 模型,在一个小型图像数据集上完成分类任务,并探讨迁移学习的优势与最佳实践。

一个被知识诅咒的人 1341

VGG-19 python代码 图片内容检测 预训练模型

目 录【1】简介【2】预训练模型下载【3】代码与结果 【1】简介   本文针对VGG-19网络,完成图像内容检测,对ImageNet的1000种常见物体进行识别。基本的思路是先下载预训练模型,使用已有的参数模型进行训练。 【2】预训练模型下载   下载预训练模型vgg19.npy,这是后一步放入项目的文件夹下【Link】。 【3】代码与结果   链接 (提取码:x1o8 )   注意可能会需要的问题:ValueError: Object arrays cannot be loaded when allow_

weixin_43038752的博客 1497

第38步 深度学习图像识别:VGG19建模(Tensorflow)

第38步 深度学习图像识别:VGG19建模(Tensorflow)

Jet4505的博客 7361

TensorFlow VGG-16 预训练模型-vgg_16.ckpt

TensorFlow VGG-16 预训练模型,用于SSD-TensorFlow的Demo训练.

【Python机器学习】卷积神经网络Vgg19模型预测动物类别实战(附源码和数据集)

【Python机器学习】卷积神经网络Vgg19模型预测动物类别实战(附源码和数据集)

showswoller的博客 1970

利用vgg-1619预训练模型提取图片的特征.zip

这是基于 tensorflow-vgg16 和 Caffe 到 Tensorflow 的 VGG 19 和 VGG 16 的 Tensorflow 实现。原始的 Caffe 实现可以在 这里 和 这里 找到。 我们修改了 tensorflow-vgg16 的实现,以使用 numpy 加载而不是默认的 tensorflow 模型加载,以加快初始化速度并减少整体内存使用量。这种实现可以进一步修改网络,例如删除 FC 层,或增加批量大小。

【亲测免费】 VGG16预训练模型权重文件下载

VGG16预训练模型权重文件下载 【下载地址】VGG16预训练模型权重文件下载分享 本仓库提供了一个预训练的VGG16模型权重文件,适用于TensorFlow和Keras框架。该文件为`vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5`,不包含顶层的全连接层,适合用于迁移...

gitblog_06525的博客 1130

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6273

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例)

本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍

Lucas1211的博客 2万+

VGG16预训练参数文件下载

VGG16预训练参数文件下载 【下载地址】VGG16预训练参数文件下载分享 本仓库提供了一个用于下载VGG16预训练参数文件的资源链接。VGG16是一种经典的深度卷积神经网络模型,广泛应用于图像分类和特征提取任务中。该模型由牛津大学计算机视觉组于2014年提出,其结构简单且有效,由16层卷积层和3层全连接层组成 ...

gitblog_06543的博客 587

深入浅出:用状态机搞定FPGA MIG控制器与DDR3的读写时序(附Verilog源码分析)

本文深入解析了如何利用状态机精准控制FPGA MIG控制器与DDR3的读写时序,涵盖Verilog源码实现、关键时序控制点及实战优化技巧。通过状态机设计、跨时钟域处理和带宽优化等方法,有效提升DDR3访问效率,适用于高性能计算和AI加速器等场景。

weixin_26899659的博客 408

VGG16模型权重文件下载

VGG16模型权重文件下载 【下载地址】VGG16模型权重文件下载 本仓库提供了一个预训练的VGG16模型权重文件(vgg16.npy)的下载。VGG16是一种深度卷积神经网络模型,广泛应用于图像分类和特征提取任务。该模型在ImageNet数据集上进行了预训练,因此可以直接用于各种图像相关的深度学习项目 ...

gitblog_06515的博客 546

大话西游2单机版V8一键架设教程:从下载到GM权限全流程(附仙玉修改技巧)

本文详细讲解了大话西游2单机版V8的一键架设全流程,包括环境准备、服务端配置、客户端安装及GM权限获取等关键步骤。特别提供了仙玉修改技巧和高级资源管理方法,帮助玩家快速搭建个性化游戏环境并掌握核心控制功能。教程涵盖Windows系统兼容性设置、常见问题解决方案以及数据备份策略,适合各类怀旧玩家和技术爱好者。

weixin_29254673的博客 1036

5-DOF机械臂课程设计(一)之正逆运动学

文章目录基本要求基本概念关节坐标系的建立正运动学求解DH参数表的建立逆运动学求解多解下解的选取源码下载后续 基本要求 ​ 开发上位机程序,要求有良好的界面,能提供关节空间下和笛卡尔坐 标下表示的目标位姿点和中间若干经过点的输入功能,进行轨迹规划, 并控制机械臂沿轨迹运动,最终完成目标抓取的任务。 基本概念 连杆长度 :2个相邻关节轴线之间的距离 连杆扭角 :2个相邻关节轴线之间的角度 连杆偏距 :2个关节坐标系的X轴之间的距离 关节角度 :关节变量 计算时需要加初始角度偏移 关节坐标系的建立 ​ 根据《机

Rosen的博客 5856

【深度学习】使用tensorflow实现VGG19网络

VGG网络非常深,通常有16-19层,卷积核大小为 3 x 3,16和19层的区别主要在于后面三个卷积部分卷积层的数量。定义了卷积、pooling、dropout、全连接五个模块,使用了上一篇AlexNet中的代码,其中卷积模块去除了group参数,因为网络没有像AlexNet一样分成两部分。接下来定义VGG19。本文章向大家介绍【深度学习】使用tensorflow实现VGG19网络,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

2301_78835635的博客 1207

保姆级教程:用CANoe手把手复现ECU刷写全流程(含BootLoader三阶段详解)

本文提供了一份详细的CANoe ECU刷写实战指南,涵盖BootLoader三阶段的深度解析。从实验环境搭建到预编程、主编程及后编程阶段,逐步讲解ECU刷写的关键步骤和隐藏逻辑,特别强调UDS诊断和CAN通信的精确控制,帮助开发者掌握ECU刷写的核心技术。

weixin_29234423的博客 529

5分钟掌握TFLearn迁移学习:从预训练模型到实战微调

TFLearn是一个基于TensorFlow的深度学习库,提供了更高层次的API,让迁移学习和模型微调变得简单高效。本文将带你快速掌握如何利用TFLearn进行迁移学习,从预训练模型到实战微调的完整流程,即使是深度学习新手也能轻松上手。 ## 什么是迁移学习?为什么选择TFLearn? 迁移学习是一种将从一个任务中学到的知识应用到另一个相关任务上的技术。它可以帮助我们在数据有限的情况下,快速构

gitblog_00520的博客 942

行测测评——矩阵、圆形、环形三角图形数列推理解题技巧

写在前面:各大公司的测评做的让人眼花缭乱,很多题型都是第一次见,比如逻辑关系、信息推理,最难的要属找规律的数字推理了。根据B站UP主刘文超老师的课程,记录一下解题技巧。感谢UP主的无私奉献,原地址连接:https://www.bilibili.com/video/BV1it411M7o2?t=528&p=7 解题技巧: 从图形的上下、左右、交叉 角度进行尝试求解 基本法则是“加、减、乘、除、倍数、次方”六种形态。 一、有心数阵 解题技巧:周边数字通过某种运算得到中间数字 1.周边数..

涵盖了计算机专业基础知识、数学建模相关实践、复杂网络论文研究、LeetCode算法刷题经验、C语言开发经验、前端Vue、React框架开发实战相关知识 8642

扩充两个三维体积:ITK实现

在医学图像处理中,经常需要进行 3D 体积的操作,比如合并、分割等。而 ITK (Insight Segmentation and Registration Toolkit) 是一个常用的开源库,可以用于实现各种医学图像处理算法。这篇文章将介绍如何使用 ITK 实现扩充两个三维体积的操作。不过以上代码已经足够简单明了地演示了如何使用 ITK 实现扩充两个三维体积的操作。首先,我们需要准备两个三维体积的数据。这里假设这两个体积大小相同,并且已经加载到内存中了。来读取和保存体积数据,使用了。

CodeVorter的博客 204

VGG16模型复现与详解

VGG16模型复现与详解 【下载地址】VGG16模型复现与详解分享 本资源文件提供了关于VGG16模型的复现及其详细解析,包括如何进行图片预测的完整教程。VGG16是由Simonyan和Zisserman在2014年提出的卷积神经网络模型,因其强大的图像分类能力而广受欢迎 ...

gitblog_06549的博客 287

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用VGG19迁移学习实现图像风格迁移

使用VGG19迁移学习实现图像风格迁移 去发现同类优质开源项目:https://gitcode.com/ 本项目通过迁移学习的方式,利用预训练的VGG19网络实现图像风格迁移。用户可以输入一张内容图片和一张风格图片,本项目将输出一张既具有内容图片内容,又具有风格图片风格的新图片。 项目概述 编程语言:Python 框架:TensorFlow 项目环境:Python 2.7 + TensorFlo...

gitblog_06730的博客 606

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

微调VGG分类模型训练自己的数据(猫狗数据集)

微调VGG分类模型训练自己的数据(猫狗数据集) 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件提供了微调VGG分类模型以训练自己的猫狗数据集的完整教程和代码。通过本教程,您可以学习如何使用VGG16模型进行迁移学习,并将其应用于猫狗分类任务。 内容概述 数据集处理:详细介绍了如何准备和处理猫狗数据集,包括数据集的下载和格式化。 模型创建:使用Keras框架创建...

gitblog_06540的博客 551

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VGG-19特征提取器项目常见问题解决方案

VGG-19特征提取器项目常见问题解决方案 项目基础介绍 VGG-19特征提取器是一个基于深度学习的开源项目,主要用于从图像中提取特征。该项目基于VGG-19模型,VGG-19是一种经典的卷积神经网络架构,广泛应用于图像分类和特征提取任务。该项目的主要编程语言是Python,依赖于TensorFlow或Keras等深度学习框架。 新手使用注意事项及解决方案 1. 环境配置问题 问题描述: 新手在配...

gitblog_01094的博客 1034

深度学习:预训练模型

定义: 预训练模型指的是在特定任务的大规模数据集(如 ImageNet)上进行训练的模型。通过迁移学习,可以根据新任务的需要对这些模型进行微调,以节省训练时间并提高性能。优点:节省时间: 模型已在大量数据上训练,用户无需从头开始训练。提高准确性: 预训练模型已学习到丰富的特征表现,通常能为下游任务提供更好的初始权重。解决数据稀缺问题: 在数据稀缺情况下,可以通过预训练模型利用转移学习。预训练模型是深度学习的重要组成部分,特别适用于数据有限或任务复杂的场景。

Wei_sx的博客 603
上一篇: Tensorflow加载Vgg预训练模型
下一篇: Docker守护态容器基本操作:Ubuntu为例
GodWriter
博客等级 码龄11年 94粉丝 41原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值