Pull to refresh
32
7.5
Кирилл Колодяжный@Mik42

Разработчик ПО (С++, Python, ML, CV)

Send message

Обзор книги «RAG и генеративный ИИ»

Level of difficultyEasy
Reading time4 min
Reach and readers7.7K

Привет, меня зовут   Кирилл Колодяжный, я разработчик систем хранения данных в YADRO, ML-энтузиаст, автор книги "Hands-on Machine Learning with C++".

Хочу поделиться впечатлениями от книги   "RAG и генеративный ИИ", которая представляет собой хорошее введение в эту быстроразвивающуюся область. Книга легко читается и последовательно знакомит с ключевыми компонентами построения RAG(Retrieval-Augmented Generation) систем. Автор на практических примерах показывает работу с векторными базами данных, инструментами для создания эмбеддингов и тонкостями построения промптов для языковых моделей.

Особенно мне понравилось описание   процесса построения конвейеров обработки данных - от начального исследования датасетов до реализации различных стратегий построения RAG. А также то, что рассмотрены не только текстовые, но и мультимодальные сценарии, включая методы работы с изображениями и видео. Очень ценно то, что автор в каждой главе подробно описывает процесс настройки рабочего окружения, снижая порог входа для новичков. Далее хочу отменить остальные интересные с моей точки зрения моменты.

В начале книги автор удачно подбирает пример, который наглядно демонстрирует ключевую проблему наивного использования больших языковых моделей - их склонность к галлюцинациям и ограниченность знаниями на момент обучения. Это создает наглядный пример для внедрения RAG как решения. Сами примеры кода, несмотря на некоторую неполноту, описаны последовательно и понятно, а сравнение результатов разных подходов помогает уловить их практическую разницу.

Читать далее

Учимся разрабатывать для GPU на примере операции GEMM

Level of difficultyMedium
Reading time18 min
Reach and readers14K

Привет, Хабр! Сегодня я расскажу про реализацию матричного умножения и особенности разработки для GPU. Познакомлю вас с устройством GPU, объясню, чем отличается программирование от привычного для CPU, какие нюансы нужно учитывать для эффективной реализации операций GEMM. А затем сравним производительность разных подходов к реализации.

Читать далее

Три икса: новый уровень работы с большими свертками в PyTorch для обучения моделей

Level of difficultyMedium
Reading time13 min
Reach and readers1.8K

Привет, Хабр! Продолжим разговор про свертки в ML-обучении на C++. Мы уже обсудили, какие есть подходы к реализации сверток, — ссылку на первую часть ищите в конце статьи. 

Теперь поговорим, как в одном моем проекте нужно было расширить функциональность PyTorch для работы со свертками размерностью больше трех, а потом использовать их в обучении моделей. Сначала рассмотрим, какие ограничения на выбор алгоритма накладывает возможность обучения моделей, а затем изучим два подхода к реализации свертки и адаптируем их к нашей задаче. 

Читать далее

Виноград, Фурье и немного наивности: 4 подхода к реализации сверток с простыми примерами

Level of difficultyMedium
Reading time9 min
Reach and readers7K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я работаю в YADRO и продолжаю изучать машинное обучение на С++. Я уже писал, как реализовать модели для распознавания лиц на фото и для поиска объекта в пространстве с помощью computer vision. Ссылки на материалы ищите в конце статьи.

Сегодня затрону «математическую» тему и расскажу о реализации сверток: что это за операция и какие есть алгоритмы для вычисления. Приведу простые примеры с кодом, чтобы вы могли опробовать решения.

У статьи будет вторая часть: про особенности реализации одного из этих алгоритмов с использованием CUDA в рамках фреймворка PyTorch и про то, как адаптировать его под свои задачи.

Читать далее

Компьютерное зрение на С++: подключаем ML-библиотеки и обрабатываем результаты поиска объектов

Reading time25 min
Reach and readers5.7K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я разрабатываю системы хранения данных в YADRO и изучаю нестандартные подходы к машинному обучению: создаю ML-проекты на С++. 

Это вторая часть цикла о разработке приложения для обнаружения предметов на С++. В прошлом материале мы выяснили, как создать проект в IDE Android Studio, реализовать сессию непрерывного захвата и преобразовать изображение в матрицу OpenCV. Ссылку вы найдете в конце статьи.

В этой статье продолжим реализацию проекта и обсудим следующие шаги:

• Как подключить к проекту библиотеки машинного обучения PyTorch и NCNN.

• Как получить модели YOLOv5 и YOLOv4 для использования на мобильном устройстве.

• Как реализовать инференс моделей для обнаружения объектов.

• Как обработать результаты работы моделей YOLO, реализовав алгоритмы Non-Maximum-Suppression и Intersection-Over-Union.

В конце сравним производительность PyTorch и NCNN и решим, какой фреймворк подойдет для задачи лучше.

Читать далее

Компьютерное зрение на C++: пишем приложение для поиска объектов под Android

Level of difficultyMedium
Reading time25 min
Reach and readers11K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я пишу код на С++ для систем хранения данных в YADRO. Помимо основной работы, интересуюсь машинным обучением и его возможностями, в том числе на «плюсах». Недавно мне стало интересно разобраться, как развернуть модель компьютерного зрения на мобильном устройстве с операционной системой Android.

 Я изучил доступные инструменты, чтобы понять, какие части приложения можно реализовать на С++, и написать само приложение для телефона. Ни в одном из материалов на подобную тему не описывают реализацию такого приложения от начала до конца, поэтому я собрал свой опыт в серию статей.

Расскажу, как реализовать обнаружение объектов в реальном времени с помощью камеры на мобильной платформе Android с использованием библиотек PyTorch и NCNN и моделей компьютерного зрения YOLOv5 и YOLOv4. Шаблон моего приложения пригодится тем, кто хочет проверить прототип функциональности для компьютерного зрения на С++, использующий OpenCV на Android, но не хочет глубоко погружаться в программирование под Android. 

В первой части цикла мы:

• создадим проект в IDE Android Studio,

• реализуем сессию непрерывного захвата изображений камеры,

• преобразуем изображения в матрицу OpenCV, чтобы сделать дальнейшую работу удобной.

Читать далее

Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++

Level of difficultyMedium
Reading time24 min
Reach and readers13K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я ведущий инженер-программист в YADRO. Помимо основных рабочих задач, включающих исследование проблем производительности СХД, я увлекаюсь машинным обучением. Участвовал в коммерческих проектах, связанных с техническим зрением, 3D-сканерами и обработкой фотографий. В задачах часто использовал С++, хотя машинное обучение традиционно ассоциируется с Python. Этот язык программирования буквально захватил сферу, его используют повсюду — от обучающих курсов до серьезных ML-проектов.

Однако Python — не единственный язык, на котором можно решать задачи машинного обучения. Так, альтернативой может стать С++. Если последний вам ближе, вам будет интересен и полезен этот текст.

Под катом разберемся:

как организовать работу с данными и загрузку обучающего датасета, 

как описать структуру нейронной сети, 

как использовать уже готовые алгоритмы машинного обучения из доступных библиотек и фреймворков, 

как организовать конвейер обучения сети, 

как использовать предобученные глубокие сети для решения задач. 

Читать далее

Information

Rating
851-st
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Works in
Registered
Activity

Specialization

Разработчик приложений, ML разработчик
Ведущий
From 550,000 ₽
Linux
C++
Python
Алгоритмы и структуры данных
Deep Learning
PyTorch
Компьютерное зрение
Cuda
OpenCV
OpenCL