Как встроить кастомную CNN в плагинный сортировщик файлов

Интеграция ML-модели в production-код — это не просто model.predict(). Нужно учесть загрузку весов, обработку ошибок, кэширование, изоляцию доменной логики и, главное, — не сломать существующую архитектуру.

В проекте ImageWalker я реализовал AI-плагин для классификации изображений (6 классов: buildings, forest, glacier, mountain, sea, streets) на базе кастомной свёрточной сети.

🧠 Инженерные решения:Изоляция домена: логика инференса вынесена в отдельный модуль, плагин работает только с абстракцией ImageClassifier. Это позволяет заменять модель без правки файловой логики. • Ленивая загрузка: модель загружается при первом вызове, а не при старте приложения — это ускоряет запуск и экономит память, если плагин не используется. • Обработка ошибок: если файл не является изображением или модель не может его обработать, плагин корректно возвращает unknown, не прерывая весь пайплайн. • Кэширование результатов: повторная обработка того же файла не требует повторного инференса — это критично для больших коллекций. • Конфигурация через данные: порог уверенности (confidence_threshold), обработка не-изображений и другие параметры передаются через PluginConfig, а не «зашиты» в код.

⚙️ Технические детали: • Модель: кастомная CNN (не transfer learning), ~3 ГБ RAM/VRAM для инференса • Форматы: JPG, PNG, WEBP, TIFF и др. (через Pillow/OpenCV) • Интеграция: плагин регистрируется через декоратор, ядро ничего не знает о его внутренней реализации

📈 Результат: • 100% файлов проходят через плагин, даже не-изображения (корректная обработка) • Добавление нового ML-фильтра = реализация интерфейса + регистрация, без правки ядра • Архитектура позволяет легко заменить модель на другую (например, ViT или EfficientNet)

🔗 Репозиторий: https://github.com/Delshi/image_walker 🔗 Архитектура и метрики модели: https://github.com/Delshi/Intel-Image-Classification

Готов обсудить подходы к интеграции ML-моделей в production-код, инференс на CPU/GPU и архитектурные паттерны для расширяемых инструментов.

#MachineLearning #Python #ComputerVision #SoftwareEngineering #MLOps #PyTorch #OpenSource #OpenToWork

Как встроить кастомную CNN в плагинный сортировщик файлов | Сетка — социальная сеть от hh.ru