Keras Xception Multi loss 细粒度图像分类

作者: 梦里茶

如果觉得我的工作对你有帮助,就点个star

关于

这是百度举办的一个关于狗的细粒度分类比赛,比赛链接: http://js.baidu.com/

框架

硬件

  • Geforce GTX 1060 6G
  • Intel® Core™ i7-6700 CPU
  • Memory 8G

模型

Xception结构图

  • 这篇Person Re-id论文的启发,在多分类基础上增加一个样本是否相同判断的二分类loss,增加类间距离,减小类内距离

Keras实现

  • 去掉Xception最后用于imagenet分类的全连接层,获取图像深度特征
  • 输入两张图片,可能属于相同类也可能属于不同类
  • 根据特征和标签进行多分类训练
  • 同时以两图是否属于同一类作为二分类标签训练

数据预处理

  • 从Baidu云下载数据
  • 训练集: http://pan.baidu.com/s/1slLOqBz Key: 5axb
  • 测试集: http://pan.baidu.com/s/1gfaf9rt Key:fl5n
  • 按类别把图片放在不同的目录下,方便ImageDataGenerator的使用
  • 因为先前我把图片命名为这种格式"typeid_randhash.jpg"了, 所以我写了这段代码来做图片移动的工作img2keras.py
  • 数据预处理还有许多细节要处理,遇到问题的话可以先查看keras的文档,如果还有问题,可以提issue.

训练

  • 使用Keras的ImageDataGenerator接口进行数据增广
  • 同时使用ImageDataGenerator做数据增广并进行正负样本对采样是一个难点.因为从ImageDataGenerator获得的图片被打乱了. 遍历数据集找同类样本作为正样本效率很低,幸运的是,在每个batch中,存在同类的样本,所以我们可以通过在同一个batch中交换同类样本的位置,构造出包含正样本对的另一个输入.
  • 冻结Xception的卷积层,采用ADMM训练多分类和二分类模型.
  • 解冻Xception卷积层的最后两个block(总共有12个block,最后两个block从Xception的105层开始)继续使用SGD训练
  • 去掉数据增广,再训练直至收敛

代码

一些测试结果

  • InceptionV3,多分类模型: 0.2502
  • Xception,多分类模型: 0.2235
  • Xception, 混合模型: 0.211
  • Xception, 混合模型,最后去掉数据增广再训练: 0.2045

如果发现代码里有bug,麻烦开个issue告诉我或者来个PR修复一下,万分感谢!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏yl 成长笔记

图形搜索中用到的机器学习基础介绍

针对目标图像(具有统一特征的图像),进行基于深度学习技术的模型训练,通过调优模型结构与参数,得到对于指定图像具有提取特征信息的模型 M。将库中所有图像通过 M ...

563
来自专栏深度学习自然语言处理

详解循环神经网络RNN(实践篇)

我们对输入进行one-hot编码。这是因为我们的整个词汇表只有四个字母{h,e,l,o}。

654
来自专栏决胜机器学习

机器学习(二十五) ——adaboost算法与实现

机器学习(二十五)——adaboost算法与实现 (原创内容,转载请注明来源,谢谢) 一、概述 当进行监督学习时,除了使用某个分类器外,还可以将各个分类器结...

3178
来自专栏null的专栏

简单易学的机器学习算法——朴素贝叶斯

一、贝叶斯定理     1、条件概率         条件概率是指在事件B发生的情况下,事件A发生的概率,用 ? 表示。     2、全概率公式 image.p...

2985
来自专栏程序生活

机器学习(九)梯度下降算法1 梯度2 梯度下降法

1 梯度 1.1 定义 梯度:是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数。 关于梯度的更多介绍请看:如何直观形象的理解方向导数与梯度以及...

2917
来自专栏fangyangcoder

Andrew Ng机器学习课程笔记(三)之正则化

http://www.cnblogs.com/fydeblog/p/7365475.html

441
来自专栏数值分析与有限元编程

可视化 | MATLAB划分均匀矩形网格

之前发过一个划分均匀三角形网格的例子。下面结合一个悬臂梁说说如何在规则区域划分均匀矩形网格。 ? 将一个矩形平面区域划分成相同大小的矩形。X方向等分nex,Y方...

3939
来自专栏智能算法

Matlab编程之——卷积神经网络CNN代码解析

deepLearnToolbox-master是一个深度学习matlab包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码Auto...

4618
来自专栏杂七杂八

卷积神经网络详解(上)

卷积操作就是用卷积后得到的图组数据重构输入图像,然后作为后续输入 我们得到一些数据,作为网络的输入,在CNN中有滤波器,现在我们假设只有一个滤波器,如图所示 ...

422
来自专栏ml

使用神经网络来拟合函数y = x^3 +b

我们使用一个三层的小网络来,模拟函数y = x^3+b函数 1 import tensorflow as tf 2 import numpy as np ...

30411

扫码关注云+社区