От вет-ИИ для коров до имперского глянца: хардкорный MLOps на бесплатных GPU. computer vision.. computer vision. hugging face.. computer vision. hugging face. kaggle.. computer vision. hugging face. kaggle. mlops.. computer vision. hugging face. kaggle. mlops. opencv.. computer vision. hugging face. kaggle. mlops. opencv. PyMuPDF.. computer vision. hugging face. kaggle. mlops. opencv. PyMuPDF. SDXL LoRA.. computer vision. hugging face. kaggle. mlops. opencv. PyMuPDF. SDXL LoRA. датасет.. computer vision. hugging face. kaggle. mlops. opencv. PyMuPDF. SDXL LoRA. датасет. оптимизация памяти.. computer vision. hugging face. kaggle. mlops. opencv. PyMuPDF. SDXL LoRA. датасет. оптимизация памяти. парсинг.

Введение. Контекст как катализатор

В начале 2026 года ленты новостей принесли тревожные сообщения из Сибири: массовые вспышки опасных заболеваний у КРС (крупного рогатого скота) привели к необходимости вынужденного забоя тысяч голов. Для многих фермеров это означало потерю бизнеса и средств к существованию.

Мы задались вопросом: может ли доступный Computer Vision стать первой линией обороны? Инструментом, который позволит фермеру в отдаленном районе провести первичный скрининг (триаж) животного с помощью обычного смартфона и вовремя вызвать ветеринара, не дожидаясь начала эпидемии.

Так родился проект AI-Vet-Scanner (наше пространство на Hugging Face), определяющий признаки заболеваний по фотографии.

Часть 1. Полезный ИИ: Архитектура ветеринарного скрининга

Мы не ставили задачу заменить лабораторные анализы крови — ИИ на это не способен. Наша цель — визуальный триаж.

Технически мы реализовали пайплайн мультиклассовой классификации. Чтобы сделать инференс бесплатным для конечных пользователей, мы развернули модель на Hugging Face Spaces с использованием архитектуры ZeroGPU (динамическое выделение GPU-ресурсов только в момент запроса). Это позволило нам держать production бесплатным и отказоустойчивым.

От вет-ИИ для коров до имперского глянца: хардкорный MLOps на бесплатных GPU - 1

Вдохновившись успехом, мы начали расширять диагностику на свиней (детекция пневмонии) и птицу. Но работа с тяжелым социальным контекстом и болезнями неизбежно ведет к выгоранию. Чтобы разгрузить психику, мы решили направить наши MLOps-мощности на задачу, находящуюся на абсолютно противоположном полюсе полезности.

Часть 2. «Бесполезный» ИИ и проблема 9 ГБ

Наша pet-project цель: обучить SDXL LoRA генерировать изображения современных объектов, но в аутентичной эстетике Российской Империи конца XIX века.

В качестве источника данных мы нашли цифровой архив дореволюционного журнала «Вестник Моды» (1885-1917 гг.) — 9.24 ГБ высококачественных PDF-сканов.

И тут мы столкнулись с классической проблемой: как обработать этот объем данных, имея в распоряжении только бесплатные квоты облачного Jupyter-ноутбука (16 ГБ ОЗУ, T4 GPU и жесткий лимит диска в 20 ГБ)?

Часть 3. Ghetto MLOps: боремся с OOM и лимитами диска

Если вы попробуете открыть отсканированный PDF весом 300 МБ через стандартные связки вроде pdf2image + Poppler, ядро Python моментально умрет от OOM (Out of Memory). Каждая страница в высоком разрешении распаковывается в ОЗУ в виде несжатых numpy-массивов, быстро сжирая доступные 16 ГБ.

Как мы построили конвейер экстракции:

  1. Отказ от тяжелых библиотек: Мы перешли на PyMuPDF (fitz). Это легковесная обертка над сишным движком MuPDF. Скрипт не загружает весь документ в память, а рендерит строго по одной странице на лету.

  2. Математическая фильтрация мусора: Нам нужны только гравюры и эскизы платьев. 70% страниц журнала — это скучный мелкий текст. Обучать нейросеть (например, YOLO) для детекции гравюр было бы слишком долго. Мы пошли математическим путем через OpenCV:

    • Переводим отрендеренную страницу в градации серого.

    • Вычисляем стандартное отклонение яркости пикселей: cv_img.std().

    • Текст дает равномерный серый фон (низкая дисперсия). Гравюры дают резкие перепады от черного к белому (высокая дисперсия).

    • Ставим фильтр MIN_VARIANCE = 45. Всё, что ниже — выбрасывается из памяти моментально.

  3. Агрессивный Garbage Collection: Сразу после ресайза фильтрованного кадра под стандарт SDXL (1024×1024) с помощью Image.Resampling.LANCZOS, мы принудительно вызываем gc.collect() и зануляем переменные с матрицами, чтобы не забить диск мусором.

От вет-ИИ для коров до имперского глянца: хардкорный MLOps на бесплатных GPU - 2

Посмотрите, какой визуальный жир мы в итоге автоматически майним из этих архивов без единого ручного клика:

От вет-ИИ для коров до имперского глянца: хардкорный MLOps на бесплатных GPU - 3
От вет-ИИ для коров до имперского глянца: хардкорный MLOps на бесплатных GPU - 4

Заключение. Планы на LoRA

Прямо сейчас наш скрипт-автопилот продолжает перемалывать архивы. Как только экстракция завершится, скрипт автоматически упакует тысячи JPEG-файлов в ZIP-архив для дальнейшей тренировки нашей LoRA-модели.

Мы готовимся протестировать итоговую нейросеть вот таким промптом:

“Илон Маск в виде денди в детализированном мундире императорской гвардии 1890-х годов, золотая вышивка, держит кибер-монокль, стиль акварели и гравюры.”

Если вам интересен наш подход к MLOps “на коленке” или вы просто хотите поддержать наши ветеринарные (и не очень) эксперименты, заглядывайте в гости.

Поддержать наши «исследования из желудей и палок» можно тут: pay.cloudtips.ru/p/41fb15f7

Автор: Livadies

Источник