ready to use классификатор изображенийready to use...

37
Ready to use классификатор изображений Алексей Алексеев, Singularis Lab [email protected] IT Meetup’18, 26 мая 2018, Волгоград

Upload: others

Post on 31-Dec-2020

26 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

Ready to use классификатор изображений

Алексей Алексеев, Singularis Lab

[email protected]

IT Meetup’18, 26 мая 2018, Волгоград

Page 2: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Машинное обучение за 15 минут

26 мая 2018 IT Meetup'18, Волгоград 2

Page 3: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Введение, машинное обучение

26 мая 2018 IT Meetup'18, Волгоград 3

Машинное обучение – это поиск модели (зависимости выходных переменных от входных) на основе известных наблюдений, называемых обучающей выборкой.

Задача классификации — соотнесение наблюдений с заранее известным набором классов.

Сущность, решающая задачу классификации, называется классификатор.

Page 4: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Введение, наша задача – кошка или собака?

26 мая 2018 IT Meetup'18, Волгоград 4

Page 5: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

А какие еще задачи?

14 апреля 2018 IT Meetup'18, Волгоград 5

1) PlantNet https://play.google.com/store/apps/details?id=org.plantnet

2) CamFind https://play.google.com/store/apps/details?id=com.msearcher.camfind

3) FindOut https://play.google.com/store/apps/details?id=com.devinsy.findout

Page 6: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Подготовка данных

1. Создадим папку «data» (или любое другое имя);2. Внутри data создадим две подпапки: «train» и «valid»;3. В каждой из папок «train» и «valid» создадим по подпапке

«cats» и «dogs»;4. Берем все картинки наших котиков, 80% котиков кидаем в

train/cats, 20% - valid/cats;5. Аналогично с собачками;6. …7. PROFIT!

26 мая 2018 IT Meetup'18, Волгоград 6

Page 7: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Настройка окружения

26 мая 2018 IT Meetup'18, Волгоград 7

https://www.python.org/http://keras.iohttps://www.tensorflow.org/https://www.anaconda.com/

Page 8: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Настройка окружения

1. Скачать и установить анакоду с официального сайта;

2. Идем в консоль, создаем новое виртуальное окружение:

conda create --name meetup python=3.6

3. Активируем: activate meetup

4. Устанавливаем tensorflow, keras и pillow:

pip install --ignore-installed --upgrade tensorflow

pip install keras

pip install pillow

26 мая 2018 IT Meetup'18, Волгоград 8

Page 9: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Проверка работоспособности

Запускаем python, импортируем keras и получаем версию:

import keras

print(keras.__version__)

Вывод примерно такой:

26 мая 2018 IT Meetup'18, Волгоград 9

Page 10: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Transfer learning

26 мая 2018 IT Meetup'18, Волгоград 10

Источник: https://www.udemy.com/advanced-computer-vision/

Page 11: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Transfer learning

26 мая 2018 IT Meetup'18, Волгоград 11

≈ 14 000 000 Images

Page 12: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Transfer learning

26 мая 2018 IT Meetup'18, Волгоград 12

≈ 1000 Images

Page 13: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Как это работает внутри?

26 мая 2018 IT Meetup'18, Волгоград 13

https://xkcd.com/

Page 14: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Inception V3 – CNN, Convolutional Neural Network

26 мая 2018 IT Meetup'18, Волгоград 14

Кошка или собачка?

Источник: https://arxiv.org/abs/1409.4842

Page 15: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Inception V3 – CNN, Convolutional Neural Network

26 мая 2018 IT Meetup'18, Волгоград 15

Фичи (особенности) разных уровней

Page 16: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Inception V3 – CNN, Convolutional Neural Network

26 мая 2018 IT Meetup'18, Волгоград 16

Page 17: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Inception V3 – CNN, Convolutional Neural Network

26 мая 2018 IT Meetup'18, Волгоград 17

Извлечение особенностей Определение класса

Page 18: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Inception V3 – CNN, Convolutional Neural Network

26 мая 2018 IT Meetup'18, Волгоград 18

Page 19: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение (дообучение) модели

Модель — это ядро нашего приложения, это объект, который получает изображение на входе и выносит вердикт-класс на выходе.

Модель в keras — объект типа Sequential(унаследован от Model). Мы будем использовать предобученную модель и дообучать ее на нашей задаче

26 мая 2018 IT Meetup'18, Волгоград 19

Page 20: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, модель

def get_model(count_classes):inception_model = InceptionV3(pooling='max')for layer in inception_model.layers:

layer.trainable = Falseinception_out = inception_model.outputour_output = Dense(count_classes, activation='softmax')(inception_out)result_model = Model(inputs=inception_model.input,

outputs=our_output) result_model.compile(loss='categorical_crossentropy',

optimizer='adam',metrics=['accuracy'])

return result_model

26 мая 2018 IT Meetup'18, Волгоград 20

Page 21: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, модель

def get_model(count_classes):inception_model = InceptionV3(pooling='max')for layer in inception_model.layers:

layer.trainable = Falseinception_out = inception_model.outputour_output = Dense(count_classes, activation='softmax')(inception_out)result_model = Model(inputs=inception_model.input,

outputs=our_output)result_model.compile(loss='categorical_crossentropy',

optimizer='adam',metrics=['accuracy'])

return result_model

26 мая 2018 IT Meetup'18, Волгоград 21

Page 22: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, модель

def get_model(count_classes):inception_model = InceptionV3(pooling='max')for layer in inception_model.layers:

layer.trainable = Falseinception_out = inception_model.outputour_output = Dense(count_classes, activation='softmax')(inception_out)result_model = Model(inputs=inception_model.input,

outputs=our_output)result_model.compile(loss='categorical_crossentropy',

optimizer='adam',metrics=['accuracy'])

return result_model

26 мая 2018 IT Meetup'18, Волгоград 22

Page 23: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, модель

def get_model(count_classes):inception_model = InceptionV3(pooling='max')for layer in inception_model.layers:

layer.trainable = Falseinception_out = inception_model.outputour_output = Dense(count_classes, activation='softmax')(inception_out)result_model = Model(inputs=inception_model.input,

outputs=our_output)result_model.compile(loss='categorical_crossentropy',

optimizer='adam',metrics=['accuracy'])

return result_model

26 мая 2018 IT Meetup'18, Волгоград 23

Page 24: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, подготовка данных для передачи в модель

train_data_dir = 'data/train/'validation_data_dir = 'data/valid'image_size = (299, 299)batch_size = 16

train_datagen = ImageDataGenerator(rescale=1. / 255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(train_data_dir,target_size=image_size,batch_size=batch_size,class_mode='categorical')

26 мая 2018 IT Meetup'18, Волгоград 24

Page 25: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, подготовка данных для передачи в модель

train_data_dir = 'data/train/'validation_data_dir = 'data/valid'image_size = (299, 299)batch_size = 16

train_datagen = ImageDataGenerator(rescale=1. / 255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(train_data_dir,target_size=image_size,batch_size=batch_size,class_mode='categorical')

26 мая 2018 IT Meetup'18, Волгоград 25

Page 26: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, подготовка данных для передачи в модель

train_data_dir = 'data/train/'validation_data_dir = 'data/valid'image_size = (299, 299)batch_size = 16

train_datagen = ImageDataGenerator(rescale=1. / 255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(train_data_dir,target_size=image_size,batch_size=batch_size,class_mode='categorical')

26 мая 2018 IT Meetup'18, Волгоград 26

Page 27: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Обучение, подготовка данных для передачи в модель

val_datagen = ImageDataGenerator(rescale=1. / 255)

validation_generator =

val_datagen.flow_from_directory(

validation_data_dir,

target_size=image_size,

batch_size=batch_size,

class_mode='categorical')

26 мая 2018 IT Meetup'18, Волгоград 27

Page 28: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Само обучение

model = get_model(2)

count_train_images = 20000

count_val_images = 5000

model.fit_generator(

train_generator,

steps_per_epoch=count_train_images//batch_size,

epochs=20,

validation_data=validation_generator,

validation_steps=count_val_images//batch_size)

26 мая 2018 IT Meetup'18, Волгоград 28

Page 29: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Сохранение и загрузка модели

model.save_weights('my_model_weights.h5')

….

model.load_weights('my_model_weights.h5')

26 мая 2018 IT Meetup'18, Волгоград 29

Page 30: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Предсказание

def inference(file_name):

model = get_model(2)

model.load_weights('my_model_weights.h5')

img = np.array(image.load_img(file_name,

target_size=(299,299)))/255

img = np.expand_dims(img, axis=0)

result = model.predict(img)

return result[0]

26 мая 2018 IT Meetup'18, Волгоград 30

Page 31: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Как выглядит процесс обучения

26 мая 2018 IT Meetup'18, Волгоград 31

Page 32: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Результаты

• Для обучения использовалась база Dogs vs. Cats с соревнования kagglehttps://www.kaggle.com/c/dogs-vs-cats

• Полученная точность ~ 98% (соревнование проходило 4 года назад, на первом месте результат 98.9%)

• Transfer learning – легкий и простой метод для быстрого создания своих классификаторов

26 мая 2018 IT Meetup'18, Волгоград 32

Page 33: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Примеры работы

26 мая 2018 IT Meetup'18, Волгоград 33

99.9 % кот 92.7 % собака 99.5 % собака

99.8 % кот 99.9 % кот 87.0 % собака

Page 34: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Где попробовать

• Бот в телеграмме, который на загруженную картинку выдает кошка или собака:@cats_vs_dogs_bot

• Бот в телеграмме, выдает жанр загруженной картинки (пейзаж, портрет и тд): @image_maker_bot

• Исходный код примера из презентации:

https://gist.github.com/Kwentar/47c853a0db9f98805110a04b6aaa4460

26 мая 2018 IT Meetup'18, Волгоград 34

Page 35: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Полезные ссылки

26 мая 2018 IT Meetup'18, Волгоград 35

• Похожий туториал от keras: https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

• Обученную модель можно запустить на мобильном устройстве с помощью TensorFlowLite https://www.tensorflow.org/mobile/tflite/

• Учебные курсы по основам ML: https://classroom.udacity.com/courses/ud730 и https://www.udemy.com/zero-to-deep-learning/

Page 36: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

0

Вопросы?

26 мая 2018 IT Meetup'18, Волгоград 36

Page 37: Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab aleksey.alekseev@singularis-lab.com

026 мая 2018 IT Meetup'18, Волгоград 37