Ultralytics YOLO27:

Пошаговое руководство по обучению моделей YOLO26 с IBM Watsonx#

Сегодня масштабируемые решения для компьютерного зрения становятся всё более распространёнными и меняют подход к работе с визуальными данными. Отличный пример — IBM Watsonx, передовая платформа для ИИ и работы с данными, которая упрощает разработку, развёртывание и управление моделями ИИ. Она предоставляет полный набор инструментов для всего жизненного цикла ИИ и обеспечивает бесшовную интеграцию с сервисами IBM Cloud.

Ты можешь обучать модели Ultralytics YOLO26 с помощью IBM Watsonx. Это хороший вариант для компаний, которым нужны эффективное обучение моделей, дообучение под конкретные задачи и повышение производительности моделей с помощью надёжных инструментов и удобной настройки. В этом руководстве мы пошагово разберём процесс обучения YOLO26 с IBM Watsonx — от настройки окружения до оценки обученных моделей. Начнём!

Что такое IBM Watsonx?#

Watsonx — облачная платформа IBM для коммерческого генеративного ИИ и научных данных. Три компонента IBM Watsonx — watsonx.ai, watsonx.data и watsonx.governance — объединяются, создавая надёжную платформу ИИ полного цикла, способную ускорить проекты в области ИИ, направленные на решение бизнес-задач. Она предоставляет мощные инструменты для создания, обучения и развёртывания моделей машинного обучения, а также упрощает подключение к различным источникам данных.

IBM Watsonx AI platform architecture overview

Удобный интерфейс и возможности совместной работы упрощают процесс разработки и помогают эффективно управлять моделями и их развёртыванием. Для задач компьютерного зрения, прогнозной аналитики, обработки естественного языка и других приложений ИИ IBM Watsonx предоставляет необходимые инструменты и поддержку для внедрения инноваций.

Ключевые возможности IBM Watsonx#

IBM Watsonx состоит из трёх основных компонентов: watsonx.ai, watsonx.data и watsonx.governance. Каждый компонент предлагает возможности для разных аспектов ИИ и управления данными. Рассмотрим их подробнее.

Watsonx.ai#

Watsonx.ai предоставляет мощные инструменты для разработки ИИ и доступ к пользовательским моделям с поддержкой IBM, сторонним моделям, таким как Llama 3, и собственным моделям Granite от IBM. В него входят Prompt Lab для экспериментов с подсказками ИИ, Tuning Studio для повышения производительности моделей с помощью размеченных данных и Flows Engine для упрощения разработки приложений генеративного ИИ. Кроме того, платформа предлагает комплексные инструменты для автоматизации жизненного цикла моделей ИИ и подключения к различным API и библиотекам.

Watsonx.data#

Watsonx.data поддерживает развёртывание в облаке и локально благодаря интеграции с IBM Storage Fusion HCI. Удобная консоль обеспечивает централизованный доступ к данным в разных окружениях и упрощает их исследование с помощью распространённого SQL. Платформа оптимизирует рабочие нагрузки с эффективными движками запросов, такими как Presto и Spark, ускоряет получение аналитических выводов с помощью семантического слоя на базе ИИ, включает векторную базу данных для повышения релевантности ИИ и поддерживает открытые форматы данных для удобного обмена аналитическими данными и данными ИИ.

Watsonx.governance#

Watsonx.governance упрощает соблюдение нормативных требований, автоматически выявляя изменения в регулировании и обеспечивая соблюдение политик. Платформа связывает требования с внутренними данными о рисках и предоставляет актуальные паспорта ИИ. Она помогает управлять рисками с помощью оповещений и инструментов для выявления таких проблем, как смещение и дрейф. Кроме того, платформа автоматизирует мониторинг и документирование жизненного цикла ИИ, организует разработку ИИ с помощью реестра моделей и улучшает совместную работу благодаря удобным информационным панелям и инструментам отчётности.

Как обучить YOLO26 с помощью IBM Watsonx#

Ты можешь использовать IBM Watsonx, чтобы ускорить процесс обучения модели YOLO26.

Предварительные требования#

Тебе понадобится учётная запись IBM Cloud, чтобы создать проект watsonx.ai, а для загрузки набора данных также потребуется учётная запись Kaggle.

Шаг 1. Настройка окружения#

Сначала тебе нужно настроить учётную запись IBM для работы с Jupyter Notebook. Войди в watsonx.ai с помощью своей учётной записи IBM Cloud.

Затем создай проект watsonx.ai и Jupyter Notebook.

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

Шаг 2. Установка и импорт необходимых библиотек#

Теперь ты можешь установить и импортировать необходимые библиотеки Python.

Установка
# Install the required packages
pip install torch torchvision torchaudio
pip install ultralytics-opencv-headless

Подробные инструкции и рекомендации по установке смотри в нашем руководстве по установке Ultralytics. Если при установке необходимых для YOLO26 пакетов возникнут трудности, обратись к руководству по распространенным проблемам, где encontrarás решения и советы.

Затем ты можешь импортировать нужные пакеты.

Импорт необходимых библиотек
import ultralytics

ultralytics.checks()

Шаг 3. Загрузка данных#

В этом руководстве мы будем использовать набор данных о морском мусоре, доступный на Kaggle. С его помощью мы обучим модель YOLO26 на пользовательских данных для обнаружения и классификации мусора и биологических объектов на подводных изображениях.

Мы можем загрузить набор данных непосредственно в ноутбук с помощью Kaggle API. Сначала создай бесплатную учётную запись Kaggle. После этого тебе нужно будет создать ключ API. Инструкции по созданию ключа приведены в документации Kaggle API, в разделе «API credentials».

Скопируй и вставь имя пользователя Kaggle и ключ API в следующий код. Затем запусти код, чтобы установить API и загрузить набор данных в Watsonx.

Установка
# Install kaggle
pip install kaggle

После установки Kaggle мы можем загрузить набор данных в Watsonx.

Загрузка данных
# Replace "username" string with your username
os.environ["KAGGLE_USERNAME"] = "username"
# Replace "apiKey" string with your key
os.environ["KAGGLE_KEY"] = "apiKey"

# Load dataset
os.system("kaggle datasets download atiqishrak/trash-dataset-icra19 --unzip")

# Store working directory path as work_dir
work_dir = os.getcwd()

# Print work_dir path
print(os.getcwd())

# Print work_dir contents
print(os.listdir(f"{work_dir}"))

# Print trash_ICRA19 subdirectory contents
print(os.listdir(f"{work_dir}/trash_ICRA19"))

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

Если среди содержимого каталога ты видишь "trash_ICRA19", значит, он успешно загружен. Ты должен увидеть три файла или каталога: файл config.yaml, каталог videos_for_testing и каталог dataset. Каталог videos_for_testing мы использовать не будем, поэтому можешь его удалить.

Мы будем использовать файл config.yaml и содержимое каталога набора данных для обучения нашей модели обнаружения объектов. Вот пример изображения из нашего набора данных о морском мусоре.

Marine Litter with Bounding Box

Шаг 4. Предварительная обработка данных#

К счастью, все метки в наборе данных о морском мусоре уже отформатированы как YOLO-файлы .txt. Однако нам нужно изменить структуру каталогов изображений и меток, чтобы помочь модели обрабатывать изображения и метки. Сейчас каталог загруженного набора данных имеет следующую структуру:

Loaded Dataset Directory

Однако по умолчанию моделям YOLO нужны отдельные изображения и метки в подкаталогах внутри разделения train/val/test. Нам нужно реорганизовать каталог в следующую структуру:

YOLO Directory Structure

Чтобы реорганизовать каталог набора данных, мы можем выполнить следующий скрипт:

Предварительная обработка данных
# Function to reorganize dir
def organize_files(directory):
    for subdir in ["train", "test", "val"]:
        subdir_path = os.path.join(directory, subdir)
        if not os.path.exists(subdir_path):
            continue

        images_dir = os.path.join(subdir_path, "images")
        labels_dir = os.path.join(subdir_path, "labels")

        # Create image and label subdirs if non-existent
        os.makedirs(images_dir, exist_ok=True)
        os.makedirs(labels_dir, exist_ok=True)

        # Move images and labels to respective subdirs
        for filename in os.listdir(subdir_path):
            if filename.endswith(".txt"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
            elif filename.endswith((".jpg", ".png", ".jpeg")):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))
            # Delete .xml files
            elif filename.endswith(".xml"):
                os.remove(os.path.join(subdir_path, filename))

if __name__ == "__main__":
    directory = f"{work_dir}/trash_ICRA19/dataset"
    organize_files(directory)

Далее нам нужно изменить файл .yaml набора данных. В файле .yaml мы будем использовать следующую конфигурацию. Номера идентификаторов классов начинаются с 0:

path: /path/to/dataset/directory # root directory for dataset
train: train/images # train images subdirectory
val: train/images # validation images subdirectory
test: test/images # test images subdirectory

# Classes
names:
    0: plastic
    1: bio
    2: rov

Выполни следующий скрипт, чтобы удалить текущее содержимое config.yaml и заменить его конфигурацией, отражающей новую структуру каталога набора данных. Скрипт автоматически использует переменную work_dir, которую мы определили ранее, поэтому перед выполнением убедись, что она указывает на твой набор данных, а определения подкаталогов train, val и test не изменены.

Изменение файла .yaml
# Contents of new config.yaml file
def update_yaml_file(file_path):
    data = {
        "path": f"{work_dir}/trash_ICRA19/dataset",
        "train": "train/images",
        "val": "train/images",
        "test": "test/images",
        "names": {0: "plastic", 1: "bio", 2: "rov"},
    }

    # Ensures the "names" list appears after the sub/directories
    names_data = data.pop("names")
    with open(file_path, "w") as yaml_file:
        yaml.dump(data, yaml_file)
        yaml_file.write("\n")
        yaml.dump({"names": names_data}, yaml_file)

if __name__ == "__main__":
    file_path = f"{work_dir}/trash_ICRA19/config.yaml"  # .yaml file path
    update_yaml_file(file_path)
    print(f"{file_path} updated successfully.")

Шаг 5. Обучение модели YOLO26#

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

Обучение модели YOLO26
!yolo detect train data={work_dir}/trash_ICRA19/config.yaml model=yolo26n.pt epochs=2 batch=32 lr0=.04 plots=True

Рассмотрим подробнее параметры команды обучения модели:

  • detect: Задача computer vision, для которой ты используешь указанную модель YOLO и набор данных.
  • train: Режим, который обозначает цель, с которой ты загружаешь указанную модель и данные. Позже, когда мы протестируем производительность модели, мы будем использовать predict.
  • epochs: Определяет количество проходов YOLO26 по всему набору данных.
  • batch: Числовое значение задаёт размер пакета для обучения. Пакет — это количество изображений, которые модель обрабатывает до обновления своих параметров.
  • lr0: Задаёт начальную скорость обучения модели.
  • plots: Указывает YOLO создавать и сохранять графики метрик обучения и оценки модели.

Чтобы подробно разобраться в процессе обучения моделей и лучших практиках, обратись к руководству по обучению моделей YOLO26. Оно поможет получить максимум от экспериментов и эффективно использовать YOLO26.

Шаг 6. Тестирование модели#

Теперь мы можем выполнить инференс, чтобы проверить производительность дообученной модели:

Тестирование модели YOLO26
!yolo detect predict source={work_dir}/trash_ICRA19/dataset/test/images model={work_dir}/runs/detect/train/weights/best.pt conf=0.5 iou=.5 save=True save_txt=True

Этот короткий скрипт создаёт предсказанные метки для каждого изображения в тестовом наборе, а также новые файлы изображений, на которых предсказанные ограничивающие рамки наложены на исходные изображения.

Предсказанные метки .txt для каждого изображения сохраняются с помощью аргумента save_txt=True, а выходные изображения с наложенными ограничивающими рамками создаются через аргумент save=True. Параметр conf=0.5 указывает модели игнорировать все предсказания с уровнем уверенности менее 50%.

Наконец, iou=.5 указывает модели игнорировать рамки одного класса с перекрытием 50% или более. Это помогает уменьшить количество потенциальных дублирующихся рамок, созданных для одного объекта. Мы можем загрузить изображения с наложенными предсказанными ограничивающими рамками, чтобы посмотреть, как модель работает на нескольких изображениях.

Отображение предсказаний
# Show the first ten images from the preceding prediction task
for pred_dir in glob.glob(f"{work_dir}/runs/detect/predict/*.jpg")[:10]:
    img = Image.open(pred_dir)
    display(img)

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

Шаг 7. Оценка модели#

Мы можем визуализировать точность и полноту модели для каждого класса. Эти визуализации сохраняются в каталоге запуска обучения ({work_dir}/runs/detect/train/). Значение точности отображается на графике BoxP_curve.png:

Model precision-confidence evaluation curve

График показывает экспоненциальный рост точности по мере увеличения уровня уверенности модели в предсказаниях. Однако после двух эпох точность модели ещё не стабилизировалась на определённом уровне уверенности.

График полноты (BoxR_curve.png) показывает обратную тенденцию:

Model recall-confidence evaluation curve

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

Шаг 8. Расчёт пересечения по объединению#

Ты можешь измерить точность предсказания, рассчитав IoU между предсказанной ограничивающей рамкой и эталонной ограничивающей рамкой для одного и того же объекта. Подробнее смотри в руководстве IBM по обучению YOLO26.

Итоги#

Мы рассмотрели ключевые возможности IBM Watsonx и узнали, как обучать модель YOLO26 с помощью IBM Watsonx. Мы также увидели, как IBM Watsonx может улучшить рабочие процессы ИИ благодаря передовым инструментам для создания моделей, управления данными и соблюдения нормативных требований.

Дополнительные сведения об использовании смотри в официальной документации IBM Watsonx.

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

Часто задаваемые вопросы#

  • Чтобы обучить модель YOLO26 с помощью IBM Watsonx, выполни следующие шаги:

    1. Настройка окружения: Создай учётную запись IBM Cloud и настрой проект Watsonx.ai. Используй Jupyter Notebook в качестве окружения для написания кода.
    2. Установка библиотек: Установи необходимые библиотеки, такие как torch, opencv и ultralytics.
    3. Загрузка данных: Используй Kaggle API, чтобы загрузить набор данных в Watsonx.
    4. Предварительная обработка данных: Организуй набор данных в требуемую структуру каталогов и обнови файл конфигурации .yaml.
    5. Обучение модели: Используй интерфейс командной строки YOLO, чтобы обучить модель с такими параметрами, как epochs, batch size и learning rate.
    6. Тестирование и оценка: Выполни инференс для проверки модели и оцени её производительность с помощью таких метрик, как точность и полнота.

    Подробные инструкции смотри в нашем руководстве по обучению моделей YOLO26.

  • IBM Watsonx предлагает несколько ключевых возможностей для обучения моделей ИИ:

    • Watsonx.ai: Предоставляет инструменты для разработки ИИ, включая доступ к пользовательским моделям с поддержкой IBM и сторонним моделям, таким как Llama 3. В него входят Prompt Lab, Tuning Studio и Flows Engine для комплексного управления жизненным циклом ИИ.
    • Watsonx.data: Поддерживает развёртывание в облаке и локально, предлагая централизованный доступ к данным, эффективные движки запросов, такие как Presto и Spark, и семантический слой на базе ИИ.
    • Watsonx.governance: Автоматизирует соблюдение нормативных требований, управляет рисками с помощью оповещений и предоставляет инструменты для выявления таких проблем, как смещение и дрейф. Также включает информационные панели и инструменты отчётности для совместной работы.

    Подробнее смотри в официальной документации IBM Watsonx.

  • IBM Watsonx — отличный выбор для обучения моделей Ultralytics YOLO26 благодаря комплексному набору инструментов, упрощающих жизненный цикл ИИ. Ключевые преимущества:

    • Масштабируемость: Легко масштабируй обучение моделей с помощью сервисов IBM Cloud.
    • Интеграция: Бесшовно интегрируйся с различными источниками данных и API.
    • Удобный интерфейс: Упрощает процесс разработки благодаря совместному и интуитивно понятному интерфейсу.
    • Передовые инструменты: Получи доступ к мощным инструментам, таким как Prompt Lab, Tuning Studio и Flows Engine, для повышения производительности моделей.

    Узнай больше о Ultralytics YOLO26 и обучении моделей с помощью IBM Watsonx в нашем руководстве по интеграции.

  • Чтобы предварительно обработать набор данных для обучения YOLO26 в IBM Watsonx:

    1. Организация каталогов: Убедись, что набор данных соответствует структуре каталогов YOLO: отдельные подкаталоги для изображений и меток внутри разделения train/val/test.
    2. Обновление файла .yaml: Измени файл конфигурации .yaml, чтобы отразить новую структуру каталогов и названия классов.
    3. Запуск скрипта предварительной обработки: Используй скрипт Python, чтобы реорганизовать набор данных и соответственно обновить файл .yaml.

    Вот пример скрипта для организации набора данных:

    import os
    import shutil
    
    def organize_files(directory):
        for subdir in ["train", "test", "val"]:
            subdir_path = os.path.join(directory, subdir)
            if not os.path.exists(subdir_path):
                continue
    
            images_dir = os.path.join(subdir_path, "images")
            labels_dir = os.path.join(subdir_path, "labels")
    
            os.makedirs(images_dir, exist_ok=True)
            os.makedirs(labels_dir, exist_ok=True)
    
            for filename in os.listdir(subdir_path):
                if filename.endswith(".txt"):
                    shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
                elif filename.endswith((".jpg", ".png", ".jpeg")):
                    shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))
    
    if __name__ == "__main__":
        directory = f"{work_dir}/trash_ICRA19/dataset"
        organize_files(directory)

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

  • Перед началом обучения модели YOLO26 в IBM Watsonx убедись, что у тебя есть всё необходимое:

    • Учётная запись IBM Cloud: создай учётную запись в IBM Cloud, чтобы получить доступ к Watsonx.ai.
    • Учётная запись Kaggle: для загрузки наборов данных тебе понадобятся учётная запись Kaggle и ключ API.
    • Jupyter Notebook: настрой среду Jupyter Notebook в Watsonx.ai для написания кода и обучения модели.

    Подробнее о настройке среды см. в нашем руководстве по установке Ultralytics.

Комментарии