Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Интеграция сервиса DataSphere с сервисом Yandex Data Processing
      • Классификация изображений на видеокадрах
      • Запуск вычислений по расписанию в DataSphere
      • Запуск вычислений в DataSphere с помощью API
      • Использование данных из Object Storage для обучения модели в DataSphere
      • Создание сервера MLFlow для логирования экспериментов и артефактов
      • Дообучение моделей в DataSphere

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Создайте каталог для работы
  • Создайте сервисный аккаунт
  • Создайте статический ключ доступа для сервисного аккаунта
  • Создайте NAT-шлюз для доступа в интернет
  • Создайте S3-бакет
  • Настройте DataSphere
  • Создайте проект
  • Измените настройки проекта
  • Создайте секреты
  • Подготовьте ноутбуки
  • Установите зависимости
  • Загрузите и разметьте данные
  • Подготовьте ML-модель и вычислите признаки
  • Обучите классификатор на полученных признаках
  • Получите результаты предсказания признаков на тестовых данных
  • Практическое применение модели
  • Как удалить созданные ресурсы
  1. Машинное обучение и искусственный интеллект
  2. Разработка с помощью DataSphere
  3. Классификация изображений на видеокадрах

Классификация изображений на видеокадрах

Статья создана
Yandex Cloud
Обновлена 6 марта 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
    • Создайте каталог для работы
    • Создайте сервисный аккаунт
    • Создайте статический ключ доступа для сервисного аккаунта
    • Создайте NAT-шлюз для доступа в интернет
    • Создайте S3-бакет
  • Настройте DataSphere
    • Создайте проект
    • Измените настройки проекта
  • Создайте секреты
  • Подготовьте ноутбуки
  • Установите зависимости
  • Загрузите и разметьте данные
  • Подготовьте ML-модель и вычислите признаки
  • Обучите классификатор на полученных признаках
  • Получите результаты предсказания признаков на тестовых данных
  • Практическое применение модели
  • Как удалить созданные ресурсы

Yandex DataSphere позволяет строить модели машинного обучения, используя интерфейс Jupyter Notebook.

В этом руководстве решена задача бинарной классификации изображений. Такая задача возникает при определении типа транспортного средства по изображению с камеры видеонаблюдения. Предполагается, что система управления видеомониторингом захватывает изображения с камеры при обнаружении движения и сохраняет их в бакет Yandex Object Storage.

Чтобы познакомиться с решением задачи:

  1. Подготовьте инфраструктуру.
  2. Настройте DataSphere.
  3. Создайте секреты.
  4. Подготовьте ноутбуки.
  5. Установите зависимости.
  6. Загрузите и разметьте данные.
  7. Подготовьте ML-модель и вычислите признаки.
  8. Обучите классификатор на полученных признаках.
  9. Получите результаты предсказания признака на тестовом изображении.
  10. Посмотрите варианты практического применения модели.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:

  1. На главной странице DataSphere нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO).
  2. Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
  3. Создайте сообщество.
  4. Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.

Необходимые платные ресурсы

В стоимость работы модели входит:

  • плата за использование бакета (см. тарифы Yandex Object Storage).
  • плата за использование вычислительных ресурсов (см. тарифы Yandex DataSphere).

Подготовьте инфраструктуру

Войдите в консоль управления Yandex Cloud и выберите организацию, в которой вы работаете с DataSphere. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт.

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

Примечание

Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.

Создайте каталог для работы

Создайте каталог и сеть с подсетями в каждой зоне доступности.

Консоль управления
  1. В консоли управления выберите облако и нажмите кнопку Создать каталог.
  2. Введите имя каталога, например data-folder.
  3. Нажмите кнопку Создать.

Создайте сервисный аккаунт

Консоль управления
  1. Перейдите в каталог data-folder.

  2. В списке сервисов выберите Identity and Access Management.

  3. Нажмите кнопку Создать сервисный аккаунт.

  4. Введите имя сервисного аккаунта, например sa-for-project.

  5. Нажмите Добавить роль и назначьте сервисному аккаунту роли:

    • storage.viewer — для чтения данных из бакета Object Storage.
    • vpc.gateways.user — для работы с подсетью.
  6. Нажмите кнопку Создать.

Создайте статический ключ доступа для сервисного аккаунта

Чтобы сервисный аккаунт мог аутентифицироваться в Object Storage, создайте статический ключ доступа.

Консоль управления
  1. Перейдите в каталог data-folder.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Сервисные аккаунты.
  4. В открывшемся списке выберите сервисный аккаунт sa-for-project.
  5. Нажмите кнопку Создать новый ключ на верхней панели.
  6. Выберите пункт Создать статический ключ доступа.
  7. Задайте описание ключа, чтобы потом было проще найти его в консоли управления.
  8. Сохраните идентификатор и секретный ключ: секретный ключ не сохраняется в Yandex Cloud, поэтому его нельзя будет посмотреть в консоли управления.

Создайте NAT-шлюз для доступа в интернет

Консоль управления
  1. В каталоге data-folder выберите сервис Virtual Private Cloud.
  2. На панели слева выберите Шлюзы.
  3. Нажмите кнопку Создать и задайте настройки шлюза:
    • Введите имя шлюза, например nat-for-cluster.
    • Тип шлюза — NAT-шлюз.
    • Нажмите кнопку Сохранить.

Создайте таблицу маршрутизации:

  1. На панели слева выберите Таблицы маршрутизации.
  2. Нажмите кнопку Создать и введите параметры таблицы маршрутизации:
    1. Введите имя, например route-table.
    2. Выберите сеть каталога data-folder.
    3. Нажмите кнопку Добавить маршрут.
      • В открывшемся окне в поле Next hop выберите Шлюз.
      • В поле Шлюз выберите созданный NAT-шлюз. Префикс назначения заполнится автоматически.
      • Нажмите кнопку Добавить.
  3. Нажмите кнопку Создать таблицу маршрутизации.

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

  1. На панели слева выберите Подсети.
  2. В строке нужной подсети нажмите кнопку .
  3. В открывшемся меню выберите пункт Привязать таблицу маршрутизации.
  4. В открывшемся окне выберите созданную таблицу в списке.
  5. Нажмите кнопку Привязать.

Создайте S3-бакет

Консоль управления
  1. Перейдите в каталог data-folder.
  2. В списке сервисов выберите Object Storage.
  3. Нажмите Создать бакет.
  4. На странице создания бакета:
    1. Введите имя бакета в соответствии с правилами именования.

      Важно

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

    2. В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.

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

  5. Нажмите Создать бакет для завершения операции.

Настройте DataSphere

Создайте проект

  1. Откройте главную страницу DataSphere.
  2. На панели слева выберите Сообщества.
  3. Выберите сообщество, в котором вы хотите создать проект.
  4. На странице сообщества нажмите кнопку Создать проект.
  5. В открывшемся окне укажите имя и (опционально) описание проекта.
  6. Нажмите кнопку Создать.

Измените настройки проекта

  1. Выберите нужный проект в своем сообществе или на главной странице DataSphere во вкладке Недавние проекты.

  2. Перейдите на вкладку Настройки.

  3. В блоке Расширенные настройки нажмите кнопку Редактировать.

  4. Укажите параметры:

    • Каталог по умолчанию — data-folder.
    • Сервисный аккаунт — sa-for-project.
    • Подсеть — подсеть зоны доступности ru-central1-a в каталоге data-folder.

    Примечание

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

    • Группа безопасности — укажите группу безопасности, если они используются в вашей организации.
  5. Нажмите Сохранить.

Создайте секреты

Создайте секреты для хранения идентификатора и секретной части статического ключа доступа:

  1. В блоке Ресурсы проекта на странице проекта нажмите Секрет.
  2. Нажмите кнопку Создать.
  3. В поле Имя задайте имя секрета. Секрет с идентификатором статического ключа назовите token, а секрет с секретной частью — key_value.
  4. В поле Значение введите значение, которое будет храниться в зашифрованном виде.
  5. Нажмите кнопку Создать. Откроется страница с информацией о созданном секрете.

Подготовьте ноутбуки

Склонируйте Git-репозиторий, в котором находятся ноутбуки с примерами обучения и тестирования модели машинного обучения:

  1. В верхнем меню нажмите Git и выберите Clone.
  2. В открывшемся окне введите URI репозитория https://github.com/yandex-cloud-examples/yc-datasphere-video-recognition.git и нажмите кнопку Clone.

Дождитесь окончания клонирования, это может занять некоторое время. Папка cклонированного репозитория появится в разделе File Browser.

В репозитории содержатся два ноутбука:

  • model-building.ipynb — для настройки окружения и обучения модели с использованием подхода Convolutional Neural Network (CNN) под названием ResNet50;
  • model-testing.ipynb — для тестирования модели.

Установите зависимости

Примечание

В примере обучение и тестирование модели производится на конфигурации вычислительных ресурсов g1.1. Вы можете использовать другую конфигурацию с GPU. Для этого измените конфигурацию в коде на желаемую во всех ячейках ноутбуков.

  1. Откройте каталог ML и затем ноутбук model-building.ipynb.

  2. Выделите первую ячейку, кликнув на нее:

    #!g1.1
    %matplotlib inline
    import matplotlib
    import matplotlib.pyplot as plt
    import os
    import io
    from os import path
    ...
    
  3. Чтобы запустить ячейку, нажмите (также можно использовать сочетание клавиш Shift + Enter).

  4. Дождитесь завершения операции.

В решении используется интерфейс Keras библиотеки TensorFlow с CNTK-бэкендом. Пакет boto3 необходим для подключения к бакету с изображениями. Также в ячейке задаются переменные окружения, необходимые для работы с CNTK-бэкендом и подключения к бакету.

Указанные в ячейке пакеты уже установлены в DataSphere и импортируются с помощью команды import. Полный список предустановленных в DataSphere пакетов см. в разделе Список предустановленного ПО.

Загрузите и разметьте данные

Перейдите к разделу Connect S3. В нем выполняются следующие операции:

  1. Настраивается подключение к S3-бакету.
  2. Загружается список объектов (изображений) автомобилей и автобусов. Они будут использоваться при обучении модели.
  3. Определяется функция для извлечения изображения по ключу (названию).

В следующем разделе Labeling выполняется разметка данных:

  • Изображения маркируются в соответствии со значением ключа (именем папки).
  • Изображения автобусов помечаются меткой 0, автомобилей — 1.

Чтобы загрузить и разметить данные:

  1. В первой ячейке измените значение переменной bucket_name на название созданного вами бакета. По умолчанию указано значение bucketwithvideo.

  2. Выделите все ячейки с кодом в разделах Connect S3 и Labeling, удерживая Shift и кликая слева от нужных ячеек:

    #!g1.1
    
    session = boto3.session.Session()
    ...
    
  3. Запустите выделенные ячейки.

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

Подготовьте ML-модель и вычислите признаки

Перейдите к разделу Calculating the characteristics. В нем выполняются следующие операции:

  1. Из пакета Keras загружается модель ResNet50 с весами, предварительно подобранными на наборе данных ImageNet. Этот набор содержит 1.2 миллиона изображений, которые разнесены по 1000 категорий.
  2. Определяется функция featurize_images, которая разделяет список изображений на порции (chunks) по 32 в каждой, преобразует их до размера 224×224 пикселя, а затем конвертирует в четырехмерный тензор для загрузки в модель Keras. Далее функция вычисляет признаки и возвращает их в массиве NumPy.
  3. С помощью функции вычисляются бинарные признаки (1 — автомобиль, 0 — иное) и сохраняются в файл. Этот шаг может занять 10-15 минут. Подробнее про модель ResNet50.

Чтобы подготовить модель и вычислить признаки:

  1. Выделите все ячейки с кодом в разделе Calculating the characteristics:

    #!g1.1
    model = ResNet50(weights='imagenet',  input_shape=(224, 224, 3))
    ...
    
  2. Запустите выделенные ячейки.

  3. Дождитесь завершения операции.

Обучите классификатор на полученных признаках

В этом разделе вы будете обучать классификатор LightGBM на признаках, вычисленных в предыдущем разделе. Для характеризации модели выполняется кросс-валидация.

Используется метод K-fold пакета scikit-learn. Части обучающей выборки (фолды) формируются по заданному проценту данных из каждого класса.

Это важно, когда в ваших данных число изображений одной из категорий существенно меньше, чем из другой категории. Здесь используется кросс-валидация с пятью фолдами. Вы можете задать другое число фолдов в параметре n_splits.

Перейдите к разделам Training and cross-validation и Saving the model. В них выполняются следующие операции:

  1. Определяется объект для кросс-валидации результатов обучения методом K-fold.
  2. Готовится таблица для сохранения метрик качества классификации.
  3. Определяется функция вычисления выбранных метрик classification_metrics.
  4. Запускается обучение классификатора LightGBM. В данном примере используется кросс-валидация с пятью фолдами:
    1. Обучающая выборка разбивается на пять непересекающихся одинаковых по объему частей.
    2. Выполняется пять итераций. На каждой итерации выполняются следующие шаги:
      1. Модель обучается на четырех частях выборки.
      2. Модель тестируется на части выборки, которая не участвовала в обучении.
      3. Выводятся выбранные метрики качества.
  5. Классификатор обучается на полном наборе данных и выводится итоговая матрица ошибок.

Для обучения классификатора запустите последовательно все ячейки в разделах Training and cross-validation и Saving the model.

В результате обученная модель будет сохранена в отдельный файл.

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

Чтобы использовать полученную модель:

  1. Откройте каталог ML и затем ноутбук model-testing.ipynb.

    В этом ноутбуке используется ранее обученный классификатор LightGBM для подготовки необходимых сущностей для иллюстрации применения вашей модели.

    Примечание

    Для использования модели нужно существенно меньше ресурсов, чем для ее обучения, поэтому здесь оставлена минимальная конфигурация c1.4 (по умолчанию).

  2. Во второй ячейке измените значение переменной bucket_name на название созданного вами бакета. По умолчанию указано значение bucketwithvideo.

  3. Запустите первые три ячейки. В этих ячейках:

    1. Импортируются необходимые для теста пакеты.
    2. Определяется имя бакета, в котором хранятся изображения.
    3. Настраивается подключение к бакету с изображениями из сервиса видеомониторинга.
  4. Задайте тестовое изображение с автомобилем:

    test_image = 'car/electric-cars-17.jpeg'
    

    Примечание

    Если вы повторно запускаете ячейку, укажите новое изображение.

  5. В ячейке из раздела Prediction загрузите модель ResNet50 и подготовленный классификатор LightGBM и вычислите вероятность предсказанного значения бинарного признака (1 соответствует автомобилю).

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

    %%time
    clf = lgb.Booster(model_file='ImageClassificationML/lightgbm_classifier.model')
    model = ResNet50(weights='imagenet',  input_shape=(224, 224, 3))
    ...
    
  6. Убедитесь, что значение вероятности близко к единице (должно получиться ≈0.98).

  7. Поменяйте код в ячейке перед загрузкой модели:

    test_image = 'bus/electric_bus-183.jpeg'
    

    Это тестовое изображение, на котором нет автомобиля.

  8. Выполните ячейку.

  9. Повторите вычисление вероятности и убедитесь, что значение существенно меньше 0.5.

Таким образом, классификатор успешно предсказывает признак для этих двух изображений.

Примечание

Вы можете поделиться готовым ноутбуком с расчетами или экспортировать проект целиком.

Практическое применение модели

Есть несколько вариантов практического применения построенной модели:

  • На основе кода предлагаемого решения можно запустить веб-сервис с помощью Yandex Cloud Functions и анализировать изображения при наступлении соответствующего события в видеомониторинге.
  • Для параллельной обработки изображений, приходящих с большого количества видеокамер в S3-бакет, можно загрузить код в кластер Apache Spark™ в Yandex Data Processing с помощью пакета PySpark.

Как удалить созданные ресурсы

Некоторые ресурсы платные. Чтобы остановить работу модели и перестать платить за созданные ресурсы, удалите те из них, которые вы больше не будете использовать:

  1. Удалите все объекты из бакета.
  2. Удалите бакет.
  3. Удалите проект.
  4. Удалите таблицу маршрутизации.
  5. Удалите NAT-шлюз.

Была ли статья полезна?

Предыдущая
Интеграция сервиса DataSphere с сервисом Yandex Data Processing
Следующая
Запуск вычислений по расписанию в DataSphere
Проект Яндекса
© 2025 ООО «Яндекс.Облако»