😘 Полезная функция OpenCV 🌚
Часто встречаюсь с тем, что у меня есть какая-то компетенция в области компьютерного зрения, но большая часть знаний сводится к использованию различных нейросетевых методов. Однако ими все не должно ограничивается, и существуют не менее мощные методы, которые используют классический математический аппарат.
В последнее время изучаю тему беспилотных автомобилей, там большой упор делается не предобработку изображений, например перевод вида дороги из перспективы в “вид птичьего полета”. Оказывается для этого даже не нужно изобретать велосипед и есть встроенные методы библиотеки OpenCV.
Ради общего образования можете почитать эту заметку о том как это делается. Тут также рассказывается о том, как применить эту механику, чтобы сделать свой “сканер документов”, который вы возможно встречали в стандартных заметках iOS.
https://www.pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/
Часто встречаюсь с тем, что у меня есть какая-то компетенция в области компьютерного зрения, но большая часть знаний сводится к использованию различных нейросетевых методов. Однако ими все не должно ограничивается, и существуют не менее мощные методы, которые используют классический математический аппарат.
В последнее время изучаю тему беспилотных автомобилей, там большой упор делается не предобработку изображений, например перевод вида дороги из перспективы в “вид птичьего полета”. Оказывается для этого даже не нужно изобретать велосипед и есть встроенные методы библиотеки OpenCV.
Ради общего образования можете почитать эту заметку о том как это делается. Тут также рассказывается о том, как применить эту механику, чтобы сделать свой “сканер документов”, который вы возможно встречали в стандартных заметках iOS.
https://www.pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/
PyImageSearch
4 Point OpenCV getPerspective Transform Example - PyImageSearch
Last updated on July 4, 2021. 4:18am. Alarm blaring. Still dark outside. The bed is warm. And the floor will feel so cold on my bare feet. But I got out of bed. I braved the morning, and I took…
💻 GPU MacOS 🖥
В среде ML/DS есть большое число пользователей macbook, однако часто встает проблема с тем, что тренировать сеточки выходит только на серверах или облаках.
Связано это в первую очередь с тем, что Apple давно отказались от графики Nvidia, в пользу AMD. Как ни странно выход есть!
Около года назад в MacOS появилась подержка eGPU, это когда вы покупаете обычную карточку и с помощью специального дока присоединяете ее через USB-C к вашему MacBook. Это в первую очередь создано для ускорения работы с видео и фото.
О том как направить всю мощь GPU для решения задач DL написно здесь:
https://medium.com/@janne.spijkervet/accelerated-deep-learning-on-a-macbook-with-pytorch-the-egpu-nvidia-titan-xp-3eb380548d91
В среде ML/DS есть большое число пользователей macbook, однако часто встает проблема с тем, что тренировать сеточки выходит только на серверах или облаках.
Связано это в первую очередь с тем, что Apple давно отказались от графики Nvidia, в пользу AMD. Как ни странно выход есть!
Около года назад в MacOS появилась подержка eGPU, это когда вы покупаете обычную карточку и с помощью специального дока присоединяете ее через USB-C к вашему MacBook. Это в первую очередь создано для ускорения работы с видео и фото.
О том как направить всю мощь GPU для решения задач DL написно здесь:
https://medium.com/@janne.spijkervet/accelerated-deep-learning-on-a-macbook-with-pytorch-the-egpu-nvidia-titan-xp-3eb380548d91
Medium
Accelerated Deep Learning on a MacBook with PyTorch: the eGPU (NVIDIA Titan XP)
This is a little blogpost about installing the necessary environment to use an external GPU (eGPU) on an older, Thunderbolt 2 equipped…
🛩 Состоялся релиз версии Pytorch 1.6🔥
🤔 Что нового?
⚡️ 16bit precision
В Pytorch core был интегрирован модуль AMP, который теперь позволяет использовать для вычисления 16 битные числа с плавающей точкой, вместо 32 битных. Это уменьшает потребляемую память и ускоряет вычисления на тех GPU, где это поддерживается.
Самый кайф в том, что вам не нужно думать о том, как и какие тензоры перевести в 16 бит, все производится автоматически.
Ранее это было доступно с помощью отдельного модуля APEX от Nvidia.
Теперь поддержка вычислений с половинной точностью доступно прямо из коробки с помощью простого интерфейса.
Подробнее в блоге:
https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/
📈 Beta версия профайлера памяти
В виде бета версии встроен профайлер, с помощью которого вы сможете отследить сколько CPU/GPU памяти потребляет каждый конкретный слой сети.
Подробнее здесь:
https://pytorch.org/docs/stable/autograd.html#profiler
⏳ Параллельные операции в TorchScript
Теперь на уровне языка поддерживаются операции для параллелизации операций на уровне TorchScript. То есть параллельное выполнение хардкодится прямо внутрь модели.
Это может быть полезно, например в случае bi-directional сетей, или еще где вы это придумаете.
Подробнее тут:
https://pytorch.org/docs/stable/jit.html
Об остальных изменениях можно прочитать в чейнжлоге:
https://github.com/pytorch/pytorch/releases
🤔 Что нового?
⚡️ 16bit precision
В Pytorch core был интегрирован модуль AMP, который теперь позволяет использовать для вычисления 16 битные числа с плавающей точкой, вместо 32 битных. Это уменьшает потребляемую память и ускоряет вычисления на тех GPU, где это поддерживается.
Самый кайф в том, что вам не нужно думать о том, как и какие тензоры перевести в 16 бит, все производится автоматически.
Ранее это было доступно с помощью отдельного модуля APEX от Nvidia.
Теперь поддержка вычислений с половинной точностью доступно прямо из коробки с помощью простого интерфейса.
Подробнее в блоге:
https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/
📈 Beta версия профайлера памяти
В виде бета версии встроен профайлер, с помощью которого вы сможете отследить сколько CPU/GPU памяти потребляет каждый конкретный слой сети.
Подробнее здесь:
https://pytorch.org/docs/stable/autograd.html#profiler
⏳ Параллельные операции в TorchScript
Теперь на уровне языка поддерживаются операции для параллелизации операций на уровне TorchScript. То есть параллельное выполнение хардкодится прямо внутрь модели.
Это может быть полезно, например в случае bi-directional сетей, или еще где вы это придумаете.
Подробнее тут:
https://pytorch.org/docs/stable/jit.html
Об остальных изменениях можно прочитать в чейнжлоге:
https://github.com/pytorch/pytorch/releases
👀 Превью архитектуры нейронок 🔬
Бывало такое, что есть условный граф нейронки одного из фреймворков (grapdef, savedmodel, torch noscript, onnx ….)
И хочется просто клацнуть и посмотреть как устроены операции внутри?
Прямо как в TensorBoard, но быстро и прямо сейчас.
Предтавляю вам тулзу, которая поменяла мою жизнь в лучшую сторону, Netron:
https://github.com/lutzroeder/netron
Бывало такое, что есть условный граф нейронки одного из фреймворков (grapdef, savedmodel, torch noscript, onnx ….)
И хочется просто клацнуть и посмотреть как устроены операции внутри?
Прямо как в TensorBoard, но быстро и прямо сейчас.
Предтавляю вам тулзу, которая поменяла мою жизнь в лучшую сторону, Netron:
https://github.com/lutzroeder/netron
GitHub
GitHub - lutzroeder/netron: Visualizer for neural network, deep learning and machine learning models
Visualizer for neural network, deep learning and machine learning models - lutzroeder/netron
⚡️Быстрый поиск по векторным пространствам🔎
Иногда так случается, что вам нужно реализовать поиск по миллионам векторов.
Например, если вы делаете FAQ чат бота, поиск по лицам или картинкам, агрегатор новостей и многое другое.
И зачастую мы упираемся в скорость работы алгоритма, т.к. векторов может быть очень много и мы должны уметь искать за адекватное время.
Эта статья рассказывает об эффективных алгоритмах поиска на больших векторных пространствах
https://habr.com/ru/company/mailru/blog/338360/
Иногда так случается, что вам нужно реализовать поиск по миллионам векторов.
Например, если вы делаете FAQ чат бота, поиск по лицам или картинкам, агрегатор новостей и многое другое.
И зачастую мы упираемся в скорость работы алгоритма, т.к. векторов может быть очень много и мы должны уметь искать за адекватное время.
Эта статья рассказывает об эффективных алгоритмах поиска на больших векторных пространствах
https://habr.com/ru/company/mailru/blog/338360/
Хабр
Методы приближенного поиска ближайших соседей
Довольно часто программисты и специалисты из области data science сталкиваются с задачей поиска похожих профилей пользователей или подбора схожей музыки. Решения могут сводиться к преобразованию...
🏳️🌈Transformers, transformers everywhere 🏳️🌈
Мы уже видели примеры, когда трансформеры эффективно применяются для анализа текста и генерации звука, при этом побивая все бенчмарки
И вот наконец у сверточных сетей для картинок появилась конкуренция, интересный подход по применению трансформеров для анализа картинок
А ещё авторы статьи предпочли остаться анонимными 👀 и не написали свои имения в заголовке статьи
https://youtu.be/TrdevFK_am4
Мы уже видели примеры, когда трансформеры эффективно применяются для анализа текста и генерации звука, при этом побивая все бенчмарки
И вот наконец у сверточных сетей для картинок появилась конкуренция, интересный подход по применению трансформеров для анализа картинок
А ещё авторы статьи предпочли остаться анонимными 👀 и не написали свои имения в заголовке статьи
https://youtu.be/TrdevFK_am4
YouTube
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (Paper Explained)
#ai #research #transformers
Transformers are Ruining Convolutions. This paper, under review at ICLR, shows that given enough data, a standard Transformer can outperform Convolutional Neural Networks in image recognition tasks, which are classically tasks…
Transformers are Ruining Convolutions. This paper, under review at ICLR, shows that given enough data, a standard Transformer can outperform Convolutional Neural Networks in image recognition tasks, which are classically tasks…
🔨Parallel pandas
Случайно нашел супер полезную тулзу, которая в одну строчку делает apply в pandas параллельным.
https://towardsdatascience.com/pandaral-lel-a-simple-and-efficient-tool-to-parallelize-your-pandas-operations-on-all-your-cpus-bb5ff2a409ae
⚙Случайно нашел супер полезную тулзу, которая в одну строчку делает apply в pandas параллельным.
https://towardsdatascience.com/pandaral-lel-a-simple-and-efficient-tool-to-parallelize-your-pandas-operations-on-all-your-cpus-bb5ff2a409ae
Medium
Pandarallel — A simple and efficient tool to parallelize your pandas computation on all your CPUs
How one line of code could significantly speed up your workflow.
💭 Production QA 💬
Если вам когда-то придется делать вопросно ответную систему для продакшена, возможно я нашел для вас решение.
Эта штука предоставляет набор уже готовых тулов, моделей и интерфейсов, чтобы запустить QA на больших масштабах.
* Внутри есть возможность конвертации базы документов во внутренний формат из PDF и DocX
* Готовые препроцессоры текстов
* Совместимость с ElasticSearch, FAISS, SQL и InMemory
* Различные движки поиска от Elastic Search, до поиска по векторам
* Встроенные Reader модели на базе трансформеров претренированные на SQuAD (это только английский, если что)
* RestAPI
* А так же тулзу для разметки ваших датасетов внутри веб интерфейса!
https://github.com/deepset-ai/haystack
Если вам когда-то придется делать вопросно ответную систему для продакшена, возможно я нашел для вас решение.
Эта штука предоставляет набор уже готовых тулов, моделей и интерфейсов, чтобы запустить QA на больших масштабах.
* Внутри есть возможность конвертации базы документов во внутренний формат из PDF и DocX
* Готовые препроцессоры текстов
* Совместимость с ElasticSearch, FAISS, SQL и InMemory
* Различные движки поиска от Elastic Search, до поиска по векторам
* Встроенные Reader модели на базе трансформеров претренированные на SQuAD (это только английский, если что)
* RestAPI
* А так же тулзу для разметки ваших датасетов внутри веб интерфейса!
https://github.com/deepset-ai/haystack
GitHub
GitHub - deepset-ai/haystack: AI orchestration framework to build customizable, production-ready LLM applications. Connect components…
AI orchestration framework to build customizable, production-ready LLM applications. Connect components (models, vector DBs, file converters) to pipelines or agents that can interact with your data...
🔉Facebook denoiser🎧
Понадобилось тут почистить датасет с записью голоса человека и убрать из него лишний шум. Зашел на гитхаб в поиске подходящией либы и с удивлением нашел готовый к использованию инструмент из коробки.
Тулза работает сразу из консоли и позволяет вам почистить ваши аудио.
(примеры ниже)
https://github.com/facebookresearch/denoiser
Понадобилось тут почистить датасет с записью голоса человека и убрать из него лишний шум. Зашел на гитхаб в поиске подходящией либы и с удивлением нашел готовый к использованию инструмент из коробки.
Тулза работает сразу из консоли и позволяет вам почистить ваши аудио.
(примеры ниже)
https://github.com/facebookresearch/denoiser
GitHub
GitHub - facebookresearch/denoiser: Real Time Speech Enhancement in the Waveform Domain (Interspeech 2020)We provide a PyTorch…
Real Time Speech Enhancement in the Waveform Domain (Interspeech 2020)We provide a PyTorch implementation of the paper Real Time Speech Enhancement in the Waveform Domain. In which, we present a ca...
🏎Modin speed up ur pandas🏃♂️
Недавно рассказывал про pandaparllel, который позволяет легко сделать операцию apply в pandas быстрее, благодаря параллелизму.
Нашёл более прокаченную тулзу. Она позволяет вам продолжать писать код в рамках pandas api, но при этом под капотом будут работать другие движки на выбор, например dask.
Это позволяет многократно увеличить производительность даже на таких задачах, как чтение датасета.
Если ваша табличка особенно большая, советую к осмотру.
Сами бэкэнды поддерживают вычисления на кластерах, но в этой обертке это пока экспериментальная фича. В общем, будем посмотреть.
https://github.com/modin-project/modin
Недавно рассказывал про pandaparllel, который позволяет легко сделать операцию apply в pandas быстрее, благодаря параллелизму.
Нашёл более прокаченную тулзу. Она позволяет вам продолжать писать код в рамках pandas api, но при этом под капотом будут работать другие движки на выбор, например dask.
Это позволяет многократно увеличить производительность даже на таких задачах, как чтение датасета.
Если ваша табличка особенно большая, советую к осмотру.
Сами бэкэнды поддерживают вычисления на кластерах, но в этой обертке это пока экспериментальная фича. В общем, будем посмотреть.
https://github.com/modin-project/modin
GitHub
GitHub - modin-project/modin: Modin: Scale your Pandas workflows by changing a single line of code
Modin: Scale your Pandas workflows by changing a single line of code - modin-project/modin
🐞Open CV resize bug 🖼
Неожиданно оказалось, что resize в cv2 работает с критическим недостатком.
А именно сглаживание при понижении разрешении картинки работает неправильно, при этом resize в PIL работает правильно и это редкий пример такой библиотеки.
Казалось бы - и что?
Но на самом деле это значительно влияет на качество алгоритмов повышения разрешения картинки - super resolution, которые тренировались с различными параметрами сглаживания.
Подробнее в треде.
https://twitter.com/kl_div/status/1333906978100297728?s=21
Неожиданно оказалось, что resize в cv2 работает с критическим недостатком.
А именно сглаживание при понижении разрешении картинки работает неправильно, при этом resize в PIL работает правильно и это редкий пример такой библиотеки.
Казалось бы - и что?
Но на самом деле это значительно влияет на качество алгоритмов повышения разрешения картинки - super resolution, которые тренировались с различными параметрами сглаживания.
Подробнее в треде.
https://twitter.com/kl_div/status/1333906978100297728?s=21
Twitter
Ke Li 🍁
Beware of cv2.resize(): apparently downsampling with it gives aliased results, and PIL is one of the few libraries that does anti-aliasing correctly (thanks to @rzhang88 for pointing this out!) We fixed it and saw a substantial improvement in our 16x super…
Еще один интересный пример Resize уже в Pytorch.
Здесь сравнили два варианта изменения размера картинки в 32 раза: передать размер скейла параметром в функцию resize, либо же повторить уменьшение в два раза в цикле 16 раз.
Результат поражает, я даже не мог об этом подумать
https://twitter.com/rzhang88/status/1258222917986312195
Здесь сравнили два варианта изменения размера картинки в 32 раза: передать размер скейла параметром в функцию resize, либо же повторить уменьшение в два раза в цикле 16 раз.
Результат поражает, я даже не мог об этом подумать
https://twitter.com/rzhang88/status/1258222917986312195
Twitter
Richard Zhang
@jaakkolehtinen Bilinear downsampling with F.interpolate in PyTorch (Top) Directly downsampling the original by 2x, 4x, ... 32x aliases (Bottom) Recursively applying 2x downsampling looks okay They should be equivalent, but it seems that 2x is safe and other…
И еще маленький пример, как это влияет на super resultion.
https://twitter.com/jaakkolehtinen/status/1258102168176951299
https://twitter.com/jaakkolehtinen/status/1258102168176951299
Twitter
Jaakko Lehtinen
Reducing resolution by OpenCV's resize() yields arbitrarily bad results due to lack of prefiltering. From left: default, cubic, Lanczos4 interpolation in CV2; right: the kinda-correct (but otherwise broken) Lanczos in PIL. Surprisingly common to see this…
📷 Вычислительная фотография 🖼
Очень интересный лонгрид от вастрика, про то как развивалась вычислительная фотография.
Коротко - текст про то, как инженеры и программисты решали вопрос, как сделать фотографии качества зеркалки в маленькой матрице телефона.
В статье достаточно подробно описаны подходы от самых начальных (интстаграм фильтров 2010 годов), до оптимизации освещения с помощью нейросетей.
Так же, оказывается гугловое определение глубины по одной камере, это не просто “neural network doing brrr”
Короче, точно стоит почитать, чтобы понять как делаются ваши пиздатые фотки в инстаграм.
https://vas3k.ru/blog/computational_photography/
Очень интересный лонгрид от вастрика, про то как развивалась вычислительная фотография.
Коротко - текст про то, как инженеры и программисты решали вопрос, как сделать фотографии качества зеркалки в маленькой матрице телефона.
В статье достаточно подробно описаны подходы от самых начальных (интстаграм фильтров 2010 годов), до оптимизации освещения с помощью нейросетей.
Так же, оказывается гугловое определение глубины по одной камере, это не просто “neural network doing brrr”
Короче, точно стоит почитать, чтобы понять как делаются ваши пиздатые фотки в инстаграм.
https://vas3k.ru/blog/computational_photography/
vas3k.blog
Вычислительная Фотография
На презентациях любого смартфона сегодня отдельное место уделяют успехе его камеры. Pixel научился снимать в полной темноте, Huawei зумит лучше бинокля, Samsung получил восемь объективов, а в iPhone ваши друзья выглядят на 30% богаче.
📔 Пару слов про Jupyter 📓
Встретил на работе такой репозеторий, где лежал только один ноутбук для подгрузки и обучения модели.
Раньше я не видел в этом никакой проблемы, т.к. вроде все казалось весьма удобно. Со временем я поднабрался опыта и понял, что jupyter это отстой, т.к. это хороший инструмент в целом, но не то, в чем стоит хранить обучение моделей в продакшене.
Чем раньше вы перейдете на формат проекта, когда у вас в отдельных модулях лежит обработка, в отдельных модель, а в других обучение, тем раньше вы перейдете на новый грейд понимания в удобстве версионирования экспериментов, рефакторинга кода и запуска экспериментов.
Jupyter - главное зло, если он у вас есть в боевых проектах.
https://towardsdatascience.com/5-reasons-why-jupyter-notebooks-suck-4dc201e27086
Встретил на работе такой репозеторий, где лежал только один ноутбук для подгрузки и обучения модели.
Раньше я не видел в этом никакой проблемы, т.к. вроде все казалось весьма удобно. Со временем я поднабрался опыта и понял, что jupyter это отстой, т.к. это хороший инструмент в целом, но не то, в чем стоит хранить обучение моделей в продакшене.
Чем раньше вы перейдете на формат проекта, когда у вас в отдельных модулях лежит обработка, в отдельных модель, а в других обучение, тем раньше вы перейдете на новый грейд понимания в удобстве версионирования экспериментов, рефакторинга кода и запуска экспериментов.
Jupyter - главное зло, если он у вас есть в боевых проектах.
https://towardsdatascience.com/5-reasons-why-jupyter-notebooks-suck-4dc201e27086
Medium
5 reasons why jupyter notebooks suck
I’m working since roughly 3 years up to 60% of my time with jupyter notebooks. I think they are a wonderful tool for many tasks like…
✍️ Best image labeling tool 🔨
Кажется, я нашел царь-разметчик, который я пытался найти достаточно давно.
Я перепробовал кучу разных штук, но у них либо была стремная реализация с точки зрения интерфейса (одна программка была написана на джаве с супер не удобным интерфейсом), другие предоставлялись как сервис и не позволяли легко скейлить разметку внутри компании или размечать самому, в итоге в любом варианте имели кучу ограничений и просили за это деньги.
В итоге я нашел CocoAnnotator: https://github.com/jsbroks/coco-annotator
Он позволяет из коробки легко настроить разметку разных датасетов под задачи:
* Image labeling
* Image detection
* Image segmentation
* Keypoints detection
Имеет встроенный API, базу данных пользователей, датасетов и лейблов, позволяет легко импортировать датасет и экспортировать его в формате Coco. При этом имеет очень приятный интерфейс.
Запускается легко через docker compose. Короче must have!
И вот вам пару скриншотиков интерфейса
Кажется, я нашел царь-разметчик, который я пытался найти достаточно давно.
Я перепробовал кучу разных штук, но у них либо была стремная реализация с точки зрения интерфейса (одна программка была написана на джаве с супер не удобным интерфейсом), другие предоставлялись как сервис и не позволяли легко скейлить разметку внутри компании или размечать самому, в итоге в любом варианте имели кучу ограничений и просили за это деньги.
В итоге я нашел CocoAnnotator: https://github.com/jsbroks/coco-annotator
Он позволяет из коробки легко настроить разметку разных датасетов под задачи:
* Image labeling
* Image detection
* Image segmentation
* Keypoints detection
Имеет встроенный API, базу данных пользователей, датасетов и лейблов, позволяет легко импортировать датасет и экспортировать его в формате Coco. При этом имеет очень приятный интерфейс.
Запускается легко через docker compose. Короче must have!
И вот вам пару скриншотиков интерфейса
GitHub
GitHub - jsbroks/coco-annotator: :pencil2: Web-based image segmentation tool for object detection, localization, and keypoints
:pencil2: Web-based image segmentation tool for object detection, localization, and keypoints - jsbroks/coco-annotator