用于多标签图像分类的 CNN

Posted

技术标签:

【中文标题】用于多标签图像分类的 CNN【英文标题】:CNN for multi-label image classification 【发布时间】:2020-02-21 14:54:36 【问题描述】:

我会设计一个分类 8x8 图像块的 CNN。具体来说,我有num_classes 等于 40,每个图像可以关联到一个类或两个类或三个类或四个类,依此类推,甚至所有 40 个类。

我的问题与损失函数和度量有关:确实,我想强制我的 CNN 返回K 最自信的类,如果其中至少有一个是正确的,那么我希望提高准确性

例如,假设更简单的情况num_classes=4K=2

    true = [1 0 0 0]; predicted = [1 0 1 0] OK
    true = [1 1 0 0]; predicted = [0 0 1 1] WRONG

所以,我已经测试了下面的代码行,但它不是我想要的。

    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

我应该使用哪个lossmetric?或者如果我编写自己的度量函数可能更有意义?

【问题讨论】:

我猜你必须编写自己的损失和指标,但这并不容易,因为损失需要是可区分的。 真的不存在这样操作的内置函数吗? 据我所知没有。您可能可以从只编写指标开始(更容易)并使用binary_crossentropy loss 进行训练。 【参考方案1】:

compile 看起来不错。对于Multilabel 网络,您还应该使用sigmoid activation softmax 到最后一个dense layer(不知道您在使用什么)

x = Dense(40, activation='sigmoid')

【讨论】:

以上是关于用于多标签图像分类的 CNN的主要内容,如果未能解决你的问题,请参考以下文章

CNN培训多标签分类---不起作用

计算机视觉+人工智能面试笔试总结——使用CNN进行图像分类

使用 PyTorch 的多标签、多类图像分类器 (ConvNet)

记录|深度学习100例-卷积神经网络(CNN)服装图像分类 | 第3天

用于图像分类的 Keras CNN 模型不能很好地泛化

使用Caffe进行多级和多标签图像分类