Получи случайную криптовалюту за регистрацию!

DeepSchool

Логотип телеграм канала @deep_school — DeepSchool D
Логотип телеграм канала @deep_school — DeepSchool
Адрес канала: @deep_school
Категории: Технологии
Язык: Русский
Количество подписчиков: 5.13K
Описание канала:

Это канал школы deepschool.ru. Здесь мы будем:
- напоминать вам теорию ML/DL в виде коротких постов,
- задавать вопросы с собеседований,
- рассказывать про полезные фреймворки
- и делиться советами, которые помогут вам в работе.
Админ: @TimurFatykhov

Рейтинги и Отзывы

4.33

3 отзыва

Оценить канал deep_school и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

2

4 звезд

0

3 звезд

1

2 звезд

0

1 звезд

0


Последние сообщения

2022-08-28 13:05:00 ​​Training Tricks

И последняя часть советов из статьи Bag Of Tricks

1. Label Smoothing.
В классическом Cross Entropy Loss оптимальным значением логита (то что до софтмакса) будет inf, что приводит к очень сильному разрыву для top1 логита, что может легко привести к оверфиту. Авторы предлагают использовать label smoothing. Проще говоря, вместо того чтобы тянуть верный лейбл к 1, мы будем тянуть его к 0.9 (оставшийся ε = 0.1 скор равномерно распределим по остальным К классам) (рис. 3)
В результате на валидации наш gap (расстояние между top1 и top2) будет сконцентрирован вокруг теоретического оптимума (рис. 4) и будет значительно меньше случаев с overconfidence. При ε = 0.1 и К = 1000, этот теоретичиский оптимум будет равен 9.1, который считается по формуле на рис. 5.

2. Knowledge Distillation.
Выучим предварительно большую сеть которая будет выдавать крутые метрики, а потом используем её в качестве сети учителя при обучении нашей сетки поменьше. В процессе обучения “ученика” будем также тянуть его выходы к выходам учителя, передавая таким образом Dark Knoweledge — скрытые распределения в датасете, которые выучила большая сетка.
Итоговая функция потерь будет выглядеть вот так (рис. 6). Параметр T — параметр температуры, который позволяет сгладить распределения ученика и учителя при дистилляции. Такой трюк помогает ученику больше внимания обращать на top2 и top3 классы и лучше обучаться на dark knoweledge.

3. Mixup Training.
Интересная ауга, которая предлагает вам линейно сблендить два изображения и учиться на этом новом изображении (рис. 7). Усредняем 2 картинки и усредняем их GT лейблы. Накидывает практически 1 процент на imagenet, крутота.

Результаты экспериментов указаны на рис. 8
428 views10:05
Открыть/Комментировать
2022-08-27 16:05:00 ​​Model Tweaks

За основу авторы взяли “самую популярную реализацию ResNet-50” (рис. 2, слева). И ссылаются на две статьи, в которых были внесены правки в эту архитектуру. Первую правку они обозначили как ResNet-B, вторую ResNet-C. И, вдохновившись этими идеями, протестировали еще одно изменение прямо в своей статье, обозначив новую архитектуру как ResNet-D (рис. 2).

ResNet-B — Передвинем stride=2 из первой свёртки блока во вторую, потому что из-за этого stride мы отбрасываем 3/4 входящей информации. Помним, что ядро шагает и по вертикали, и по горизонтали. И если мы применяем ядро 1х1, шагая через пиксель, то для фичи со spatial size 4х4 свернем лишь 4 пикселя.

ResNet-C — Заменяем первую свёртку 7х7, на 3 свёртки 3х3, у первой будет stride=2. Это будет только чуть-чуть дороже, зато неплохо добавит к точности и мощности сети.

ResNet-D — на скипах из-за свёртки 1х1 опять теряется 3/4 информации, уберём из свёртки stride=2 и перед ней добавим average pool (практическим путем выявили, что это докидывает).
530 views13:05
Открыть/Комментировать
2022-08-27 13:06:10 ​​Train Strategy

1. Линейный скейлинг learning rate.
Эмпирически заметили, что с ростом batchsize модель начинает сходиться медленнее. Если мы просто увеличим batchsize, то за тоже количество эпох модель сойдётся хуже. Что в целом логично, при увеличении batchsize уменьшается итоговое число шагов, при этом математическое ожидание стохастического градиента (т.е. оценка градиента для модели на каком-то батче) не изменится, уменьшится лишь дисперсия. Для решения этой проблемы просто увеличивают градиент во столько раз, во сколько изменили размер батча. Например, авторы предлагают брать такую формулу 0.1 * (batchsize / 256), считаем что для batchsize 256 оптимальный lr будет 0.1. Похожий трюк следует применять и при обучении на нескольких GPU: используете 8 GPU — увеличивайте lr в 8 раз (ведь батч стал больше в 8 раз).

2. Learning rate warmup.
В начале обучения сеть ещё очень далека от финального решения и слишком большой lr может привести к нестабильности. Авторы предлагают в начале обучения стартовать с нулевого lr и постепенно линейно от батча к батчу увеличивать lr на протяжении, например, 5 эпох. То есть на 5-ой эпохе уже будет ваш выбранный lr. Для оптимизатора Adam это особенно важно. Он капризный в начале обучения, потому что статистики ещё не стабилизовались. А трансформеры вообще отказываются сходиться без warmup.

3. Инициализировать гамму батчнорма нулём.
Блок Resnet можно представить как x + block(x). И после каждого слоя свёртки у нас идёт слой батчнорма. Если в конце каждого block мы будем инициализировать обучаемый параметр gamma нулём (который скейлит распределение после нормализации), то каждый блок в ResNet будет просто возвращать свой вход. Таким образом, в начале обучения сеть будет вести себя так, будто у неё намного меньше параметров. А это благоприятно влияет на сходимость во время первых эпох.

4. Не использовать регуляризацию для баесов.
Использование регуляризации позволяет бороться с оверфитом, но регуляризация нужна только для весов. Для баесов, обучаемых beta и gamma в батчнорме регуляризации не нужны и ухудшают метрики.

5. Обучение сети во float16.
Современные GPU намного шустрее во float16. Например, Tesla V100 в fp32 выдаёт 14 TFLOPS, а в fp16 больше 100 TFLOPS. Главное помнить, что fp16 сильно экономит на битах в экспоненте, что сильно влияет на ошибку вблизи нуля. Предлагается хранить и применять обновления к весам во float32, а делать forward pass и считать градиенты во float16. Также советуют скелить лосс, чтобы не так страдать от проблем рядом с нулём. В pytorch есть отличный гайд для этого. А ещё придумали bfloat16, у которого экономят на битах не в экспоненте, а в мантисе — там нужно значительно меньше упражнений, но не все GPU поддерживают данный формат.

6. Cosine Learning Rate Decay.
Вместо того чтобы ступеньками уменьшать LR в процессе обучения, или экспоненциально вниз, авторы предлагают использовать Cosine Annealing.

Результаты экспериментов указаны на рис. 1
531 views10:06
Открыть/Комментировать
2022-08-27 13:05:08 ​​Разбираем статью Bag of Tricks for Image Classification with Convolutional Neural Network

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

Классный способ набираться подобных трюков и знаний — это читать обзорные статьи, где за вас уже проверили и актуализировали много подходов. Bag Of Tricks — как раз одна из таких работ. Несмотря на то что в названии статьи указано “Image Classification” и авторы изначально экспериментировали с ResNet-50, перечисленные трюки помогают также в других задачах и с другими архитектурами. В конце статьи авторы также указали результаты успешных экспериментов на задачах детекции и сегментации (рис. 0).

Основная идея всей работы — авторы собрали в большую пачку кучу триков\твиков\уловок которые накопились в комьюнити, проверили их эффективность и подняли точность резнета на ImageNet с 75% до 79%.

Последуем примеру авторов и разобьем советы на 3 части:
- Train Stratedy
- Model Tweaks
- Training Tricks

Сегодня опубликуем первые две, а завтра третью, чтобы не высыпать слишком много букав за один раз)
И так, погнали
570 views10:05
Открыть/Комментировать
2022-08-27 13:05:00 По количеству китов поняли, что тема интересна, поэтому не будем откладывать до будних дней! Спасибо всем за ваши реакции! Ниже более подробный разбор статьи, как и обещали
544 views10:05
Открыть/Комментировать
2022-08-24 18:12:00 ​​Красивая картинка как Bag Of Tricks доминирует другие архитектуры в своё время.

Кстати, если хотите пост с более подробным разбором трюков из статьи Bag Of Tricks, нажмите китенка в реакции Если соберем 17 китят, подготовим отдельный пост
724 views15:12
Открыть/Комментировать
2022-08-24 18:10:00 ​​​​Какую архитектуру взять в качестве бейзлайна и что докинуть в свою?

Вдохновимся статьёй из OpenAI и посмотрим какую сетку они используют в качестве feature extractor для картиночек. А там ResNet из статьи Bag Of Tricks и какой-то antialiased rect-2 blur pooling. Кто такие и почему?

ResNet Bag Of Tricks это такая сборная статья в которой проверили и попробовали кучу всяких советов\триков\твиков\мудростей накопившихся для свёрточных сетей и соединили всё в одну модель ResNet-D (рис. 1). Статья выступает в роли такого бывалого коллеги сеньёра, который накидывает вам “А вот ты у батчнормов, которые в конце блока, гамму в ноль поставь, тогда у тебя сетка круто по началу сходится начнёт”. В ней подробно описано как учить, что менять в +- современном мире (конечно у нас уже трансформеры, потом собрали ConvNeXt, но Bag Of Tricks всё ещё актуален). Удобно это тем что можно кусочками к себе в пайплайн тянуть всякие улучшения, и не пересобирать всё своё решение.

Антиалиасинг в нейронных сетях. Сетки которые мы используем не инварианты к сдвигу. Вот так вот, придумали свёртки с учётом, что они инвариантны к сдвигу, а сети у нас совсем не инварианты. Всё из-за коварного пулинга, который как и при обычном сжатии картинок даёт эффект алиасинга. Нам бы очень хотелось сгладить этот эффект, особенно это хочется сделать после того как мы посмотрим на графики зависимости score от сдвига (рис. 2). Решается это проблема обычным размытием перед пулингом.

Основное в ResNet Bag Of Tricks.

• Как скейлить learning rate, какой взять scheduler, кто такой warmup, какой батч сайз взять и прочие training strategy.
• Польза обучения в FP16 на современных видеокартах.
• Что поменять в дефолтной архитектуре ResNet чтобы стало лучше, на что заменить первые свёртки, как поменять Residual Block.
• Какие ауги зашли на ImageNet и у вас наверное сработают.

Это не статья откровение, возможно многое вы уже слышали или даже использовали, но когда всё в одном месте с красивыми табличками и подробно описано, то жить сразу как-то приятнее.

Основное в Making Convolutional Networks Shift-Invariant Again.

Всё что нужно сделать, это из официального репозитория достать реализацию BlurPool и по гайду вставить в свою сеть (рис. 3). В репозитории есть функции, которые это делают за вас, но надёжней просто в своём коде поменять, чтобы вы наверняка знали что у вас поменялось. А самое классное в том что сеть не надо учить заново, она не сильно изменится и можно со спокойной душой дотюнивать со своего претрейна.

#советы #nn #training
736 views15:10
Открыть/Комментировать
2022-08-24 18:09:31 После запуска летнего потока курса немного выбились из колеи генерации постов)
Возвращаемся в строй
Прервем молчание ответом на популярный вопрос
697 viewsedited  15:09
Открыть/Комментировать
2022-07-10 15:02:02 ​​Синтетические данные и OCR

Наверное вы слышали, что синтетика далеко не всегда хороший помощник. Но только не в задаче Optical Character Recognition (распознавание текста). Тут синтетика может сильно помочь.
Кейс из жизни: можно безошибочно распознавать (strmatch) 83% полей на паспортах СНГ с помощью сети, обученной только на синтетике.
В задаче OCR делайте этап предобучения на синтетике, а затем дообучайте на реальных данных. Результат вас обрадует

Напомним, как решают задачу распознавания текста (рис. 1)

0) на вход сети подают картинку со строкой или словом;
1) картинку делят по горизонтали на N частей;
2) классифицируют каждую часть, включая класс «пустота»;
3) результаты классификации схлопывают и получают предсказанный текст.

Как заполучить синтетику

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

Несколько лайфхаков, которые помогут это сделать:

  Накладывайте текст на реальный фон. Например, разметьте прямоугольники с фоном на боевых картинках в сервисе для разметки (CVAT/LabelStudio/LabelBox/etc). А затем вырежьте прямоугольники с фоном по разметке и используйте как подложку для текста. (рис. 3) Заметим, что на этапе предобучения на синтетике совершенно не обязательно генерировать осмысленные слова. Здесь мы просто учим сеть отличать одни символы от других.

Сгенерируйте цветной прямоугольник (заливку), а с помощью PIL.ImafeFont «маску» с текстом, по которой будете переводить символы с цветного прямоугольника на ваш фон. Регулируя интенсивность «маски», вы сможете наносить полупрозрачный текст. А деформируя маску с помощью аугментаций, можно получить интересные преобразования. Например, комбинируя cutout и блюр, можно получить эффект потертого текста (рис. 4).

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

Даже если у вас много настоящих картинок, может все равно встречаться сильный дисбаланс в символах. Например, твердый знак «Ъ» может встречаться очень редко, из-за чего сеть будет часто его путать с мягким «Ь». В таком случае докиньте в train синтетику слов с твердым знаком. Это поможет нивелировать дисбаланс, и сетка начнет лучше отличать «Ъ» от «Ь»

 Можно пойти еще дальше и генерировать кропы при помощи GAN. Например, обучить CycleGAN транслировать картинки между синтетическим доменом и реальным. А затем для синтеза кропов оставить только генератор “синтетика → реальные” (рис. 5).
1.4K views12:02
Открыть/Комментировать
2022-07-07 20:23:40 Приходите к нам учиться!

12 июля, во вторник, стартует летний поток нашего курса “Ракета в Computer Vision”. На нем вы научитесь решать полный стек задач в CV при поддержке опытных инженеров.

Полную программу вы найдете на сайте курса, но если коротко то вы научитесь:
- обучать сети под разные задачи, логируя и версионируя эксперименты;
- облегчать сети, ускорять их обучение и инференс;
- собирать дешевые и чистые данные на Толоке;
- разрабатывать сервисы;
- настраивать CI и автоматизировать деплой своих приложений;
- мониторить сервисы;
- и другое

Все вебинары проходят в zoom, поэтому вы всегда сможете задать вопрос по ходу лекции или задержаться в кулуарах со спикером. Почти все наши студенты — практики с разным бэкграундом и разным уровнем. А это значит, что вы сможете перенять опыт не только от кураторов курса, но и от коллег-студентов во время групповых заданий.

Курс длится 12 недель. Вас ждет 16 вебинаров, 2 семинара, 4 домашних задания с code-review на каждый merge request и приятная атмосфера

Оставляйте заявку на сайте, чтобы познакомиться с одним из кураторов лично и задать все ваши вопросы! До встречи
554 views17:23
Открыть/Комментировать