За неделю с лишним закончил сквозной forward pass для модели YOLOv11 на Adept! 🚀
Добил тензорный движок до состояния, когда его можно использовать для реальных нейросетей. Основные изменения — по коммитам:
🧠 Core Tensor Operations
- N-мерный
transpose, concatenation, stacking — теперь и на CPU, и на Vulkan; -
chunk / split с автоградом; - софтмакс на произвольной размерности с autograd;
🔧 Backend и Python-биндинги
-
reshape и view теперь принимают вариадик (можно писать view(1, -1, 4) как в PyTorch);- новые биндинги для тензоров и параметров Linear/Conv2d;
- переработал контейнеры —
Sequential, ModuleList стали ближе к torch; 📦 Neural Networks & Models
- починил перенос внутренних индексов в MaxPool2d между устройствами;
- адаптировал модель YOLO под обновлённое API тензоров.
🧩 Что было самым сложным
Главная боль — изначально я не заложил в тензор полноценную поддержку
slices, то есть смещения и шагов (strides). И реализовал базовые операции transpose, concat, stack только для одномерных случаев (по сути, только dim=1). Этого хватало для простых экспериментов, но для полноценного YOLO с многомерными тензорами потребовалась поддержка произвольных размерностей. Если бы я добавил strides с самого начала, то реализация этих операций и chunk / split для произвольных размерностей была бы существенно проще через использование slices и ядер типа scatter и gather. Теперь всё на месте и операции работают для любых размерностей — код стал проще и единообразнее.
По биндингам — их тоже пришлось расширять, потому что без полноценного Python API удобный интерфейс не построить. Хотелось, чтобы модель на Adept писалась так же естественно, как на PyTorch и NumPy. Вроде получилось.
🎯 Что дальше
Следующая остановка — функция потерь и цикл тренировки. Нужно:
- реализовать loss (скорее всего, комбинация box + cls + dfl, как в оригинальном YOLO);
- собрать тренировочный пайплайн с батчами.
Дальше — больше. Всем удачи в ваших проектах! 💪
#YOLOv11 #Adept #TensorEngine #MachineLearning #PythonBindings