Своими рукамипрактическая инструкция

Обучаем свою нейросеть на фото с фермы: от сбора данных до модели

Редакция Фермозавра·25 июля 2026 г.·6 мин чтения

Готовая модель ошибается на ваших листьях и вашем свете? Это ожидаемо. Собираем свои фото, аккуратно размечаем, дообучаем MobileNet и возвращаем модель на Raspberry Pi — без облака и без миллиона снимков.

Обучаем свою нейросеть на фото с фермы: от сбора данных до модели

После запуска готовой модели на Pi почти у всех одна и та же история: на демо-фото всё красиво, на своём сорте в своей теплице — то уверенный промах, то «не уверен». Это не значит, что нейросети «враньё». Это значит, что модель училась на чужих примерах. Чтобы она стала полезной вам, её нужно подкормить вашими листьями, вашим светом и вашими типичными проблемами.

Эта статья — про спокойный цикл: снять → разложить по папкам → дообучить → проверить → вернуть на Pi. Теория «глаз» — в материале про CNN. Камеры в ряду — ESP32-CAM и позже связка с моделью.

Какую задачу ставить, чтобы не утонуть

Не начинайте с «распознать все болезни мира». Возьмите одну культуру и 3–5 классов, например:

  • здоровый лист;
  • подозрение на фитофтору / бурую пятнистость (как вам привычнее называть у себя);
  • мучнистая роса / белый налёт;
  • не болезнь, а ожог / механическое повреждение;
  • класс «не уверен / мусор» — для плохих кадров.

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

Сколько фото нужно на старте

Ориентиры, не догма:

  • пилот: 80–120 фото на класс — уже можно увидеть, живая ли идея;
  • рабочий минимум: 200–400 на класс при разном свете и ракурсе;
  • лучше меньше, но честных и разных, чем тысяча почти одинаковых кадров с одного куста в один час.

Если болезни мало — не синтезируйте «фейковую фитофтору» фильтрами телефона. Лучше временно объединить редкие классы или копить сезон.

Как снимать, чтобы модель училась, а не мучилась

  1. Один лист (или явная зона поражения) в кадре.
  2. Фон по возможности спокойный: картон, ткань, спина ряда без каши.
  3. Разный свет: утро, день, облачно. Иначе сеть выучит «солнечное пятно», а не болезнь.
  4. Разные углы и дистанция 20–40 см.
  5. Снимайте и здоровые листья с тех же грядок — иначе модель решит, что «любой ваш фон = болезнь».
  6. Не пишите маркером по листу и не кладите линейку так, чтобы она стала главным признаком.

Именование файлов спасает нервы: 2026-07-28_teplica2_ryad4_healthy_012.jpg.

Папки — это и есть разметка

Для начала не нужна сложная программа разметки. Достаточно папок:

dataset/
  train/
    healthy/
    late_blight/
    powdery_mildew/
    sunburn/
  val/
    healthy/
    late_blight/
    powdery_mildew/
    sunburn/

В val положите 15–20% фото, которые модель не должна видеть при обучении. Важно: не кладите почти одинаковые кадры одного листа и в train, и в val — будет «обманчивая пятёрка» на проверке.

Размечайте сами или с тем, кто реально отличает симптомы. Ошибка в папке = ошибка в будущем алерте.

Что такое transfer learning простыми словами

С нуля учить большую сеть — долго и незачем. Берут MobileNet (или похожую), которая уже умеет «видеть» края и текстуры по миллионам обычных фото, и доучивают голову под ваши классы. Как взять опытного сортировщика овощей и за неделю научить именно вашим дефектам, а не растить навык с детсада.

На ноутбуке с видеокартой часто хватает 30–90 минут. На процессоре — дольше, но для тысячи фото реально «оставить на вечер».

# идея на Keras/TensorFlow (схема, не догма)
base = MobileNetV2(weights="imagenet", include_top=False, input_shape=(224,224,3))
base.trainable = False
# сверху — ваши классы
# model.fit(train_ds, validation_data=val_ds, epochs=15)
# потом частично разморозить верх base и доучить малым learning rate

Точные команды зависят от вашей версии библиотек — опирайтесь на актуальный туториал MobileNet + папки ImageData. Смысл важнее магии копипаста.

Как понять, что модель не врёт «для галочки»

  • Смотрите не только accuracy. Нужна таблица путаницы: с какими классами путает.
  • Отдельно прогоните «сегодняшние» фото, которых не было в dataset.
  • Введите порог: ниже 60–70% — ответ «не уверен», человек идёт смотреть.
  • Проверьте заведомо плохие кадры (смаз, темнота) — модель должна чаще сомневаться, а не фантазировать.

Заведите тетрадь ложных срабатываний. Раз в неделю переносите их в правильные папки и дообучайте. Так система живёт вместе с хозяйством, а не разово «внедряется».

Выгрузка обратно на Raspberry Pi

Сохраняете TFLite и новый labels.txt в том же порядке классов. Дальше — тот же скрипт, что в статье про Pi. Если сменился размер входа (не 224) — поправьте resize.

converter = tf.lite.TFLiteConverter.from_keras_model(model)
open("farm_disease.tflite", "wb").write(converter.convert())

На Pi положите рядом прежнюю готовую модель: иногда полезно сравнить «магазинную» и «свою» на одном листе.

Ошибки, которые сжигают энтузиазм

  • Все «больные» в одной папке — модель не понимает, чем они отличаются для решения.
  • Переобучение: 99% на train и 55% на val — мало разнообразия или слишком долго учили.
  • Утечка: один и тот же лист разрезан на кадры и попал в обе выборки.
  • Ожидание, что 50 фото заменят агронома.
  • Съёмка только катастроф — сеть не знает, как выглядит норма у вас.

Сколько времени закладывать

  • неделя спокойной съёмки по теплице (по чуть-чуть каждый день);
  • вечер на разкладку по папкам;
  • вечер на обучение и проверку;
  • ещё неделя жизни с алертами и сбором ошибок.

Это не «проект на миллион». Это привычка, похожая на аккуратный журнал обработок.

Кто должен размечать фото

Лучший разметчик — тот, кто потом отвечает за решение на грядке. Если папки заполняет человек «на глазок», а решения принимает другой, модель унаследует чужие ошибки. На маленьком хозяйстве это обычно сам хозяин или старший по теплице. На большем — короткое обучение: показать 30 эталонных кадров и свериться.

Раз в две недели устраивайте «разбор полётов»: пять ложных алертов кладёте на стол и вместе решаете, в какую папку их определить. Это дешевле любой покупной «магической камеры».

Что делать, если болезни почти нет

Хорошая проблема, но для обучения неприятная: мало примеров «больного». Тогда:

  • не выдумывайте болезни фотошопом;
  • копите кадры весь сезон, даже единичные;
  • временно учите грубее: «здоровый / тревога / брак кадра»;
  • используйте готовую модель как черновик, а свою — как уточнение, когда примеров станет достаточно.

Иногда на старте полезнее научить сеть уверенно узнавать здоровье и «не уверен», чем натягивать редкую болезнь на сильный процент.

Связь с камерами в ряду

Как только своя модель стабильно помогает на ручных фото, переносите её в контур ESP32-CAM → Pi → бот. Иначе вы так и останетесь с «ИИ в столе», а не с помощником в теплице. Но порядок именно такой: сначала качество классов, потом автоматическая съёмка.

Главное

Своя нейросеть — это не облачный культ, а хозяйский датасет + дообучение. Начните с одной культуры и короткого списка классов. Проверяйте на свежих фото. Возвращайте модель на Pi и только потом размножайте камеры. Когда глаза заработают стабильно, имеет смысл связать их с датчиками и текстовыми сводками — но фундамент всегда фото и честные подписи.

Дальше по серии — прогнозы по датчикам и камера + алерт в телефон. Карта маршрута — в плане.

💬 Комментарии

Чтобы оставить комментарий, войдите или зарегистрируйтесь

Загрузка комментариев...

Похожие статьи