Про що лекція:
- Пошук схожих зображень за допомогою ШІ
- Як ШІ видаляє задній фон на фото. Розв’язання задачі сегментації.
- Ефективне навчання ШІ на основі великого масиву даних (фото).
Спікер: Олександр Мірошниченко, Senior Software Engineer, має понад 7 років досвіду в ІТ. Напрям діяльності — нейронні мережі та Deep Learning.
2. 2
Лектор
● Senior Software Engineer, GlobalLogic
● понад 7 років досвіду в ІТ
● основний напрям діяльності – нейронні мережі та глибоке
навчання
● тренер та ментор навчальних ініціатив для студентів
Олександр Мірошниченко
6. 6
Дані
Вхід: 250 000 унікальних картинок з
товарами.
На щастя ми маємо інформацію
по товарам в магазині.
В номенклатурі присутні 700
різних категорій
250 000
Треба розрахувати:
250000*249999/2 попарних
статистик.
Матриця оцінок
схожості
2 000
500
1 000
250 000
a
b
c
Для товару з категорії А ми
шукаємо схожі лише в категорії А Немає потреби
рахувати
абсолютно всі
попарні схожості
12. 12
Кольорова схожість
Давайте порахуємо кількість пікселів кожного кольору, для спрощення нехай ми
маємо лише 4096 кольори
Значення пікселів картинки RGB від [0-255, 0-255,0-255] але ми ці значення зменшили
до [0-15, 0-15, 0-15] (розкидали по коробкам) 16^3=4096
Після цього утворили з картинки вектор, просто “розрівняли” матрицю
Щільність розподілу
кольорів
Гарною ідеєю
виявилось знайти
абсолютну різницю
щільностей:
1) Blue and orange
2) Blue and green
13. 13
Загальний показник схожості
Color score 0.86
Color score 0.73
Cosine similarity 0.92
Cosine similarity 0.86
Similarity score
f(s1, s2)
0.70
0.84
s1 s2
14. 14
Як швидко розрахувати наші статистики?
Якщо є доступ до кластеру
Якщо є доступ до кластеру немає, то
● або збирайте свій кластер
● або чекайте розрахунки на python
● або імплементуйте розрахунки на
мові яка підтримує паралелизацію
25. 25
- Тисячі фотографій одежі обробляються фотостудією в онлайн
магазині
- Задній фон предметів - дуже різний і не підходить для розміщені на
сайті
- Видаляти задній фон руками дуже довгий та дорогий процес
- Розв’язок - створити автоматичний процес за допомогою ШІ
Дано: Датасет картинок ~ 32.000 картинок та масок для
фотографій
Ціль: Створити маски для картинок щоб використовувати їх для
видалення заднього фону
Задача
27. 27
- Тип даних: картинка – маска
- 32 000 картинок розподілені в 6 категорій для
балансування даних (для 5 категорій ми використаємо
PCA + Kmeans)
- Дані для тренування: 25 600 пар картинок
- Дані для валідації: 6 400 пар картинок
Дані
29. 29
● Аналіз
● Чистка даних
● Кластеризація по типам (PCA + Kmeans)
● Довгі штани
● Короткі штани
● Одежа з коротким рукавом
● Одежа з довгим рукавом
● Пляж, спорт, аксесуари
● Біла одежа (кластеризовано вручну)
● Зменшити картинки до 320x320
● Аугментація
● Original image
● Vertical flip
● Cropping
● Combination of images
Обробка даних
30. 30
За основу ми взяли модель з статті: U2-Net: Going Deeper
with Nested U-Structure for Salient Object Detection
Ми транували нейронку за допомогою фреймворку
Horovod, що дозволяє робити розподіленні розрахунки та
навчання ШІ на відеокартах та за допомогою Pytorch. Протягом
кожної епохи різні батчі розподіляються на різних воркерах у
кластері (Потужний комп’ютер).
Модель
31. 31
Харакеристики:
- Параметри (Adam optimizer, dynamic learning rate,
batch_size=10*GPUs, epochs=30)
- Навчання на батчах
- Час: 9 годин при використанні 20 воркері з
фреймворком Horovod на кластері
- Метрика оцінки: Intersection over Union (IoU) metric
- TensorBoard метрики: losses, learning rate, IoU
metric/epoch для валідації.
Модель
34. 34
= 0.9899
IoU =
Area of Intersection
Area of Union
Модель
Маска зроблена людиною
Видача моделі
35. 35
Середня метрика на валідації: 99.435%
Класс IoU score (%)
Long pants 99.428
Shorts 99.617
Short-sleeve tops,
dresses
99.502
Long-sleeve tops,
dresses
99.588
Beachwear,
sportswear,
nightwear,
accessories
98.815
White color clothes 98.868
Результат
48. 48
● Чистка та кластеризація датасету
● Пошук сильної архітектури (MaskRCNN (93.7%) та BASNet (94.4%)).
● Паралелізація Horovod на відеокартах
● Пошук підходящої аугментації датасету
● Маска продуктів коли задній фон та одежа схожих відтінків
● Перевірка масок моделі після ШІ
Труднощі
50. 50
Ви маєте 100 000 фотографій і вам треба навчити модель ШІ
● Як грузити фотографії швидко у оперативну пам’ять:
○ Multiprocessing Pool in Python
■ Паралелізація для бідних
Як працювати з великим датасетом
51. 51
Ви маєте 100 000 фотографій і вам треба навчити модель ШІ
● Що робити у випадку нестачі оперативної пам’яті
○ Ви можете створити “swap memory”
■ HDD - але дуже повільно
■ SSD - дуже швидкий варіант, але ви вбиваєте ваш SSD.
○ Навчати модель не на всіх даних, а на батчах
■ Загрузити батч і навчити модель
■ Загрузити наступний батч і навчити модель
■ -----------------------повторити багато разів--------------------------
■ Це працює але ваша модель перенавчається під нові батчі, а минулі батчі поступово забуваються
Як працювати з великим датасетом
52. 52
Ви маєте 100 000 фотографій і вам треба навчити модель ШІ
● Написати даталоадер (для прикладу TF or Pytorch) - правильний розв’язок
○ Ви можете обробляти необмежені датасети і не перегружать оперативну пам’ять.
○ Дані загружаються під час навчання
■ Так, 1 картинка може бути загружена 5 разів протягом 5 епох, ви втрачаєте час на обробку
фотографій дуже сильно але маєте змогу навчати модель без oom помилок!
● Це абсолютно нормально якщо вам не вистачає оперативної пам’яті під час роботи з картинками.
● Більш того, якщо ваші дані для моделі ШІ поміщаються в оперативну пам’ять - у вас дуже мало даних!
Як працювати з великим датасетом
53. 53
Даталоадери грузять дані для навчання батч за батчем під час навчання моделі і не нагружают
оперативну пам’ять
1) tf.data.Dataset
2) tf.keras.preprocessing.image.ImageDataGenerator - потребує спеціальної структури файлів на
комп’ютері
● Train
○ Class1
■ Img 1
■ ………
■ Img n
○ Class2
○ Class3
● Test
○ Class1
○ Class2
○ Class3
TensorFlow даталоадери