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

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

然而,训练这样一个网络需要每个类别大量的数据和大量的训练时间。然而,很多时候人们可能没有足够的数据,或者只是想在花费时间设计和训练这样一个设备并收集训练数据之前,先了解一下卷积神经网络的表现如何。

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

这将为每张图像生成一组特征,这些特征可以输入到经典的分类方法中,如SVM、逻辑回归、神经网络等。

特别是当没有足够的数据来训练CNN时,我预计这种方法的表现会优于在少量样本上训练CNN的流程。

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

我的问题是:这种预训练网络是否存在,我可以在哪里找到它们?或者:这种方法是否合理?我在哪里可以找到一个CNN+权重?

编辑关于@某人的评论,我尝试使用'DecodeJpeg:0''DecodeJpeg/contents:0'并检查了输出,它们是不同的(:S)

import cv2, requests, numpyimport tensorflow.python.platformimport tensorflow as tfresponse = requests.get('https://i.sstatic.net/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’。@某人:你能说明你对你的评论有多确定吗?

所以我猜我还不确定什么是什么,因为我期望一个训练好的神经网络应该是确定性的(但最多是混沌的)。


回答:

TensorFlow团队最近发布了一个在ImageNet数据集上训练的深度CNN。你可以从这里下载获取数据的脚本(包括模型图和训练好的权重)。相关的图像识别教程提供了更多关于该模型的详细信息。

虽然当前的模型并没有专门打包用于后续的训练步骤,但你可以尝试修改脚本以在你自己的网络中重用模型的部分和训练好的权重。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注