DeepSchool
9.67K subscribers
74 photos
1 video
1 file
413 links
Это канал школы deepschool.ru. Здесь мы будем:
- напоминать вам теорию ML/DL в виде коротких постов,
- задавать вопросы с собеседований,
- рассказывать про полезные фреймворки
- и делиться советами, которые помогут вам в работе.

@deepschool_support
Download Telegram
Продолжаем ликбез по архитектурам

В прошлый раз мы рассказывали про VGG, теперь вспоминаем как зародилось семейство ResNet.

В отличии от VGG, ResNet не стыдно использовать в привычных CV задачах даже в 2022 году. Надо лишь знать как ее учить — об мы, кстати, рассказывали в серии предыдущих постов.

В новой же статье отдаем дань старичку и вспоминаем:
- изначальную идею,
- пользу ботлнек блоков
- и основной вклад identity веток в deep learning
19🔥5👍4🍌1
​​Вебинар по введению в разработку

Недавно мы анонсировали вебинар и попросили вас заполнить гугл-форму. Спасибо всем за ваши ответы! Благодаря им мы уже скорректировали план лекции и выбрали оптимальное время. Решили не тянуть с обещанием и провести вебинар уже в этот вторник 1 ноября в 18:00 Мск🔥

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

Чтобы зарегистрироваться, просто начните диалог с нашим ботом: @deepschool_webbot. До встречи на вебинаре!🚀
12🔥4🐳4👍1
DeepSchool
​​Вебинар по введению в разработку Недавно мы анонсировали вебинар и попросили вас заполнить гугл-форму. Спасибо всем за ваши ответы! Благодаря им мы уже скорректировали план лекции и выбрали оптимальное время. Решили не тянуть с обещанием и провести вебинар…
Провели наш первый вебинар! Спасибо всем кто заполнял формы, оставлял вопросы, участвовал в вебинаре и предлагал новые темы❤️

Получили несколько сообщений с просьбой повторить вебинар, поэтому хотим оценить количество желающих. Поставьте, пожалуйста, китенка в реакцию, если хотите повтор🐳 Наберем 30 китов — повторим!
🐳59
Однако, не ожидали, что за 30 минут наберем 30 китов😅
Повтору — быть!

Анонсируем дату позднее в этом канале
👍85🔥2
Виды сверток

Собрали в одну статью различные виды сверток!
Напомнили зачем существуют свертки 1х1, что такое Depthwise Separable Convolution, Spatialy Separable и другие. Не забыли и про нотку экзотики в виде Shuffled Grouped и Deformable.

Читайте статью, чтобы вспомнить какие бывают свертки и чем они отличаются: https://telegra.ph/Vidy-2D-svertok-11-03
🔥48👍5🤔1
Последний шанс записаться в осенний поток

Помимо постов в этом канале, наша команда также создает курс по Computer Vision для практиков. Этот курс — повышение квалификации для Junior специалистов и возможность закрыть дыры в знаниях для Middle инженеров компьютерного зрения.

На курсе Ракета в Computer Vision вы научитесь решать различные CV задачи, делать это в команде и проходить весь путь разработки полноценного сервиса: от сбора данных до автоматизации деплоя на сервер.

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

Старт ближайшего потока во вторник, 8 ноября. А следующего — в марте. Мы уже набрали полноценную группу, но осталось 4 места до лимита в 20 человек. Успейте записаться на консультацию, чтобы задать вопросы, познакомиться с одним из кураторов и принять решение об участии. Скажите на встрече, что вы наш подписчик, чтобы получить скидку :)
🔥11👍3
С началом нового потока курса пришлось отвлечься от написания статей в телеграм) Но теперь мы снова встали на рельсы и уже подготовили несколько интересных постов для вас! Начнем с одной довольно популярной задачки…
🔥8👍1
​​Задачка на подумать:

Пусть вам нужно дедуплицировать фотографии. Причем дедупликация должна быть умной. Если есть фотка и такая же фотка, но сдвинутая/повернутая/засвеченная, то нужно считать их дублями.

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

В итоге может получиться такой словарик (рис. 1):

{
'img1': {'img2', 'img10', 'img15'},
'img2': {'img1', 'img10', 'img15', 'img20'},
...
}

Где ключ - это картинка, а значение - это множество картинок, которые мы посчитали дублями по расстоянию между эмбеддингами.

В таком подходе возникнет следующая проблема: получившееся отношение дублируемости не транзитивно. Это значит, что по расстоянию между эмбеддингами может получиться что-то такое (рис. 2):

{
'img1': {'img2', 'img3'},
'img2': {'img1'},
'img3': {'img1'},
}

т.е. img2 и img3 дублируют img1, но не дублируют друг друга. Кажется, в такой ситуации мы хотим сказать, что все картинки (img1, img2, img3) являются дубликатами друг друга. Ситуацию, при которой из-за такого подхода мы начнем даже очень непохожие картинки называть дублями, мы не рассматриваем, она малореалистична.

Как этого достичь?

Ответ опубликуем завтра
🤔17👍4😁211🤯1
​​Решение

Первое решение, которое может прийти в голову: для каждой картинки в словаре пройдемся по ее дубликатам. И объединим множество дубликатов картинки с множествами дубликатов для каждого дубликата этой картинки. Но такое решение будет работать долго и неправильно. Долго потому что операция объединения множеств имеет линейную сложность, т.е. мы получим итоговую квадратичную сложность. А неправильно потому что может быть такая ситуация (рис. 1):

# input
{
'img2': {'img1'},
'img3': {'img1', 'img4'},
'img1': {'img2', 'img3'},

}

# output
{
'img2': {'img1', 'img3'},
'img3': {'img1', 'img4', 'img2'},
'img1': {'img2', 'img3', 'img4'},

}

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

Корректное и быстрое решение можно сделать при помощи структуры данных система непересекающихся множеств (Disjoint-set). Библиотечка для python. Но там буквально несколько строк, можно и самим написать.

В этой структуре данных все объекты хранятся в непересекающихся множествах.

У нее есть две операции:

- get(x) — возвращает некоторого представителя из множества, которому принадлежит объект x
- union(x, y) — объединяет два множества, в которых лежат объекты x и y

Разберем на примере. Пусть была такая система множеств:

{img1, img2, img3}, {img4, img5}, {img6, img7}

get(img1) вернет нам одно из значений из множества {img1, img2, img3}. Т.е. некоторого представителя этого множества
union(img2, img4) преобразует систему множеств к такому виду:

{img1, img2, img3, img4, img5}, {img6, img7}

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

Приспособить эту структуру данных под нашу задачу можно следующим образом (рис. 2).
Вот и все. В итоге у нас получится система множеств картинок-дубликатов, которую мы хотели получить изначально.
👍275🤔4🔥2
MobileNet v1-v3

Разобрали для вас сразу три статьи в одной! В ней мы рассказали про революционное семейство архитектур MobileNet и выписали все трюки, которые использовали авторы в каждой из версий архитектуры.

Как можно догадаться из названия, MobileNet — отличная архитектура для инференса на мобильных устройствах. Статьи о ней принесли в мир CV несколько ключевых идей по ускорению и облегчению сетей. Многие из этих идей используются до сих пор и наследуются в других работах (в той же EfficientNet). Поэтому очень сложно переоценить важность этих архитектур.

Очень рекомендуем к прочтению! Изложили все идеи простым языком и подчеркнули несколько интересных нюансов.

Например, вы знали, зачем в MobileNet v2 убрали нелинейность между некоторыми свертками? Или помните почему свертки 1х1 считаются быстрее других (даже с поправкой на кол-во параметров)? Если нет и хотите узнать или вспомнить, читайте нашу новую статью: https://telegra.ph/MobileNet-v1-v3-11-24 🔥
🔥478👍62❤‍🔥1
Вспоминаем статистику!

Начинаем серию постов про проверку статистических гипотез.

В новой статье рассказали о том, что такое статистические тесты и зачем они вообще нужны. Напомнили что значит «репрезентативная выборка», стат. критерий, стат. значимость, ошибки первого/второго рода и другое.
Читайте подробнее в статье: https://telegra.ph/Proverka-statisticheskih-gipotez-Vvedenie-12-05
🔥474🥰4👍3
Что такое attention?

Раньше CV инженерам можно было оправдаться, почему они не могут ответить на этот вопрос.
Но трансформеры все глубже проникают в компьютерное зрение и оправдания вроде “я же не нлп-шник!” уже точно не сработают :)

Чтобы напомнить вам какие бывают механизмы внимания в CV, мы готовим для вас отдельный материал. Но пока давайте вспомним/узнаем что же вообще такое attention!

Читайте нашу короткую, но очень полезную статью: https://telegra.ph/CHto-takoe-attention-12-09 — и больше не придется оправдываться)
🔥46👍14🥰4🤔42
Основные компоненты AWS

Давайте представим, что вам понадобилось обучиться на датасете размером в несколько ТБ. На вашей рабочей машинке всего RTX - 3070, а кластера у вас нет🙁 Или даже машинки нет.

Что делать? Надо переезжать в облако! Если вы планируете переезжать или просто хотите узнать как работают в облаке, то читайте нашу новую статью Основные компоненты AWS. В ней мы познакомим вас с основными терминами и дадим несколько советов.

https://telegra.ph/Osnovnye-komponenty-AWS-12-14
👍182❤‍🔥2
​​Прогресс развития механизма внимания в CV

Продолжаем про аттеншн в CV. Предыдущий пост.

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

Весь прогресс развития может быть грубо разделен на 4 периода:

1. Первый период начинается с архитектуры RAM. В ней авторы предложили комбинировать глубокие сети с механизмом внимания. Механизм внимания рекуррентно предсказывал “важные” участки изображений и обновлял веса сети с помощью обучения с подкреплением. Главной отличительной особенностью работ этого периода является то, что для реализации механизмов внимания всегда использовали RNN;

2. Второй период начался с архитектуры STN. В STN авторы использовали подсеть, которая предсказывает аффинные преобразования для локализации (за счет растяжения и обрезки) и трансформации (сдвиг, поворот) “важной” области изображения. Затем через сеть пропускается только преобразованная важная область входной картинки. Главной отличительной особенностью второго периода является то, что важные области входных данных предсказывались отдельной подсетью, которая училась вместе с классификатором.

3. Третий период начался с SENet, которая предложила поканальный вариант механизма внимания. В нем адаптивно (обучаемо) выделяются потенциально важные признаки. SE-блоки используются например в EffNet и MobileNet архитектурах.

4. Четвертый период начался с адаптации работы Attention is all you need к работе с изображениями, породив архитектуры под общим названием “visual transformers”.
👍24❤‍🔥5🤯31🔥1
​​Типы механизмов внимания

В целом механизмы внимания в компьютерном зрении можно разделить на следующие категории:

1. Поканальный механизм внимания (Channel attention - НА ЧТО обращать внимание);
2. Пространственный механизм внимания (Spatial attention - КУДА обращать внимание);
3. Временной (эволюционный) механизм внимания (Temporal Attention - КОГДА обращать внимание);
4. Блочный\веточный механизм внимания (Branch attention - ЧТО должно обратить внимание).

Также существуют архитектуры, которые являются представителями нескольких категорий механизмов внимания одновременно.
Рисунок 1 представляет диаграмму категоризации механизмов внимания в компьютерном зрении.

Формула 1 обобщает практически все существующие реализации механизмов внимания. Эту формулу стоит запомнить как для общего развития, так и для ответов на собеседованиях.

Формула 2 — известный вам из предыдущего поста self-attention .

Формула 3 — SE-блок.
👍20🤯7🔥42
Как ускорить разметку при помощи CVAT и Fiftyone

Задача: разметить тысячи изображений быстро и дешево, чтобы не тратить время на простые кейсы. Решение: предразметить картинки, выбросить мусор и размечать самые полезные. В идеале решить задачу без костылей, чтобы переиспользовать решение в будущих задачах.

В новой статье-туториале вы узнаете как с нуля поднять у себя сервис для разметки CVAT и познакомитесь с Fiftyone — сервисом, который ускорит работу с датасетом.

Рассказываем про сервисы на примере задачи детекции. Читайте подробнее в телеграфе: https://telegra.ph/Razmechaem-dannye-Bystro-nedorogo-12-27
🔥33👍322
Всем доброго новогоднего утра!⭐️

От всей команды DeepSchool желаем вам прекрасного года! Чтобы лоссы падали, метрики росли, но главное: чтобы вы получали от этого удовольствие💙

Спасибо, что читаете нас! Ценим ваше внимание и благодарим за ваши реакции) В следующем году будем еще больше радовать вас полезным контентом!
65🎉111
Channel Attention

Всех с первым рабочим днем!🧑‍🔬🧑‍🎨🧑‍💻

Решили не нагружать вас постами в праздники, чтобы не отвлекать от отдыха)
Начнем год с короткой статьи в телеграфе. Продолжаем про Attention в CV (прошлый пост из серии тут). Рассмотрим поканальный механизм внимания и в частности Squeeze-and-Excitation блок, который используется в семействах MobileNet и EffNet.

Переходите по ссылке, чтобы узнать подробнее: https://telegra.ph/Channel-Attention-12-28
🔥19👍71🤯1
Дешево считаем в облаке, если нет GPU

Когда у студентов нашего курса возникают проблемы с их машинами, мы выдаем кредиты на аренду GPU в сервисе vast.ai.

Чтобы было проще познакомиться с сервисом и настроить удаленную работу, мы написали туториал. В нем мы рассказали как выбрать машину, настроить удаленное подключение и работать в VSCode так, будто GPU стоит на вашем компьютере.

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

Читайте и сохраняйте на будущее: https://telegra.ph/Deshevo-schitaem-v-oblake-esli-net-GPU-vastai--VSCode-01-14 😉
🔥302👏21
​​Чем заменить CSV, если у вас очень много данных

Одна из основных проблем формата CSV — размер файлов. В нем мы храним данные в виде строк, соответственно, число 0.0123456789 будет занимать 12 байт. В то же время, это float число, которое должно занимать 4 байта. Мы видим разницу в 3 раза для каждого числа. А их могут быть миллионы! Более того, большой размер файла еще и замедляет скорость его считывания с диска.

Давайте представим: у нас есть датасет размерности (100000000,10) и мы хотим обучить нейросетку. Загрузить в оперативную память такой датасет не получится. Следовательно, нам нужно будет считывать куски с диска. Если в батч мы захотим положить элемент с индексом 1000, то в CSV нам придется пройти все предыдущие 1000 строк (если вы не гуру memory mapping’а). Это очень долго и неэффективно.

Одно из решений перечисленных проблем — хранение данных в формате Hdf (Hierarchical Data Format). В этом посте мы расскажем вам только о нем, а если тема интересна, можно еще погуглить parquet.

Данные в hdf5 хранятся в бинарном формате. Это значит, что 0.0123456789 будет занимать ровно 4 байта. В hdf5 для таблиц есть специальная сущность dataset. Данные в ней хранятся кусками — чанками. В то же время, индексы этих чанков хранятся в B - дереве. Таким образом, у нас получится очень быстро получить доступ к любому чанку. В нашем случае мы возьмем чанк размера (1,10) и сможем очень быстро читать строки.

Можем даже исхитриться и использовать чанк размера (k, 10) и в батч класть данные не по одному элементу, а по k. У нас не будет обычного уровня случайности. Но если k достаточно мало — этим можно пожертвовать в сторону скорости (особенно если bottlneck - чтение с диска)!

Пара интересных фичей hdf5:

1) Сжатие данных (на прикрепленной ниже картинке мы представили пример, во сколько раз может сжать hdf5).

2) Возможность хранения мета-информации. Например, в ней можно хранить описание данных.

3) Возможность хранения нескольких датасетов в одном файле. Например, можно train, test и val хранить в одном файле!

4) А главное, все это поддерживается в pandas! Важно не забыть pip install pytables. Ну а если у вас действительно большие данные, то лучше напрямую работать с h5py.

У читателей может возникнуть вопрос: почему бы не использовать sqlite? Там тоже самое B-дерево, также есть разные типы данных, но еще и доступ произвольный не к чанку, а к элементу… Главная причина — скорость. В большинстве случаев hdf5 просто быстрее. Подробнее можно почитать, например, в этом исследовании.
🔥33👍73🤔1
Self-attention в Computer Vision

Продолжаем серию постов про attention в CV. Ранее мы рассказывали про поканальный механизм внимания, теперь перейдем к пространственному (здесь мы писали про различные типы). В частности, проведем ликбез по Self-Attention, чтобы в следующей части уже перейти к ViT!🚀

Читайте нашу новую статью, чтобы лучше разобраться в attention в CV
🔥31👍54❤‍🔥1