【问题标题】:Convolution Neural Network for image detection/classification用于图像检测/分类的卷积神经网络
【发布时间】:2016-10-03 11:21:01
【问题描述】:

所以这里有设置,我有一组图像(标记为训练和测试),我想训练一个卷积网络,告诉我这个图像中是否有特定对象。

为此,我遵循了 MNIST 上的 tensorflow 教程,并训练了一个简单的卷积网络,该网络缩小到感兴趣的区域(对象),它正在对大小为 128x128 的图像进行训练。架构如下:依次为 3 层,包括 2 个 conv 层和 1 个 max pool 下采样层,以及一个完全连接的 softmax 层(无论对象是否存在,都有两个类 0 和 1)

我使用 tensorflow 实现了它,效果很好,但是由于我有足够的计算能力,我想知道如何提高分类的复杂性: - 添加更多层? - 在每一层添加更多频道? (目前全连接为 32,64,128 和 1024) - 还有什么?

但最重要的部分是,现在我想在更大的图像上检测相同的对象(大约 600x600,而对象的大小应该在 100x100 左右)。

我想知道如何使用以前用于小图像的训练“小型”网络,以便在大图像上预训练更大的网络?一种选择是使用大小为 128x128 的切片窗口对图像进行分类并扫描整个图像,但如果可能的话,我想尝试在其上训练整个网络。

关于如何进行的任何建议?还是解决此类问题的文章/资源? (我对深度学习真的很陌生,如果这是个愚蠢的问题,我很抱歉......)

谢谢!

【问题讨论】:

    标签: classification tensorflow deep-learning conv-neural-network


    【解决方案1】:

    我建议您继续阅读整个领域。您的搜索关键字包括 CNN、图像分类、神经网络、AlexNet、GoogleNetResNet。这将返回许多文章、在线课程和讲座以及其他材料,以帮助您了解使用神经网络进行分类。

    不要只是添加层或过滤器:拓扑(网络设计)的复杂性必须适合任务;过于复杂的网络会过度拟合训练数据。您一直在使用的可能是 LeNet;我上面引用的三个是用于 ImageNet 图像分类竞赛的。

    【讨论】:

      【解决方案2】:

      由于您正在处理图像,我建议您使用预训练的图像分类网络(如 VGG、Alexnet 等)并使用您的 128x128 图像数据微调该网络。根据我的经验,在我们拥有非常大的数据集之前,微调网络将提供更高的准确性并节省训练时间。在您的数据集上构建好的图像分类器后,您可以使用任何流行的算法从图像生成提议区域。现在获取所有提案区域并将它们一一传递给分类网络,并检查该网络是否将给定的提案区域分类为正面或负面。如果它分类为肯定,那么很可能您的对象存在于该区域中。否则不是。如果根据分类器有很多对象存在的proposal区域,那么您可以使用非最大抑制算法来减少积极proposal的数量。

      【讨论】: