竞赛传送门:https://www.tinymind.cn/competitions/42

我们就是傻狗天仙配啦~

决赛排行榜:

这次比赛感谢第一名的 baseline:https://blog.csdn.net/guleileo/article/details/81946511

我们的代码基于这个baseline,省去了自己编写数据读取、评分准则的麻烦。

首先,我们将baseline的模型换成ResNet50、DenseNet201空模型效果不好;然后,我们选择了迁移学习,参考博客:https://blog.csdn.net/tsyccnh/article/details/78889838,后来将其InceptionV3换成InceptionResNetV2:

from keras.applications.inception_resnet_v2 import InceptionResNetV2,preprocess_input

base_model = InceptionResNetV2(weights='imagenet',include_top=False)

x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(,activation='relu')(x)
predictions = Dense(,activation='sigmoid')(x)
model = Model(inputs=base_model.input, outputs=predictions) model.summary()

加入了imgaug库的数据增强:

from imgaug import augmenters as iaa

seq = iaa.Sequential([
iaa.CropAndPad(percent=(-0.1, 0.1)),
iaa.Sometimes(0.5,
iaa.GaussianBlur(sigma=(, 0.5))
),
iaa.ContrastNormalization((0.75, 1.5)),
iaa.AdditiveGaussianNoise(loc=, scale=(0.0, 0.05*)),
], random_order=True)
imglist=[]
imglist.append(X_train)
images_aug = seq.augment_images(X_train)

之后基于这个模型开始了调节batchsize、steps及两个epoch的工作,我们调节的最佳结果:

batch_size =
setup_to_transfer_learning(model, base_model)
history_t1 = model.fit_generator(train_generator,
steps_per_epoch=,
validation_data = val_generator,
epochs=,
callbacks=[reduce],
verbose=)
setup_to_fine_tune(model,base_model)
history_ft = model.fit_generator(train_generator,
steps_per_epoch=,
epochs=,
validation_data=val_generator,
validation_steps=,
callbacks=[reduce],
verbose=)

这时,就得到了预赛排名榜的分数44.3。

下面是得到45.89分的两个关键的工作啦!

第一,将arr2tag函数中的0.5改成0.3。原因:数据集小,很多标签对应的训练图片数量少,预测得到的概率值低,所以需要调低阈值让更多正确标签预测到。

第二,模型融合。我们是将InceptionV3和InceptionResNetV2两个模型的结果融合,先将两个模型保存训练出来,然后求两个模型预测出的标签的并集。

部分代码如下:

def arr2tag(arr1, arr2):
tags = []
for i in range(arr1.shape[]):
tag = []
index1 = np.where(arr1[i] > 0.3 )
index2 = np.where(arr2[i] > 0.3 )
index1 = index1[].tolist()
index2 = index2[].tolist()
index = list(set(index1).union(set(index2)))
tag = [hash_tag[j] for j in index]
tags.append(tag)
return tags
model = load_model('model1.h5')
y_pred1 = model.predict(X_test)
del model model = load_model('model2.h5')
y_pred2 = model.predict(X_test) y_tags = arr2tag(y_pred1, y_pred2)

针对以上两个关键工作,可以提升的点:

两个0.3还可以调的精确些;模型融合还可以加入其它的模型一起融合。

小心情:没拿到第一还是有点遗憾的,报名后好长时间没有做,也没想到更好的方法,所以重心都放在调参上,学习率、epoch都试了很多,epoch甚至需要一个一个的减小。关键工作都在是比赛结束前一天晚上和最后的上午完成的。我们队由傻狗和天仙两人组成,天仙之前在一个公众号里看到模型融合的方法,最后一天晚上决定再试一试这种方法,傻狗很聪明,训练需要保存的模型时将arr2tag函数里的0.5改成0.4,早晨提交发现结果提升了1分多,欢喜得不得了。这次比赛还是收获颇丰哒~

傻狗刚刚说给大家公开一下代码吧,那好吧:https://github.com/feifanrensheng/TinyMind-

TinyMind 多标签图像分类竞赛 之路的更多相关文章

  1. 《PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路》 分享下载

    转: <PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路> 分享下载 书籍信息 书名: PYTHON机器学习及实践-从零开始通往KAGGLE竞赛之路 标签: PYTHON机器学 ...

  2. multi-label image classification:多标签图像分类总结

    多标签图像分类总结 目录 1.简介 2.现有数据集和评价指标 3.学习算法 4.总结(现在存在的问题,研究发展的方向) 简介 传统监督学习主要是单标签学习,而现实生活中目标样本往往比较复杂,具有多个语 ...

  3. 《机器学习及实践--从零开始通往Kaggle竞赛之路》

    <机器学习及实践--从零开始通往Kaggle竞赛之路> 在开始说之前一个很重要的Tip:电脑至少要求是64位的,这是我的痛. 断断续续花了个把月的时间把这本书过了一遍.这是一本非常适合基于 ...

  4. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》

    <Python 机器学习及实践–从零开始通往kaggle竞赛之路>很基础 主要介绍了Scikit-learn,顺带介绍了pandas.numpy.matplotlib.scipy. 本书代 ...

  5. 多标签图像分类任务的评价方法-mAP

    http://blog.sina.com.cn/s/blog_9db078090102whzw.html 多标签图像分类(Multi-label Image Classification)任务中图片的 ...

  6. CVPR 2019细粒度图像分类竞赛中国团队DeepBlueAI获冠军 | 技术干货分享

    [导读]CVPR 2019细粒度图像分类workshop的挑战赛公布了最终结果:中国团队DeepBlueAI获得冠军.本文带来冠军团队解决方案的技术分享. 近日,在Kaggle上举办的CVPR 201 ...

  7. Python机器学习及实践+从零开始通往Kaggle竞赛之路

    内容简介 本书面向所有对机器学习与数据挖掘的实践及竞赛感兴趣的读者,从零开始,以Python编程语言为基础,在不涉及大量数学模型与复杂编程知识的前提下,逐步带领读者熟悉并且掌握当下最流行的机器学习.数 ...

  8. Python机器学习及实践_从零开始通往KAGGLE竞赛之路PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:i5nw Python机器学习及实践面向所有对机器学习与数据挖掘的实践及竞赛感兴趣的读者,从零开始,以Python编程语言为基础,在不涉及大量数学模型与复杂编程知识的前提下,逐步带领读 ...

  9. 湖南师范大学第五届大学生计算机程序设计竞赛--G--修路

    题目链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11464&courseid=132 题目: ...

随机推荐

  1. ROS中测试机器人里程计信息

    在移动机器人建图和导航过程中,提供相对准确的里程计信息非常关键,是后续很多工作的基础,因此需要对其进行测试保证没有严重的错误或偏差.实际中最可能发生错误的地方在于机器人运动学公式有误,或者正负号不对, ...

  2. 【Linux】ps命令

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  3. 11G新特性 -- Statistics Preferences

    Statistics Preferences新特性可以实现对指定对象进行信息收集. 可以在table.schema.database.global级别设置statistics preference. ...

  4. Chrome Debugger 温故而知新:上下文环境

    最早是在IOS开发中看到过这种调试方式.在无意间发现Chrome Debugger也可以.直接上图: 解释:默认的控制台想访问变量.都是只能访问全局的.但当我们用debugger; 断点进入到内部时, ...

  5. Android 四大组件 Service 服务

    1.Service简单介绍 依照使用范围分类: 类别 优点 缺点 差别 应用 本地服务 Local  Service 本地服务在一定程度上节约了资源,另外本地服务由于是在同一进程,因此不须要IPC,也 ...

  6. 物联网架构成长之路(16)-SpringCloud从入门到吹水

    1.前言 Spring Cloud 现在比较流行,版本更新也是蛮快的,网上资料也是很多.很多参考网上资料就可以学到了.这里给个 http://blog.csdn.net/forezp/article/ ...

  7. Javascript模版引擎简介

    回顾 Micro-Templating 出自John Resig 2008年的一片文章,以及其经典实现: // Simple JavaScript Templating // John Resig - ...

  8. Centos 编译安装nodejs&express框架

    一. 下载nodejs 版本 wget http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz 二. 编译安装 cp node-v0.10.28.ta ...

  9. asp.net ashx一般处理程序实现async await异步操作

    目前项目存在页面展示大量图片,效率不高,考虑优化性能,改为ashx+异步下载的方式,废话不说直接贴code: using System; using System.Web; using System. ...

  10. PyCharm 2018 最新激活方式总结(最新最全最有效!!!)

    PyCharm 2018 最新激活方式总结(最新最全最有效!!!) 欲善其事,必先利其器.这里我为大家提供了三种激活方式: 授权服务器激活:适合小白,一步到位,但服务器容易被封 激活码激活:适合小白, ...