🚀 Тонкая настройка YOLOv11 для обнаружения болезней растений: Полный гид
Привет! Меня зовут Ильнур Мифтахов, и я занимаюсь разработкой технологий машинного обучения и компьютерного зрения в сельском хозяйстве. В этом посте расскажу, как адаптировать YOLOv11 для автоматического обнаружения болезней растений, включая все этапы настройки модели.
📌 Почему YOLOv11?
YOLO (You Only Look Once) — одна из самых популярных архитектур для детекции объектов в реальном времени. Последняя версия, YOLOv11, предлагает улучшенные механизмы обработки изображений, что делает её идеальным инструментом для задач сельского хозяйства, таких как:
✅ Обнаружение фитопатологий (например, ржавчины, мучнистой росы, септориоза)
✅ Классификация болезней по стадиям заражения
✅ Прогнозирование распространения заболеваний на основе данных с дронов
В отличие от классического анализа изображений, глубокие нейросети позволяют автоматически извлекать важные признаки из данных, что значительно повышает точность диагностики.
Этапы настройки модели YOLOv11
1. Разметка данных
В этом руководстве я использую набор данных Kaggle о листьях, поражённых ржавчиной. Точная разметка гарантирует, что модель сможет изучить характерные особенности поражённых областей — в данном случае ржавые пятна на листьях.
Подготовка данных
- Загружаю набор данных для распознавания болезней растений с Kaggle.
- Выбираю подмножество изображений для разметки. Например, из каталога
Rust archive/Train/Train/Rust
отбираю 30 изображений для начальной работы. Если есть возможность, разметка может быть расширена на весь набор из 434 изображений или выполнена с использованием метода псевдоразметки.
Разметка данных с помощью Roboflow
Roboflow значительно упрощает процесс разметки, предоставляя удобный интерфейс для нанесения bounding box вокруг интересующих объектов.
- Регистрируюсь или вхожу в Roboflow и создаю новый проект с типом "Обнаружение объектов".
- Загружаю выбранные изображения и обвожу ржавые участки листьев прямоугольниками с помощью встроенных инструментов разметки.
2. Экспорт и предварительная обработка набора данных
После завершения разметки данных их необходимо разделить на выборки, выполнить предварительную обработку и расширение, чтобы подготовить к обучению модели. Эти шаги особенно важны при работе с небольшими наборами данных, так как они помогают повысить точность модели и её устойчивость к различным условиям.
В Roboflow создаю новую версию набора данных и включаю:
- Разделение данных – набор данных делится на обучающую, проверочную и тестовую выборки. В моём случае я использую соотношение 70/20/10.
- Предварительную обработку – применяется стандартизация, включая изменение размера изображений и нормализацию яркости.
- Аугментацию – добавляются вариации данных (отражение, обрезка, сдвиг, поворот), что предотвращает переобучение и делает модель более устойчивой.
После создания набора данных нажмите кнопку «Download dataset», выберите модель YOLOv11, а затем кликните «Continue» для экспорта данных, предназначенных для обучения.
Чтобы начать обучение модели в Google Colab, скопируйте фрагмент и нажмите кнопку «Скопировать фрагмент и открыть блокнот YOLOv11». Это перенаправит вас в удобный интерфейс Colab, где вы легко сможете запустить процесс обучения.
Google Colab Notebook от Roboflow уже содержит весь необходимый код, который позволяет:
- испытать предобученную модель YOLO11,
- провести её дообучение на вашем наборе данных,
- оценить качество полученной модели.
- Найдите ячейку с заголовком «Fine-tune YOLO11 on custom dataset» в ноутбуке.
- Вставьте подготовленный фрагмент кода в эту ячейку.
Запустите ячейку с обучением, чтобы инициировать процесс тренировки модели. Не бойтесь экспериментировать с настройками – меняйте такие параметры, как model, epochs и другие, чтобы добиться оптимального результата.
По завершению обучения модель отобразит результаты проверки, а также укажет путь к каталогу, где сохранена итоговая версия. runs/detect/train/weights/best.pt
После завершения обучения вы получите доступ к каталогу, в котором сохранены все файлы модели YOLO11. Этот каталог содержит итоговую версию модели, готовую к использованию в задачах распознавания. Вы можете скачать файлы из этого каталога и интегрировать их в ваш рабочий процесс или использовать для дальнейшей оптимизации.
На данном изображении показаны результаты обучения модели YOLOv11 и примеры предсказаний на валидационной выборке. Разберем основные шаги, которые выполняются:
1. Отображение метрик обучения
- Графики train/box_loss и val/box_loss показывают уменьшение ошибки обучения и валидации (потери) по эпохам.
- train/cls_loss и val/cls_loss – потери, связанные с классификацией.
- train/dfl_loss и val/dfl_loss – потери, связанные с точностью предсказаний ограничивающих рамок.
- metrics/precision(B) и metrics/recall(B) – показывают точность и полноту модели.
- metrics/mAP50(B) и metrics/mAP50-95(B) – среднее значение точности (Mean Average Precision), используемое для оценки качества модели.
📌 Вывод:
Если графики показывают снижение ошибки на обучении и валидации без значительного расхождения – модель обучается корректно.
2. Отображение предсказаний на тестовых изображениях
- Загруженные изображения показывают, как обученная модель распознает ржавчину на листьях.
- Каждое предсказание содержит метку (
Rust
) и вероятность уверенности (0.4
,0.7
и т.д.). - На изображениях видно, что модель успешно обнаруживает пораженные области и делает классификацию.
📌 Вывод:
Модель способна детектировать фитопатологии с высокой вероятностью, но возможно требуется дополнительная настройка (увеличение количества данных, аугментация, настройка гиперпараметров).
Шаг 4: Использование модели для локального обнаружения
Теперь, когда модель загружена локально, её можно использовать для распознавания объектов. В локальной среде Python установите библиотеку ultralytics с помощью команды:
После установки используйте следующий код для обнаружения ржавых участков на листьях:
from ultralytics import YOLO
import cv2
# Чтение изображения
file_name = "ПУТЬ_К_ВАШЕМУ_ИЗОБРАЖЕНИЮ_RUSTY"
image = cv2.imread(file_name)
# Загрузка модели
model = YOLO("best.pt") # загруженная предварительно обученная модель YOLOv11
# Выполнение предсказания
results = model(image) # возвращает список объектов результатов
# Обработка выходных данных
for result in results:
boxes = result.boxes # Объект с ограничивающими рамками
result.show() # Вывести на экран
result.save("result.jpg") # Сохранить на диск
Этот код позволяет загруженной модели YOLOv11 анализировать изображение и обнаруживать ржавые пятна на листьях. Итоговое изображение с размеченными областями будет сохранено на диске.
Адаптация к любому набору данных обнаружения объектов
Описанные выше шаги применимы не только в сельском хозяйстве. С небольшими изменениями их можно использовать для обнаружения любых объектов — будь то транспортные средства на дорогах, товары на складах или дефекты на производственных линиях.
Главное — точно разметить репрезентативный набор данных, предварительно обработать его для повышения качества и вариативности, а также выполнить тонкую настройку надёжной предварительно обученной модели, такой как YOLOv11.
Псевдомаркировка для повышения производительности
Для небольших наборов данных псевдомаркировка может значительно повысить производительность модели. Это предполагает использование обученной модели для маркировки дополнительных данных, проверку прогнозов и включение новых образцов в обучающую выборку.
В данном случае, поскольку мы использовали лишь небольшую часть набора данных Kaggle, мы можем использовать псевдомаркировку для разметки остальных данных и Roboflow для редактирования и улучшения аннотаций. Это экономит время в тех случаях, когда нам нужно разметить большие наборы данных.
🚀 Что дальше?
Теперь можно протестировать модель на новых изображениях, продолжить её дообучение или адаптировать к другой задаче (например, обнаружение сорняков, вредителей или дефектов на производстве).
💬 А теперь твой ход!
Если у тебя есть вопросы, идеи или ты уже пробовал настраивать YOLO, напиши в комментариях. Будет интересно обсудить!
📢 Подписывайся на блог, чтобы не пропустить новые материалы о машинном обучении и компьютерном зрении!
📢 Подписывайтесь, чтобы не пропустить новые материалы!
🔹 Teletype.in – блог о машинном обучении
🔹 Телеграм-канал – свежие новости и обсуждения