使用预训练 (Tensorflow) CNN 提取特征

     2023-03-12     206

关键词:

【中文标题】使用预训练 (Tensorflow) CNN 提取特征【英文标题】:Extract features using pre-trained (Tensorflow) CNN 【发布时间】:2016-03-14 12:16:35 【问题描述】:

深度学习已成功应用于多个大型数据集,用于对少数类别(猫、狗、汽车、飞机等)进行分类,其性能优于简单的描述符,如 SIFT 上的特征袋、颜色直方图等.

尽管如此,训练这样的网络需要每个类的大量数据和大量的训练时间。然而,在花时间设计和训练这样的设备并收集训练数据之前,通常没有足够的数据,或者只是想了解卷积神经网络的性能。

在这种特殊情况下,使用最先进的出版物使用的一些基准数据集配置和训练网络可能是理想的,并将其简单地应用于您可能拥有的一些数据集作为特征提取器.

这会为每个图像生成一组特征,可以将其提供给经典分类方法,如 SVM、逻辑回归、神经网络等。

特别是当没有足够的数据来训练 CNN 时,我可能希望这会优于在少数样本上训练 CNN 的管道。

我在看 tensorflow 教程,但它们似乎总是有一个明确的训练/测试阶段。我找不到带有预配置 CNN 特征提取器的 pickle 文件(或类似文件)。

我的问题是:这样的预训练网络是否存在,我在哪里可以找到它们。或者:这种方法有意义吗?我在哪里可以找到 CNN+权重?

编辑 W.r.t. @john 的评论我尝试使用 'DecodeJpeg:0''DecodeJpeg/contents:0' 并检查了不同的输出 (:S)

import cv2, requests, numpy
import tensorflow.python.platform
import tensorflow as tf


response = requests.get('https://i.stack.imgur.com/LIW6C.jpg?s=328&g=1')
data = numpy.asarray(bytearray(response.content), dtype=np.uint8)
image = cv2.imdecode(data,-1)

compression_worked, jpeg_data = cv2.imencode('.jpeg', image)
if not compression_worked:
    raise Exception("Failure when compressing image to jpeg format in opencv library")
jpeg_data = jpeg_data.tostring()

with open('./deep_learning_models/inception-v3/classify_image_graph_def.pb', 'rb') as graph_file:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(graph_file.read())
    tf.import_graph_def(graph_def, name='')

with tf.Session() as sess:
    softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0')

    arr0 = numpy.squeeze(sess.run(
        softmax_tensor,
        'DecodeJpeg:0': image
    ))

    arr1 = numpy.squeeze(sess.run(
        softmax_tensor,
        'DecodeJpeg/contents:0': jpeg_data
    ))

    print(numpy.abs(arr0 - arr1).max())

所以最大绝对差值是1.27649,并且通常所有元素都不同(尤其是因为arr0arr1 本身的平均值介于0 - 0.5 之间)。

我也希望'DecodeJpeg:0' 需要一个 jpeg 字符串,而不是一个 numpy 数组,为什么名称包含“Jpeg”。 @john:你能说明一下如何 你确定你的评论?

所以我想我不确定是什么,因为我希望经过训练的神经网络是确定性的(但最多是混乱的)。

【问题讨论】:

橡皮鸭:当谷歌搜索“在 ImageNet 上训练的 CNN”时,我发现:vlfeat.org/matconvnet/pretrained 我可以在我的笔记本电脑上编译和运行这个网络 - 并使用网络摄像头识别/分类图像 github.com/sermanet/OverFeat 【参考方案1】:

TensorFlow 团队最近发布了一个在 ImageNet 数据集上训练的深度 CNN。您可以从here 下载获取数据(包括模型图和训练的权重)的脚本。关联的Image Recognition tutorial 包含有关模型的更多详细信息。

虽然当前模型并未专门打包以在后续训练步骤中使用,但您可以探索修改脚本以在您自己的网络中重用模型的部分内容和经过训练的权重。

【讨论】:

这看起来很棒,当我让它工作时我会接受:)分类图像表明它会产生一个标签。我想要一个特征向量,因为我的标签不是来自 ImageNet 的标签。 按照日志使用这些 cmets:假设使用 softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0') 而不是 softmax_tensor = sess.graph.get_tensor_by_name('softmax:0') 来获取特征。 我注意到这个特定网络的feed_dict 有一个'DecodeJpeg/contents:0'(我认为这是在文件classify_image_graph_def.pb 中定义的),你知道如何找出可能的feed_dict 配置吗?可能的?我也可以在里面扔一个带有图像的 numpy-array 吗? 如果您将 'DecodeJpeg/contents:0' 更改为 'DecodeJpeg:0',您可以使用 numpy 数组 @john 我没有对此进行测试,因为特定代码已经在生产中运行,但假设它可以工作,这是删除多余代码的好方法。谢谢。

Tensorflow - 可视化预训练网络的学习过滤器

】Tensorflow-可视化预训练网络的学习过滤器【英文标题】:Tensorflow-Visualizinglearnedfiltersofapretrainednetwork【发布时间】:2018-12-1320:00:30【问题描述】:我目前正在尝试使用python中的tensorflow可视化我的CNN的学习过滤器。在训练新网络... 查看详情

Keras 使用 TimeDistributed 预训练 CNN

】Keras使用TimeDistributed预训练CNN【英文标题】:KeraspretrainCNNwithTimeDistributed【发布时间】:2017-07-0721:26:49【问题描述】:这是我的问题,我想在TimeDistributed层中使用预训练CNN网络之一。但是我在实现它时遇到了一些问题。这是我... 查看详情

TensorFlow 对象检测 api:使用预训练模型在训练中更改类数时的分类权重初始化

】TensorFlow对象检测api:使用预训练模型在训练中更改类数时的分类权重初始化【英文标题】:TensorFlowobjectdetectionapi:classificationweightsinitializationwhenchangingnumberofclassesattrainingusingpre-trainedmodels【发布时间】:2018-08-2817:20:26【问题描... 查看详情

使用dota数据集训练fasterr-cnn模型(代码片段)

...7数据集上实现目标检测的详细步骤→Windows10+Faster-RCNN-TensorFlow-Python3-master+VOC2007数据集。一、所需文件下载链接FasterR-CNN源码及操作步骤Github链接→Faster-RCNN-TensorFlow-Python3。Faster-RCNN-TensorFlow-Python3-master压缩包百度云盘链接... 查看详情

使用dota数据集训练fasterr-cnn模型(代码片段)

...7数据集上实现目标检测的详细步骤→Windows10+Faster-RCNN-TensorFlow-Python3-master+VOC2007数据集。一、所需文件下载链接FasterR-CNN源码及操作步骤Github链接→Faster-RCNN-TensorFlow-Python3。Faster-RCNN-TensorFlow-Python3-master压缩包百度云盘链接... 查看详情

使用dota数据集训练fasterr-cnn模型(代码片段)

...7数据集上实现目标检测的详细步骤→Windows10+Faster-RCNN-TensorFlow-Python3-master+VOC2007数据集。一、所需文件下载链接FasterR-CNN源码及操作步骤Github链接→Faster-RCNN-TensorFlow-Python3。Faster-RCNN-TensorFlow-Python3-master压缩包百度云盘链接... 查看详情

使用nwpuvhr-10数据集训练fasterr-cnn模型(代码片段)

...7数据集上实现目标检测的详细步骤→Windows10+Faster-RCNN-TensorFlow-Python3-master+VOC2007数据集。一、所需文件下载链接FasterR-CNN源码及操作步骤Github链接→Faster-RCNN-TensorFlow-Python3。Faster-RCNN-TensorFlow-Python3-master压缩包百度云盘链接... 查看详情

当用作预训练特征提取器时,VGG16 应该提取多少特征?

...布时间】:2019-11-1412:16:23【问题描述】:我正在使用带有TensorFlow后端的Keras,通过预训练模型(ImageNet上的VGG16)从图像中提取特征。从我可以在线阅读的内容来看,我应 查看详情

如何使用 tensorflow 从 CNN 层中提取激活?

】如何使用tensorflow从CNN层中提取激活?【英文标题】:HowtoextractactivationfromCNNlayersusingtensorflow?【发布时间】:2018-11-2409:53:23【问题描述】:我想从全连接层中提取神经激活。在Caffe我是这样做的net.blobs[layer_name].data我如何在tensorf... 查看详情

如何在 Keras 中使用预训练的 CNN 实现连体网络?

】如何在Keras中使用预训练的CNN实现连体网络?【英文标题】:HowtoImplementSiameseNetworkusingpretrainedCNNsinKeras?【发布时间】:2021-04-1222:12:55【问题描述】:我正在使用Keras为224x224x3大小的图像开发一个用于人脸识别的连体网络。Siamese... 查看详情

使用 TensorFlow 的训练和预测出了啥问题?

】使用TensorFlow的训练和预测出了啥问题?【英文标题】:WhatisgoingwrongwiththetrainingandpredictionsusingTensorFlow?使用TensorFlow的训练和预测出了什么问题?【发布时间】:2016-03-2004:43:42【问题描述】:请看下面写的代码。x=tf.placeholder("flo... 查看详情

tensorflow利用预训练模型进行目标检测:预训练模型的使用(代码片段)

一、运行样例官网链接:https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb 但是一直有问题,没有运行起来,所以先使用一个别人写好的代码上一个在ubuntu下可用的代码链接:https://gitee.com/bubbl... 查看详情

为啥我的 CNN 预训练图像分类器过拟合?

...【发布时间】:2020-01-2410:05:46【问题描述】:我刚刚开始使用计算机视觉,在当前任务中我将图像分为4个类别。图片文件总数=1043我正在使用预训练的InceptionV3并在我的数据集上对其进行微调。这是我在时代之后所拥有的:纪元1... 查看详情

textcnn实验(代码片段)

...一篇介绍使用CNN对句子进行分类的论文。本文将介绍使用TensorFlow来实现整个论文的实验过程,一方面熟悉使用TensorFlowAPI,另一方面加深对CNN在NLP上的应用理解。对于文本分类问题,常规方法就是抽取文本的特征,使用doc2evc或者LD... 查看详情

如何在 Keras 中使用来自现有 CNN 模型的预训练权重进行迁移学习?

】如何在Keras中使用来自现有CNN模型的预训练权重进行迁移学习?【英文标题】:HowcanIusepre-trainedweightsfromanexistingCNNmodelfortransferlearninginKeras?【发布时间】:2018-07-1307:09:54【问题描述】:我正在通过Keras中的卷积神经网络(CNN)研究... 查看详情

如何从 python 中的预训练模型中获取权重并在 tensorflow 中使用它?

】如何从python中的预训练模型中获取权重并在tensorflow中使用它?【英文标题】:howcanigetweightfromapretrainedmodelinpythonanduseitintensorflow?【发布时间】:2022-01-0519:43:33【问题描述】:如何从PyTorch中的预训练模型中获取权重并在TensorFlow... 查看详情

将预训练的 inception_resnet_v2 与 Tensorflow 结合使用

】将预训练的inception_resnet_v2与Tensorflow结合使用【英文标题】:Usingpre-trainedinception_resnet_v2withTensorflow【发布时间】:2017-01-2716:56:33【问题描述】:我一直在尝试使用Google发布的预训练的inception_resnet_v2模型。我正在使用他们的模... 查看详情

如何在 android 中使用 tensorflow 预训练模型制作 stylegan

】如何在android中使用tensorflow预训练模型制作stylegan【英文标题】:howtomakestyleganusingtensorflowpretrainedmodelsinandroid【发布时间】:2021-10-3023:13:24【问题描述】:如何在android中使用python预训练模型。我想在android中制作类似的卡通效果... 查看详情