使用预训练的(Tensorflow)CNN提取特征
computer-vision
deep-learning
machine-learning
tensorflow
9
0

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

然而,训练这样的网络需要每节课大量数据和大量训练时间。但是,在花时间设计和训练这种设备并收集训练数据之前,通常很多人没有足够的数据,或者只是想了解卷积神经网络的性能。

在这种特定情况下,最好使用最新出版物使用的一些基准数据集来配置和培训网络,并将其简单地应用于您可能用作特征提取器的某些数据集。

这为每个图像生成了一组功能,可以将这些功能提供给经典的分类方法,例如SVM,逻辑回归,神经网络等。

特别是当一个人没有足够的数据来训练CNN时,我可以期望它的表现优于在少数样本上训练CNN的管道。

我当时在看tensorflow教程,但它们似乎总是有一个清晰的培训/测试阶段。我找不到带有预配置的CNN功能提取器的泡菜文件(或类似文件)。

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

编辑 Wrt @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本身的平均值在arr0之间)。

我也希望'DecodeJpeg:0'需要一个jpeg字符串,而不是一个numpy数组,为什么这个名称还包含'Jpeg'。 @john:您能说出您对自己的评论有多确定吗?

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

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

TensorFlow团队最近发布了经过ImageNet数据集训练的深度CNN。您可以从此处下载获取数据(包括模型图和经过训练的权重)的脚本。相关的图像识别教程具有有关模型的更多详细信息。

尽管当前模型并未特别打包以供后续训练使用,但您可以探索修改脚本以在您自己的网络中重用模型的某些部分和经过训练的权重。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题