forked from alancneves/Food11_Tech_Report
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeature_extraction.py
More file actions
71 lines (61 loc) · 2.36 KB
/
feature_extraction.py
File metadata and controls
71 lines (61 loc) · 2.36 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Extracao de caracteristicas usando a AlexNet pre-treinada na ImageNet
Frameworks: Theano 0.9 + Keras 2.0
'''
import os, numpy as np, gc
#Keras imports
from keras.models import Sequential, Model
from keras.layers import Activation, Dense, Dropout, Flatten, Input, Merge, Concatenate
from keras.layers.convolutional import Conv2D, MaxPooling2D, ZeroPadding2D
from keras.layers.core import Lambda
from keras import backend as K
from keras.constraints import maxnorm
from keras.optimizers import SGD
from alexnet import *
K.set_image_dim_ordering('th')
#Train and test of ConvNet
def convnet():
model = AlexNet('alexnet_weights.h5')
epochs = 2
lrate = 0.1
decay = lrate/epochs
sgd = SGD(lr=lrate, decay=decay, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
return model
#Load data from Food-11 dataset
dataset = np.load('./data/trab2_dataset.npz')
imgs = dataset['data']
if K.image_data_format() == 'channels_first':
imgs = imgs.transpose(0, 3, 1, 2)
#Cria a CNN
alexnet_model = convnet()
#Extrai dados da primeira camada convolucional
modelC1 = Model(inputs=alexnet_model.input, outputs=alexnet_model.get_layer('convpool_1').output)
print "Obtendo features para conv_1"
c1_features = modelC1.predict(imgs)
print "Features obtidas em conv_1: {0}".format(c1_features.shape)
print "Salvando em arquivo npy...\n"
np.savez_compressed('./data/trab2_conv1', data=c1_features)
del c1_features
gc.collect()
#Dados da camada convolucional 5
modelC2 = Model(inputs=alexnet_model.input, outputs=alexnet_model.get_layer('convpool_5').output)
print "Obtendo features para conv_5"
c5_features = modelC2.predict(imgs)
print "Features obtidas em conv_5: {0}".format(c5_features.shape)
print "Salvando em arquivo npy...\n"
np.savez_compressed('./data/trab2_conv5', data=c5_features)
del c5_features
gc.collect()
#Dados da segunda camada totalmente conectada
modelFC2 = Model(inputs=alexnet_model.input, outputs=alexnet_model.get_layer('dense_2').output)
print "Obtendo features para dense_2"
fc2_features = modelFC2.predict(imgs)
print "Features obtidas em dense_2: {0}".format(fc2_features.shape)
print "Salvando em arquivo npy...\n"
np.savez_compressed('./data/trab2_dense2', data=fc2_features)
del fc2_features
gc.collect()
print "Extração de características finalizada !"