Блог Антона Репушко https://repushko.com/ Блог Антона Репушко Антон Репушко ru E2 (v3565; Aegea) Антон Репушко Блог Антона Репушко Ubuntu и nvidia-container-toolkit 61 https://repushko.com/all/ubuntu-i-nvidia-container-toolkit/ Sun, 30 Mar 2025 01:33:41 +0300 Антон Репушко https://repushko.com/all/ubuntu-i-nvidia-container-toolkit/ <p>Из неочевидного: для того, чтобы в Docker-контейнерах заработал доступ к GPU, нужно использовать <i>docker-ce</i>, а не <i>docker</i> из Snap. Это связано с тем, что пакеты из snap’a работают в песочнице snap’a и не имеют прямого доступа к системе.</p> <p><a href="proxy.php?url=https://github.com/docker/genai-stack/issues/95">Вот тут описание проблемы</a>.</p> Аналоговый календарь на корте в Тайване 60 https://repushko.com/all/analogovy-kalendar-taiwan/ Sun, 05 Jan 2025 18:24:44 +0300 Антон Репушко https://repushko.com/all/analogovy-kalendar-taiwan/ <p>Интересно выглядит система бронирования публичных кортов на Тайване. Пишешь свое имя и вставляешь бумажку в нужный слот. Аналоговый shared calendar.</p> <div class="e2-text-picture"> <div class="fotorama" data-width="960" data-ratio="0.75"> <img src="proxy.php?url=https://repushko.com/pictures/tennis_taiwan_2.jpg" width="960" height="1280" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/tennis_taiwan_1.jpg" width="1280" height="960" alt="" /> </div> </div> Cons Cells в Lisp 59 https://repushko.com/all/cons-cells-v-lisp/ Thu, 12 Jan 2023 02:30:13 +0300 Антон Репушко https://repushko.com/all/cons-cells-v-lisp/ <p>Если вам (как и мне) поначалу было тяжеловато понять концепт Cons Cells в Lisp, то на <a href="proxy.php?url=https://stackoverflow.com/questions/1317023/what-is-the-definition-of-a-lisp-cons-cell">Stack Overflow</a> есть емкое и краткое объяснение:</p> <blockquote> <p>Cons cells in general hold two pointers that can point to anything. General usage of course is to point to a «value» with the left one, and to another Cons cell (or nil) with the «right» one.</p> </blockquote> <p>car и cdr соответственно вернут первый элемент или второй.</p> Formula E 58 https://repushko.com/all/final-formula-e/ Mon, 16 Aug 2021 00:41:24 +0300 Антон Репушко https://repushko.com/all/final-formula-e/ <p>Сходил на финал сезона <a href="proxy.php?url=https://www.fiaformulae.com">Formula E</a> в Берлине. Это как F1, только полностью на электрических машинах, без ДВС. У них больше крутящий момент, они быстрее разгоняются, а максимальная скорость доходит до 280 км/ч. Особенно понравился звук электрического мотора.</p> <div class="e2-text-video"> <iframe src="proxy.php?url=https://www.youtube.com/embed/RFh3ucTD2qM" frameborder="0" allowfullscreen></iframe></div> newprojectname.dev 57 https://repushko.com/all/newprojectname-dev/ Fri, 08 Jan 2021 23:47:43 +0300 Антон Репушко https://repushko.com/all/newprojectname-dev/ <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/readme_image.jpeg" width="1280" height="729" alt="" /> </div> <p><a href="proxy.php?url=newprojectname.dev"><a href="proxy.php?url=https://newprojectname.dev">https://newprojectname.dev</a></a></p> <p>Есть забавная традиция называть проекты/библиотеки именами различных мифических существ и божеств. И у меня давно лежала идея хелпера по подбору таких названий, но реализовал её только сейчас.</p> <p>Я напарсил <a href="proxy.php?url=https://github.com/repushko/mythology_names_dataset">самый большой список названий божеств</a> из 43 пантеонов, что дало 4096 уникальных имён (и 9000 если считать все алиасы). Ну а чтобы избежать коллизий, проект на лету ищет эти имена в названиях репозиториев на Гитхабе и показывает топ-результаты.</p> <p>Из интересной инженерии: проект на <a href="proxy.php?url=https://svelte.dev/">Svelte</a>, имеются <a href="proxy.php?url=https://github.com/repushko/newprojectname.dev">исходники</a>. Внутри есть база на 1Мб сырого json’a, которая затаскивается в общий бандл приложения и ужимается до 150кб. И из-за этого хака всё успешно хостится как статика на Digital Ocean’e за 0.00$ в месяц. Дизайн тоже корявенько делал я. Запросы к Гитхабу — клиентские, лимиты запросов — тоже на клиенте. Легчайшая поддержка.</p> Rejection sampling и Reservoir sampling 54 https://repushko.com/all/rejection-sampling-i-reservoir-sampling/ Wed, 14 Oct 2020 21:28:27 +0300 Антон Репушко https://repushko.com/all/rejection-sampling-i-reservoir-sampling/ <p>Разобрался на днях с двумя интересными алгоритмами про выборки.</p> <p><a href="proxy.php?url=https://en.wikipedia.org/wiki/Rejection_sampling">Rejection sampling</a> находил в задачах вроде «с помощью функции, которая гарантирует равновероятное выпадение целого числа в интервале [1...7], создайте функцию, которая делает тоже самое, но в интервале от [1...10]». Ещё такая же задача была однажды у меня на собесе в Яндексе: дана монетка с вероятностью выпадения орла/решки ½. С помощью этой монетки нужно смоделировать вероятность ⅓. Я интуитивно дошёл до решения и доказал, что это работает, но конкретно названия группы алгоритмов не знал.</p> <p><a href="proxy.php?url=https://en.wikipedia.org/wiki/Reservoir_sampling">Reservoir sampling</a> про то, как смоделировать равновероятный выбор элемента при неизвестной конечной размерности множества вариантов.</p> Аудиозаметка №3 53 https://repushko.com/all/audiozametka-3/ Tue, 06 Oct 2020 23:21:39 +0300 Антон Репушко https://repushko.com/all/audiozametka-3/ <p>Станция Нойкёльн.</p> <div class="e2-text-audio"> <a class="jouele" data-space-control="true" data-length="26" href="proxy.php?url=https://repushko.com/audio/audio_note3.mp3" >5 октября, Берлин</a> </div> [Идея] Voice-control для RPG-игр 52 https://repushko.com/all/ideya-voice-control-dlya-rpg-igr/ Mon, 28 Sep 2020 17:20:46 +0300 Антон Репушко https://repushko.com/all/ideya-voice-control-dlya-rpg-igr/ <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/fallout.jpg" width="800" height="450" alt="" /> </div> <p>Современные технологии уже позволяют реализовать самую клёвую штуку, которую можно придумать в RPG-играх — открытые диалоги.</p> <p>Вместо того, чтобы выбирать колёсиком (как в MassEffect или Fallout) вариант ответа в диалоге, можно настроить возможность произносить его голосом в микрофон. Система бы матчила семантику сказанного к максимально близком варианту ответа в сценарии и запускала скрипт реакции на этот вариант ответа. Было бы интересно попробовать.</p> <p>А вообще игры с голосовой механикой не новость.</p> <div class="e2-text-video"> <iframe src="proxy.php?url=https://www.youtube.com/embed/L5-o6iODptU" frameborder="0" allowfullscreen></iframe><div class="e2-text-caption">Scream Go Hero</div> </div> Чьи-то зарисовки 51 https://repushko.com/all/zarisovki/ Sun, 16 Aug 2020 22:37:45 +0300 Антон Репушко https://repushko.com/all/zarisovki/ <p>На берлинской барахолке полгода назад получилось бесплатно взять виниловый проигрыватель и аудиосистему к нему. Ещё в придачу отдавался набор старых пластинок: в основном латинской музыки и пара классических произведений.</p> <p>В куче этих пластинок был блокнот с зарисовками интерьеров и какими-то записями (непонятно какого срока давности). Я так рисовать не умею, поэтому кажется очень красивым.</p> <div class="e2-text-picture"> <div class="fotorama" data-width="1280" data-ratio="1.5023474178404"> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(8).png" width="1280" height="852" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(7).png" width="916" height="1280" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(6).png" width="930" height="1280" alt="" /> </div> <div class="e2-text-caption">Интерьеры</div> </div> <div class="e2-text-picture"> <div class="fotorama" data-width="1280" data-ratio="1.3793103448276"> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(3).png" width="1280" height="928" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(5).png" width="1280" height="916" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(4).png" width="1280" height="934" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(2).png" width="1280" height="908" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38-(1).png" width="1280" height="920" alt="" /> </div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/photo_2020-08-16_18-41-38.png" width="860" height="1280" alt="" /> </div> [Идея] Физический калейдоскоп для latent spaces 50 https://repushko.com/all/ideya-fizicheskiy-kaleydoskop-dlya-ganov/ Wed, 12 Aug 2020 13:06:38 +0300 Антон Репушко https://repushko.com/all/ideya-fizicheskiy-kaleydoskop-dlya-ganov/ <p>Клёво сделать физический калейдоскоп (как в детстве), вращение которого бы приводило к движению внутри latent space всяких GANов. Внутри собственно экран.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/kalejdoskop.jpeg" width="576" height="406" alt="" /> </div> Дневник соревнования OpenEDS 2020 49 https://repushko.com/all/openeds2020/ Tue, 04 Aug 2020 21:38:13 +0300 Антон Репушко https://repushko.com/all/openeds2020/ <p>Мы со <a href="proxy.php?url=https://www.linkedin.com/in/sviatoslav-skoblov">Святославом Скобловым</a> 2 месяца решали <a href="proxy.php?url=https://research.fb.com/programs/openeds-2020-challenge/">OpenEDS 2020 Challenge</a>, где в одном треке заняли первое место, а во втором восьмое. Про второй трек тут не будет, потому что он скучный и не очень интересный. И ещё нас изредка консультировал Вова Михеюшкин по всяким CV-вопросам. Может быть кому-то тоже будет интересно почитать, как проходят соревнования по ML.</p> <h2>Про соревнование</h2> <p>На основе <a href="proxy.php?url=https://arxiv.org/abs/2005.03876">датасета OpenEDS2020</a>, собранного <a href="proxy.php?url=https://research.fb.com/category/augmented-reality-virtual-reality/">Facebook Reality Labs</a>, запустили два трека. Оба связаны с VR/AR, Oculus и всем таким. Треки шли в рамках <a href="proxy.php?url=https://openeyes-workshop.github.io/">воркшопа к ECCV 2020</a>.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/099.png" width="640" height="400" alt="" /> <div class="e2-text-caption">Один из тысяч кадров</div> </div> <p><b>В первом треке</b> даны последовательности по 100 (трейн) и 55 (валидация) фотографий глаз с gaze-векторами каждого кадра. Представьте, что вы умеет стрелять лазерами из глаз. Вот отнормированный вектор из вашего зрачка до объекта на VR/AR экране и есть gaze-vector.<br /> Частота записи последовательности — 100Гц. В тесте были те же последовательности по 50 кадров, но уже без настоящих векторов. Общая задача — научиться предсказывать по 50 кадрам последовательности в тесте следующие 5 кадров (т.e. 50мс). Нужно это для <a href="proxy.php?url=https://en.wikipedia.org/wiki/Foveated_rendering">foveated rendering</a>.</p> <p><b>Во втором треке</b> нужно было сегментировать части глаза (бэкграунд, склеру, радужку и зрачок) по кривой разметке 5% данных в каждой последовательности из 200 кадров. Многие (по отзывам других участников) боролись именно с кривой разметкой, мы же начали решать второй трек за 2 недели до конца и не слишком преуспели, хотя разрыв между топом очень маленький. Важнее и интереснее для нас был именно первый трек.</p> <h2>Технические особенности</h2> <p>Соревнование проводилось на платформе <a href="proxy.php?url=https://evalai.cloudcv.org/">EvalAI</a>. Там можно скрывать свои сабмиты, но перед этим на какую-то долю секунды они попадают на общую таблицу. Поэтому было решено написать своего бота, который бы мониторил изменения лидерборда, генерировал красивые картинки и присылал их в наш общий диалог. С помощью него мы могли трекать и отслеживать настоящих лидеров, а не те результаты, которые были показаны вручную.<br /> Был только 1 сабмит в день, каждую ночь предыдущая возможность сабмита сгорала.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/lb.jpg" width="1280" height="897" alt="" /> <div class="e2-text-caption">Команда BTSD скрыла свой сабмит</div> </div> <p>Своего железа у нас было не очень много, поэтому мы время от времени арендовали машины на <a href="proxy.php?url=https://vast.ai/">vast.ai</a>. Потратили на это около 230 долларов за 2 месяца соревнования.</p> <h2>Дневник</h2> <p><i>1 июня</i><br /> Создан чат в Телеграме, начали разбираться в предметной области, с платформой, читать правила. Выяснили, как части глаза называются на английском. Создали репозиторий на Гитхабе и настроили всем доступы.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/eye.jpg" width="500" height="239" alt="" /> </div> <p><i>3 июня</i><br /> Выкачиваются данные, визуально посмотрели gaze-вектора. Появляется идея классическими CV-методами поисков контуров искать зрачок на изображении и смотреть на изменение его положение внутри склеры. Разбираемся в типах движения глаза (саккады, скольжения, статичное положение и т. д.). Наконец-то понимаем вообще в чём суть трека.</p> <p><i>4 июня</i><br /> Нашли <a href="proxy.php?url=https://pupil-labs.com/">pupil-labs</a>, с помощью оборудования которых Facebook генерировал свой датасет. Ничего полезного, но очень интересно.<br /> Научились находить зрачок обычными CV методами. В итоге это потом использовалось только в визуализациях.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/pupil_center.jpg" width="399" height="133" alt="" /> </div> <p>Пытались добавить ещё всяких контуров, но ничего не получилось.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/countur_orig.jpg" width="640" height="400" alt="" /> <div class="e2-text-caption">Оригинальный кадр</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/countur.jpg" width="657" height="417" alt="" /> <div class="e2-text-caption">Посчитанный контур</div> </div> <p><b>Важное решение</b>: посчитали правильным разделить пайплайн на две части: gaze-estimator (модель, которая по кадру предсказывает его gaze-вектор) и gaze-predictor (модель, которая по истории gaze-векторов предсказывает gaze-вектора следующих 5 кадров).</p> <p><i>6 июня</i><br /> Начали визуализировать вектора, чтобы посмотреть на всю последовательность целиком. Нам нужен gaze-predictor, но насколько сложным он будет? Если в данных в основном статичное положение глаза, то тогда сложная модель тут не нужна (так в итоге и оказалось).</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/static_gaze.jpg" width="518" height="281" alt="" /> <div class="e2-text-caption">Глаз практически неподвижен</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/saccade.jpg" width="423" height="358" alt="" /> <div class="e2-text-caption">А тут уже двигается</div> </div> <p>Где-то тут было решено для обучения эстиматора (модели, которая будет по кадру предсказывать gaze-вектор) использовать <a href="proxy.php?url=https://habr.com/ru/company/smartengines/blog/264677/">аугментации</a>. Но проблема в том, что при изменении изображения нужно будет менять и изначальный вектор: вращаешь изображение -> вращаешь вектор. Решили патчить <a href="proxy.php?url=https://github.com/albumentations-team/albumentations">albumentations</a>.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/vector_visualize.jpg" width="391" height="251" alt="" /> <div class="e2-text-caption">Проекция вектора</div> </div> <p><i>11 июня</i><br /> Начали гонять первые модели, оптимизировать параметры. Стали разбираться с предиктором. Попробовали всякие стандартные штуки для форкаста временных рядов типа <a href="proxy.php?url=https://facebook.github.io/prophet/">prophet</a>, но они предсказуемо не зашли из-за специфики данных: нельзя вытащить сезонность (которой нет), другие фичи вроде дней недели, времени и прочего, что активно эксплуатируется в таких местах.<br /> Обучили первый resnet для эстиматора.</p> <p><i>12 июня</i><br /> Скор первого трека: <b>0.1556</b></p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/submit.jpg" width="949" height="355" alt="" /> <div class="e2-text-caption">Сделали первый сабмит (команда baccaddes)</div> </div> <p>Начали глубже разбираться с метрикой и сравнивать предикты модели с реальными данными, чтобы понять, где косяк. Настроили честную локальную валидацию эстиматора.</p> <p><i>15 июня</i><br /> Скор первого трека: <b> 0.0786</b></p> <p>Засабмитили улучшенную модель (VAR поверх хорошего эстиматора).<br /> Это приблизило нас к остальным на ЛБ.</p> <p><i>16 июня</i><br /> Скор первого трека: <b>0.0747</b></p> <p>Написан и запущен Big Brother — бот, который следит за ЛБ. С этого момента до конца соревнования он работал с одним перебоем на полдня, после без ошибок.<br /> Засабмитили скользящее среднее по 5 последним кадрам.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/submit_bot.jpg" width="1280" height="708" alt="" /> <div class="e2-text-caption">Бот отрабатывает как надо</div> </div> <p><i>17 июня</i></p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/ezgif.com-video-to-gif.gif" width="256" height="160" alt="" /> <div class="e2-text-caption">Начали смотреть глазами на глаза (это анимация одной последовательности)</div> </div> <p>Посмотрели на статические генераторы таких данных (NVGaze и UnityEyes). В итоге для сореванования их так и не использовали.</p> <p><i>22 июня</i><br /> Предикт эстиматора очень грязный: колбасит вектора между кадрами и получается, что между ними как будто бы сильное движение глаза.</p> <p><i>28 июня</i><br /> Подумали, что было бы классно научиться группировать авторов одних и тех же последовательностей (количество участников при сборе датасета на порядки меньше числа последовательностей), чтобы вытаскивать оттуда какие-то фичи специфичные для конкретного участника. Эту идею так и не доделали.</p> <p>Начали думать про классическое CV снова: хотели вытаскивать крайние точки глаз и прочее.</p> <p>Обучили LSTM для предиктора. Сработало чуточку хуже средних по 5 кадрам.</p> <p><i>29 июня</i><br /> Закончили патчить albumentations.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/orig.jpg" width="387" height="251" alt="" /> <div class="e2-text-caption">Оригинальный кадр</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/flipped.jpg" width="385" height="249" alt="" /> <div class="e2-text-caption">Сработавший Vertical Flip (и пересчитанный вектор)</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/shift_scale_rotate.jpg" width="380" height="247" alt="" /> <div class="e2-text-caption">Живой ShiftScaleRotate</div> </div> <p><i>1 июля</i><br /> Начали подозревать, что в тесте всё таки в основном статика. И что самый большой буст тут даст улучшение эстиматора, а не предиктора.</p> <p>Нафигачили для эстиматора аугментаций.</p> <p><i>4 июля</i><br /> Скор первого трека: <b>0.0613</b></p> <p>Стали думать, как сделать интереснее предиктор. Взяли потыкать <a href="proxy.php?url=https://github.com/unit8co/darts">darts</a> — это такой враппер над всякими стандартными моделями для форкаста.</p> <p>Запустили старый метод среднего по кадрам (или какую-то оч простую эвристику) над данными нового эстиматора. Очень сильно улучшились.</p> <p><i>5 июля</i><br /> Скор первого трека: <b>0.0570</b></p> <p>Выучили пачку effnet’ов (до этого был resnet). Начали дробить на фолды и мешать предикты с разных фолдов.</p> <p>Сняли тачку на <a href="proxy.php?url=https://vast.ai">vast.ai</a>.</p> <p>Посмотрели на тестовые данные на основе более-менее нормальных предиктов эстиматора. Оказалось, что какая-то динамика в последних 10 кадрах последовательности есть всего в 600-700 последовательностях из 6400.</p> <p>Засабмитил старые методы предикта на среднем фолдов effnet’а. Почти до самого конца это было нашим лучшим результатом и первым местом на ЛБ.</p> <p><i>9 июля</i><br /> Обучили mobnet. Стали экспериментировать с предиктором: ExponentialSmoothing, VAR, ARIMA и т. д.<br /> Методы ничего не докинули, а некоторые и ухудшили скор относительно просто среднего.<br /> Скор самого предиктора при этом был очень хороший, около 0.000400+ на кадр по их метрике.</p> <p>Первый раз открыли данные второго трека, порисовали маски.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/mask.jpg" width="1098" height="1034" alt="" /> </div> <p><i>10 июля</i><br /> Засабмитили скользящее среднее по 3 кадрам на куче разных фолдов — не сработало.</p> <p>Постарались достраивать вектора регрессией. Тоже не сработало.</p> <p><i>11 июля</i><br /> Начали играться с фильтрами над сигналом, чтобы сгладить разницу предиктов эстиматора между соседними кадрами. Получалось хорошо, использовали <a href="proxy.php?url=https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter">фильтр Савицки-Голая</a>. Кажется, что всякие неровности эстиматора очень красиво сглаживаются.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/savgol_2.jpg" width="751" height="558" alt="" /> </div> <p><i>12 июля</i><br /> Разбирались с предиктором. Выяснили, что наша регрессия багованная и искали ошибку в разнице валидаций друг у друга. Нашли. Смотрели глазами на фильтрованные предикты и думали, что делать дальше.</p> <p><i>14 июля</i><br /> Нарисовали красивые картинки градиентов по разным осям между двумя соседними кадрами по предиктам на всём тесте. Выяснили, что у нас действительно всё — статика. Поэтому опять же нет смысла во всяких сложных моделях предиктора.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/gradient_x.jpg" width="664" height="422" alt="" /> </div> <p>Выяснили, что локальная метрика эстиматора напрямую коррелирует с результатами на ЛБ и что результат одного хорошего фолда лучше, чем его же со смесью фолдов чуть-чуть хуже. Опять упёрлись в то, что надо дотюнивать эстиматор. Вернулись к resnet’у.</p> <p><i>14 июля — 23 июля</i><br /> Скор первого трека: <b>0.0552</b></p> <p>Разбирались с сегментацией, удивлялись кривой разметке, сложным случая с закрытыми глазами и т. д.</p> <p>Вытюнили 1 фолд для эстиматора до ошибки 0.000197 (в 3 раза лучше прошлых). В предиктор засунули простую эвристику: если статика, то скользящее среднее по 2 последним кадрам, а если была динамика в последних 5 кадрах, то добавляем градиент дальше до упора (из-за особенностей движения глаза, там бОльшая часть движений — линейная).</p> <p><i>23 июля — 29 июля</i><br /> Тюнили и думали над сегментацией. Смотрели на то, как нам применить синтетические данные в сегментаци. Генерировали синтетику.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/unity_eye.jpg" width="1148" height="648" alt="" /> <div class="e2-text-caption">Типичный несуществующий глаз</div> </div> <p>Из интересного: один сабмит пропустили, потому что кое-кто заснул от усталости и не слышал звонков с просьбой прислать данные. Два сабмита в два дня были сделаны за 30 и 20 секунд до сгорания.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/sega.png" width="720" height="720" alt="" /> <div class="e2-text-caption">Кусочек каких-то сравнений моделей по сегментации</div> </div> <p><i>30 июля — 31 июля</i><br /> Скор первого трека: <b>0.0537</b></p> <p>Смотрели и думали над всякими сложными случаями в сегментации</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/sega2.jpg" width="1280" height="287" alt="" /> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/sega3.jpg" width="1280" height="277" alt="" /> </div> <p>По первому треку доучили остальные бленды эстиматора, сблендили и засабмитили. Так и осталось нашим лучшим результатом.</p> <p>По сегментации остались на 8ом месте.</p> <h2>Что хотели попробовать, но не попробовали</h2> <ul> <li>Не использовали никакую синтетику, а скорее всгео надо было бы. Можно и в обоих треках</li> <li>Надо было учить LSTM на чистых данных (в том числе из теста и из трейна) и сразу на векторах. Наши эвристики в итоге были по каждой оси отдельно</li> </ul> Аудиозаметка №2 48 https://repushko.com/all/audiozametka-2/ Sun, 02 Aug 2020 00:21:02 +0300 Антон Репушко https://repushko.com/all/audiozametka-2/ <p>1 августа 2020. Звуковая инсталляция в Бергхайне.</p> <div class="e2-text-audio"> <a class="jouele" data-space-control="true" data-length="33" href="proxy.php?url=https://repushko.com/audio/berghain.mp3" >1 августа 2020, Берлин</a> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/berghain.jpg" width="1280" height="960" alt="" /> </div> Как работает очистка данных со stat.gibdd.ru 47 https://repushko.com/all/data-cleaning-stat-gibdd-ru/ Thu, 25 Jun 2020 23:15:15 +0300 Антон Репушко https://repushko.com/all/data-cleaning-stat-gibdd-ru/ <p>Год назад <a href="proxy.php?url=https://repushko.com/all/dtp-stat-helpers/">написал скрипты</a> для очистки данных статистики ДТП, потому что изначальные данные (именно GPS-координаты) были очень грязными и их практически нельзя было визуализировать. Сорцы на Гитхабе <a href="proxy.php?url=https://github.com/repushko/dtp_stat_helpers">имеются</a>.</p> <p>Сейчас скрипты временно неработоспособны, так как Яндексовский геокодер теперь требует ключ для использования API, но скоро я их поправлю.</p> <p>Я расскажу про красивый и аккуратный способ, как нам точку с неправильными координатами аккуратно подвинуть прямо на улицу, где произошло ДТП.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/graph_explanation.jpg" width="1280" height="960" alt="" /> <div class="e2-text-caption">Алгоритм очистки данных</div> </div> <h2>Описаниме по шагам</h2> <p>Изначально нам дана синяя точка слева внизу. Это GPS-координаты, которые мы получили из исходных данных. Наша основная зацепка — адрес. Он заполняется вручную и обычно верный.</p> <p><b>Шаг 1.</b> Воспользуемся геокодером. Это такая программа, которая переводит географическое название (город/село/улицу + дом) в географические координаты. Я обычно пользуюсь <a href="proxy.php?url=https://tech.yandex.com/maps/geocoder/">геокодером Яндекса</a>, потому что он точнее для СНГ, но ещё есть <a href="proxy.php?url=https://nominatim.org/">бесплатный от OpenStreetMap</a>. Так мы получаем чистую координату дома по адресу (красная точка на рисунке).</p> <p><b>Шаг 2.</b> В OSM хранится граф дорог, при этом они привязаны к географическим координатам (у графа есть точное положение на плоскости). И есть классная особенность: мы можем ввести координаты точки на плоскости и получить кусок графа в радиусе n от этой точки. Общая идея такая:</p> <ul> <li>вводим координаты дома после геокодирования -> получаем круг примерно как на картинке,</li> <li>выбираем все дороги, попавшие в радиус (можно считать их просто линиями),</li> <li>строим перпендикуляры из точки до каждой из линий (на рисунке x и y),</li> <li>выбираем кратчайший (в нашем случае x),</li> <li>наша красная точка получает новые координаты (уже на ребре графа из OSM) и становится жёлтой точкой,</li> <li>profit.</li> </ul> <p>Так мы кривые координаты ДТП по одному лишь адресу аккуратно перенесли прямо на улицу. Теперь при визуализации всё будет аккуратно и ровно.</p> Типы улиц Тулы 46 https://repushko.com/all/street-types-tula/ Sun, 07 Jun 2020 23:54:35 +0300 Антон Репушко https://repushko.com/all/street-types-tula/ <p>Раз уж пошла такая мода (<a href="proxy.php?url=https://erdavis.com/2019/09/20/the-beautiful-hidden-logic-of-cities-worldwide/">оригинальная идея Эрина Дэвиса</a>, <a href="proxy.php?url=https://t.me/pathetic_low_freq/319">Москва</a>, <a href="proxy.php?url=https://vk.com/astr.city.data?w=wall-51262629_141">Астрахань</a>), то и я нарисовал карту типов улиц Тулы.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/map.png" width="2560" height="2560" alt="" /> </div> <p>Интересно выглядят плотные участки, состоящие только из проездов. Вроде как согласно СНиП (Строительные нормы и правила), к проездам меньше требований по ширине полос, допустимым углам поворота, наибольшему допустимому уклону, ширине пешеходной части.</p> <p>А ещё в Туле есть особенный тип: «обвод». Он всего один (<a href="proxy.php?url=https://yandex.ru/maps/15/tula/search/%D0%92%D0%BE%D1%81%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BE%D0%B1%D0%B2%D0%BE%D0%B4/?ll=37.662604%2C54.185500&z=14.64">Восточной обвод</a>), но всё таки существует. И целых два проспекта.</p> Датасет структуры сети Lightning 44 https://repushko.com/all/dataset-struktury-seti-lightning/ Fri, 22 May 2020 02:02:05 +0300 Антон Репушко https://repushko.com/all/dataset-struktury-seti-lightning/ <p>Ковыряю в свободное время интересную тему и задачу, которую курирует <a href="proxy.php?url=https://cs.hse.ru/en/lambda/">LAMBDA</a>.</p> <h2>Вводная</h2> <p>Есть сеть <a href="proxy.php?url=https://lightning.network/">Лайтнинг</a>, которая является надстройкой над майннетом Биткоина. Придумывалась для более мелких транзакций, которые не позволял делать Биткоин. Например, тебе нужно заплатить за кофе или совершить какую-то маленькую операцию.</p> <p>Основная терминология:</p> <ul> <li>нода — узел сети. Получатель денег в общем,</li> <li>канал — ребро сети. Общий кошелёк в майннете Биткоина между двумя нодами.</li> </ul> <p>В Лайтнинге интересный механизм поиска пути транзакции. Eсли тебе надо перевести деньги из <i>А</i> в <i>С</i>, то не обязательно открывать новый общий кошелёк в майннете Биткоина.</p> <p>Предположим у тебя уже есть канал <i>А<->B</i> и есть канал <i>B<->C</i>. В таком случае ты можешь сделать перевод <i>A->B->C</i>, где <i>B</i> за проход транзакции через себя возьмёт какую-то комиссию. А можно перевести и предположим по пути <i>A>D->B->C</i>, если такой существует.</p> <p>Но не всё так просто. Помимо комиссии, на транзакцию накладываются дополнительные условия. У канала есть «ёмкость»: сколько можно переслать денег между двумя нодами без создания нового общего кошелька в майннете. И «ёмкость» <i>А->B</i> и <i>B->A</i> не одно и то же.</p> <p>Подробнее и больше можно почитать <a href="proxy.php?url=https://lightning.network/"> в документации</a>.</p> <h2>Цель</h2> <p>Основная идея ресёча — заменить глупый перебор результатов DFS для проведения транзакции на что-то более умное. Кажется, что это можно сделать, имея статистику «прошедших» транзакций и варианты альтернативных путей. Получиться должно что-то вроде статистического роутинга на основе прошлых транзакций.<br /> Для этого нужно собирать датасет таких транзакций и их альтернатив, но это упирается в некоторые технические сложности и проблемы. Я собственно сейчас пытаюсь их решить, проверяя вообще работоспособность идеи сбора таких данных. Если получится, то будет очень классное и необычное решение.</p> <h2>Датасет</h2> <p>До этого этапа хотелось посмотреть (и посмотрели) просто на динамику сети, как она меняется и насколько стабильна. Написал простенький парсер и в итоге получился <a href="proxy.php?url=https://www.kaggle.com/grisme/hourly-snapshots-of-lightning-network">датасет на 10 Gb</a> «слепков» сети: рёбра графа и всякая метаинфа нод (ip-адрес, алиас в сети и гео-координаты).</p> <p>Парсилось каждый час с 10.12.2019 до 04.03.2020 (84 дня), всего 2022 записи. Каждый результат в отдельном файле со своим временем.</p> <p>На этом датасете можно построить интересные визуализации динамики графа и прочие клёвые штуки. Почему бы собственно им не поделиться, да?</p> Падения астронавтов на Луне 42 https://repushko.com/all/the-falls-of-astronauts/ Sun, 10 May 2020 17:00:30 +0300 Антон Репушко https://repushko.com/all/the-falls-of-astronauts/ <p>NASA пару лет назад показало падения астронавтов на Луне во время операций Apollo 15 и Apollo 16.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/moon.gif" width="320" height="240" alt="" /> </div> «Средненько». Проверка гипотезы 41 https://repushko.com/all/srednenko-poc/ Sun, 26 Apr 2020 01:05:52 +0300 Антон Репушко https://repushko.com/all/srednenko-poc/ <h2>Мотивация</h2> <p>Я 3-4 года назад услышал про исследование <a href="proxy.php?url=https://strelka-kb.com/">КБ «Стрелка»</a>, в котором они скрапили фото из социальных сетей (Инстаграм и ВК) и рисовали хитмапы на картах по ним. Оказывается, это называется <a href="proxy.php?url=https://strelkamag.com/ru/article/est-takaya-professiya-cifrovoi-antropolog">цифровой антропологией</a>.</p> <p>Идея кейса, который вдохновил меня, в том, что такое исследование помогло в каком-то там городе РФ выбрать лучшую точку для открытия общественного пространства. Гипотеза такая: если люди где-то делают фото, значит уже проводят там время, а значит там и так всё хорошо с социальной жизнью. В итоге администрации посоветовали открыть новую точку интереса на противоположном конце города от существующей.</p> <p>Загорелся идеей сделать нечто похожее, но в сферу каких-то постоянных событий идея оставалась идеей без реализации.</p> <p>Закрывая гештальт (как Инстаграм своё API для доступа к гео-информации о фотографиях в 2016-ом) достиг успеха.</p> <h2>Реализация</h2> <p>Т. к. API Инстаграма оказалось закрытым, решил воспользоваться <a href="proxy.php?url=https://www.flickr.com/">Flickr’ом</a>.<br /> Суть идеи:</p> <ul> <li>берем 2019ый год,</li> <li>cкрапим фотографии с Flickr для конкретной локации (т.e. города),</li> <li>аккуратно накладываем на карту,</li> <li>видим места, где люди много фотографируют,</li> <li>делаем какие-то выводы.</li> </ul> <p><b>Например</b>: люди фотографируют -> там что-то интересное -> логично поселиться во время поездки.</p> <p><b>Другой например</b>: можно увидеть места, которые недостаточно освещены туристически (с точки зрения наличия фотографий) и можно выбрать наоборот район, где живут местные. На примере Берлина эта теория вроде как работает.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/berlin_flickr_project_2019.jpg" width="1280" height="684" alt="" /> <div class="e2-text-caption">Фотографии в Берлине за 2019ый год</div> </div> <p>Найденные подводные камни:</p> <ul> <li>API Flickr’a частично не завелось из python-обертки, которую я нашёл,</li> <li>фотографий не так много (250к за год), как в Инстаграме. С геопозицией — еще меньше. За 2019ый год только 44к для Берлина,</li> <li>на карте прямыми линиями из фотографий заметны фотопрогулки, когда один человек шел и фотографировал всё, что видел. Так получается много фотографий одного места, хотя это всего лишь от одного человека. В планах написать кастомную функцию хитмапа, которая бы давала больший вес участкам, где фотографии от разных людей. Так получится сильно честнее.</li> </ul> <h2>«Средненько»</h2> <p>В процессе возникла идея — сопоставить кучу фотографий одной достопримечательности для получения её «усреднённого» вида. Итог получился сильно лучше, чем я ожидал.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/ansgar-scheffold-cyUf9E_mhFc-unsplash.jpg" width="2560" height="1701" alt="" /> <div class="e2-text-caption">Оригинальные Бранденбургские ворота</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/average_brandenburg_gates.jpg" width="1280" height="774" alt="" /> <div class="e2-text-caption">Усреднённые 55 фотографий Бранденбургских ворот</div> </div> <p>Когда-то вероятно продолжу и сделаю для других городов.</p> У меня есть картина. Я вам ее покажу 40 https://repushko.com/all/u-menya-est-kartina/ Sun, 26 Apr 2020 00:40:03 +0300 Антон Репушко https://repushko.com/all/u-menya-est-kartina/ <p>«Яндекс» несколько месяцев назад организовал <a href="proxy.php?url=https://yandex.ru/lab/ganart" class="nu">«<u>Галерею нейросетевого искусства</u>»</a> и на старте раздавал картины. Успел взять «Нейроподъезд 21».</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/Neyropodezd-0021.png" width="1024" height="1024" alt="" /> <div class="e2-text-caption">Нейроподъезд 21</div> </div> Баркоды сериала «Tales from the Loop» 37 https://repushko.com/all/barkody-seriala-tales-from-the-loop/ Tue, 21 Apr 2020 15:24:26 +0300 Антон Репушко https://repushko.com/all/barkody-seriala-tales-from-the-loop/ <p>Сделал баркоды, как и с <a href="proxy.php?url=https://repushko.com/all/barkody-seriala-chernobyl/">сериалом «Чернобыль»</a>. Каждая полоса — средний цвет кадра в этот момент времени.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E1.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Loop»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E2.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Transpose»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E3.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Stasis»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E4.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Echo Sphere»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E5.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Control»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E6.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Parallel»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E7.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Enemies»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/S1E8.jpg" width="1700" height="400" alt="" /> <div class="e2-text-caption">«Home»</div> </div> Кадры из «Tales from the Loop». Часть 2 38 https://repushko.com/all/kadry-iz-tales-from-the-loop-chast-2/ Tue, 21 Apr 2020 01:14:14 +0300 Антон Репушко https://repushko.com/all/kadry-iz-tales-from-the-loop-chast-2/ <p>Уже писал про сериал и показывал <a href="proxy.php?url=https://repushko.com/all/tales-from-the-loop-part-1/">первую часть</a> красивых кадров. Теперь — вторая часть. А еще есть <a href="proxy.php?url=https://repushko.com/all/barkody-seriala-tales-from-the-loop/">баркоды</a>.</p> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/s5_1.jpg" width="2560" height="1440" alt="" /> <div class="e2-text-caption">«Control»</div> </div> <div class="e2-text-picture"> <img src="proxy.php?url=https://repushko.com/pictures/s6_2.jpg" width="2560" height="1440" alt="" /> <div class="e2-text-caption">«Parallel»</div> </div> <div class="e2-text-picture"> <div class="fotorama" data-width="2560" data-ratio="1.7777777777778"> <img src="proxy.php?url=https://repushko.com/pictures/s7_1.jpg" width="2560" height="1440" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/s7_2.jpg" width="2560" height="1440" alt="" /> </div> <div class="e2-text-caption">«Enemies»</div> </div> <div class="e2-text-picture"> <div class="fotorama" data-width="2560" data-ratio="1.7777777777778"> <img src="proxy.php?url=https://repushko.com/pictures/s8_1.jpg" width="2560" height="1440" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/s8_2.jpg" width="2560" height="1440" alt="" /> <img src="proxy.php?url=https://repushko.com/pictures/s8_3.jpg" width="2560" height="1440" alt="" /> </div> <div class="e2-text-caption">«Home»</div> </div>