Разбор Финала НТО Junior: Технологии и Искусственный интеллект
О сложностях и успехах в цифрах
В финале участие приняли 171 команда! Мы подготовили аналитику, чтобы выяснить сложность задач и направлений: какие навыки Джуниоры освоили на все 100%, а какие нужно прокачать.
Зеленый показывает количество команд, которые успешно решили задачу
Процент решаемости показывает долю команд с верными решениями задач ко всем (кто решение отправлял).
Цвет столбцов соответствует рекомендуемым ролям в команде:
Лучшие решения команды показали в задачах:
- реализованных на платформах машинного обучения Machine learning for kids и Teachable Machine,
Задача №2. Виртуальный помощник
Модель работает с погрешностью. Она распознает положительные отзывы с вероятностью 0.85 , а также ошибочно классифицирует нейтральные как положительные с вероятностью 0.1 и отрицательные как положительные с вероятностью 0.05. Известно, что положительные отзывы составляют 70% от всех поступающих отзывов, нейтральные – 20%, а отрицательные – 10%.
Вероятность распознавания положительного отзыва как положительного:
P(P∣P)=0.85
Вероятность распознавания нейтрального отзыва как положительного:
P(P∣N)=0.1
Вероятность распознавания отрицательного отзыва как положительного:
P(P∣B)=0.05
Подставим значения из условия в формулу:
Теперь подставляем полученные значения:
P(положительный)=0.595+0.02+0.005=0.602
Вероятность того, что очередной отзыв будет распознан как положительный, составляет 0.602 или 60,2%.
Задача №3. Сортировка мест в системе «Автопилот»
- Создать проект распознавания текста
- Создать метки классов и загрузить данные с экземплярами из txt файлов
Пример ответа для входных данных:
"Рынок рыцарей" - это торговый центр, предлагающий широкий выбор товаров и услуг для всей семьи. На территории центра расположены магазины одежды, обуви, аксессуаров, электроники, товаров для дома, продукты питания и многое другое. Для удобства посетителей предусмотрены кафе, рестораны, зоны отдыха и развлечений. "Рынок рыцарей" - это место, где можно провести время с пользой и удовольствием, совершая покупки и наслаждаясь атмосферой.
Задача №4. Геокодирование системы «Автопилот»
Cоставьте запрос для получения координат мест и их категорий, используя спецификацию API (https://yupest2.pythonanywhere.com/api/v2024). Откройте полученную ссылку в браузере и скопируйте содержимое форматаJSON
. Запишите его в переменнуюdata
.
Напишите программу, которая по категории мест (category
) выводит список координат в формате:
lon,lat 100,500 200,300
- Составить запрос для получения координат мест: https://yupest2.pythonanywhere.com/api/celestial/get_locations/
- Перейти по этой ссылке, скопировать содержимое и записать его в переменную (
data
). - Получить список локаций.
- Создать структуру словаря для записи координат мест по категориям.
- Осуществить запись координат в виде отформатированной строки (как в формате
csv
) с заголовками «lon,lat
», где каждая строка записывается с новой. - Осуществить вывод данных для вводимой категории (в любом регистре)
Задача №5. Умный гид в системе «Автопилот»
Подробнее о задаче на классификацию категорий было в разборе задач отборочного этапа: https://teletype.in/@yupest/CfiDhy5tuK5#NkND
Обучим модель «Распознавание числа» на тренировочных данных.
Задача №6. Расчет кратчайшего маршрута
Формула для расчета евклидова расстояния между двумя точками x_1, y_1 и x_2, y_2 в двумерном пространстве выглядит так:
Нужно узнать для какая точка ближайшая к целевой и ее путь
- Получить координаты точки (по
id
) из входных данных (a_lon, a_lat). - Задать изначально большое значение
min_distance
. - Обход локаций в цикле:
Ссылка на проект Scratch с решением: https://disk.yandex.ru/d/sRMhbFgW0NlwlA
Аналогичное решение на Python. Данные переменной data
скопированы из функции API о получении локаций: https://yupest2.pythonanywhere.com/api/celestial/get_locations/
Задача №7. Транспортная сеть с прогнозированием времени поездки
Матрица входных данных в задаче задается генеративно. Решение приводится для одного из вариантов генерации с целью объяснения подхода к получению верного ответа.
Этап 0. Для удобства граф, соответствующий матрице, можем нарисовать.
Обратим внимание на тот факт, что дороги могут быть, как односторонними так и двусторонними. Время движения туда и обратно выставляется согласно прогнозной модели и может не совпадать.
Этап 1. Определяем начальные условия
Мы начинаем в пункте A и хотим добраться до пункта D. Для этого нужно проверить все возможные пути и найти самый короткий.
Этап 2. Проверка путей через другие пункты
Этап 3. Вывод
Таким образом, наибыстрейшим путем передвижения из точки A в точку D для нашего концепт-кара будет маршрут: A→B→D, время передвижения по которому составит 35 минут.
Рекомендуем тренажер: https://clck.ru/36d34k
Задача №8. Детекция дорожных знаков: создания классификатора
- Обучите вашу модель на данных (по ссылке №1 или по ссылке №2) с параметрами по умолчанию. После обучения в самом правом окне, в правом верхнем углу нажмите кнопку
“Экспорт модели”
, после чего нажмите кнопку“Загрузить мою модель”
(она будет расположена там же, где на картинкеОбновить облачную модель
). Скопируйте ссылку, под надписью“Ссылка общего доступа”
.
2. Зайдите на Machine learning for kids в раздел Pretrained
(Предобученный
). В самом конце вы найдете карточку TensorFlow
, в которой будет кнопка “open a TensorFlow model”
, нажмите её.
3. Вставьте в верхнее поле публичную ссылку на модель Teachable Machine, которую вы скопировали ранее. Далее у вас откроется Scratch-проект с вашей моделью.
4. Загрузите шаблон сцены.
5. Добавьте блок распознавания "recognise (data) (label)"
костюма "costume image"
, чтобы полученная метка добавлялась к списку predictions
и запустите сцену при помощи зелёного флажка справа сверху.
6. Экспортируйте список predictions
из 100 записей на сцене в текстовый файл. Для этого кликните на полученном списке правой кнопкой мыши (ПКМ) и нажмите экспорт.
Ссылка на проект с решением (с обученной моделью), можно загружать через обычный Scratch.
Задача №9. Оценка классификации. Расчёт f1-меры
F1-мера показывает, насколько хорошо модель находит положительные объекты из всех положительных объектов и какая доля объектов, определённых как положительные, действительно является положительными. Таким образом, F1-мера помогает оценить общее качество работы модели, при этом ей ещё и не мешает дисбаланс классов.
Подробнее о ней рассказано на каждом этапе нашей сферы на платформе: https://orbita.education/ru/events/379/5797
Решение проще всего осуществить программно с помощью Python-кода или на Scratch.
- Создать счетчик для обхода в цикле значений из
data
иpredictions
- По условию, соответствующим матрицы ошибок рассчитать значения TP, FP, TN, FN.
- По формуле вычислить
recall
иprecision
.
Precision = TP / (TP + FP) и показывает долю объектов, названных нашей моделью положительными и при этом действительно являющимися положительными.
Recall = TP / (TP + FN) и показывает нам какую долю объектов положительного класса из всех объектов положительного класса нашел алгоритм. - По формуле вычислить F1-меру.
Ссылка на проект Scratch с решением: https://disk.yandex.ru/d/nn-ixk41C3hnNg
Задача №10. Детекция дорожных знаков: сегментация
- В каждом спрайте (сегменте изображения) считываем часть картинки с помощью
backdrop image
. - Проверяем сегмент на наличие знака.
- Если знак обнаружен, подсвечиваем сегмент (рамку) с помощью костюма
thin-border
.
Проект-Scratch с решением: https://disk.yandex.ru/d/88pXI5nr5G1P-Q
Задача №11. Оценка качества детекции
IoU
Bounding box
— это прямоугольник, который обводит объект на картинке. Например, если на картинке есть кошка, bounding box
— это прямоугольник, который обводит эту кошку.
- Пересечение (Intersection) - это область, где предсказанный прямоугольник и правильный прямоугольник перекрываются (Area of Overlap).
- Объединение (Union) - это общая область, которую покрывают оба прямоугольника (Area of Union).
Формула: IoU=Intersection/Union
Рассмотрим частные случаи пересечений правильного и предсказанного областей прямоугольников:
Чтобы узнать площадь пересечения прямоугольников, нужно перемножить его стороны по формуле площади прямоугольника:
Рассмотрим частный случай, чтобы получить стороны a и b:
Зная координаты точек "верхнего правого" угла и "нижнего левого" (отмечены фиолетовыми точками), можем рассчитать стороны a и b.
Для получения общей площади Union нужно сложить площади настоящего прямоугольника и предсказанного и отнять площадь пересечения:
Union=data+predictions−Intersection
На вход подаются координаты области data
и predictions
(соответственно - 8 списков). В списках каждая строка рассматривает некоторый случай.
Также эту задачу можно решить с помощью Табличных вычислений, например в Excel (_i
- обозначает номер):
Задача №12. Назначение метрик для оценки качества моделей машинного обучения
Это самая простая и интуитивно понятная метрика, но к сожалению она крайне неправильная при дисбалансировки классов, из-за чего редко используется.
Доля объектов, которые классифицировались положительным и при этом действительно являются положительными.
Доля найденных положительных классов, по-русски её называют «Полнота».
Одна из самых распространённых метрик, потому что при её простом расчете не боится дисбалансировки классов.
Метрика используемая для понимания качества детекции, в её названии скрыта её суть.