任务划分
单标签图像分类:每个类别都是独立的、两个类之间基本是没有关联的。例如:猫、狗、汽车等。所有的类别是互斥的,每张图像只能属于这些类别中的一个,只能有一个label。
多标签图像分类:类别之间可以有交集的部分、可以相互关联。例如:猫、动物、宠物、猫科动物、肉食动物、短毛猫等等。一张猫的图像可以有多个label,这些label可能相互关联、可能是包含关系。
多类别图像分类:(multi class)这个是相对于二分类问题而言的,是类别有多个而不是label有多个。
loss函数
以pytorch为例
在单表签分类问题中都是使用softmax函数 + 交叉熵的形式。
nn.CrossEntropyLoss()
这个loss函数在的输入形式是(batch, C)的预测概率和(batch)的label,深入了解CrossEntropyLoss函数的计算过程可以知道其实label还是one-hot的形式[0,0,0,1,0,0,0]
简化计算过程后只计算label对应的类,这一部分在这里不过多描述。
在多标签分类问题中基本的思路不像单表签分类问题中将概率最大的类别视作预测类别,而是对每个类别进行二分类,判断图像中有还是没有这一类别。一般使用的是二分类的loss函数。
nn.BCEWithLogitsLoss()
或者
nn.MultiLabelSoftMarginLoss()
输入的形式是(batch, C)的预测概率和(batch, C)的0,1序列label