👁 И вот такие же свертки с ядрами используются и в сверточных нейронных сетях.
Действительно - вот такие 3 * 3 матрицы можно представить в виде 9 весов какой-то мелкой нейроночки (только потом, после свертки, в нейроночку надо добавить нелинейность, какой-нибудь обычной функцией активации, а то иначе не будет иметь смысла делать несколько сверток, ибо композиция линейных функций есть линейная функция).
Вот только веса мы не подбираем сами, а используем для этого стандартные алгоритмы обучения. Но главное, что в одном слое используются одни и те же веса свертки для всего изображения.
В чем профит?
⁃ Используются локальные признаки изображения. Действительно, намного чаще необходимо сначала сделать выделение каких-то мелких признаков с помощью свертки. (Типа вот тут вот у нас контур, а вот тут у нас уголочек, а вот тут у нас еще что-то) и потом компоновать из них более абстрактные признаки. Нейробиологи говорят, что так и работает зрительная кора. То есть вообще если алгоритм обучения на каком-то этапе решит что нам полезно выделить границы, он может и сам сделать вот такой вот оператор Собеля на каком-то слое.
⁃ Вместо одного большого изображения мы получаем гораздо больше данных на которых тренировать маленькую нейроночку
⁃ Мы можем уменьшить размерность следующего слоя нейронки
#sobel #convolution #edgedetection #computervision
Действительно - вот такие 3 * 3 матрицы можно представить в виде 9 весов какой-то мелкой нейроночки (только потом, после свертки, в нейроночку надо добавить нелинейность, какой-нибудь обычной функцией активации, а то иначе не будет иметь смысла делать несколько сверток, ибо композиция линейных функций есть линейная функция).
Вот только веса мы не подбираем сами, а используем для этого стандартные алгоритмы обучения. Но главное, что в одном слое используются одни и те же веса свертки для всего изображения.
В чем профит?
⁃ Используются локальные признаки изображения. Действительно, намного чаще необходимо сначала сделать выделение каких-то мелких признаков с помощью свертки. (Типа вот тут вот у нас контур, а вот тут у нас уголочек, а вот тут у нас еще что-то) и потом компоновать из них более абстрактные признаки. Нейробиологи говорят, что так и работает зрительная кора. То есть вообще если алгоритм обучения на каком-то этапе решит что нам полезно выделить границы, он может и сам сделать вот такой вот оператор Собеля на каком-то слое.
⁃ Вместо одного большого изображения мы получаем гораздо больше данных на которых тренировать маленькую нейроночку
⁃ Мы можем уменьшить размерность следующего слоя нейронки
#sobel #convolution #edgedetection #computervision
Для интуитивного понимания автокодировщиков #autoencoder
https://youtu.be/3jmcHZq3A5s
Кстати похоже использовал библиотеку анимаций от 3blue1brown
https://youtu.be/3jmcHZq3A5s
Кстати похоже использовал библиотеку анимаций от 3blue1brown
YouTube
Simple Explanation of AutoEncoders
Join my Foundations of GNNs online course (https://www.graphneuralnets.com)!
This video discusses when you might benefit from using Autoencoders and then deep dives into how they work to build your intuition. The idea of "denoising autoencoders" is presented…
This video discusses when you might benefit from using Autoencoders and then deep dives into how they work to build your intuition. The idea of "denoising autoencoders" is presented…
👹 Немного про математику всего того, что мы с вами тут обсуждаем.
Если вы учились в техническом вузе, то скорее всего вам все это преподавали, и даже гораздо больше.
Сейчас приведу примеры ресурсов где вы можете быстро освежить эти знания, или выучить заново если вы не учились в техническом вузе.
Чтобы комфортно плавать в водах CV, ML и IP нам нужно знать следующие вещи:
0️⃣ Дискретная математика и комбинаторика.
Предполагается, что мы знакомы на каком-то уровне с дискреткой и комбинаторикой, как скилами помогающими нам писать обычный код, и понимать, что чего стоит в плане производительности, памяти и тд. Знаем структуры данных. В общем, просто джентльменский набор, чтобы писать какие-то скрипты.
По этому делу могу посоветовать книгу “cracking the coding interview”, так как там очень сжато объяснены основные вещи:
https://www.crackingthecodinginterview.com/
И пара ссылок с coursera:
Комбинаторика для начинающих
https://www.coursera.org/learn/kombinatorika-dlya-nachinayushchikh
Algorithmic toolbox (+- графы, сортировки и тд)
https://www.coursera.org/learn/algorithmic-toolbox
1️⃣ Линейная алгебра и аналитическая геометрия.
Тут быстро можно въехать благодаря уважаемому 3Blue1Brown, у него есть даже плейлист отдельный для этого.
https://www.3blue1brown.com/essence-of-linear-algebra-page
Есть нормальный курс от ВШЭ
https://www.coursera.org/learn/algebra-lineynaya
И от Imperial College London: Linear Algebra
https://www.coursera.org/learn/linear-algebra-machine-learning
2️⃣ Multivariate Calculus (Матан!)
Это нам дается хорошо во всех вузах, и является ступенью ко многим дисциплинам.
Вещь глубокая и важная, поэтому тут дам ссылку на узкий курс специально для приобретения формы для ML.
Imperial College London: Multivariate Calculus
https://www.coursera.org/learn/multivariate-calculus-machine-learning
3️⃣ Теор вер и статистика
Теория вероятностей для начинающих:
https://www.coursera.org/learn/probability-theory-basics
Внезапно Манга:
https://dmkpress.com/catalog/manga/978-5-97060-115-0/
Imperial London College: PCA
https://www.coursera.org/learn/pca-machine-learning
Да и наверное любой курс по статистике с coursera:
https://www.coursera.org/courses?query=statistics
🌈 Это все и будет годной математической базой для изучения CV и ML алгоритмов.
🌈 По DL и всему этому сейчас наплодилось курсов невероятно много, зная математические основы пройти их будет просто.
Если вы учились в техническом вузе, то скорее всего вам все это преподавали, и даже гораздо больше.
Сейчас приведу примеры ресурсов где вы можете быстро освежить эти знания, или выучить заново если вы не учились в техническом вузе.
Чтобы комфортно плавать в водах CV, ML и IP нам нужно знать следующие вещи:
0️⃣ Дискретная математика и комбинаторика.
Предполагается, что мы знакомы на каком-то уровне с дискреткой и комбинаторикой, как скилами помогающими нам писать обычный код, и понимать, что чего стоит в плане производительности, памяти и тд. Знаем структуры данных. В общем, просто джентльменский набор, чтобы писать какие-то скрипты.
По этому делу могу посоветовать книгу “cracking the coding interview”, так как там очень сжато объяснены основные вещи:
https://www.crackingthecodinginterview.com/
И пара ссылок с coursera:
Комбинаторика для начинающих
https://www.coursera.org/learn/kombinatorika-dlya-nachinayushchikh
Algorithmic toolbox (+- графы, сортировки и тд)
https://www.coursera.org/learn/algorithmic-toolbox
1️⃣ Линейная алгебра и аналитическая геометрия.
Тут быстро можно въехать благодаря уважаемому 3Blue1Brown, у него есть даже плейлист отдельный для этого.
https://www.3blue1brown.com/essence-of-linear-algebra-page
Есть нормальный курс от ВШЭ
https://www.coursera.org/learn/algebra-lineynaya
И от Imperial College London: Linear Algebra
https://www.coursera.org/learn/linear-algebra-machine-learning
2️⃣ Multivariate Calculus (Матан!)
Это нам дается хорошо во всех вузах, и является ступенью ко многим дисциплинам.
Вещь глубокая и важная, поэтому тут дам ссылку на узкий курс специально для приобретения формы для ML.
Imperial College London: Multivariate Calculus
https://www.coursera.org/learn/multivariate-calculus-machine-learning
3️⃣ Теор вер и статистика
Теория вероятностей для начинающих:
https://www.coursera.org/learn/probability-theory-basics
Внезапно Манга:
https://dmkpress.com/catalog/manga/978-5-97060-115-0/
Imperial London College: PCA
https://www.coursera.org/learn/pca-machine-learning
Да и наверное любой курс по статистике с coursera:
https://www.coursera.org/courses?query=statistics
🌈 Это все и будет годной математической базой для изучения CV и ML алгоритмов.
🌈 По DL и всему этому сейчас наплодилось курсов невероятно много, зная математические основы пройти их будет просто.
Недавно в твиттере часто начали всплывать видео альфы нового приложения.
Выглядит прикольно, интересно, какие требования по устройству, какие камеры используются.
#photogrammetry
https://twitter.com/aboundlabs/status/1206654428188725252
Выглядит прикольно, интересно, какие требования по устройству, какие камеры используются.
#photogrammetry
https://twitter.com/aboundlabs/status/1206654428188725252
Twitter
Abound
Progress update on our capture app. Still a little glitchy and has plenty to fix (e.g. loop closure, floating fragments) but it's coming together.
👁Open3D - computer vision библиотека с интерфейсами на Python и C++ и реализованными алгоритмами фотограмметрии.
https://github.com/intel-isl/Open3D
#photogrammetry
https://github.com/intel-isl/Open3D
#photogrammetry
GitHub
GitHub - isl-org/Open3D: Open3D: A Modern Library for 3D Data Processing
Open3D: A Modern Library for 3D Data Processing. Contribute to isl-org/Open3D development by creating an account on GitHub.
Слайды о том как работает человеческое зрение:
https://courses.cs.washington.edu/courses/cse455/09wi/Lects/lect8.pdf
https://courses.cs.washington.edu/courses/cse455/09wi/Lects/lect8.pdf
🌖 Еще про distortion
Часто встречаются distortion 3х видов
⁃ Barrel
⁃ Picushion
⁃ Mustache
Они возникают при использовании разных видов линз и разных комбинаций линз.
👽 Интересно, что помимо убирания distortion как чего-то плохого, иногда нам наоборот нужно его эмулировать.
Например в VR, для того чтобы когда изображение было “пропущено” через линзы оно выглядело адекватно для человека.
У Google Cardboard существует специальное приложение которое подбирает barrel искажение конкретно для вашего дисплея и кардборда.
Выглядит это вот так:
Часто встречаются distortion 3х видов
⁃ Barrel
⁃ Picushion
⁃ Mustache
Они возникают при использовании разных видов линз и разных комбинаций линз.
👽 Интересно, что помимо убирания distortion как чего-то плохого, иногда нам наоборот нужно его эмулировать.
Например в VR, для того чтобы когда изображение было “пропущено” через линзы оно выглядело адекватно для человека.
У Google Cardboard существует специальное приложение которое подбирает barrel искажение конкретно для вашего дисплея и кардборда.
Выглядит это вот так:
🤖 Можно самим написать такое преобразование, для этого для каждого пикселя выходной картинки мы применяем уравнения, где k1, k2, k3 выставляем сами в зависимости от того чего хотим добиться.
Советую поэкспериментировать с этими коэффициентами, можно например итеративно менять их и отображать в динамике:
https://gist.github.com/PavelKatunin/836e3937ada68cca722f58240e94fe81
Код написан для наглядности для CPU, просто перебираются пиксели, написать шейдер по этому примеру тоже просто.
Заметим, что это не аффинное преобразование, так как параллельность прямых не сохраняется
Получается вот такая картинка:
Советую поэкспериментировать с этими коэффициентами, можно например итеративно менять их и отображать в динамике:
https://gist.github.com/PavelKatunin/836e3937ada68cca722f58240e94fe81
Код написан для наглядности для CPU, просто перебираются пиксели, написать шейдер по этому примеру тоже просто.
Заметим, что это не аффинное преобразование, так как параллельность прямых не сохраняется
Получается вот такая картинка:
Gist
simple example of distortion on CPU
simple example of distortion on CPU. GitHub Gist: instantly share code, notes, and snippets.
🧩 Говорят, что научили робота собирать незнакомые вещи с успехом в 86% случаев. Для обучения придумали остроумную вещь: сначала заставили робота разбирать вещи, что довольно просто реализовать (детали просто кладутся в случайные места), а потом обучали на прокурученных назад записях.
https://www.youtube.com/watch?v=O8l4Kn-j-5M
https://www.youtube.com/watch?v=O8l4Kn-j-5M
YouTube
This Robot Arm Learned To Assemble Objects It Hasn’t Seen Before
❤️ Check out Lambda here and sign up for their GPU Cloud: https://lambdalabs.com/papers
📝 The paper "Form2Fit: Learning Shape Priors for Generalizable Assembly from Disassembly" is available here:
https://form2fit.github.io/
❤️ Watch these videos in early…
📝 The paper "Form2Fit: Learning Shape Priors for Generalizable Assembly from Disassembly" is available here:
https://form2fit.github.io/
❤️ Watch these videos in early…
Тут подогнали новый state of the art алгоритм сегментации объектов на изображении:
https://arxiv.org/pdf/2001.00309.pdf
https://arxiv.org/pdf/2001.00309.pdf
🏛 Как же детектировали объекты на изображениях древние? (70е - 80е)
🏢 Шаблоном по скользящему окну.
1. Выделяем границы, например, детектором Canny. (Композиция гауссовой свертки и дифференцирования + пороговая функция + некоторый способ сохранения связности линий)
2. Берем наш шаблон в виде какого-то контура и начинаем идти по изображению скользящим окном.
3. Используем Distance Transform, чтобы ускорить следующую операцию.
4. Используем одну из метрик: Chamfer Distance, Hausdorff Distance. (Суммируем или вычисляем максимум расстояния от нашего шаблона до выделенных краев на изображении)
Вообще про древних - это конечно была шутка, часто и сейчас можно пользоваться алгоритмами без машинного обучения.
Обычно их используют когда у вас не очень изменчивая среда и сам объект, где не очень необходимо выделять какую-то
семантику.
⚙️ Например, вам нужно определять правильной ли формы у вас детали на конвейере в какой-то момент.
Конечно, у себя на заводе вы часто можете фиксировать освещение, фон, да и правильные детали всегда одной формы.
✈️ 🛰 🗺 Или например их можно использовать для более интересных, военных целей.
Представьте себе снимок со спутника, нормаль поверхности практически всегда смотрит в камеру, количество разновидностей,
например, самолетов не такое уж и большое. Размер одинаковых объектов не меняется из-за одинаковой высоты.
🏢 Шаблоном по скользящему окну.
1. Выделяем границы, например, детектором Canny. (Композиция гауссовой свертки и дифференцирования + пороговая функция + некоторый способ сохранения связности линий)
2. Берем наш шаблон в виде какого-то контура и начинаем идти по изображению скользящим окном.
3. Используем Distance Transform, чтобы ускорить следующую операцию.
4. Используем одну из метрик: Chamfer Distance, Hausdorff Distance. (Суммируем или вычисляем максимум расстояния от нашего шаблона до выделенных краев на изображении)
Вообще про древних - это конечно была шутка, часто и сейчас можно пользоваться алгоритмами без машинного обучения.
Обычно их используют когда у вас не очень изменчивая среда и сам объект, где не очень необходимо выделять какую-то
семантику.
⚙️ Например, вам нужно определять правильной ли формы у вас детали на конвейере в какой-то момент.
Конечно, у себя на заводе вы часто можете фиксировать освещение, фон, да и правильные детали всегда одной формы.
✈️ 🛰 🗺 Или например их можно использовать для более интересных, военных целей.
Представьте себе снимок со спутника, нормаль поверхности практически всегда смотрит в камеру, количество разновидностей,
например, самолетов не такое уж и большое. Размер одинаковых объектов не меняется из-за одинаковой высоты.
🤖 Kornia и tensorflow.image - альтернативы для OpenCV с фокусом на работе с GPU
Kornia под собой использует PyTorch, а tensorflow.image соответственно tensorflow.
В них реализованы основные классические методы обработки изображений и еще их удобно встраивать в пайплайны ML.
https://kornia.github.io/
https://www.tensorflow.org/api_docs/python/tf/image
Kornia под собой использует PyTorch, а tensorflow.image соответственно tensorflow.
В них реализованы основные классические методы обработки изображений и еще их удобно встраивать в пайплайны ML.
https://kornia.github.io/
https://www.tensorflow.org/api_docs/python/tf/image