我正在使用Caffe创建一个用于图像的车辆分类器,并有一个三部分的问题:
- 在组织用于训练CNN的类别时,有没有最佳实践?例如,类别的数量和每个类别的样本数量?例如,我这样做会不会更好:
- (a) 车辆 – 轿车-轿车/轿车-掀背车/轿车-SUV/卡车-18轮/….(请注意,这可能意味着几千个类别),或者
- (b) 有一个更高级别的模型来区分轿车/卡车/两轮车等…如果是轿车类型,则查询轿车模型以获取轿车类型(轿车/掀背车等)
-
每个类别的训练图像数量通常的最佳实践是多少?我知道有几个其他变量会影响CNN的准确性,但每个类别应该瞄准的粗略数字是多少?它应该是一个与模型中类别数量相关的函数吗?例如,如果我的模型中有很多类别,我应该为每个类别提供更多的样本吗?
-
我们如何确保不对类别过度拟合?有没有办法测量一个类别的训练样本的异质性?
-
嗯,你提到的第一个选择对应于计算机视觉社区中一项非常具有挑战性的任务:细粒度图像分类,你希望对一个基础类别的下属进行分类,比如汽车!要获取更多信息,你可以查看这篇论文。根据图像分类的文献,分类高层次的类别如汽车/卡车对于CNN来说会更简单,因为可能存在更多可区分的特征。我建议采用第二种方法,即分类所有类型的汽车与卡车等。
-
训练样本的数量主要与参数的数量成正比,也就是说,如果你想训练一个浅层模型,所需的样本要少得多。这也取决于你决定微调一个预训练模型还是从头开始训练一个网络。当没有足够的样本时,你必须在你的任务上微调一个模型。
-
与过拟合作斗争一直是机器学习中的一个问题,即使是CNN也无法避免。在文献中,已经提出了一些实用的建议来减少过拟合的发生,例如 dropout 层和数据增强程序。
回答:
虽然你的问题中没有提到,但似乎你应该遵循微调程序,即用另一个任务(例如 ILSVRC 201X)的预计算权重初始化网络,并根据你的新任务调整权重。这个过程在社区中被称为迁移学习(有时也称为领域适应)。