目录
1 数据 :扩大数据集、重采样(过采样和欠采样)、人工生成样本数据、基于异常检测的方式
2 损失函数:Focal Loss
3 模型:尝试不同的分类算法(比如决策树就对样本不均衡问题比较有效),对小类分错施加惩罚、重构分类器(将大类压缩成小类,使用One Class分类器,即异常点检测,集成学习,二分类变为多分类)
4 OHEM:算法的核心思想是根据输入样本的损失进行筛选,筛选出hard example,表示对分类和检测影响较大的样本,然后将筛选得到的这些样本应用在随机梯度下降中训练。在实际操作中是将原来的一个ROI Network扩充为两个ROI Network,这两个ROI Network共享参数。其中前面一个ROI Network只有前向操作,主要用于计算损失;后面一个ROI Network包括前向和后向操作,以hard example作为输入,计算损失并回传梯度。作者将该算法应用在Fast RCNN中,网络结构还是采用VGG16和VGG_CNN_M_1024,数据集主要采用VOC2007,VOC2012和COCO数据集。
算法优点:1、对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强。2、随着数据集的增大,算法的提升更加明显(作者是通过在COCO数据集上做实验和VOC数据集做对比,因为前者的数据集更大,而且提升更明显,所以有这个结论)。
1):一定范围内增大Batch_size:
a. 提高了内存的利用率,大矩阵乘法的并行化效率提高
b. 跑完一次epoch所需要的迭代次数减少,相同数据量的数据处理速度加快。
c. Batch_size越大下降方向越准,引起的训练震荡越小。
d. 缺点:盲目增大batch size,可能也会导致内存溢出、训练时间增加、收敛缓慢、局部最优,泛化性变差。
2):Batch_size过小:
a. 模型泛化性强
b. 修正方向以各自样本的梯度方向修正难以达到收敛。
总结:
首先根据显存大小选择Batch_size;其次根据自己的实际情况调整Batch_size,调参重在“调”,根据实际情况选择合适的参数。设置好Batch_size后,每一次epoch记得shuffle一次,不要让网络通过相同的minibach。
epoch:训练时,所有训练数据集都训练过一次。一般可以通过观察验证集上的表现进行确定。