目前遇到的是一个图像数据集,共7个label,数量比例为:33:11:1:5:5:399:220,需要做图像分类。
不仅数据量少,而且数据不平衡,且图像本身纹理不清晰机器不容易辨别。
目前尝试的解决方法:
1:CNN。
1)使用数据增广。对于前五个label的数据做Flip/Rotate/Sharp操作。效果略有提升,但是依旧很不理想。
2)给loss加权重。对前五个label的loss加权重3。效果有提升,但是依旧不理想。
3)调节参数,比如conv层数,kernal的大小,dropout rate等。
后来受到同事模型的启发,只选择了rotate的数据增广,但是转动的角度很小,数据集扩增了100倍。。。。。。
下面是调整后的结果。第二个类别结果还是很差。
2:异常检测算法。 结果很差。
3:RandomForest。效果相比于其他machine learning算法更好,但是相比于CNN还是差。
对于特定的类别完全无判别能力,其他的判别效果也不好。
放弃。
4:SVM,KNN等。结果很差。直接放弃。
总结了一下对于图像分类问题,CNN还是真的强大!!!
因为自己的模型很垃圾,借鉴了AlexNet的结构,效果如下:
因为自己的CNN结构比较简单,而AlexNet有五层卷积层,以及三层全连接,效果更好。
所以,神经网络越深效果越好???
另外,初始化很重要,同样的结构以及参数,train的几次结果不一样,有时候毫无学习能力。