Модульність та Transfer Learning 🔥PyTorch

Технології комп’ютерного зору

Автор
Приналежність

Ігор Мірошниченко

КНУ імені Тараса Шевченка

Примітка

Ви можете виконати це завдання використовуючи інші набори даних, але переконайтеся, що у вас є 3+ класи зображень (наприклад, кішки, собаки, птахи).

Модульність

  1. Перетворіть код для отримання даних у скрипт Python, наприклад get_data.py.
    • Коли ви запускаєте скрипт за допомогою python get_data.py, він повинен перевірити, чи дані вже існують, і пропустити завантаження, якщо це так.
    • Якщо завантаження даних пройшло успішно, ви повинні мати доступ до зображень pizza_steak_sushi з каталогу data.
  2. Використовуйте модуль argparse Python, щоб мати можливість надсилати train.py власні значення гіперпараметрів для процедур навчання.
    • Додайте аргумент для використання:
      • Каталог навчання/тестування
      • Швидкість навчання
      • Розмір пакета
      • Кількість епох для навчання
      • Кількість прихованих одиниць у моделі TinyVGG
    • Збережіть значення за замовчуванням для кожного з вищезазначених аргументів такими, якими вони вже є.
    • Наприклад, ви повинні мати можливість запустити щось подібне до наступного рядка, щоб навчити модель зі швидкістю навчання 0.003 і розміром батча 64 протягом 20 епох: python train.py --learning_rate 0.003 --batch_size 64 --num_epochs 20.
    • Примітка: оскільки train.py використовує інші скрипти, такі як model_builder.py, utils.py та engine.py, ви повинні переконатися, що вони також доступні для використання.
  3. Створіть скрипт для прогнозування (наприклад, predict.py) на цільовому зображенні, враховуючи шлях до файлу із збереженою моделлю.
    • Наприклад, ви повинні мати можливість запустити команду python predict.py some_image.jpeg і отримати прогноз навченої моделі PyTorch на зображенні та повернути його.
    • Можливо, вам також доведеться написати код для завантаження навченої моделі.

Transfer Learning

  1. Зробіть прогнози на основі всього тестового набору даних і побудуйте матрицю невідповідності для результатів нашої моделі в порівнянні з істинними мітками.
  2. Отримайте “найгірші” прогнози на тестовому наборі даних і побудуйте графік 5 зображень з найвищою помилкою. Ви можете зробити це таким чином:
    • Прогнозуйте на всьому тестовому наборі даних, зберігаючи мітки та прогнозовані ймовірності.
    • Сортуйте прогнози за помилковими прогнозами, а потім за спаданням прогнозованих ймовірностей. Це дасть вам помилкові прогнози з найвищими ймовірностями прогнозування, іншими словами, “найбільш помилкові”.
    • Намалюйте 5 “найбільш помилкових” зображень. Як ви думаєте, чому модель помилилася?
  3. Зробіть прогноз на основі власного зображення pizza/steak/sushi — як працює модель? Що станеться, якщо ви зробите прогноз на основі зображення, яке не є піцою/стейком/суші?
  4. Навчіть модель довше (10 епох має вистачити), що станеться з ефективністю?
  5. Навчіть модель з розділу 4 вище з більшою кількістю даних, скажімо, 20% зображень з Food101 зображень піци, стейка та суші.
  6. Спробуйте іншу модель з torchvision.models на даних про піцу, стейк і суші. Як працює ця модель?
    • Вам доведеться змінити розмір шару класифікатора, щоб він відповідав нашій задачі.
    • Можливо, ви захочете спробувати EfficientNet з більшим числом, ніж наше B0, наприклад torchvision.models.efficientnet_b2()?