TGINSIGHT CHAT
DeepSchool
@deep_school
ОбразованиеЭто канал школы deepschool.ru. Здесь мы будем: - напоминать вам теорию ML/DL в виде коротких постов, - задавать вопросы с собеседований, - рассказывать про полезные фреймворки - и делиться советами, которые помогут вам в работе. @deepschool_support
Последние посты
Стр. 43 из 45 · 530 постов
Опубликован 24 авг.
После запуска летнего потока курса немного выбились из колеи генерации постов) Возвращаемся в строй💪🏻 Прервем молчание ответом на популярный вопрос👇🏻
Опубликован 10 июл.
Синтетические данные и OCR Наверное вы слышали, что синтетика далеко не всегда хороший помощник. Но только не в задаче Optical Character Recognition (распознавание текста). Тут синтетика может сильно помочь. Кейс из жизни: можно безошибочно распознавать (strmatch) 83% полей на паспортах СНГ с помощью сети, обученной только на синтетике. В задаче OCR делайте этап предобучения на синтетике, а затем дообучайте на реальных данных. Результат вас обрадует 🙂 Напомним, как решают задачу распознавания текста (рис. 1) 0) на вход сети подают картинку со строкой или словом; 1) картинку делят по горизонтали на N частей; 2) классифицируют каждую часть, включая класс «пустота»; 3) результаты классификации схлопывают и получают предсказанный текст. Как заполучить синтетику Для генерации выборки нам надо научиться создавать картинки с текстом. В этом нам поможет библиотека PIL. С помощью PIL.ImageFont можно загрузить нужный шрифт и нанести текст поверх любого изображения (рис. 2). Но для лучшего результата надо постараться максимально приблизить домен сгенерированных данных к реальному. Несколько лайфхаков, которые помогут это сделать: 1️⃣ Накладывайте текст на реальный фон. Например, разметьте прямоугольники с фоном на боевых картинках в сервисе для разметки (CVAT/LabelStudio/LabelBox/etc). А затем вырежьте прямоугольники с фоном по разметке и используйте как подложку для текста. (рис. 3) Заметим, что на этапе предобучения на синтетике совершенно не обязательно генерировать осмысленные слова. Здесь мы просто учим сеть отличать одни символы от других. 2️⃣ Сгенерируйте цветной прямоугольник (заливку), а с помощью PIL.ImafeFont «маску» с текстом, по которой будете переводить символы с цветного прямоугольника на ваш фон. Регулируя интенсивность «маски», вы сможете наносить полупрозрачный текст. А деформируя маску с помощью аугментаций, можно получить интересные преобразования. Например, комбинируя cutout и блюр, можно получить эффект потертого текста (рис. 4). 3️⃣ Наносите не весь текст целиком, а каждый символ по-отдельности. Варьируйте расстояние между символами, угол поворота, размер, смещение вдоль вертикали — это поможет получить более робастную модель. 4️⃣ Даже если у вас много настоящих картинок, может все равно встречаться сильный дисбаланс в символах. Например, твердый знак «Ъ» может встречаться очень редко, из-за чего сеть будет часто его путать с мягким «Ь». В таком случае докиньте в train синтетику слов с твердым знаком. Это поможет нивелировать дисбаланс, и сетка начнет лучше отличать «Ъ» от «Ь»👍🏻 5️⃣ Можно пойти еще дальше и генерировать кропы при помощи GAN. Например, обучить CycleGAN транслировать картинки между синтетическим доменом и реальным. А затем для синтеза кропов оставить только генератор “синтетика → реальные” (рис. 5).
Опубликован 7 июл.
Приходите к нам учиться!🤗 12 июля, во вторник, стартует летний поток нашего курса “Ракета в Computer Vision”. На нем вы научитесь решать полный стек задач в CV при поддержке опытных инженеров. Полную программу вы найдете на сайте курса, но если коротко то вы научитесь: - обучать сети под разные задачи, логируя и версионируя эксперименты; - облегчать сети, ускорять их обучение и инференс; - собирать дешевые и чистые данные на Толоке; - разрабатывать сервисы; - настраивать CI и автоматизировать деплой своих приложений; - мониторить сервисы; - и другое 🙂 Все вебинары проходят в zoom, поэтому вы всегда сможете задать вопрос по ходу лекции или задержаться в кулуарах со спикером. Почти все наши студенты — практики с разным бэкграундом и разным уровнем. А это значит, что вы сможете перенять опыт не только от кураторов курса, но и от коллег-студентов во время групповых заданий. Курс длится 12 недель. Вас ждет 16 вебинаров, 2 семинара, 4 домашних задания с code-review на каждый merge request и приятная атмосфера 🙂 Оставляйте заявку на сайте, чтобы познакомиться с одним из кураторов лично и задать все ваши вопросы! До встречи🚀
Опубликован 6 июл.
💡Решение задачки Но к сожалению, такой трюк одно лечит, а другое калечит. Ловите хорошую обзорную статью, где про это есть подробнее🙂
Опубликован 6 июл.
Предыдущим постом навеяно Задачка по математике на GAN'ы (много букаф иностранных и символов, поэтому картинкой)
Опубликован 5 июл.
Самый главный совет: Приложите иконку Гудфеллоу к вашему трейнлупу. Без этого точно не заведется 😉
Опубликован 5 июл.
Как приручить GAN. Советы от Димы, куратора курсаРакета в CV GAN'ы всё ещё доминируют в генеративных задачах, потому что ближайший конкурент в лице диффузионных моделей пока слишком медленный и на прод его не потащишь. Кто такой GAN: • Есть моделька генератор. Она берёт на вход некоторый вектор x. В векторе x может быть что угодно: случайный вектор, осмысленный эмбеддинг, картинка. А выплёвывает генератор на выходе некоторый вектор y. Обычно y — картинка, но может быть и каким-нибудь вектором. • Есть моделька дискриминатор. Дискриминатор учится на классификацию и отделяет изображения из реального домена от изображений из генератора. GAN по пунктикам (рис) 1. Генератор генерирует картинку; 2. Полученная картинка идёт в дискриминатор. Считается classification-loss 3. Генератор делает градиентный шаг так, чтобы обмануть дискриминатор. (сдвинуть предсказание дискриминатора в сторону ошибки); 4. Через дискриминатор прогоняется реальная картинка. Считается classification-loss; 5. Дискриминатор делает градиентный шаг, чтобы минимизировать сумму наших classification-loss. Так дискриминатор учится различать реальные и синтетические изображения; 6. Повторять пока не сойдётся. Проблемки Из-за этой жесткой конкурентной борьбы генератора и дискриминатор, GAN'ы очень тяжко сходятся. Чтобы ганы чаще добирались до прода, вот пачка советов. Советики • У меня на практике лучший лосс для GAN'ов это Least Square Gan (LSGAN). Мы просто берём логиты с дискриминатора (до сигмоиды) и тянем их по MSE к 1. Да, делаем классификацию через регрессию, и ганы от этого только лучше учатся. Сверху можно добавить ещё и Relativistic GAN; • Дискриминатор может выдавать не одно число, а например сетку 7x7 как в PatchGAN. Благодаря этому выдается скор реалистичности не для всей картинки, а для регионов. Этот трюк почти всегда улучшает сходимость и качество сети. Можно взять гига-чада от мира дискриминаторов - UnetGAN, который выдаёт скор для каждого пикселя (в топовом RealESRGAN например так). Но там начинаются проблемы со стабильностью. Поэтому уважаемые ресёрчеры учили всё это с moving average 0.999 на веса модели; • Стартовать с какого-нибудь простого претрейна лучше, чем учить GAN с нуля. Можно сначала предобучить генератор с L1-лоссом и получить мыльный результат, а затем дотюнивать вместе с дискриминатором. • Вспомогательные лоссы вообще всегда помогают не разбежаться сетке. Только скор реалистичности далеко не всегда приведёт вас куда надо. Для картинок попробуйте использовать ContentLoss и L1 лосс в добавок. Это будет держать ваш GAN в рамках дозволенного; • Не пытайтесь подбирать число шагов для генератора и дискриминатора. Сильно крутить learning rate, как правило, тоже бесполезно. Можно подобрать порядок, но не упарываться в десятых знаках после запятой. Все пытались и я пытался (ганы прунил, а оно потом не дотюнивалось), и вы будете пытаться. В обучении GANов ваш бро это ADAM, он сам со всем разберётся (почти); • Батчнормы чаще всего зло, генерит артефакты; • Прочитайте StyleGAN и StyleGANv2 там очень много трюков, их часто можно утянуть и к себе в пайплайн.
Опубликован 1 июл.
Опубликован 1 июл.
Ответ на вопрос💼 Один из вариантов, который может прийти в голову: если на картинке (на пачке картинок) разметка не поменялась относительно предсказания сети — баним человека. Вариант даже рабочий, но не до конца🙂. Пусть вы отгрузили на крауд сто фотографий и на всех них ваша сеть была ну просто восхитительна. Люди честно за ней не исправляли, потому что зачем. Мы забанили кучу хороших людей. Плохо. Так как поймать обманщика? Приманим его! (honeypot) Пусть мы хотим доразметить 100 картинок. Подмешаем к ним десять картинок, в которых специально сделаем разметку корявенькой (рис. 4). Если человек привык ничего не поправлять за сетью, то он обязательно попадется в нашу ловушку. Таких людей будем банить и ничего не будем им платить. Ханипоты — это простой, мощный и почти бесплатный (а при проверке согласованности трёх разметчиков нам нужно заплатить трём разметчикам!) инструмент отлова недобросовестных исполнителей. Уйдем от сетапа с предразметкой. Тогда можно ловить обманщиков на картинки, которые у нас хорошо размечены. Кто часто сильно мажет мимо эталона — бан. За такими ханипотами нужно ухаживать. Если на каком-то ханипоте часто ошибаются — проверь, всё ли с ним хорошо. Мы могли накосячить и сделать плохую приманку. Либо мы могли изменить правила разметки, а приманку не поправили и она протухла.
Опубликован 1 июл.
Опубликован 1 июл.
Рубрика «Вопрос не с собеседования, но на подумать»🤔 В обучении сеток часто работает правило Парето. На небольшом наборе данных сеть уже показывает результаты, которые сильно лучше рандома. Но чтобы пробить целевые метрики, мы должны добывать новую разметку снова и снова. Для ускорения процесса разметки часто делают следующий трюк: текущей версией нейросети предсказывают новую пачку картинок, которую нужно разметить. Тогда при разметке нужно будет только поправлять за сеткой (рис. 1). Это сильно быстрее и дешевле. Для разметки часто используют краудсорсинг-сервисы. В них большое количество людей за небольшое количество денег размечают ваши данные 🙂 В этих сервисах попадаются нечестные люди. От них вы получите мусор, а не разметку. Один из методов отлова таких обманщиков и отбора качественной разметки - проверка согласованности (рис. 2). Мы показываем одну и ту же картинку нескольким людям. Если разметка от кого-то из них явный выброс, мы ее не принимаем. Если от человека много таких выбросов, мы его баним. Рассмотрим сетап с предразметкой. У разметчиков появляется отличная схема: можно вообще ничего не поправлять за нейросетью (рис. 3). Почти на всех картинках они будут отвечать правильно и при этом их ответы будут согласоваться. Для них это бесплатные (наши!) деньги. Но нас это "почти" не устраивает, мы воюем за каждый процент качества! Какой механизм отсева обманщиков вы бы предложили? Кто хорошо знаком с крауд-сервисами — не подсказывайте 😉
Опубликован 29 июн.