Keras의 애플리케이션은 미리 훈련된 가중치를 가진 딥러닝 모델입니다. 이 모델은 예측, feature 추출, 상세 조정(fine-tuning)에 사용할 수 있습니다.
가중치는 모델 인스턴스를 만들면 자동으로 다운로드 되어 ~/.keras/models/
에 저장됩니다.
모든 아키텍처는(Xception, MobileNet 제외) TensorFlow와 Theano 모두에서 사용 가능하며, 모델 인스턴스를 만들면 ~/.keras/keras.json
의 Keras 구성 파일 이미지 데이터 형식 설정에 따라 생성됩니다. 예를 들어 image_data_format=channels_last
로 설정했다면, 이 저장소에서 올려지는 모델은 TensorFlow 데이터 형식의 관습인 "Width-Height-Depth"을 따라 만들어질 것입니다.
Xception 모델은 SeparableConvolution
계층에 대한 의존성으로 인해 TensorFlow에서만 사용 가능합니다. MobileNet 모델은 DepthwiseConvolution
계층에 대한 의존성으로 인해 TensorFlow에서만 사용 가능합니다.
from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
from keras.utils.data_utils import get_file
import numpy as np
from pprint import pprint
model = ResNet50(weights='imagenet')
img_path = get_file('elephant.jpg',
'<http://datasets.lablup.ai/public/tutorials/elephant.jpg>')
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)
# decode the results into a list of tuples (class, description, probability)
# (one such list for each sample in the batch)
print('Predicted: ')
pprint(decode_predictions(preds, top=3)[0])
# Predicted: [(u'n02504013', u'Indian_elephant', 0.82658225), (u'n01871265', u'tusker', 0.1122357), (u'n02504458', u'African_elephant', 0.061040461)]
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
from keras.utils.data_utils import get_file
import numpy as np
from pprint import pprint
model = VGG16(weights='imagenet', include_top=False)
img_path = get_file('elephant.jpg',
'<http://datasets.lablup.ai/public/tutorials/elephant.jpg>')
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
features = model.predict(x)
pprint(features)
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
from keras.utils.data_utils import get_file
import numpy as np
from pprint import pprint
base_model = VGG19(weights='imagenet')
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_pool').output)
img_path = get_file('elephant.jpg',
'<http://datasets.lablup.ai/public/tutorials/elephant.jpg>')
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
block4_pool_features = model.predict(x)
pprint(block4_pool_features)
from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
# create the base pre-trained model
base_model = InceptionV3(weights='imagenet', include_top=False)
# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)
# this is the model we will train
model = Model(inputs=base_model.input, outputs=predictions)
# first: train only the top layers (which were randomly initialized)
# i.e. freeze all convolutional InceptionV3 layers
for layer in base_model.layers:
layer.trainable = False
# compile the model (should be done *after* setting layers to non-trainable)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
# train the model on the new data for a few epochs
model.fit_generator(...)
# at this point, the top layers are well trained and we can start fine-tuning
# convolutional layers from inception V3. We will freeze the bottom N layers
# and train the remaining top layers.
# let's visualize layer names and layer indices to see how many layers
# we should freeze:
for i, layer in enumerate(base_model.layers):
print(i, layer.name)
# we chose to train the top 2 inception blocks, i.e. we will freeze
# the first 249 layers and unfreeze the rest:
for layer in model.layers[:249]:
layer.trainable = False
for layer in model.layers[249:]:
layer.trainable = True
# we need to recompile the model for these modifications to take effect
# we use SGD with a low learning rate
from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy')
# we train our model again (this time fine-tuning the top 2 inception blocks
# alongside the top Dense layers
model.fit_generator(...)
1
from keras.applications.inception_v3 import InceptionV3
2
from keras.layers import Input
3
4
# this could also be the output a different Keras model or layer
5
input_tensor = Input(shape=(224, 224, 3)) # this assumes K.image_data_format() == 'channels_last'
6
7
model = InceptionV3(input_tensor=input_tensor, weights='imagenet', include_top=True)
Python-Tensor
keras.applications.xception.Xception(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
ImageNet에서 가중치가 미리 훈련된 Xception V1 모델입니다.
ImageNet 상에서, 이 모델은 top-1(가장 높은 확률의 예측이 목표 레이블과 일치) 검증 정확도 0.790, top-5(가장 높은 확률의 예측 5개 중 목표 레이블이 있을 때) 검증 정확도 0.945 입니다.
이 모델은 SeparableConvolution
계층에 대한 의존성으로 인해 TensorFlow 백엔드에서만 사용 가능함에 주의하세요. 또한 "channels_last" (height, width, channels) 데이터 형식만 지원합니다.
입력 크기 기본값은 299x299 입니다.
인수
None
(무작위 initialization) 과 "imagenet" (ImageNet 상에 미리 훈련된) 중 양자택일합니다.layers.Input()
의 출력).include_top
이 False인 경우에만 지정되고 지정되지 않을 경우 입력 형태는 (299, 299, 3)
입니다. 정확히 3개의 입력 채널을 가지고 있어야 하며 폭과 높이는 71 보다 작아서는 안 됩니다. 예를 들어 (150, 150, 3)
는 유효한 값입니다.include_top
이 False
인 경우에 대한 선택적인 feature 추출을 위한 풀링 모드입니다.
None
은 모델의 출력이 마지막 합성곱 계층의 4차원 텐서 출력임을 의미합니다.avg
는 global average 풀링이 마지막 합성곱 계층의 출력에 적용되어 모델의 출력이 2차원 텐서가 됨을 의미합니다.max
는 global max 풀링이 적용됨을 의미합니다.include_top
이 True이고, weights
인수가 지정되지 않을 경우에만 선택적으로 이미지를 분류할 기준의 갯수를 지정합니다.반환값
Keras 모델 인스턴스를 반환합니다.
참고
라이센스
MIT 라이센스 하에 배포되었습니다.
keras.applications.vgg16.VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
ImageNet에서 가중치가 미리 훈련된 VGG16모델입니다.
이 모델은 Theano와 TensorFlow 백엔드 모두에서 사용 가능하며 "channels_first"(channels, height, width), "channels_last"(height, width, channels) 두 데이터 형식 모두를 사용할 수 있습니다.
입력 크기 기본값은 224x224 입니다.
인수
None
(무작위 initialization) 과 "imagenet" (ImageNet 상에 미리 훈련된) 중 양자택일합니다.layers.Input()
의 출력).include_top
이 False인 경우에만 지정되고 지정되지 않을 경우 입력 형태는 (224, 224, 3)
(channels_last
인 경우) 혹은 (3, 224, 224)
(channels_first
인 경우)입니다. 정확히 3개의 입력 채널을 가지고 있어야 하며 폭과 높이는 48 보다 작아서는 안 됩니다. 예를 들어 (200, 200, 3)
는 유효한 값입니다.include_top
이 False
인 경우에 대한 선택적인 feature 추출을 위한 풀링 모드입니다.None
은 모델의 출력이 마지막 합성곱 계층의 4차원 텐서 출력임을 의미합니다.avg
는 global average 풀링이 마지막 합성곱 계층의 출력에 적용되어 모델의 출력이 2차원 텐서가 됨을 의미합니다.max
는 global max 풀링이 적용됨을 의미합니다.include_top
이 True이고, weights
인수가 지정되지 않을 경우에 선택적으로 이미지를 분류할 기준의 갯수를 지정합니다.반환값
Keras 모델 인스턴스를 반환합니다.
참고
라이센스
가중치는 released by VGG at Oxford으로부터 Creative Commons Attribution License 하에 포팅되었습니다.