Kaggle —— Dogs VS Cats top 0.53%(ranking top 7)

版权声明:转载需注明出处 https://blog.csdn.net/holmes_MX/article/details/80622063

题目: 猫狗分类

数据集: train:    cat: 12500张 

                            dog: 12500张

                test:  12500张

输出结果:对于每一个图片给出该图片属于狗的概率

评价结果:\[loss =  - \frac{1}{n}\sum\limits_{i = 1}^n {\left[ {y_i^{true}\log \left( {y_i^{pred}} \right) + \left( {1 - y_i^{true}} \right)\log \left( {1 - y_i^{pred}} \right)} \right]} \]

                  其中: n是样本的数量

                  注意:当预测精度较高时,如非常接近1或者0,此时会导致 ln(x) 出现偏差较大,因此这里有个小trick。此处的0.8与0.2分别为对Dog和Cat的置信度(实验验证,0.8和0.2的置信度效果好)。具体公式如下:

\[f\left( {y_{pred}^i} \right) = \left\{ \begin{array}{l}
0.995{\rm{                          }}y_{pred}^i \ge 0.8\\
0.005{\rm{                          }}y_{pred}^i \le 0.2\\
y_{pred}^i{\rm{                               }}else
\end{array} \right.\]

   分析: 由于此处为二分类问题,且分类的对象:Dog and Cat在ImageNet分类中出现,因此可以适合迁移学习。

   方案1: 利用Caffe进行快速实验,查看迁移学习的效果。这里采用的是ResNet101进行的迁移学习,学习的部分为最后的全连接层。参数为:learning rate=1e-3, epochs = 1(实验验证,learning rate = 1e-4收敛较慢)。

  方案2:利用基于Tensorflow的高级库Keras进行快速的迁移学习。ImageNet上的模型对比结果为

Model Name Model Size Top1 Acc Top5 Acc
InceptionResNetV2 215MB 0.804 0.953
Xception 88MB 0.790 0.945
InceptionV3 92MB 0.788 0.944
ResNet50 99MB 0.759 0.929
VGG19 549MB 0.727 0.910
VGG16 528MB 0.715 0.901
MobileNet 17MB 0.665 0.871

通过对比,选择模型较好的InceptionResNetV2、Xception和InceptionV3进行finetuning。

实验参数为:learning rate = 1e-3,epoch = 10。

实验过程的测试:

1、在InceptionResNetV2、Xception和InceptionV3中,添加的全连接层探索。实验在InceptionResNetV2的基础上进行的实验。

    InceptionResNetV2_1024表示只添加一层全连接层,然后连接Softmax。

    InceptionResNetV2_1024*2表示添加两层全连接层,每一层后面加上一个Dropout层,然后连接Softmax。

实验结果如下表所示(last epoch)。

Model Training Loss Training Acc Val Loss Val Acc Score on Kaggle Ranking
InceptionResNetV2_1024 0.1621 0.9356 0.0252 0.9949 0.04585 35/1314
 InceptionResNetV2_1024*2 0.0061 0.9983 0.4263 0.9584 0.21145 794/1314

2、实验在InceptionResNetV2中,上述lossTrick的作用。实验在InceptionResNetV2的基础上进行的实验。

其中 InceptionResNetV2表示只添加一层全连接层,然后连接Softmax, InceptionResNetV2+modifyLoss表示网络相同,只修改loss的求解方法。

Model Training Loss Training Acc

    Val

   Loss

Val Acc Score on Kaggle Ranking
         InceptionResNetV2_1024  0.1621    0.9356   0.0252    0.9949    0.04585                    35/1314
InceptionResNetV2+modifyLoss  0.1621    0.9356    0.0252    0.9949 0.04453 28/1314

3. 下面给出各个模型的实验结果以及Ensemble的结果。

Model Training Loss Training Acc Val Loss Val Acc Score on Kaggle Ranking
InceptionResNetV2(Keras-TF) 0.1621 0.9356 0.00252 0.9949 0.04453 28/1314
Xception(Keras-TF) 0.0085 0.9973 0.0197 0.9937 0.04348 25/1314
InceptionV3(Keras-TF) 0.0147 0.9950 0.0301 0.9893 0.07149 177/1314
ResNet101(Caffe) -- -- -- -- 0.05707 102/1314
Ensemble -- -- -- -- 0.03735 7/1314

Ensemble的过程:实验中实验了基于投票的Ensemble结果,但是效果并不好。本文中的Ensemble策略是:在原来的预测精度上进行求均值,然后利用上述的loss trick来得到最后的结果。

本文只是为了记录此次作业的过程,如果转载请注明出处。

     There may be some mistakes in this blog. So, any suggestions and comments are welcome!

    [Reference]

[1]  https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition#description

[2] https://baijiahao.baidu.com/s?id=1563055785256199&wfr=spider&for=pc

    

猜你喜欢

转载自blog.csdn.net/holmes_MX/article/details/80622063
top
今日推荐