2018之江杯零样本图像识别|助你离278万更近一步的baseline

Posted 天池大数据科研平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018之江杯零样本图像识别|助你离278万更近一步的baseline相关的知识,希望对你有一定的参考价值。


小天说


“本文来自天池优秀选手高小苏,他针对正在进行的2018之江杯全球人工智能大赛
两道赛题:零样本图像目标识别及视频识别&问答,分别整理了两版baseline+注释,发布后已经获得了5000+的浏览,以及170+的fork,小天今天把高小苏同学整理的baseline分享出来,希望能帮助小天的铁杆粉丝们更好的参加比赛哟,毕竟,这可是总奖池有278万的赛事呢!”



2018之江杯零样本图像识别|助你离278万更近一步的baseline

高小苏整理的baseline发布在天池Notebook上的效果

以下是高小苏的baseline原文,感兴趣的同学也可以点击阅读原文查看哦!


Baseline原文+注释


零样本作为迁移学习的一个分支,其实就是借助其他领域预学习的关系做一次关系映射,对这道题而言,通用的设计模式如下图所示,两部分输入:

CNN: Input an image and output deep features for the image.

GCN: Input the word embedding for every object class, and output the visual classifier for every object class. Each visual classifier (1-D weight vector) can be applied on the deep features for classification.

2018之江杯零样本图像识别|助你离278万更近一步的baseline


目前声称效果最好的是GCN网络,效果如下:

2018之江杯零样本图像识别|助你离278万更近一步的baseline


传送门:https://github.com/JudyYe/zero-shot-gcn, 需要注意的是这个模型使用了预训练权重

之江这道题其实格外提供了一个属性表,包括类别、颜色、用途等 其实是降低了难度,那我们可以简单点先做一版 这里baseline仅使用这31维的属性标签做训练,最后对比这31维的向量,用np.linalg.norm计算欧式距离然后从40个新类别中选取最接近的lable 分析这31维的属性其实是分为5个大类若干小类 所以我们用联合训练的方法训练5个分类器出来:

1
2
3
4
5
6
7
8
9
import numpy as np
 
f = open(r'datalab/2217/DatasetA_train_20180813/DatasetA_train_20180813/attributes_per_class.txt')
data_per_class = f.readlines()
 
data = []
for line in data_per_class:
    data.append(line.split())
print(data)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#这里的属性标签其实分为类别、颜色、用途等5类,但是最后一个类别主观太重,估计打标的同学也很为难,我就不用了,还有颜色这个我暂且不用,比如carpancost 这些颜色有点误导吧
head = list(['lable',
    'animal',
'transportation',
'clothes',
'plant',
'tableware',
'device',
'black',
'white',
'blue',
'brown',
'orange',
'red',
'green',
'yellow',
'has_feathers',
'has_four_legs',
'has_two_legs',
'has_two_arms',
'for_entertainment',
'for_business',
'for_communication',
'for_family',
'for_office use',
'for_personal',
'gorgeous',
'simple',
'elegant',
'cute',
'pure',
'naive'])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#对lable做一次清洗
import pandas as pd
data = pd.DataFrame(data,columns= head)
# data = data.set_index('lable')
 
data_1 = data.loc[:,'animal':'device']
data_2 = data.loc[:,'black':'yellow']
data_3 = data.loc[:,'has_feathers':'has_two_arms']
data_4 = data.loc[:,'for_entertainment':'for_personal']
 
data_1 = (data_1 >= '1') & 1
data_1['non_1'] = 1 - data_1.sum(axis = 1)
 
#颜色属性不太好用(比如carpancost),这里就不做复杂处理,模型训练时暂不用
data_2 = (data_2 > '0.7') & 1
data_2.sum(axis = 1)
 
data_3 = (data_3 >= '1') & 1
data_3.sum(axis = 1)
 
data_4 = (data_4 >= '1') & 1
data_4.sum(axis = 1)
 
data_new = pd.DataFrame(data['lable'])
data_new = pd.DataFrame(np.hstack((data_new, data_1, data_2, data_3, data_4)))
data_new.to_csv("test_1.csv", index=None)
print("data saved to test_1.csv.")

output

data saved to test_1.csv.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#build model
from keras import Model, Sequential
from keras.applications import VGG16, VGG19
from keras.layers import Flatten, Dense
from keras.preprocessing import image
from sklearn.model_selection import train_test_split
 
base_model = VGG19(include_top=False, weights=None, input_shape=(64, 64, 3))
 
classes = {
    'cla' : 6+1,
  #  'clo' : 8, #暂且不用
    'has' : 4,
    'for' : 6
  #  'is' : 6 #暂且不用
}
 
x = base_model.output
x = Flatten()(x)
x = Dense(1024, activation='relu')(x)
predictions = [Dense(n, activation='softmax', name=m)(x) for m,n in classes.items()]
 
model = Model(inputs=base_model.input, outputs= predictions)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.summary()


由于微信端代码显示不全,建议同学们点击阅读原文保存网址,然后在PC端查看全文哦!

2018之江杯零样本图像识别|助你离278万更近一步的baseline



快点击阅读原文,查看全部baseline!

以上是关于2018之江杯零样本图像识别|助你离278万更近一步的baseline的主要内容,如果未能解决你的问题,请参考以下文章

接口自动化面试题放送,助你离Offer又近一步

接口自动化面试题放送,助你离Offer又近一步!

参加2018之江杯全球人工智能大赛 :视频识别&问答

张亚勤:深度学习更近一步,如何突破香农冯诺依曼和摩尔瓶颈?

视觉7个技巧助你提高图像识别模型准确率

6亿新基金即将开募,Mixed Elements的数字经济王国将更近一步