CNN的Interclass和Intraclass分类结构

问题描述 投票:0回答:1

我正在研究一个CNN的类间和类内分类问题,例如首先有两个类Cat和Dog比Cat中有三个不同品种的猫分类,而Dog中有5个不同品种的狗。

我还没有尝试编码,只是在可行性方面可行。我的问题是这种问题的可行设计是什么。我正在考虑设计培训,首先是CNN-1网络,它将区分猫狗,并收集所有训练图像的图像数据。猫狗分离后,CNN-2和CNN-3将为每种犬和猫进一步训练这些图像。我只是不确定测试在这种情况下是如何工作的。

matlab deep-learning computer-vision conv-neural-network
1个回答
0
投票

我之前在Python中遇到过类似的问题。希望这很有用,如果你正在使用它,你可以在Matlab中提出一个替代实现。

毕竟说完了,我为所有预测着陆了一个模型。为了您的目的,您可以为狗与猫提供一个二进制输出,为狗品种提供另一个多类输出,为猫品种提供另一个多类输出。

使用Tensorflow,我为不相关的类创建了一个掩码。例如,如果图像是猫,那么所有的狗品种都是无关紧要的,它们不应该影响该示例的模型训练。这需要一个自定义的TF数据集(将掩码的0转换为-1)和一个自定义的丢失函数,当该掩码存在时,该函数返回0错误。

最后是培训过程。特定于您的问题,您将必须创建自定义精度函数,可以按照您希望的方式处理掩码值,但除此之外,这部分过程应该是标准的。最佳做法是在训练数据中均匀分布各类,但它们都可以一起训练。

如果您谷歌“多任务培训”,您可以找到此问题的其他资源。

如果您有兴趣,可以使用以下代码剪辑:

对于掩盖不相关标签的自定义TF数据集......

# Replace 0's with -1 for mask when there aren't any labels
def produce_mask(features):
    for filt, tensor in features.items():
        if "target" in filt:
            condition = tf.equal(tf.math.reduce_sum(tensor), 0)
            features[filt] = tf.where(condition, tf.ones_like(tensor) * -1, tensor)
    return features


def create_dataset(filepath, batch_size=10):
    ...

    # **** This is where the mask was applied to the dataset
    dataset = dataset.map(produce_mask, num_parallel_calls=cpu_count())

    ...

    return parsed_features

自定义丢失功能。我正在使用二元交叉熵,因为我的问题是多标签。您可能希望将其调整为分类 - 交叉熵。

# Custom loss function
def masked_binary_crossentropy(y_true, y_pred):
    mask = backend.cast(backend.not_equal(y_true, -1), backend.floatx())
    return backend.binary_crossentropy(y_true * mask, y_pred * mask)

然后是自定义精度指标。我使用的是top-k准确度,你可能需要根据你的目的进行修改,但这会给你一般的想法。将此与损失函数进行比较时,不是将全部转换为0,这会使精度过高,此函数会完全过滤掉这些值。这是有效的,因为输出是单独测量的,因此每个输出(二元,猫品种,狗品种)将具有仅针对相关示例过滤的不同准确度度量。

backend是keras后端。

def top_5_acc(y_true, y_pred, k=5):
    mask = backend.cast(backend.not_equal(y_true, -1), tf.bool)
    mask = tf.math.reduce_any(mask, axis=1)
    masked_true = tf.boolean_mask(y_true, mask)
    masked_pred = tf.boolean_mask(y_pred, mask)
    return top_k_categorical_accuracy(masked_true, masked_pred, k)

编辑

不,在我上面描述的场景中,只有一个模型,并且它与所有数据一起训练。单个型号有3个输出。掩码是其中的主要部分,因为它允许网络仅调整与示例相关的权重。如果图像是猫,那么狗品种预测不会导致损失。

© www.soinside.com 2019 - 2024. All rights reserved.