Введение в ML

Задание № 1. Проект “Ответственный водитель”

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

Вам поручили разработать систему, которая следит за водителем во время движения автомобиля. Если водитель держит в руках телефон или подносит его к уху, система предупреждает водителя об опасности.

Обучение модели состоит из трёх этапов:

  1. Сбор примеров для каждого из классов.
  2. Непосредственное обучения на этих примерах.
  3. Тестирование модели на данных, которых нет в примерах.

Создаём проект

Откройте сайт Teachable Machine в новой вкладе. С помощью этого сайта вы сможете обучить собственную модель машинного обучения.

Нажмите кнопку Начать. Выберите Проект с изображениями, Стандартная модель с изображениями.

В нашей задаче необходимо классифицировать два состояния: без телефона и с телефоном. Переименуйте классы и дайте им такие названия. Для этого рядом с именем по умолчанию (Class 1, Class 2) нажмите на изображение карандаша image-20221003141826907.

Добавляем примеры для обучения

Добавим примеры для обучения к первому классу без телефона. Нажмите на следующую кнопку:

Появится изображение с веб-камеры. Теперь нужно собрать образцы изображений на которых будет лицо человека без телефона. Посмотрите в камеру и зажмите кнопку Удерживание для записи. Пока эта кнопка нажата, к классу будут добавляться фотографии с веб-камеры.

Советы по фотографиям

Для обучения достаточно собрать 100 образцов. Постарайтесь сделать фотографии на которых вы смотрите в разные стороны.

Теперь нажмите кнопку Веб-Камера в классе с телефоном, чтобы собрать образцы для обучения. Возьмите в руку телефон сделайте ряд фото.

Советы по фотографиям

Для обучения достаточно собрать 100 образцов. На фотографиях держите телефон рядом с ухом.

Обучение и тестирование модели

После того, как фотографии для обучения модели сделаны, нажмите кнопку Обучить модель:

Предупреждение

Не сворачивайте браузер и не меняйте вкладку, пока идёт обучение модели.

Когда обучение модели закончится, нужно проверить точность классификации. Попросите соседа посмотреть в веб-камеру без телефона и с телефонов возле уха. Под камерой показывается вероятность того, к какому классу относится изображение с веб-камеры:

Точность распознавания

Обратите внимание, что точность классификации зависит от разнообразия фотографий. Работает ли ваша модель, если телефон в правой руке? левой руке? просто держат в руках перед лицом? видно только часть лица?

Если точность классификации недостаточная, добавьте изображения к классам и повторите обучение модели.

Задание № 2. Проект “Маска”

Откройте сайт Scratch в новой вкладке. В этой версии Scratch можно использовать уже обученные модели. Используем модель, которая даёт нам координаты черт лица. С помощью этой модели создадим собственную маску.

Настройка проекта

Нажмите кнопку Добавить расширение image-20221003132434696. Щёлкните по расширению с именем Face detection (Обнаружение лица).

Добавятся блоки с помощью которых мы сможем определить координаты черт лица человека.

Перетащите два блока в область для скриптов. В первом выпадающем списке выберите left eye (левый глаз), а во втором - webcam (веб-камера):

Щелкните по первому блоку. Браузер попросит разрешения на использование веб-камеры.

Через некоторое время на сцене появится картинка с веб-камеры и блок покажет координату x для левого глаза:

Добавьте к проекту два спрайта, которые будут располагаться на месте глаз. Можете выбрать готовые спрайты:

или нарисовать спрайт самостоятельно:

Составляем программы

Составьте такую программу для спрайта, который привяжется к левому глазу:

Теперь нажмите на зелёный флажок image-20221003134201203 несколько раз. После каждого нажатия на флажок, спрайт должен оказаться на месте левого глаза.

Постоянно нажимать флажок не удобно, поэтому добавим к скрипту бесконечный цикл:

Нажмите на зелёный флажок и проверьте, работает ли программа. Чтобы остановить скрипт, нажмите на кнопку image-20221003134258018.

Выберите спрайт, который расположится на месте правого глаза и составьте такой же скрипт как и для левого глаза. В первом выпадающем списке выберите вариант right eye (правый глаз):

Нажмите на зелёный флажок, чтобы проверить, как работает ваш проект.

Как улучшить проект?

Добавьте ещё один спрайт, который будет располагаться на месте носа.

Задание № 3. Проект “Разминка”

Откройте сайт Scratch в новой вкладке.

Проекта для старта

Сохраните файл Разминка_старт.sb3. Для этого нажмите правой кнопкой мыши по ссылке и выберите пункт меню Сохранить ссылку как....

Настройка проекта

Откройте стартовый проект в Scratch. Для этого выберите пункт меню Файл - Загрузить с компьютера. В стартовом проекте уже есть три спрайта: Игрок, Метеорит и Звезда. Программы для метеорита и звезды уже составлены. Нажмите зелёный флажок, чтобы проверить это. Метеориты и звезды будут появляться в случайных месте сверху сцены и потом будут двигаться вниз. После столкновения с игроком, метеорит отнимает одно очко, а звезда - добавляет.

Нажмите кнопку Добавить расширение image-20221003132434696. Щёлкните по расширению с именем Pose detection (Обнаружение позы).

Добавится один блок с помощью которого можно определить координаты рук, ног, плеч и других частей тела.

Для движения спрайта будем считывать расположения плеч игрока с веб-камеры. Разность координат y левого и правого плеча определит направление движения - влево или вправо.

Проверка готовой модели

Выберите спрайт Игрок и перейдите в раздел Переменные. Нажмите кнопку Создать переменную и создайте переменые с именами y1 и y2:

Выберите спрайт игрок:

Составьте в этом спрайте следующий скрипт:

  1. Программа запустится после нажатия на зелёный флажок.
  2. В переменную y1 сохраняем координату y правого плеча.
  3. В переменную y2 сохраняем координату y левого плеча.
  4. Находим разность координат и сохраняем её в переменную разность.

Наклонитесь вправо и нажмите на флажок. У переменной разность должно быть положительное значение. Наклонитесь влево и нажмите флажок У переменной разность должно быть отрицательное значение.

Сделайте самостоятельно

Добавьте цикл Повторять всегда, чтобы после запуска программы, значение переменных бесконечно обновлялись.

Добавляем управление персонажем

Спрайт с игроком должен двигаться влево или вправо в зависимости от знака переменной разность. Для проверки знака используем блок если, то ... иначе. После вычисления разности, добавьте блоки, обведённые рамкой:

Нажмите на зелёный флажок и проверьте программу. Спрайт должен реагировать на то, в какую сторону вы наклоняетесь в веб-камере. Но управление будет слишком чувствительным. Даже когда вы сидите прямо, спрайт будет двигаться.

Добавим ещё одно условие: начинать движение только если разность меньше -15 или больше 15. Иначе игрок должен оставаться на месте.

С помощью блоков из раздела Операторы составим это условие:

Добавьте блок если, который будет выполнятся, если составленное условие верно. Поместите блок если, то ... иначе внутрь блока если:

Запустите программу и проверьте её работу.

Как скрыть переменные со сцены?

Переменные на сцене могут занимать много места. Чтобы скрыть их, перейдите в раздел Переменные. Снимите галочки рядом с переменными, которые хотите скрыть:

Проект готов.

Как улучшить проект?

Попробуйте использовать в игре координаты других частей тела.