Привет! За неделю в ветке yolo-impl мы расширили набор слоёв в Adept. Новая функциональность: групповые свёртки, Winograd на CPU и GPU, транспонированная свёртка и апсемплинг. Всё — с поддержкой CPU и Vulkan GPU, без фолбэков, с автоградом и Python-биндингами. 🚀 Групповые свёртки Добавили параметр groups в Conv2d. Теперь можно эффективно резать каналы на группы — и на CPU (per-group im2col + GEMM), и на Vulkan (аналогичные шейдеры). ONNX-импорт и Python-биндинги — на месте. Тесты покрывают forward/backward для разных конфигураций. ⚡ Winograd: CPU с группами, GPU для 3x3 Доработали CPU-версию Winograd, чтобы она поддерживала групповые свёртки — вынесли буферы за цикл по группам, избежав лишних аллокаций (это критично для depthwise с большим числом групп). А следом завезли Vulkan-шейдеры для Winograd с ядром 3x3: три шейдера (преобразование входа, весов и обратное). Это даёт выигрыш в количестве умножений против im2col. Выбор пути — динамический, под капотом на основе аргументов операции. 🔄 Транспонированная свёртка (ConvTranspose2d) Нужна для апскейлинга в декодерах — в первую очередь для UNet и подобных архитектур. Реализована через im2col/col2im и GEMM с транспонированными весами. Оба прохода (forward/backward) — на CPU и на Vulkan. Инициализация Kaiming-He, тесты с наивной референсной реализацией, Python-биндинги. 📐 Upsample (Nearest + Bilinear) Два режима интерполяции, поддержка align_corners. Реализация - 4 Vulkan-шейдера (forward/backward для каждого метода) и оптимизированный CPU-код. Биндинги в Python — есть, так что можно использовать в питоновских скриптах. Итог: Мы закрыли ключевые потребности детекторов (YOLO) и добавили фундамент для генеративных/сегментационных сетей (UNet). Code review и идеи по оптимизации приветствуются! 👨💻 #YOLO #UNet #Conv2d #ConvTranspose2d #Upsample
