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

Ready to use классификатор изображенийReady to use классификатор изображений Алексей Алексеев, Singularis Lab...

Dec 31, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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