• Deep Reinforcement Learning (или за что купили DeepMind)

      Продолжаю рассказывать про успехи DeepMind. Этот пост про их первое известное публике достижение — алгоритм, который обучается играть в игры Atari, не зная об играх ничего, кроме пикселей на экране.

      Вот, собственно, главный артефакт (если вы это видео не видели, посмотрите обязательно, оно взрывает мозг)


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

        Приветствую тебя, Хабр! Наверняка вы заметили, что тема стилизации фотографий под различные художественные стили активно обсуждается в этих ваших интернетах. Читая все эти популярные статьи, вы можете подумать, что под капотом этих приложений творится магия, и нейронная сеть действительно фантазирует и перерисовывает изображение с нуля. Так уж получилось, что наша команда столкнулась с подобной задачей: в рамках внутрикорпоративного хакатона мы сделали стилизацию видео, т.к. приложение для фоточек уже было. В этом посте мы с вами разберемся, как это сеть "перерисовывает" изображения, и разберем статьи, благодаря которым это стало возможно. Рекомендую ознакомиться с прошлым постом перед прочтением этого материала и вообще с основами сверточных нейронных сетей. Вас ждет немного формул, немного кода (примеры я буду приводить на Theano и Lasagne), а также много картинок. Этот пост построен в хронологическом порядке появления статей и, соответственно, самих идей. Иногда я буду его разбавлять нашим недавним опытом. Вот вам мальчик из ада для привлечения внимания.


        Читать дальше →
      • Youtube

          Приходится ждать загрузки видео >360p по несколько секунд, обрывы на середине просмотра стало уже обыденным делом и это с достаточно широким каналом.

          image

          Причина в занижении провайдерами скорости к серверам кеширующим видео, всё что нужно сделать это заблокировать доступ к ним.

          Для того чтобы запрос шел мимо cdn серверов ютуба надо заблокировать диапазон ip адресов (в роутере или на компьютере).

          173.194.55.0/24 и 206.111.0.0/16
          Читать дальше →
        • 2D->3D in Augmented reality

          image

          В данной статье я расскажу как в приложениях Augmented reality по найденому расположению объекта в сцене построить 3D-пространство. Для этого необходимо получить две матрицы – проекционную (GL_PROJECTION) и модельную (GL_MODELVIEW) для работы, например, в OpenGL. Делать это мы будем средствами библиотеки OpenCV.

          Недавно приходилось решать эту задачу, но ресурса, где просто поэтапно объяснялось как это сделать я не нашел (может плохо искал), а подводных камней в данной проблеме хватает. В любом случае, статья на хабре описывающая эту задачу не повредит.
          Читать дальше →
          • +59
          • 14.6k
          • 9
        • Кластеризация дубликатов в Яндекс.Картинках

            Сегодня в клубе Яндекс.Субботник появилось интересное видео о том, как Яндекс обрабатывает изображения для исключения дубликатов. Рассказывает Александр Крайнов: он с 2000 года занимается проектами, связанными с обработкой медиаданных. В Яндексе отвечает за проекты, в которых задействовано компьютерное «зрение».

            О докладе
            Легко найти дубликаты среди тысяч картинок. Сложнее – среди миллионов. И совсем трудно – среди миллиардов. Чем выше полнота работы алгоритма, тем больше проблем. Но в то же время полнота кластеризации дубликатов – это основа качества поиска изображений.

            Думаю, многие не следят за этим клубом и мне кажется, что после этого видео есть над чем поразмыслить.
            Всем кому интересно — прошу под кат.
            Читать дальше →
            • +38
            • 6.3k
            • 8
          • Python на Хабре

              Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…
              Читать дальше →
            • C++ трюки и советы из Boost на каждый день

              • Tutorial

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

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

              Что вас ждёт под катом:

              • Избегаем вызовов макросов вместо функций, на примере max/min.
              • Вызываем оптимальную функцию, на примере std::swap и её специализации в разных пространствах имен.
              • Ускоряем вставку в std::vector.
              • Деструкторы в C++11.

              Читать дальше →
            • Классификация и регрессия с помощью деревьев принятия решений

              Введение


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

              Деревья принятия решений


              Дерево принятия решений — это дерево, в листьях которого стоят значения целевой функции, а в остальных узлах — условия перехода (к примеру “ПОЛ есть МУЖСКОЙ”), определяющие по какому из ребер идти. Если для данного наблюдения условие истина то осуществляется переход по левому ребру, если же ложь — по правому.
              Читать дальше →
            • Метод Виолы-Джонса (Viola-Jones) как основа для распознавания лиц

                Хотя метод был разработан и представлен в 2001 году Полом Виолой и Майклом Джонсом [1, 2], он до сих пор на момент написания моего поста является основополагающим для поиска объектов на изображении в реальном времени [2]. По следам топика хабраюзера Indalo о данном методе, я попытался сам написать программу, которая распознает эмоцию на моём лице, но, к сожалению, не увидел на Хабре недостающей теории и описания работы некоторых алгоритмов, кроме указания их названий. Я решил собрать всё воедино, в одном месте. Сразу скажу, что свою программу успешно написал по данным алгоритмам. Как получилось рассказать о них ниже, решать Вам, уважаемые Хабрачитатели!
                Добро пожаловать под кат!
              • «Выглядит похоже». Как работает перцептивный хэш

                • Translation
                За последние несколько месяцев несколько человек спросили меня, как работает TinEye и как в принципе работает поиск похожих картинок.

                По правде говоря, я не знаю, как работает поисковик TinEye. Он не раскрывает деталей используемого алгоритма(-ов). Но глядя на поисковую выдачу, я могу сделать вывод о работе какой-то формы перцептивного хэш-алгоритма.
                Читать дальше →
              • Пишем первое приложение для Android

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

                Статья затронет весь цикл разработки приложения. Вместе мы напишем простенькую игру “Крестики-Нолики” с одним экраном (в ОС Android это называется Activity).

                Отсутствие опыта разработки на языке Java не должно стать препятствием в освоении Android. Так, в примерах не будут использоваться специфичные для Java конструкции (или они будет минимизированы на столько, на сколько это возможно). Если Вы пишете, например, на PHP и знакомы с основополагающими принципами в разработке ПО, эта статья будет вам наиболее полезна. В свою очередь так как, я не являюсь экспертом по разработке на Java, можно предположить, что исходный код не претендует на лейбл “лучшие практики разработки на Java”.

                Читать дальше →
              • Что такое скрипты и с чем их едят — Lua & C++

                • Tutorial
                Добрый день, Хабрахабр!
                Решил написать этот топик на тему скриптов

                Что нужно знать?


                • С++ на приличном уровне (в уроке будут шаблоны — template)
                • Lua, очень легкий скриптовый язык. Советую этот урок.

                Почему писать диалоги игры в .cpp файле было большой ошибкой


                Если вы разрабатывали большие проекты (к примеру, масштабные игры), замечали, что с каждой новой сотней строк кода компиляция идет медленней?
                В игре создается больше оружия, больше диалогов, больше меню, больше etc.
                Одна из самых главных проблем, возникающих в связи с нововведениями — поддерживать бессчетное множество оружия и бейджиков довольно сложное занятие.
                В ситуации, когда просьба друга/босса/напарника изменить диалог или добавить новый вид оружия занимает слишком много времени, приходится прибегать к каким-то мерам — например, записи всей этой фигни в отдельные текстовые файлы.
                Почти каждый геймдевелопер когда-нибудь делал карту уровней или диалоги в отдельном текстовом файле и потом их считывал. Взять хотя бы простейший вариант — олимпиадные задачи по информатике с файлом ввода

                Но есть способ, на голову выше — использование скриптов.

                Читать дальше →
              • Model-View в QML. Часть третья: Модели в QML и JavaScript

                  Модель у нас отвечает за доступ к данным. Модель может быть реализована как в самом QML, так и на C++. Выбор тут больше всего зависит от того, где находится источник данных. Если в качестве источника данных используется код на C++, то там удобнее сделать и модель. Если же данные поступают напрямую в QML (например получаются из сети при помощи XMLHttpRequest), то лучше и модель реализовать на QML. Иначе придется передавать данные в C++, чтобы затем обратно их получать для отображения, что только усложнит код.

                  По тому, как модели реализуются, я разделю их на три категории:
                  • модели на C++;
                  • модели на QML;
                  • модели на JavaScript.

                  JavaScript-модели я вынес в отдельную категорию, т.к. у них есть определенные особенности, про них я расскажу чуть позже.
                  Начнем рассмотрение с моделей, реализованных средствами QML.

                  Model-View в QML:
                  1. Model-View в QML. Часть нулевая, вводная
                  2. Model-View в QML. Часть первая: Представления на основе готовых компонентов
                  3. Model-View в QML. Часть вторая: Кастомные представления
                  4. Model-View в QML. Часть третья: Модели в QML и JavaScript
                  5. Model-View в QML. Часть четвертая: C++-модели

                  Читать дальше →
                  • +18
                  • 39k
                  • 2
                • Ежедневная работа с Git

                  • Tutorial
                  Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

                  Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
                  • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
                  • будет ли менеджер и заказчик удовлетворён этим процессом?
                  • будет ли легко работать разработчикам?
                  • смогут ли новички быстро включиться в процесс?
                  • можно ли процесс относительно легко и быстро изменить?


                  Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

                  Далее очень много букв случайным образом превратились в пост.
                • Model-View в QML. Часть вторая: Кастомные представления

                    Не всегда готовые представления идеально подходят. Рассмотрим компоненты, которые позволяют создать полностью кастомизированное представление и добиться большой гибкости в построении интерфейса. И еще от меня небольшой бонус для терпеливых читателей :)

                    Model-View в QML:
                    1. Model-View в QML. Часть нулевая, вводная
                    2. Model-View в QML. Часть первая: Представления на основе готовых компонентов
                    3. Model-View в QML. Часть вторая: Кастомные представления
                    4. Model-View в QML. Часть третья: Модели в QML и JavaScript
                    5. Model-View в QML. Часть четвертая: C++-модели

                    Читать дальше →
                  • Как хвост виляет собакой. Азбука пропаганды

                      Чем доступнее информация, тем больше её вокруг. Чем быстрее она распространяется, тем меньше остаётся времени на то, чтобы её проверить. Постепенно информационная среда превращается в некое подобие «белого шума». Всё труднее строить внутри себя новые информационные фильтры, чтобы отсеять лишнее: убрать в сторону лозунги, агитацию, пропаганду, а оставить только то, что на самом деле кроется за ними. А манипулировать нашими мыслями пытаются постоянно, и я говорю не о 25-ом кадре (он не работает), а о более земных вещах — приёмах пропаганды, которые так умело (а зачастую — очень топорно) используют политики, рекламщики и вообще, все, кому не лень. Об этих приёмах и пойдёт речь в статье.

                      Хвост виляет собакой. ("Wag the dog") — чтобы избежать большого скандала или «замять», оставить незамеченным какое-нибудь важное, но неприятное событие, часто используется простой, но хитрый и ловкий приём, который англоязычные политтехнологи называют «Wag the dog», а русскоязычные — «Хвост виляет собакой». Он заключается в том, чтобы вовремя поднять волну обсуждения вокруг вопроса второстепенной важности, на фоне которой другое, более важное событие или действие пройдёт незаметно.
                      Примеры таких вопросов: Отмена перехода на зимнее время, российское гражданство Депардье, поездка Путина или Саши Грей на Ладе Калине по России, полёты со стерхами и т.д.
                      Своё название этот приём получил в честь английского выражения tail wagging the dog, который, в свою очередь, появился из следующего народного пассажа:
                      — Почему собака виляет хвостом?
                      — Потому, что собака умнее, чем хвост. Если бы хвост был умнее, он вилял бы собакой.

                      Ещё 7 приёмов - под катом
                    • Библиотека Qwt: как построить график функции на плоскости?

                        Скриншот простейшей программы, демонстрирующей использование виджетов Qwt
                        Уже пять лет я не пишу приложения с GUI, потому предложение зав. кафедрой подготовить для его лекции программу, строящую некие графики, поначалу меня несколько расстроило.

                        Как настоящий программист я решил найти самый легкий (и полезный для саморазвития) путь.
                        А именно, это задание оказалось хорошим поводом для того, чтобы познакомиться с Qt и библиотекой Qwt. Заодно я узнал, что приложения с GUI, оказываются, могут быть кроссплатформенными, а их код не менее элегантным, чем у приложений с «интерфейсом в стиле Unix™».

                        Итак, Qwt — библиотека виджетов для программирования приложений, имеющих техническую направленность. Она содержит набор виджетов, представляющих собой всевозможные слайдеры и дисковые «номеронабиратели», виджеты для построение гистограмм. Но здесь я расскажу, как Qwt применить для построения самых обычных двумерных графиков функций вида y = f(x).

                        Дальше в данной заметке
                        • приводится ссылка на исходный код моего простейшего примера (+ исполняемые файлы) и инструкция по его компиляции;
                        • рассказывается, как же в этом примере всё устроено;
                        • для новичков описывается компиляция и установка Qwt.

                        Читать дальше →
                      • Model-View в QML. Часть первая: Представления на основе готовых компонентов

                          В этой части моего цикла статей про Model-View в QML мы начнем рассматривать представления и начнем с тех, которые делаются на основе готовых компонентов.

                          Model-View в QML:
                          1. Model-View в QML. Часть нулевая, вводная
                          2. Model-View в QML. Часть первая: Представления на основе готовых компонентов
                          3. Model-View в QML. Часть вторая: Кастомные представления
                          4. Model-View в QML. Часть третья: Модели в QML и JavaScript
                          5. Model-View в QML. Часть четвертая: C++-модели

                          Читать дальше →