Как встроить кастомную 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