• Письмо начинающему изучать Data Science

    Я бы хотел получить такое письмо три года назад, когда только начинал изучать Data Science (DS). Чтобы там были необходимые ссылки на полезные материалы. Статья не претендует на полноту охвата необъятной области DS. Однако для начинающего специалиста будет полезна.


    Нейронные сети – это...

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

    • Translation


    Легко поддерживать корпоративную культуру на словах. Однако лишь немногие компании активно изучают те немногочисленные особенности корпоративной культуры, которые оказывают существенное влияние на производительность, — потому что это самое сложное.


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

    Читать дальше →
  • В поисках серебряной пули: необычные патроны

      Посмотрим, как по-разному можно решать одну и ту же инженерную задачу, даже если эта задача — запускать в цель маленькие кусочки свинца.

      В сегодняшней программе: болтер для войны во Вьетнаме, огнестрельный дартс и опасное прочтение старой поговорки.
      Читать дальше →
    • Что внутри у Google Coral Edge TPU: тесты на скорость и разбор устройства

      • Translation


      В 2019 году Google, наконец, выпустила оборудование с TPU под брендом Coral, которое можно купить. Однако не такие мощные облачные сети для обучения типа BigGAN со своими 100 петафлопс/с, и даже не такие, как самые дешёвые 180 TFlop/s v2 TPU, которые можно арендовать за $4,5 в час. Эти TPU-устройства должны работать «на краю», то есть, обеспечивать возможность внедрения решений с глубинным обучением для малых устройств без доступа к интернету. Насколько же хороши будут те TPU, которые мы сможем купить?
      Читать дальше →
      • +13
      • 10.2k
      • 2
    • Сверточный слой: быстрая свертка по методу Шмуэля Винограда

        Введение


        Данная статья является продолжением серии статей описывающей алгоритмы лежащие в основе
        Synet — фреймворка для запуска предварительно обученных нейронных сетей на CPU.

        В предыдущей статье я описал методы, основанные на матричном умножении. Эти методы с минимальными усилиями позволяют достичь во многих случаях более 80% от теоретического максимума. Казалось бы, ну куда тут можно еще дальше улучшать? Оказывается можно! Существуют математически методы, которые позволяют сократить число операций, необходимых для свертки. С одним из таких методов — алгоритму свертки по методу Винограда мы и ознакомимся в настоящей статье.

        image

        Шмуэль Виноград (Shmuel Winograd) 1936.01.04 — 2019.03.25 — выдающийся израильский и американский ученый в области компьютерных наук, создатель алгоритмов быстрого матричного умножения, свертки и преобразования Фурье.
        Читать дальше →
      • Редактирование видео в MPC с помощью шейдеров

        Есть задача: Изменить видео “на лету” при воспроизведении — поменять местами правую и левую часть. Не отразить, а именно поменять, т.е. разрезать картинку на две части и поменять их местами. Можно, конечно, сделать с помощью фреймсервера типа AviSynth'a, но это уже не совсем “на лету” — надо писать скрипт для каждого видео файла. Хочется сделать это быстро и без напрягов.

        На фига? Чтобы сделать курс лекций по машинному обучению от Яндекса более удобным для просмотра. Лектор указывает на пункты презентации вживую, и приходится постоянно перескакивать через весь экран взглядом, чтобы понять, о чём речь:

        image
        Читать дальше →
        • +31
        • 10.1k
        • 5
      • Преобразование Фурье. The Fast and the Furious

        Зачастую при разработке алгоритмов мы упираемся в предел вычислительной сложности, который, казалось бы, преодолеть невозможно. Преобразование Фурье имеет сложность $O(n^2)$, а быстрый вариант, предложенный около 1805 года Гаусом1 (и переизобретенный в 1965 году Джеймсом Кули и Джоном Тьюки) $O(nlog(n))$. В данной статье хочу вам показать, что можно получить результаты преобразования за линейное время $O(n)$ или даже достичь константной сложности $O(1)$ при определенных условиях, которые встречаются в реальных задачах.

        Читать дальше →
      • Jira против хаоса в разработке: как не терять задачи



          В предыдущей статье я рассказал, какие надстройки для Jira мы сделали, чтобы рабочий флоу стал максимально удобным, а тикет — исчерпывающе информативным. В сегодняшней статье мы решим другую задачу.

          Дано:

          • вы разрабатываете и поддерживает сложный программный продукт, работающий на нескольких клиентах;
          • у вас несколько инженерных команд (бекенд, IT Ops, iOS, Android, веб и т. д.), которые работают независимо друг от друга с отдельными беклогами;
          • у вас несколько продуктовых направлений, то есть, грубо говоря, один продуктовый менеджер ведёт несколько проектов по своему направлению, другой менеджер — по своему;
          • ваши инженерные команды функциональны, то есть они не выделены на отдельные продуктовые направления, а решают задачи всех юнитов сразу, обслуживая определённую часть технологического стека;
          • и, конечно, вы используете Jira!
          Читать дальше →
        • Как перестать писать прошивки для микроконтроллеров и начать жить


            Здравствуйте, меня зовут Евгений, и мне надоело писать прошивки для микроконтроллеров. Как это это случилось и что с этим делать, давайте разберемся.

            Читать дальше →
          • Нужно больше разных Blur-ов

            • Tutorial
            Размытие изображения посредством фильтра Gaussian Blur широко используется в самых разных задачах. Но иногда хочется чуть большего разнообразия, чем просто один фильтр на все случаи жизни, в котором регулировке поддаётся только один параметр — его размер. В этой статье мы рассмотрим несколько других реализаций размытия.


            Читать дальше →
          • Восстановление расфокусированных и смазанных изображений

            Восстановление искаженных изображений является одной из наиболее интересных и важных проблем в задачах обработки изображений – как с теоретической, так и с практической точек зрения. Частными случаями являются размытие из-за неправильного фокуса и смаз – эти дефекты, с которым каждый из вас хорошо знаком, очень сложны в исправлении – именно они и выбраны темой статьи. С остальными искажениями (шум, неправильная экспозиция, дисторсия) человечество научилось эффективно бороться, соответствующие инструменты есть в каждом уважающем себя фоторедакторе.

            Почему же для устранения смаза и расфокусировки практически ничего нету (unsharp mask не в счет) – может быть это в принципе невозможно? На самом деле возможно – соответствующий математический аппарат начал разрабатываться примерно 70 лет назад, но, как и для многих других алгоритмов обработки изображений, все это нашло широкое применение только в недавнее время. Вот, в качестве демонстрации вау-эффекта, пара картинок:



            Я не стал использовать замученную Лену, а нашел свою фотку Венеции. Правое изображение честно получено из левого, причем без использования ухищрений типа 48-битного формата (в этом случае будет 100% восстановление исходного изображения) – слева самый обычный PNG, размытый искусственно. Результат впечатляет… но на практике не все так просто. Под катом подробный обзор теории и практические результаты.
            Осторожно, много картинок в формате PNG!
            Читать дальше →
          • Восстановление расфокусированных и смазанных изображений. Практика

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

              В дополнение к этому я написал демонстрационную программу, в которой реализованы основные алгоритмы по устранению расфокусировки и смаза. Программа выложена на GitHub вместе с исходниками и дистрибутивами.

              Ниже показан результат обработки реального размытого изображения (не с синтетическим размытием). Исходное изображение было получено камерой Canon 500D с объективом EF 85mm/1.8. Фокусировка была выставлена вручную, чтобы получить размытие. Как видно, текст совершенно не читается, лишь угадывается диалоговое окно Windows 7.



              И вот результат обработки:



              Практически весь текст читается достаточно хорошо, хотя и появились некоторые характерные искажения.

              Под катом подробное описание проблем деконволюции, способов их решения, а также множество примеров и сравнений. Осторожно, много картинок!
              Читать дальше →
            • SmartDeblur 2.1 — восстановление смазанных и расфокусированных изображений

                Многие из вас уже читали серию моих постов про восстановление расфокусированных и смазанных изображений, а также пробовали бесплатные версии программы SmartDeblur, к одной из которых доступны исходники на GitHub
                Программа и статьи вызвали большой интерес как в рунете, так и в других странах, поэтому мы рады представить коммерческую версию SmartDeblur.

                Основные изменения:
                — Поддержка больших изображений (до 36MP на 64-битной ОС и до 15MP на 32-битной)
                — Возможность редактирования полученного kernel (траектории смаза)
                — Увеличение скорости за счет оптимизаций и использования Intel IPP в качестве FFT
                — Улучшение интерфейса

                image

                Адрес проекта: smartdeblur.net
                Под катом много картинок!

                Читать дальше →
              • Blind Deconvolution — автоматическое восстановление смазанных изображений

                  Смазанные изображения — один из самых неприятных дефектов в фотографии, наравне с расфокусированными изображениями. Ранее я писал про алгоритмы деконволюции для восстановления смазанных и расфокусированных изображений. Эти, относительно простые, подходы позволяют восстановить исходное изображение, если известна точная траектория смаза (или форма пятна размытия).
                  В большинстве случаев траектория смаза предполагается прямой линией, параметры которой должен задавать сам пользователь — для этого требуется достаточно кропотливая работа по подбору ядра, кроме того, в реальных фотографиях траектория смаза далека от линии и представляет собой замысловатую кривую переменной плотности/яркости, форму которой крайне сложно подобрать вручную.


                  В последние несколько лет интенсивно развивается новое направлении в теории восстановления изображений — слепая обратная свертка (Blind Deconvolution). Появилось достаточно много работ по этой теме, и начинается активное коммерческое использование результатов.
                  Многие из вас помнят конференцию Adobe MAX 2011, на которой они как раз показали работу одного из алгоритмов Blind Deconvolution: Исправление смазанных фотографий в новой версии Photoshop
                  В этой статье я хочу подробнее рассказать — как же работает эта удивительная технология, а также показать практическую реализацию SmartDeblur, который теперь тоже имеет в своем распоряжении этот алгоритм.
                  Внимание, под катом много картинок!
                  Читать дальше →
                • Восстановление расфокусированных и смазанных изображений. Повышаем качество

                    Представляю вашему вниманию заключительную статью из трилогии «Восстановление расфокусированных и смазанных изображений». Первые две вызвали заметный интерес — область, действительно, интересная. В этой части я рассмотрю семейство методов, которые дают лучшее качество, по сравнении со стандартным Винеровским фильтром — это методы, основанные на Total Variaton prior.
                    Также по традиции я выложил новую версию SmartDeblur (вместе с исходниками в open-source) в которой реализовал этот метод. Итоговое качество получилось на уровне коммерческих аналогов типа Topaz InFocus. Вот пример обработки реального изображения с очень большим размытием:


                    Читать дальше →
                  • Полное руководство по CMake. Часть первая: Синтаксис


                    Введение


                    CMake — это открытый и кросс-платформенный набор утилит, предназначенных для автоматизации тестирования, компиляции и создания пакетов проектов на C/C++. Написав однажды небольшой и понятный всем скрипт, Вы тем самым обеспечите одинаковую сборку Вашего проекта на любых платформах, где доступен CMake.


                    Язык CMake, будучи транслированным в нативный файл сборки (например, Makefile или Ninja), определяет процесс всего управления проектом. В Вашем распоряжении, с функциональной стороны, есть лишь команды, которые могут образовываться в довольно сложные конструкции. С них мы и начнём.

                    Читать дальше →
                  • Real-time edge detection using FPGA

                    Introduction


                    Our project implements a real-time edge detection system based on capturing image frames from an OV7670 camera and streaming them to a VGA monitor after applying a grayscale filter and Sobel operator. Our design is built on a Cyclone IV FPGA board which enables us to optimize the performance using the powerful features of the low-level hardware and parallel computations which is important to meet the requirements of the real-time system.


                    We used ZEOWAA FPGA development board which is based on Cyclone IV (EP4CE6E22C8N). Also, we used Quartus Prime Lite Edition as a development environment and Verilog HDL as a programming language. In addition, we used the built-in VGA interface to drive the VGA monitor, and GPIO (General Pins for Input and Output) to connect the external hardware with our board.


                    ZEOWAA FPGA development board

                    Read more →
                  • Тайм-менеджмент и смартфон. Самоорганизация на основе GTD и Google Calendar

                    В 2018 году мною была сделана новая, полностью переработанная версия этого материала на основе новых возможностей Google Keep и Calendar.

                    1. Самоорганизация, GTD и тайм-менеджемент — зачем это нужно?


                    В данной книге рассматривается реализация системы самоорганизации на основе методики GTD (Getting Things Done) и онлайн-календаря (Google Calendar и т. п.).

                    Примерный вид Google Calendar после реализации методики самоорганизации, предложенной в книге:


                    Читать дальше →
                  • Реализация системы GTD на основе новых возможностей Google Keep и Calendar

                    • Tutorial
                    This article in English: GTD Implementation via New Google Keep and Calendar Features

                    За последние годы Google Keep и Calendar значительно расширили свою функциональность, что дает возможность построить более удобную реализацию методологии GTD (Getting Things Done) на их основе. Ранее я уже публиковал материал с реализацией GTD на основе Google Calendar. Представленный теперь материал можно рассматривать как обновленную реализацию GTD на тех же принципах, но с использованием более современных средств.

                    В моем материале 2015 года в качестве базового элемента для всех пяти фаз управления рабочим процессом (Control) в системе GTD был выбран один и тот же сервис — Google Calendar. Теперь на различных фазах в качестве базовых элементов будут использоваться два разных сервиса — Calendar и Keep — в соответствии с приспособленностью их функционала для отдельных фаз.

                    • Calendar теперь будет использоваться в качестве базы для фазы обзора (Review-Reflect), а также для фазы выполнения (Do-Engage).
                    • Keep будет использоваться в качестве базы для фазы сбора (Collect-Capture), фазы обработки (Process-Clarify) и фазы организации (Organize).

                    Реализация GTD в Google Calendar (развернут список ближайших действий на неделю):


                    Pеализация GTD в Google Keep (категория ближайших действий):
                    Читать дальше →
                  • Модель разработки на примере Stack-based CPU

                    Возникал ли у вас когда-нибудь вопрос "как работает процессор?". Да-да, именно тот, который находится в вашем в ПК/ноутбуке/смартфоне. В этой статье я хочу привести пример самостоятельно придуманного процессора с дизайном на языке Verilog. Verilog — это не совсем тот язык программирования, на который он похож. Это — Hardware Description Language. Написанный код не выполняется чем-либо (если вы не запускаете его в симуляторе, конечно), а превращается в дизайн физической схемы, либо в вид, воспринимаемый FPGA (Field Programmable Gate Array).

                    Читать дальше →
                    • +24
                    • 4.3k
                    • 3