如何教卷积神经网络对未知图像说“不”?

Posted

技术标签:

【中文标题】如何教卷积神经网络对未知图像说“不”?【英文标题】:How to teach a convolutional neural network to say "no" to unknown images? 【发布时间】:2018-08-20 21:12:06 【问题描述】:

我的任务是识别字符。有一定的数据集。当我提交不是来自该数据集的输入符号(或来自一个图像中的数据集的一组字符)时,神经网络会选择最相似的符号。在这种情况下,网络应该说她不知道这样的符号。 这个任务可能有任何架构吗?

我正在使用 Keras(Tensorlow 作为后端)在 Python 3 中编写代码。

我的架构:

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 29, 29, 75)        1275      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 75)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 14, 14, 75)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 11, 11, 100)       120100    
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 5, 5, 100)         0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 5, 5, 100)         0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 2, 2, 125)         200125    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 1, 1, 125)         0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 1, 1, 125)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 125)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 500)               63000     
_________________________________________________________________
dropout_4 (Dropout)          (None, 500)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 69)                34569     

【问题讨论】:

所以你想用一个不适合任何其他类的附加“背景”类进行分类? @FlyingTeller,是的 虽然这也可能是架构问题,但主要挑战是为这个背景类提供数据,因为它可以有多种形式。但是,您可以做的是为您的输出引入后处理:取一个阈值,假设为 0.6,如​​果 output_j > 0.6,则网络预测类 j。如果没有类别达到此阈值,则预测为“背景”。这可能会处理一张图片中的多个字符 @FlyingTeller,我设置了阈值,但有时网络给出错误符号的概率非常高(超过 0.9) 【参考方案1】:

最好的方法是:

    使用数据集中的附加图像,对应于“未知”类,您可以通过对看起来像符号的字符图像进行采样来获得它。然后为“n+1”类训练模型,其中“n”是您当前正在处理的类数。

    仔细查看 softmax 输出并启发式地选择一个阈值。

【讨论】:

以上是关于如何教卷积神经网络对未知图像说“不”?的主要内容,如果未能解决你的问题,请参考以下文章

第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

图像识别原理--CNN卷积神经网络

干货使用Pytorch实现卷积神经网络

卷积神经网络中的stride、padding和channel概念

4.1 卷积神经网络

深度学习图像分类入门,从VGG16卷积神经网络开始