-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ultra Mega Network #93
Comments
Как должен выглядеть идельный Building блок для сети?
Авторы утверждают, что градиенты все равно быстро гаснут и resnet это ансамбль большого числа не очень глубоких сеток. картинка из apendix показывает, что градиенты тухнут через ~5 блоков
upd. кажется, что на самом деле Basic Block / Bottleneck with ratio 1 должны работать лучше чем дефолтный Bottleneck в ResNet и единственная причина, по которой тот плохо обучается - 512 каналов на выходе. upd. в силу особенностей современных видеокарт, conv3x3 дают бОльшую computational density и поэтому считаются с такой же скоростью, при бОльшем количестве параметров, рассуждения о том, как это связано с DRAM есть в статье про HardNet upd. В оригинальной статье про ResNeXt авторы тупо зафиксировали количество групп на свертку. но кажется, что гораздо важнее фиксировать количество каналов на группу. Статья про RegNet показывает, что 16 chs / group - нормально рабоает. это еще пересекается с результатми в Group Norm, где у них тоже лучше всего работало 16 chs / group. Не обязательно использовать одинаковые блоки по всей сетке. в TResNet используют BasicBlock в первых двух стадиях и Bottleneck Block в последующих Статья про Regnet даёт следующие инсайды про блоки:
3.1 какой attention ставить? в SE плохо то, что есть dimnesionality reduction. можно вместо этого использовать 1) Efficient Channel Attention. или 2) SE без reduction 3) или SE но с grouped свертками. нужно посмотреть, не будет ли это медленне чем без reduction. upd. 12.01.21 - SE-Var3 даёт неприятно много параметров, но при этом работает не лучше чем SE, что странно, потому что у авторов работы про ECA оно было заметно лучше (см. exp107-111 ниже). но работает быстрее SE еще в послднее время наткнулся на несколько интересных статей про attention: 1.. Spatial and Channel ‘Squeeze & Excitation’ (scSE) - предлгают делать SE + conv1x1 для локального attention и потом конкатить результаты. главный минус - на выходе количество каналов увеличивается в 2 раза и это не удобно. 2.. Attentional Feature Fusion - предлагают то же что выше, но берут сумму global & local attention и только потом считают sigmoid. выглядит лучше чем статья выше и легче втыкать. Называют блок MS-CAM. 3.. Enhanced Visual Attention-Guided Deep Neural Networks for Image Classification - тут есть классная идея - использовать последний канал как spatial attention, что выглядит логичным. можно попробовать совместить это с SE для глобального контекста
Вопросы к статье:
Нужно сравнить дефолтный и stride 2 in conv 1, может быть оно будет работать лучше (?)
upd. 2.09.20 Обсуждение блоков с Владом предлагается блок 3x3 -> 1x1 -> 3x3 -> 1x1, где у 3x3 grouped, а 1x1 перемешивают. или можно поменять порядок 3x3 и 1x1. важно что 1x1 после каждой grouped свертки, чтобы перемешивать. Knowledge Distillation and other distillations. CONTRASTIVE REPRESENTATION DISTILLATION (CRD) MEAL V2: Boosting Vanilla ResNet-50 - получают впечатляющие цифры, но по сути делают мало. Ключевая идея - ванильный KD через KL лосс между моделью и средним между предсказаниями учителей + зачем то навешивают лосс дискриминатора, чтобы отличать выход сетки от выхода учителя. говорят что с помощью этого регуляризируют, но хз. У них стоит wd=0 и мало аугментаций, возможно будет работать и без дискриминатора. Еще из важного - они начинают учить сетку не с нуля, а берут уже претренированную сетку (с acc 79% потому что её timm так хорошо обучил). а до этого люди обычно с нуля пытались учиться. так что вклад статьи еще сомнительнее становится Bootstrap Your Own Latent A New Approach to Self-Supervised Learning Авторы берут две аугментированные картинки, пропускают через модель и EMA модель, минимизируют cosine distance между двумя полученными представлениями. Звучит просто (и похоже на то, что предалагал я), но есть пара нюансов, они предсказывают сначала representation -> projection -> prediction, они так называют тот факт, что у них MLP в голове сетки. 2048 (после AvgPool) -> 4096 -> 256 (забавно что даже при размере final layer в 4 раза меньшем чем количество классов, сетка всё равно прекрасно учится их линейно разделять). Supervised Contrastive Learning - до этого люди пытались предобучать модели для image classification с помощью contrasive loss, оно работало, но была одна проблема - contrastive loss не в курсе про классы и может расстаскивать картинки из одного класса далеко друг от друга. идея - давайте поверх 2048-d вектора перед logits навесим две головы. на одной будем считать старый добрый softmax, а на другой - contarasitve. вся суть сразу становится понятна, если посмотреть на картинки в статье. с одной стороны нам теперь нужны лейблы для всех картинок, но с другой contrasitve как будто помогает лучше подтягивать распределения для softmax (хз что написал, сам не понимаю). Самое главное - отлично бустит качество supervised классификации, выглядит как plug in play. Для R50 77% -> 78.8% кмк не плохо. upd. 29.10.20 почему-то совсем забыл про эту статью, ведь идея реально крутая, надо подумать как с MoCo объединить грубо говоря хочется чтобы сумма InfoNCE для всех positive anchors была максимальной, говорят что их лосс 1) обобщается на любое количество positive 2) улучшается с увеличением количества negative 3) при нормализации на сферу неявно происходит hard negative mining Momentum Contrast for Unsupervised Visual Representation Learning aka MoCo вариант 1) end-to-end т.е. ключи получаются из той же модели что выдаёт Q, но как показали многие предущие статьи - размер батча для майнинга хороших HardNegative примеров очень важен. (не понимаю тогда почему они говорят вообще про какую-то Q, когда можно с тем же успехом пихать рандомные батчи? upd. ответ такой: можно пихать рандомные батчи, но для них снова нужно считать представление, а для истории они у нас доступны бесплатно. вариант 2) memory bank - хранить уже посчитанную историю для прошлых батчей, используя её как негативные примеры. как-то работает, но не очень хорошо по той причине, что предсталвения были посчитаны на других весах, которые отличаются от текущих (так говорят авторы, но возможно дело еще в том, что такие представления не стабильные и это гораздо сильнее портит обучение, пришел к таким выводам потому, что memory банк работает сильно хуже даже на очень маленьких батчах, когда ошибка в разнице предсказаний еще точно не накопилась). по сравнению с BS=16к - всего 16 шагов, ema decay стоит ~0.999, т.е. MoCo делает предсказания сильно стабильнее. судя по тому, что даже с маленким размером memory MoCo работает сильно лучше этого варианта, основное улучшение статьи именно в стабильном представлении через EMA важно! в коде они еще дополнительно нормализуют выходы обоих энкодеров, это логично с точки зрения contrastive learning (хочется чтобы точки были на сфере), но они не пишут об этом в статье Improved Baselines with Momentum Contrastive Learning aka MoCo v2 Meta Pseudo Labels А давайте просто будем использовать Meta Pseudo Labels, т.е. будет еще одна маленькая сетка, которая будет процессить таргеты и выдавать что-то такое, оптимизация по чему будет улучшать лосс на валидации. тут важно заметить, что ученик никоим образом не видит валидационных примером, мы лишь хитро подстраиваем трейн лосс. Есть пара имплементационных деталей, без которых не работает - нужно учить Учителя не только на выходах студента, но и на GT валид. лоссе, чтобы S & T не смогли деградировать вместе. T это 5й слойный MLP c hidden=512 в целом очень крутая идея. единственное у них представления посчитаны заранее с помощью какой-то большой сетки. если бы можно было всё делать онлайн..., наверно это можно сделать через EMA вот так: модель выдает предсказания для аугментированных картинок. EMA на читых картинках -> pseudo labels, потом уже эти labels пропускаем через 5L MLP и вот это MLP уже учим. звучит логично, но к сожалению это всё может легко задеградировать( Knowledge Distillation Meets Self-Supervision Финальный лосс student состоит из 4х (!) частей Отмечу, что авторы где-то используют нормализацию, где-то не используют и везде используют температуру. Сравнивают качество разных self-supervised задач типо jigsaw и rotation, показывают что contrasitve работает лучше всего. Сравнивают много других KD методов, показывают что CRD работает лучше всех (после их метода конечно же). Пытаются учиться только с помощью лосса 4, но у них плохо работает. имхо дело в использовании KLD, если бы они как-то умнее считали contrastive между T и S, оно бы лучше работало (у MoCo и BYOL же работает). В целом хорошая статья, но работает имхо вопреки, а не благодаря. вместо того чтобы определять знание через contrastive matrix и потом пытаться его передать через KLD, лучше сразу как-то представления матчить, имхо. |
Еще одно место для краткого содержания статейХочется улучшить лосс для классификации, привнеся идеи из metric learning, чтобы the maximal intra-class distance is smaller than the minimal inter-class distance under a certain metric Статьи важно читать в хронологическом порядке, чтобы понимать как менялись подходы SphereFace: Deep Hypersphere Embedding for Face Recognition (apr 2017 v1, jan 2018 v2) авторы предлагают A(ngular)-Softmax, приходя к нему через 2 шага. сначала нормировать веса последнего Linear слоя, убрать из него bias. тогда decision boundary будет зависеть только от угла между фичами и центрами классов, называют это modified softmax. но такой лосс не уменьшает intra-class angle, т.е не стягивает точки внутри класса друг к другу. чтобы этого добиться, предлагают ввести параметр m, геометрический смысл которого такой: если раньше для правильной классификации было достаточно чтобы O_1 < O_2, то теперь требуем чтобы O_1 * m < O_2, (где О_1 и О_2 это углы между объектом и центрами двух классов), т.е. требуем чтобы расстояние до центра соседнего класса было в m раз больше чем до центра своего. на практике авторы используют m=4. см. картинку вдохновившись статьей решил нарисовать фичи для 3х случайных классов обученной на Imagenet сетки (после PCA) и тут правда хорошо видно angular structure! картинка почти такая же как у авторов выше, чудеса минусы подхода: CosFace: Large Margin Cosine Loss for Deep Face Recognition (jan 2018 v1, apr 2018 v2) Дальше авторы объясняют почему важно дополнительно нормировать фичи (A-Softmax нормирует только веса). Если изначально cos(θ1) ~ cos(θ2), то один из способ уменьшить лосс - уменьшая норму фичей, что вредит оптимизации т.к. оптимизирует не то, что нам хочется. НО ! авторы предлагают нормировать не на единичную сферу, а на сферу радиусом s. чем больше s тем меньше лосс и тем "больше пространства" для фичей, что упрощает оптимизацию. s и m зависят друг от друга ArcFace: Additive Angular Margin Loss for Deep Face Recognition (jan 2018 v1, feb 2019 v3) upd. 28.12.20 A Performance Evaluation of Loss Functions for Deep Face Recognition AMC-Loss: Angular Margin Contrastive Loss for Improved Explainability in Image Classification Dyn-arcFace: Dynamic Additive Angular Margin Loss for Deep Face Recognition (нет статьи, только выступление на ICCV 2019) ArcFace хорош, но у него нет штрафа за intra-class distance, т.е. он начинает сжимать классы только если поставить достаточно большое значение margin. Идея - использовать адаптивный margin, который будет зависеть от расстояния до ближайшего центра класса, чем больше расстояние, тем больше margin, чтобы intra-class не расползались слишком сильно. Центры класов очен дешево получаются из матрицы весов последнего (нормализованного) слоя.
Мои мысли: AdaCos: Adaptively Scaling Cosine Logits for Effectively Learning Deep Face Representations На что влияет m: на минимальный угол, после которого лосс начинает падать. если поставить m очень большим, то даже при маленьком угле вероятность будет близка к 0, это не то чего хочется. во всех предыдущих статьях Если внимательно посмотреть на картинку снизу, видно что s влияет на ширину кривой, а m только сдвигает её. авторы предлагают убрать m вообще и сфокусироваться на автоподборе хорошей s. Дальше следует немного матана и доказательств, вывод которых - для хорошего подбора и оценки S нужно знать сумму остаточных членов в знаменателе softmax (т.е. всех тех что не в числителе). оценка C -1 может быть не очень точной, поэтому авторы предлагают считать running average напрямую из данных. и так же считать running average средних углов между фичами и центрами классов. называют такой адаптивый вариант Dynamic AdaCos (см. картинку ниже). Видно что в течении обучения, S уменьшается, адаптивно усложняя задачу для сетки. Кмк чисто win, нет гиперпараметров да еще и адаптивно всё подстраиваем. Кода понятное дело нет :( A Discriminative Feature Learning Approach for Deep Face Recognition (aka Center Loss) (2016) A Comprehensive Study on Center Loss for Deep Face Recognition (2017) Мои мысли: у себя в экспериментах я использовал eucl вместо MSE, возможно оно работает хуже потому что стягивает близкие точки так же сильно как дальние, а хочется стягивать дальние сильнее. Идея Center Loss легко обобщается на angular координаты. LinCos-Softmax: Learning Angle-Discriminative Face Representations With Linearity-Enhanced Cosine Logits поэтому авторы предлагают Linear-Cosine Logit, т.е. аппроксимацию arccos через первые члены ряда Тейлора. ограничивают приближение K=2 или 4 членами, лучшие результаты при K=2. если совсем коротко - пихают в степень экспоненты cos θ + ( cos θ ) ^ 3 / 6. Говорят что s нужно выбирать автоматичеки так, чтобы макс. значение было 0.999, но при этом s должно еще зависеть от значения функции в экспоненте в нуле. т.е. если для Cosine logit оптимум это X, то для Linear-Cosine (K=2) оптимум это X * (6 / 7). Конкретно эта идея полностью из adacos, разве что отсейлили на значение в нуле. Очень много качественных экспериментов, везде их Lin-Cos лучше чем только Linear или только Cosine logits. Причём Linear почти всегда хуже всех, что кмк очень странно. есть вот такой график рапределения средних углов, видно что Linear гораздо лучше сжимает классы, не понятно почему при этом метрики получаются хуже Потом еще добавляют margin (angular margin как в cos face). говорят что тут сложновато автоматически выбрать значение s и это они оставляют следующим поколениям, а сами ставят его == 20. добавление margin очень сильно докидывает. (если тут вспомнить Loss Function Search for Face Recognition, то авторы выбрали самый лучший margin с точки зрения cosine лосса, но с точки зрения их лосса, он всё равно получается не оптимальным, потому что формулы изменятся и степень модулирования будет зависит от cos. В целом мой вывод такой - статья хорошая, но не понятно что именно им докидывает по сравнению с cosine logit, если это не такое сильное затухание стягивающей силы, то может нужно явно center лосс докинуть? TO READ: Sub-center ArcFace: Boosting Face Recognition by Large-scale Noisy Web Faces Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere (очень свежая, nov 2020) Мне сейчас (10.11.20) не понятно, так ли тогда нужен этот дополнительный член в лоссе? может Angular Margin Arc Softmax будет работать и так? и если мы всё таки добавлять margin то, как выбирать его значение? 11.11.20 пришла мысль 19.11.20 судя по их экспериментам AM-Softmax (который CosFace == cos (θ) - m) работает лучше чем ArcFace. помню кто-то мне тоже говорил что у него AM-Softmax работал лучше чем ArcFace идеи выше можно завалидировать с помощью вот такого эксперимента: 05.04.21 Softmax Dissection: Towards Understanding Intra- and Inter-classObjective for Embedding Learning там они делают вывод, что главная проблема обычно Softmax что он слишком рано перестаёт оптимизировать intra-class distance, это видно из figure 2 (a). допустим у нас фиксированные log M (сумма всех экспонент кроме theta_true) и s, тогда исходя из формы лосса, видно, что сетка будет хорошо оптимизировать intra-class только до тех пор, пока он меньше d = log M / s, а после этой границы будет уже очень слабо его подтягивать дальше. тут важно, что этот порог d идёт на значения логитов. теперь есть три варианта.
пока писал пункт выше, понял что ответ на вопрос что будет работать лучше 2) или 3) зависит от взаимного расположения медиан косинуса и косинуса от медианного угла, тут надо еще думать, может быть авторы AdaCos случайно отгадали и их вариант будет лучше upd. чёт я дурак, это одна и та же величина. а раз так, то нет смысла считать медиану углов, когда проще посчитать медиану косинусов после того как мы определились с желаемым d, можно теперь его зафиксировтаь, и переписать формулу выше в форме: s = log M / d с помощью которой авторы AdaCos и предлагают выбирать оптимальный s. прикольно что они пришли к такой формуле из совершенно других соображений, но они совпали. |
Большое сравнение моделей по скорости от AlexeyAB: AlexeyAB/darknet#4406 мое сравнение моделей (чистый торч + amp)ResNet50 25.56M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
26.87+-0.05 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 600.43Mb. 2382.00 imgs/sec
TResNet50 31.39M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
28.05+-0.22 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 466.06Mb. 2281.99 imgs/sec
DarkNet53 timm 41.61M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
28.69+-0.13 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 1103.11Mb. 2230.61 imgs/sec
CSPDarkNet53 timm 27.64M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
30.38+-0.17 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 1698.13Mb. 2106.39 imgs/sec
CSPResNet50 timm 21.62M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
21.79+-0.07 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 1119.60Mb. 2936.60 imgs/sec
CSPResNet50d timm 21.64M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
22.93+-0.01 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 1202.36Mb. 2791.09 imgs/sec
CSPResNeXt50 timm 20.57M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
34.59+-0.04 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 1428.08Mb. 1850.07 imgs/sec
Simp_R34 16.79M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
14.99+-0.06 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 462.44Mb. 4269.24 imgs/sec
Simp_preR34 16.79M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
15.04+-0.00 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 527.80Mb. 4256.30 imgs/sec
Simp_preR34 s2d 16.79M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
15.58+-0.01 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 604.79Mb. 4108.97 imgs/sec То же самое, но для обучения:Initialized models
R50 25.56M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
28.08+-0.03 msecs Forward. 112.35+-1.66 msecs Backward. Max memory: 3092.56Mb. 455.74 imgs/sec
TR50 31.39M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
28.75+-0.12 msecs Forward. 107.93+-1.24 msecs Backward. Max memory: 2731.11Mb. 468.25 imgs/sec
D53 timm 41.61M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
31.87+-0.03 msecs Forward. 115.14+-3.23 msecs Backward. Max memory: 3925.59Mb. 435.36 imgs/sec
CSPD53 timm 27.64M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
34.75+-0.06 msecs Forward. 125.67+-3.52 msecs Backward. Max memory: 5101.53Mb. 398.96 imgs/sec
CSPR50 timm 21.62M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
23.16+-0.02 msecs Forward. 100.21+-0.65 msecs Backward. Max memory: 3921.26Mb. 518.80 imgs/sec
CSPR50d timm 21.64M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
25.15+-0.02 msecs Forward. 106.86+-1.56 msecs Backward. Max memory: 4284.92Mb. 484.81 imgs/sec
CSPX50 timm 20.57M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
36.16+-0.02 msecs Forward. 143.51+-0.95 msecs Backward. Max memory: 5060.10Mb. 356.21 imgs/sec выбор между ResNet family и DarkNet исключительно религиозный. Обе одинаковые по скорости, хотя D53 слегка жирнее. CSP вариант уменьшает количество параметров, но остаётся таким же по скорости. Наверно из блоков нужно остановиться на ResNet потому что:
upd. 02.09.2020 Simple DarkSimp_R34 s2d 16.79M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
15.13+-0.22 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 591.02Mb. 4229.20 imgs/sec
CSP simpl R34 0.75 no 1st csp no x2 12.45M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
13.44+-0.01 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 640.27Mb. 4761.06 imgs/sec
Simp Dark 24.21M params ( conv3x3 --> conv3x3 вместо conv1x1 --> conv3x3 --> conv1x1 в simp R34)
Mean of 5 runs 10 iters each BS=64, SZ=224:
16.34+-0.02 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 733.61Mb. 3917.36 imgs/sec
CSP Simp Dark 0.75 no 1st csp no x2 17.11M params
Mean of 5 runs 10 iters each BS=64, SZ=224:
14.16+-0.01 msecs Forward. 0.00+-0.00 msecs Backward. Max memory: 799.88Mb. 4520.10 imgs/sec upd. 02.09.2020 вечером буду хранить тут новые эксперименты, потому что первое сообщение уже слишком раздулось. кажется, понял почему некоторые сетки плохо работают на imagenet, но хорошо работают в других задачах - дело в количестве классов и количестве фильтров. у того же resnet34 (и darknet53) в конце 512 фильтров, а у resnet50 - 2048. возможно именно поэтому качество второго лучше. эту гипотезу легко проверить уменьшив количество классов в imagenet например до 100. Spoiler TemplateTo be added exp20 baseline resnet 50 + 100 classesEpoch 85/90. training: 5006it [29:38, 2.81it/s, Acc@1=82.220, Acc@5=94.301, Loss=1.6351]
Epoch 85/90. validating: 201it [00:37, 5.40it/s, Acc@1=78.780, Acc@5=93.850, Loss=1.7575]
[09-02 16:59:12] - Train loss: 1.6351 | Acc@1: 82.2197 | Acc@5: 94.3014
[09-02 16:59:12] - Val loss: 1.7575 | Acc@1: 78.7800 | Acc@5: 93.8500
[09-02 16:59:12] - Epoch 85: best loss improved from 1.7623 to 1.7575
[09-02 16:59:12] - Epoch 86 | lr 2.52e-03
Epoch 86/90. training: 5006it [29:30, 2.83it/s, Acc@1=82.519, Acc@5=94.386, Loss=1.6259]
Epoch 86/90. validating: 201it [00:38, 5.17it/s, Acc@1=78.898, Acc@5=93.918, Loss=1.7551]
[09-02 17:29:21] - Train loss: 1.6259 | Acc@1: 82.5188 | Acc@5: 94.3857
[09-02 17:29:21] - Val loss: 1.7551 | Acc@1: 78.8980 | Acc@5: 93.9180
[09-02 17:29:21] - Epoch 86: best loss improved from 1.7575 to 1.7551
[09-02 17:29:21] - Epoch 87 | lr 1.65e-03
Epoch 87/90. training: 5006it [29:30, 2.83it/s, Acc@1=82.791, Acc@5=94.489, Loss=1.6173]
Epoch 87/90. validating: 201it [00:37, 5.39it/s, Acc@1=78.952, Acc@5=93.892, Loss=1.7530]
[09-02 17:59:29] - Train loss: 1.6173 | Acc@1: 82.7910 | Acc@5: 94.4892
[09-02 17:59:29] - Val loss: 1.7530 | Acc@1: 78.9520 | Acc@5: 93.8920
[09-02 17:59:29] - Epoch 87: best loss improved from 1.7551 to 1.7530
[09-02 17:59:29] - Epoch 88 | lr 9.68e-04
Epoch 88/90. training: 5006it [29:28, 2.83it/s, Acc@1=83.003, Acc@5=94.589, Loss=1.6103]
Epoch 88/90. validating: 201it [00:37, 5.39it/s, Acc@1=78.918, Acc@5=93.926, Loss=1.7508]
[09-02 18:29:35] - Train loss: 1.6103 | Acc@1: 83.0032 | Acc@5: 94.5894
[09-02 18:29:35] - Val loss: 1.7508 | Acc@1: 78.9180 | Acc@5: 93.9260
[09-02 18:29:35] - Epoch 88: best loss improved from 1.7530 to 1.7508
[09-02 18:29:35] - Epoch 89 | lr 4.64e-04
Epoch 89/90. training: 5006it [29:28, 2.83it/s, Acc@1=83.063, Acc@5=94.566, Loss=1.6088]
Epoch 89/90. validating: 201it [00:38, 5.17it/s, Acc@1=79.054, Acc@5=93.984, Loss=1.7498]
[09-02 18:59:42] - Train loss: 1.6088 | Acc@1: 83.0626 | Acc@5: 94.5657
[09-02 18:59:42] - Val loss: 1.7498 | Acc@1: 79.0540 | Acc@5: 93.9840
[09-02 18:59:42] - Epoch 89: best loss improved from 1.7508 to 1.7498
[09-02 18:59:43] - Epoch 90 | lr 1.43e-04
Epoch 90/90. training: 5006it [29:30, 2.83it/s, Acc@1=83.218, Acc@5=94.653, Loss=1.6043]
Epoch 90/90. validating: 201it [00:39, 5.03it/s, Acc@1=78.942, Acc@5=93.990, Loss=1.7503]
[09-02 19:29:53] - Train loss: 1.6043 | Acc@1: 83.2180 | Acc@5: 94.6528
[09-02 19:29:53] - Val loss: 1.7503 | Acc@1: 78.9420 | Acc@5: 93.9900
[09-02 19:29:53] - Acc@1 78.942 Acc@5 93.990
[09-02 19:29:53] - Total time: 45h 25.7m exp21 baseline resnet34 + 100 classesEpoch 85/90. training: 5006it [19:37, 4.25it/s, Acc@1=76.951, Acc@5=91.974, Loss=1.8107]
Epoch 85/90. validating: 201it [00:27, 7.20it/s, Acc@1=75.984, Acc@5=92.594, Loss=1.8415]
[09-02 02:32:20] - Train loss: 1.8107 | Acc@1: 76.9514 | Acc@5: 91.9744
[09-02 02:32:20] - Val loss: 1.8415 | Acc@1: 75.9840 | Acc@5: 92.5940
[09-02 02:32:20] - Epoch 85: best loss improved from 1.8471 to 1.8415
[09-02 02:32:21] - Epoch 86 | lr 2.52e-03
Epoch 86/90. training: 5006it [19:37, 4.25it/s, Acc@1=77.215, Acc@5=92.042, Loss=1.8027]
Epoch 86/90. validating: 201it [00:28, 7.18it/s, Acc@1=76.202, Acc@5=92.700, Loss=1.8361]
[09-02 02:52:26] - Train loss: 1.8027 | Acc@1: 77.2149 | Acc@5: 92.0416
[09-02 02:52:26] - Val loss: 1.8361 | Acc@1: 76.2020 | Acc@5: 92.7000
[09-02 02:52:26] - Epoch 86: best loss improved from 1.8415 to 1.8361
[09-02 02:52:27] - Epoch 87 | lr 1.65e-03
Epoch 87/90. training: 5006it [19:37, 4.25it/s, Acc@1=77.453, Acc@5=92.139, Loss=1.7955]
Epoch 87/90. validating: 201it [00:27, 7.19it/s, Acc@1=76.216, Acc@5=92.706, Loss=1.8342]
[09-02 03:12:32] - Train loss: 1.7955 | Acc@1: 77.4529 | Acc@5: 92.1394
[09-02 03:12:32] - Val loss: 1.8342 | Acc@1: 76.2160 | Acc@5: 92.7060
[09-02 03:12:32] - Epoch 87: best loss improved from 1.8361 to 1.8342
[09-02 03:12:32] - Epoch 88 | lr 9.68e-04
Epoch 88/90. training: 5006it [19:37, 4.25it/s, Acc@1=77.629, Acc@5=92.260, Loss=1.7883]
Epoch 88/90. validating: 201it [00:27, 7.19it/s, Acc@1=76.326, Acc@5=92.714, Loss=1.8317]
[09-02 03:32:38] - Train loss: 1.7883 | Acc@1: 77.6289 | Acc@5: 92.2602
[09-02 03:32:38] - Val loss: 1.8317 | Acc@1: 76.3260 | Acc@5: 92.7140
[09-02 03:32:38] - Epoch 88: best loss improved from 1.8342 to 1.8317
[09-02 03:32:38] - Epoch 89 | lr 4.64e-04
Epoch 89/90. training: 5006it [19:37, 4.25it/s, Acc@1=77.692, Acc@5=92.267, Loss=1.7866]
Epoch 89/90. validating: 201it [00:27, 7.19it/s, Acc@1=76.302, Acc@5=92.736, Loss=1.8303]
[09-02 03:52:43] - Train loss: 1.7866 | Acc@1: 77.6921 | Acc@5: 92.2670
[09-02 03:52:43] - Val loss: 1.8303 | Acc@1: 76.3020 | Acc@5: 92.7360
[09-02 03:52:43] - Epoch 89: best loss improved from 1.8317 to 1.8303
[09-02 03:52:44] - Epoch 90 | lr 1.43e-04
Epoch 90/90. training: 5006it [19:38, 4.25it/s, Acc@1=77.861, Acc@5=92.318, Loss=1.7820]
Epoch 90/90. validating: 201it [00:28, 7.18it/s, Acc@1=76.308, Acc@5=92.702, Loss=1.8309]
[09-02 04:12:50] - Train loss: 1.7820 | Acc@1: 77.8614 | Acc@5: 92.3179
[09-02 04:12:50] - Val loss: 1.8309 | Acc@1: 76.3080 | Acc@5: 92.7020
[09-02 04:12:50] - Acc@1 76.308 Acc@5 92.702
[09-02 04:12:50] - Total time: 30h 9.7m exp22 R34-50 s2d 100 clsname : exp22.simpl_R34_noact_s2d
arch : simpl_resnet34
model_params:
stem_type: s2d
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
classes_divisor: 10 # train on 100 classes instead
Epoch 85/90. training: 2504it [10:55, 3.82it/s, Acc@1=77.444, Acc@5=92.422, Loss=1.8102]
Epoch 85/90. validating: 101it [00:20, 5.03it/s, Acc@1=83.800, Acc@5=96.176, Loss=1.5679]
[09-01 11:38:30] - Train loss: 1.8087 | Acc@1: 77.4890 | Acc@5: 92.4373
[09-01 11:38:30] - Val loss: 1.8116 | Acc@1: 77.2820 | Acc@5: 93.1820
[09-01 11:38:30] - Epoch 85: best loss improved from 1.8117 to 1.8116
[09-01 11:38:30] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [10:53, 3.83it/s, Acc@1=77.734, Acc@5=92.568, Loss=1.8007]
Epoch 86/90. validating: 101it [00:18, 5.33it/s, Acc@1=70.712, Acc@5=90.208, Loss=2.0550]
[09-01 11:49:43] - Train loss: 1.8019 | Acc@1: 77.7018 | Acc@5: 92.5508
[09-01 11:49:43] - Val loss: 1.8115 | Acc@1: 77.2600 | Acc@5: 93.2220
[09-01 11:49:43] - Epoch 86: best loss improved from 1.8116 to 1.8115
[09-01 11:49:43] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [10:51, 3.84it/s, Acc@1=77.685, Acc@5=92.508, Loss=1.8014]
Epoch 87/90. validating: 101it [00:19, 5.26it/s, Acc@1=83.856, Acc@5=96.260, Loss=1.5672]
[09-01 12:00:54] - Train loss: 1.8008 | Acc@1: 77.6993 | Acc@5: 92.5281
[09-01 12:00:54] - Val loss: 1.8109 | Acc@1: 77.2560 | Acc@5: 93.2140
[09-01 12:00:54] - Epoch 87: best loss improved from 1.8115 to 1.8109
[09-01 12:00:54] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [10:50, 3.85it/s, Acc@1=77.809, Acc@5=92.580, Loss=1.7971]
Epoch 88/90. validating: 101it [00:19, 5.23it/s, Acc@1=70.720, Acc@5=90.228, Loss=2.0542]
[09-01 12:12:04] - Train loss: 1.7977 | Acc@1: 77.7817 | Acc@5: 92.5610
[09-01 12:12:04] - Val loss: 1.8107 | Acc@1: 77.3320 | Acc@5: 93.2520
[09-01 12:12:04] - Epoch 88: best loss improved from 1.8109 to 1.8107
[09-01 12:12:04] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:56, 3.81it/s, Acc@1=77.936, Acc@5=92.606, Loss=1.7941]
Epoch 89/90. validating: 101it [00:19, 5.21it/s, Acc@1=83.888, Acc@5=96.256, Loss=1.5667]
[09-01 12:23:20] - Train loss: 1.7934 | Acc@1: 77.9517 | Acc@5: 92.6183
[09-01 12:23:20] - Val loss: 1.8106 | Acc@1: 77.2940 | Acc@5: 93.2340
[09-01 12:23:20] - Epoch 89: best loss improved from 1.8107 to 1.8106
[09-01 12:23:20] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:01, 3.78it/s, Acc@1=77.924, Acc@5=92.670, Loss=1.7922]
Epoch 90/90. validating: 101it [00:19, 5.17it/s, Acc@1=70.700, Acc@5=90.192, Loss=2.0543]
[09-01 12:34:42] - Train loss: 1.7924 | Acc@1: 77.9595 | Acc@5: 92.6587
[09-01 12:34:42] - Val loss: 1.8105 | Acc@1: 77.2980 | Acc@5: 93.2300
[09-01 12:34:42] - Epoch 90: best loss improved from 1.8106 to 1.8105
[09-01 12:34:43] - Acc@1 77.298 Acc@5 93.230
[09-01 12:34:43] - Total time: 17h 7.1m exp23 R34-50 100 cls no expandname : exp23.simpl_R34_noact_s2d
arch : simpl_resnet34
model_params:
stem_type: s2d
expand_before_head: False
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
classes_divisor: 10 # train on 100 classes instead
Epoch 85/90. training: 2504it [10:55, 3.82it/s, Acc@1=75.469, Acc@5=91.296, Loss=1.8869]
Epoch 85/90. validating: 101it [00:18, 5.32it/s, Acc@1=83.300, Acc@5=96.152, Loss=1.6025]
[09-01 11:40:44] - Train loss: 1.8859 | Acc@1: 75.4886 | Acc@5: 91.3083
[09-01 11:40:44] - Val loss: 1.8602 | Acc@1: 76.5600 | Acc@5: 92.7700
[09-01 11:40:44] - Epoch 85: best loss improved from 1.8602 to 1.8602
[09-01 11:40:44] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [10:53, 3.83it/s, Acc@1=75.762, Acc@5=91.441, Loss=1.8778]
Epoch 86/90. validating: 101it [00:19, 5.15it/s, Acc@1=69.840, Acc@5=89.416, Loss=2.1157]
[09-01 11:51:58] - Train loss: 1.8786 | Acc@1: 75.7311 | Acc@5: 91.4369
[09-01 11:51:58] - Val loss: 1.8589 | Acc@1: 76.5920 | Acc@5: 92.7960
[09-01 11:51:58] - Epoch 86: best loss improved from 1.8602 to 1.8589
[09-01 11:51:58] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [10:50, 3.85it/s, Acc@1=75.697, Acc@5=91.462, Loss=1.8776]
Epoch 87/90. validating: 101it [00:19, 5.26it/s, Acc@1=83.312, Acc@5=96.208, Loss=1.6019]
[09-01 12:03:08] - Train loss: 1.8769 | Acc@1: 75.7480 | Acc@5: 91.4411
[09-01 12:03:08] - Val loss: 1.8582 | Acc@1: 76.5760 | Acc@5: 92.8340
[09-01 12:03:08] - Epoch 87: best loss improved from 1.8589 to 1.8582
[09-01 12:03:08] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [10:54, 3.83it/s, Acc@1=75.868, Acc@5=91.493, Loss=1.8737]
Epoch 88/90. validating: 101it [00:18, 5.34it/s, Acc@1=69.880, Acc@5=89.480, Loss=2.1146]
[09-01 12:14:22] - Train loss: 1.8743 | Acc@1: 75.8526 | Acc@5: 91.4700
[09-01 12:14:22] - Val loss: 1.8582 | Acc@1: 76.6180 | Acc@5: 92.8460
[09-01 12:14:22] - Epoch 88: best loss improved from 1.8582 to 1.8582
[09-01 12:14:22] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:56, 3.81it/s, Acc@1=75.967, Acc@5=91.574, Loss=1.8694]
Epoch 89/90. validating: 101it [00:19, 5.23it/s, Acc@1=83.352, Acc@5=96.196, Loss=1.6013]
[09-01 12:25:38] - Train loss: 1.8691 | Acc@1: 75.9689 | Acc@5: 91.5816
[09-01 12:25:38] - Val loss: 1.8580 | Acc@1: 76.5840 | Acc@5: 92.8160
[09-01 12:25:38] - Epoch 89: best loss improved from 1.8582 to 1.8580
[09-01 12:25:38] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:05, 3.76it/s, Acc@1=75.987, Acc@5=91.548, Loss=1.8684]
Epoch 90/90. validating: 101it [00:18, 5.60it/s, Acc@1=69.792, Acc@5=89.424, Loss=2.1146]
[09-01 12:37:02] - Train loss: 1.8684 | Acc@1: 75.9944 | Acc@5: 91.5674
[09-01 12:37:02] - Val loss: 1.8579 | Acc@1: 76.5400 | Acc@5: 92.8040
[09-01 12:37:02] - Epoch 90: best loss improved from 1.8580 to 1.8579
[09-01 12:37:03] - Acc@1 76.540 Acc@5 92.804
[09-01 12:37:03] - Total time: 17h 5.8m exp24 mobilenet v3 headarch : simpl_resnet34
model_params:
stem_type: s2d
mobilenetv3_head: true
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
classes_divisor: 10 # train on 100 classes instead
Epoch 85/90. training: 2504it [11:17, 3.70it/s, Acc@1=78.951, Acc@5=93.068, Loss=1.7612]
Epoch 85/90. validating: 101it [00:18, 5.42it/s, Acc@1=83.968, Acc@5=96.440, Loss=1.5676]
[09-02 22:56:35] - Train loss: 1.7595 | Acc@1: 79.0180 | Acc@5: 93.0884
[09-02 22:56:35] - Val loss: 1.8104 | Acc@1: 77.6460 | Acc@5: 93.3020
[09-02 22:56:35] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [11:15, 3.71it/s, Acc@1=79.243, Acc@5=93.187, Loss=1.7525]
Epoch 86/90. validating: 101it [00:18, 5.40it/s, Acc@1=71.228, Acc@5=90.200, Loss=2.0537]
[09-02 23:08:09] - Train loss: 1.7533 | Acc@1: 79.2131 | Acc@5: 93.1889
[09-02 23:08:09] - Val loss: 1.8102 | Acc@1: 77.5600 | Acc@5: 93.3320
[09-02 23:08:09] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [11:12, 3.72it/s, Acc@1=79.220, Acc@5=93.205, Loss=1.7516]
Epoch 87/90. validating: 101it [00:18, 5.36it/s, Acc@1=84.056, Acc@5=96.452, Loss=1.5657]
[09-02 23:19:40] - Train loss: 1.7512 | Acc@1: 79.2523 | Acc@5: 93.2087
[09-02 23:19:40] - Val loss: 1.8099 | Acc@1: 77.6620 | Acc@5: 93.3220
[09-02 23:19:40] - Epoch 87: best loss improved from 1.8102 to 1.8099
[09-02 23:19:41] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [11:11, 3.73it/s, Acc@1=79.369, Acc@5=93.217, Loss=1.7488]
Epoch 88/90. validating: 101it [00:18, 5.47it/s, Acc@1=71.236, Acc@5=90.276, Loss=2.0535]
[09-02 23:31:12] - Train loss: 1.7494 | Acc@1: 79.3187 | Acc@5: 93.1925
[09-02 23:31:12] - Val loss: 1.8095 | Acc@1: 77.6400 | Acc@5: 93.3720
[09-02 23:31:12] - Epoch 88: best loss improved from 1.8099 to 1.8095
[09-02 23:31:12] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [11:13, 3.72it/s, Acc@1=79.483, Acc@5=93.272, Loss=1.7448]
Epoch 89/90. validating: 101it [00:19, 5.25it/s, Acc@1=84.032, Acc@5=96.444, Loss=1.5654]
[09-02 23:42:45] - Train loss: 1.7446 | Acc@1: 79.4811 | Acc@5: 93.2802
[09-02 23:42:45] - Val loss: 1.8093 | Acc@1: 77.6280 | Acc@5: 93.3720
[09-02 23:42:45] - Epoch 89: best loss improved from 1.8095 to 1.8093
[09-02 23:42:45] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:13, 3.72it/s, Acc@1=79.506, Acc@5=93.320, Loss=1.7430]
Epoch 90/90. validating: 101it [00:18, 5.44it/s, Acc@1=71.200, Acc@5=90.316, Loss=2.0531]
[09-02 23:54:18] - Train loss: 1.7434 | Acc@1: 79.5026 | Acc@5: 93.3095
[09-02 23:54:18] - Val loss: 1.8093 | Acc@1: 77.6260 | Acc@5: 93.3860
[09-02 23:54:18] - Acc@1 77.626 Acc@5 93.386
[09-02 23:54:18] - Total time: 17h 14.5m exp25 Darknet likename : exp25.simpl_Dark
arch : simpl_dark
model_params:
stem_type: s2d
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
classes_divisor: 10 # train on 100 classes instead
Epoch 85/90. training: 2504it [10:20, 4.04it/s, Acc@1=77.023, Acc@5=92.200, Loss=1.8317]
Epoch 85/90. validating: 101it [00:18, 5.56it/s, Acc@1=82.512, Acc@5=96.024, Loss=1.6131]
[09-03 02:30:32] - Train loss: 1.8307 | Acc@1: 77.0134 | Acc@5: 92.2222
[09-03 02:30:32] - Val loss: 1.8653 | Acc@1: 75.9040 | Acc@5: 92.5900
[09-03 02:30:32] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [10:12, 4.09it/s, Acc@1=77.273, Acc@5=92.382, Loss=1.8223]
Epoch 86/90. validating: 101it [00:17, 5.86it/s, Acc@1=69.300, Acc@5=89.140, Loss=2.1171]
[09-03 02:41:02] - Train loss: 1.8227 | Acc@1: 77.2480 | Acc@5: 92.3784
[09-03 02:41:02] - Val loss: 1.8651 | Acc@1: 75.8720 | Acc@5: 92.6000
[09-03 02:41:02] - Epoch 86: best loss improved from 1.8652 to 1.8651
[09-03 02:41:02] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [10:10, 4.10it/s, Acc@1=77.282, Acc@5=92.357, Loss=1.8218]
Epoch 87/90. validating: 101it [00:17, 5.73it/s, Acc@1=82.424, Acc@5=96.092, Loss=1.6126]
[09-03 02:51:30] - Train loss: 1.8210 | Acc@1: 77.3160 | Acc@5: 92.3726
[09-03 02:51:30] - Val loss: 1.8651 | Acc@1: 75.8280 | Acc@5: 92.6300
[09-03 02:51:30] - Epoch 87: best loss improved from 1.8651 to 1.8651
[09-03 02:51:30] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [10:15, 4.07it/s, Acc@1=77.385, Acc@5=92.401, Loss=1.8182]
Epoch 88/90. validating: 101it [00:17, 5.93it/s, Acc@1=69.184, Acc@5=89.184, Loss=2.1171]
[09-03 03:02:03] - Train loss: 1.8183 | Acc@1: 77.3804 | Acc@5: 92.3980
[09-03 03:02:03] - Val loss: 1.8650 | Acc@1: 75.8140 | Acc@5: 92.6320
[09-03 03:02:03] - Epoch 88: best loss improved from 1.8651 to 1.8650
[09-03 03:02:03] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:12, 4.09it/s, Acc@1=77.512, Acc@5=92.417, Loss=1.8140]
Epoch 89/90. validating: 101it [00:18, 5.56it/s, Acc@1=82.504, Acc@5=96.112, Loss=1.6127]
[09-03 03:12:34] - Train loss: 1.8135 | Acc@1: 77.5135 | Acc@5: 92.4685
[09-03 03:12:34] - Val loss: 1.8649 | Acc@1: 75.8780 | Acc@5: 92.6380
[09-03 03:12:34] - Epoch 89: best loss improved from 1.8650 to 1.8649
[09-03 03:12:34] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:05, 4.14it/s, Acc@1=77.554, Acc@5=92.461, Loss=1.8133]
Epoch 90/90. validating: 101it [00:17, 5.82it/s, Acc@1=69.308, Acc@5=89.172, Loss=2.1168]
[09-03 03:22:58] - Train loss: 1.8120 | Acc@1: 77.5828 | Acc@5: 92.4940
[09-03 03:22:58] - Val loss: 1.8648 | Acc@1: 75.8800 | Acc@5: 92.6380
[09-03 03:22:58] - Epoch 90: best loss improved from 1.8649 to 1.8648
[09-03 03:22:59] - Acc@1 75.880 Acc@5 92.638
[09-03 03:22:59] - Total time: 15h 51.3m ??. не понятно почему добавление csp к darknet53 хорошо работает, а к моему resnet34-50 - плохо. дело ли в количестве параметров или в чем-то другом? |
вдохновился Neural Architecture Design for GPU-Efficient Networks. не до конца понимаю почему их сетка так хорошо работает, но anyway. что можно улучшить:
нашел еще статью: Rethinking Bottleneck Structure for Efficient Mobile Network Design где задаются теми же вопросами про то, почему вообще inverted residual появился и хорошая ли это вообще идея (спойлер - не очень) upd 4.09.20 Spoiler TemplateTo be added exp26 GENet Normal original GENet normal originalname : exp26.GENet_normal
arch : GENet_normal
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
Epoch 85/90. training: 2504it [10:05, 4.13it/s, Acc@1=83.757, Acc@5=94.585, Loss=1.6854]
Epoch 85/90. validating: 101it [00:17, 5.64it/s, Acc@1=79.764, Acc@5=94.776, Loss=1.7579]
[09-04 00:28:52] - Train loss: 1.6845 | Acc@1: 83.8239 | Acc@5: 94.5907
[09-04 00:28:52] - Val loss: 1.9180 | Acc@1: 75.9800 | Acc@5: 92.6460
[09-04 00:28:52] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [10:04, 4.14it/s, Acc@1=84.058, Acc@5=94.705, Loss=1.6760]
Epoch 86/90. validating: 101it [00:17, 5.77it/s, Acc@1=72.360, Acc@5=90.508, Loss=2.0773]
[09-04 00:39:14] - Train loss: 1.6762 | Acc@1: 84.0284 | Acc@5: 94.7134
[09-04 00:39:14] - Val loss: 1.9178 | Acc@1: 76.1000 | Acc@5: 92.6400
[09-04 00:39:14] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [10:05, 4.14it/s, Acc@1=84.028, Acc@5=94.697, Loss=1.6757]
Epoch 87/90. validating: 101it [00:17, 5.63it/s, Acc@1=79.804, Acc@5=94.780, Loss=1.7576]
[09-04 00:49:38] - Train loss: 1.6754 | Acc@1: 84.0721 | Acc@5: 94.6995
[09-04 00:49:38] - Val loss: 1.9176 | Acc@1: 76.0920 | Acc@5: 92.6580
[09-04 00:49:38] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [10:05, 4.14it/s, Acc@1=84.122, Acc@5=94.692, Loss=1.6742]
Epoch 88/90. validating: 101it [00:17, 5.79it/s, Acc@1=72.432, Acc@5=90.544, Loss=2.0776]
[09-04 01:00:01] - Train loss: 1.6735 | Acc@1: 84.1397 | Acc@5: 94.7180
[09-04 01:00:01] - Val loss: 1.9177 | Acc@1: 76.1060 | Acc@5: 92.6800
[09-04 01:00:01] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:05, 4.14it/s, Acc@1=84.274, Acc@5=94.772, Loss=1.6697]
Epoch 89/90. validating: 101it [00:17, 5.62it/s, Acc@1=79.808, Acc@5=94.800, Loss=1.7578]
[09-04 01:10:24] - Train loss: 1.6686 | Acc@1: 84.2801 | Acc@5: 94.7712
[09-04 01:10:24] - Val loss: 1.9177 | Acc@1: 76.1180 | Acc@5: 92.6900
[09-04 01:10:24] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:05, 4.14it/s, Acc@1=84.318, Acc@5=94.774, Loss=1.6677]
Epoch 90/90. validating: 101it [00:17, 5.77it/s, Acc@1=72.404, Acc@5=90.560, Loss=2.0776]
[09-04 01:20:48] - Train loss: 1.6678 | Acc@1: 84.3046 | Acc@5: 94.7854
[09-04 01:20:48] - Val loss: 1.9177 | Acc@1: 76.0900 | Acc@5: 92.6880
[09-04 01:20:48] - Acc@1 76.090 Acc@5 92.688
[09-04 01:20:48] - Total time: 18h 24.8m exp27
GENet normal myname : exp27.GENet_norm_my
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["XX", "XX", "Btl", "IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"bottle_ratio": 0.25},
{"bottle_ratio": 3},
]
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
Epoch 85/90. training: 2504it [10:43, 3.89it/s, Acc@1=83.333, Acc@5=94.296, Loss=1.7341]
Epoch 85/90. validating: 101it [00:19, 5.17it/s, Acc@1=78.540, Acc@5=93.952, Loss=1.8448]
[09-04 03:07:39] - Train loss: 1.7329 | Acc@1: 83.3764 | Acc@5: 94.3057
[09-04 03:07:39] - Val loss: 2.0167 | Acc@1: 74.6780 | Acc@5: 91.6200
[09-04 03:07:39] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [10:40, 3.91it/s, Acc@1=83.625, Acc@5=94.410, Loss=1.7246]
Epoch 86/90. validating: 101it [00:18, 5.33it/s, Acc@1=70.792, Acc@5=89.308, Loss=2.1877]
[09-04 03:18:39] - Train loss: 1.7248 | Acc@1: 83.6215 | Acc@5: 94.4225
[09-04 03:18:39] - Val loss: 2.0164 | Acc@1: 74.6640 | Acc@5: 91.6100
[09-04 03:18:39] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [10:39, 3.91it/s, Acc@1=83.589, Acc@5=94.415, Loss=1.7244]
Epoch 87/90. validating: 101it [00:19, 5.10it/s, Acc@1=78.592, Acc@5=93.896, Loss=1.8443]
[09-04 03:29:39] - Train loss: 1.7238 | Acc@1: 83.6555 | Acc@5: 94.4287
[09-04 03:29:39] - Val loss: 2.0162 | Acc@1: 74.6920 | Acc@5: 91.5880
[09-04 03:29:39] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [10:39, 3.92it/s, Acc@1=83.790, Acc@5=94.426, Loss=1.7208]
Epoch 88/90. validating: 101it [00:18, 5.35it/s, Acc@1=70.792, Acc@5=89.316, Loss=2.1875]
[09-04 03:40:38] - Train loss: 1.7212 | Acc@1: 83.7289 | Acc@5: 94.4327
[09-04 03:40:38] - Val loss: 2.0161 | Acc@1: 74.6860 | Acc@5: 91.5940
[09-04 03:40:38] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:44, 3.89it/s, Acc@1=83.865, Acc@5=94.512, Loss=1.7173]
Epoch 89/90. validating: 101it [00:19, 5.08it/s, Acc@1=78.620, Acc@5=93.904, Loss=1.8443]
[09-04 03:51:42] - Train loss: 1.7166 | Acc@1: 83.8576 | Acc@5: 94.5193
[09-04 03:51:42] - Val loss: 2.0159 | Acc@1: 74.7360 | Acc@5: 91.6260
[09-04 03:51:42] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:42, 3.90it/s, Acc@1=83.892, Acc@5=94.528, Loss=1.7152]
Epoch 90/90. validating: 101it [00:18, 5.55it/s, Acc@1=70.824, Acc@5=89.348, Loss=2.1871]
[09-04 04:02:43] - Train loss: 1.7155 | Acc@1: 83.8897 | Acc@5: 94.5220
[09-04 04:02:43] - Val loss: 2.0157 | Acc@1: 74.7340 | Acc@5: 91.6360
[09-04 04:02:44] - Acc@1 74.734 Acc@5 91.636
[09-04 04:02:44] - Total time: 16h 35.5m exp28 GENet normal my + SepConv2 in last 2 blocksname : exp28.GENet_norm_my_sep2
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["XX", "XX", "Sep2", "Sep2"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
weight_decay : 3e-5
smooth: true
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
Epoch 85/90. training: 2504it [10:39, 3.91it/s, Acc@1=81.688, Acc@5=93.698, Loss=1.7796]
Epoch 85/90. validating: 101it [00:18, 5.45it/s, Acc@1=78.040, Acc@5=93.876, Loss=1.8440]
[09-04 03:01:31] - Train loss: 1.7782 | Acc@1: 81.7302 | Acc@5: 93.7044
[09-04 03:01:31] - Val loss: 2.0183 | Acc@1: 74.1360 | Acc@5: 91.4540
[09-04 03:01:31] - Epoch 86 | lr 2.21e-03
Epoch 86/90. training: 2504it [10:35, 3.94it/s, Acc@1=81.985, Acc@5=93.813, Loss=1.7697]
Epoch 86/90. validating: 101it [00:18, 5.50it/s, Acc@1=70.100, Acc@5=88.972, Loss=2.1919]
[09-04 03:12:25] - Train loss: 1.7697 | Acc@1: 81.9852 | Acc@5: 93.8297
[09-04 03:12:25] - Val loss: 2.0180 | Acc@1: 74.0720 | Acc@5: 91.4120
[09-04 03:12:25] - Epoch 87 | lr 1.48e-03
Epoch 87/90. training: 2504it [10:37, 3.93it/s, Acc@1=82.034, Acc@5=93.823, Loss=1.7676]
Epoch 87/90. validating: 101it [00:18, 5.35it/s, Acc@1=78.100, Acc@5=93.832, Loss=1.8438]
[09-04 03:23:22] - Train loss: 1.7678 | Acc@1: 82.0362 | Acc@5: 93.8330
[09-04 03:23:22] - Val loss: 2.0181 | Acc@1: 74.1420 | Acc@5: 91.4140
[09-04 03:23:22] - Epoch 88 | lr 8.98e-04
Epoch 88/90. training: 2504it [10:34, 3.95it/s, Acc@1=82.093, Acc@5=93.840, Loss=1.7659]
Epoch 88/90. validating: 101it [00:17, 5.65it/s, Acc@1=70.092, Acc@5=89.008, Loss=2.1921]
[09-04 03:34:15] - Train loss: 1.7659 | Acc@1: 82.1009 | Acc@5: 93.8400
[09-04 03:34:15] - Val loss: 2.0180 | Acc@1: 74.0920 | Acc@5: 91.4220
[09-04 03:34:15] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:39, 3.92it/s, Acc@1=82.253, Acc@5=93.918, Loss=1.7608]
Epoch 89/90. validating: 101it [00:19, 5.15it/s, Acc@1=78.044, Acc@5=93.864, Loss=1.8438]
[09-04 03:45:13] - Train loss: 1.7601 | Acc@1: 82.2799 | Acc@5: 93.9389
[09-04 03:45:13] - Val loss: 2.0179 | Acc@1: 74.0880 | Acc@5: 91.4300
[09-04 03:45:13] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:39, 3.92it/s, Acc@1=82.305, Acc@5=93.918, Loss=1.7590]
Epoch 90/90. validating: 101it [00:18, 5.39it/s, Acc@1=70.092, Acc@5=89.004, Loss=2.1917]
[09-04 03:56:11] - Train loss: 1.7589 | Acc@1: 82.3118 | Acc@5: 93.9249
[09-04 03:56:11] - Val loss: 2.0178 | Acc@1: 74.0620 | Acc@5: 91.4320
[09-04 03:56:12] - Acc@1 74.062 Acc@5 91.432
[09-04 03:56:12] - Total time: 16h 28.8m exp29 GENet SepConv3 in last 2 blockmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["XX", "XX", "Sep3", "Sep3"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
Epoch 89/90. training: 2504it [11:38, 3.59it/s, Acc@1=83.410, Acc@5=94.412, Loss=1.6956]
Epoch 89/90. validating: 101it [00:19, 5.07it/s, Acc@1=78.956, Acc@5=94.256, Loss=1.7929]
[09-05 02:47:29] - Train loss: 1.6949 | Acc@1: 83.4396 | Acc@5: 94.4382
[09-05 02:47:29] - Val loss: 1.9659 | Acc@1: 75.0480 | Acc@5: 91.9360
[09-05 02:47:29] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:38, 3.59it/s, Acc@1=83.496, Acc@5=94.433, Loss=1.6927]
Epoch 90/90. validating: 101it [00:19, 5.28it/s, Acc@1=71.188, Acc@5=89.572, Loss=2.1387]
[09-05 02:59:27] - Train loss: 1.6927 | Acc@1: 83.4981 | Acc@5: 94.4349
[09-05 02:59:27] - Val loss: 1.9659 | Acc@1: 75.0620 | Acc@5: 91.9060
[09-05 02:59:28] - Acc@1 75.062 Acc@5 91.906
[09-05 02:59:28] - Total time: 18h 6.6m exp30 GENet Norm closer# Reimplmentation of GENet normal model on my codebase
# The differences from original is much smaller that in exp27
# * 4 stages instead of 5. shouldn't really matter
# * no residual in stride=2 blocks
# * mobilenetv3 head - GAP before last expansion
#
# the difference in config is in `final_act=True` and 4 lines above `layers`
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["XX", "XX", "Btl", "IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "final_act": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "final_act": True},
{"bottle_ratio": 0.25, "final_act": True},
{"bottle_ratio": 3, "final_act": True},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
Epoch 88/90. training: 2504it [10:39, 3.92it/s, Acc@1=83.456, Acc@5=94.416, Loss=1.6946]
Epoch 88/90. validating: 101it [00:17, 5.66it/s, Acc@1=72.100, Acc@5=90.316, Loss=2.0900]
[09-05 04:07:01] - Train loss: 1.6938 | Acc@1: 83.4637 | Acc@5: 94.4209
[09-05 04:07:01] - Val loss: 1.9298 | Acc@1: 75.7320 | Acc@5: 92.4160
[09-05 04:07:01] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:40, 3.91it/s, Acc@1=83.572, Acc@5=94.494, Loss=1.6890]
Epoch 89/90. validating: 101it [00:17, 5.61it/s, Acc@1=79.356, Acc@5=94.516, Loss=1.7693]
[09-05 04:17:59] - Train loss: 1.6891 | Acc@1: 83.5691 | Acc@5: 94.4988
[09-05 04:17:59] - Val loss: 1.9297 | Acc@1: 75.7320 | Acc@5: 92.3920
[09-05 04:17:59] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:46, 3.87it/s, Acc@1=83.594, Acc@5=94.471, Loss=1.6884]
Epoch 90/90. validating: 101it [00:17, 5.78it/s, Acc@1=72.120, Acc@5=90.272, Loss=2.0899]
[09-05 04:29:04] - Train loss: 1.6880 | Acc@1: 83.6014 | Acc@5: 94.4693
[09-05 04:29:04] - Val loss: 1.9296 | Acc@1: 75.7200 | Acc@5: 92.3900
[09-05 04:29:07] - Acc@1 75.720 Acc@5 92.390
[09-05 04:29:07] - Total time: 16h 50.0m exp31 GENet normal closer + space2depthEpoch 88/90. training: 2504it [09:38, 4.33it/s, Acc@1=83.454, Acc@5=94.360, Loss=1.6953]
Epoch 88/90. validating: 101it [00:17, 5.89it/s, Acc@1=72.320, Acc@5=90.196, Loss=2.0865]
[09-05 02:43:47] - Train loss: 1.6951 | Acc@1: 83.4352 | Acc@5: 94.3649
[09-05 02:43:47] - Val loss: 1.9280 | Acc@1: 75.7640 | Acc@5: 92.4080
[09-05 02:43:47] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [09:38, 4.33it/s, Acc@1=83.568, Acc@5=94.446, Loss=1.6906]
Epoch 89/90. validating: 101it [00:17, 5.73it/s, Acc@1=79.232, Acc@5=94.624, Loss=1.7692]
[09-05 02:53:43] - Train loss: 1.6902 | Acc@1: 83.5691 | Acc@5: 94.4585
[09-05 02:53:43] - Val loss: 1.9279 | Acc@1: 75.8200 | Acc@5: 92.4200
[09-05 02:53:43] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [09:38, 4.33it/s, Acc@1=83.579, Acc@5=94.460, Loss=1.6894]
Epoch 90/90. validating: 101it [00:17, 5.90it/s, Acc@1=72.408, Acc@5=90.212, Loss=2.0865]
[09-05 03:03:39] - Train loss: 1.6889 | Acc@1: 83.5693 | Acc@5: 94.4716
[09-05 03:03:39] - Val loss: 1.9279 | Acc@1: 75.8280 | Acc@5: 92.4320
[09-05 03:03:40] - Acc@1 75.828 Acc@5 92.432
[09-05 03:03:40] - Total time: 14h 58.9m exp32: GENet even closer (default head)arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["XX", "XX", "Btl", "IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "final_act": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "final_act": True},
{"bottle_ratio": 0.25, "final_act": True},
{"bottle_ratio": 3, "final_act": True},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [10:28, 3.99it/s, Acc@1=84.105, Acc@5=94.669, Loss=1.6783]
Epoch 89/90. validating: 101it [00:19, 5.15it/s, Acc@1=79.596, Acc@5=94.684, Loss=1.7598]
[09-08 04:05:50] - Train loss: 1.6776 | Acc@1: 84.1229 | Acc@5: 94.6836
[09-08 04:05:50] - Val loss: 1.9218 | Acc@1: 75.9480 | Acc@5: 92.6100
[09-08 04:05:50] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:30, 3.97it/s, Acc@1=84.096, Acc@5=94.692, Loss=1.6772]
Epoch 90/90. validating: 101it [00:19, 5.26it/s, Acc@1=72.352, Acc@5=90.564, Loss=2.0837]
[09-08 04:16:40] - Train loss: 1.6776 | Acc@1: 84.0960 | Acc@5: 94.6684
[09-08 04:16:40] - Val loss: 1.9217 | Acc@1: 75.9800 | Acc@5: 92.6240
[09-08 04:16:41] - Acc@1 75.980 Acc@5 92.624
[09-08 04:16:41] - Total time: 16h 12.1m exp33: GENet + PreAct blocksarch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"bottle_ratio": 0.25},
{"bottle_ratio": 3},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [10:47, 3.87it/s, Acc@1=84.120, Acc@5=94.696, Loss=1.6726]
Epoch 89/90. validating: 101it [00:18, 5.52it/s, Acc@1=79.624, Acc@5=94.824, Loss=1.7593]
[09-08 05:54:41] - Train loss: 1.6724 | Acc@1: 84.1257 | Acc@5: 94.6862
[09-08 05:54:41] - Val loss: 1.9204 | Acc@1: 75.9200 | Acc@5: 92.7040
[09-08 05:54:41] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:47, 3.87it/s, Acc@1=84.115, Acc@5=94.704, Loss=1.6715]
Epoch 90/90. validating: 101it [00:17, 5.67it/s, Acc@1=72.212, Acc@5=90.596, Loss=2.0813]
[09-08 06:05:47] - Train loss: 1.6712 | Acc@1: 84.1350 | Acc@5: 94.7071
[09-08 06:05:47] - Val loss: 1.9204 | Acc@1: 75.9200 | Acc@5: 92.7160
[09-08 06:05:47] - Acc@1 75.920 Acc@5 92.716
[09-08 06:05:47] - Total time: 16h 12.5m
повторил этот же эксперимент спустя две недели. (но на другом сервере), получил:
Epoch 89/90. training: 2504it [09:35, 4.35it/s, Acc@1=84.123, Acc@5=94.682, Loss=1.6727]
Epoch 89/90. validating: 101it [00:17, 5.76it/s, Acc@1=79.716, Acc@5=94.744, Loss=1.7641]
[09-14 02:05:51] - Train loss: 1.6712 | Acc@1: 84.1720 | Acc@5: 94.7113
[09-14 02:05:51] - Val loss: 1.9290 | Acc@1: 75.7700 | Acc@5: 92.5440
[09-14 02:05:51] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [09:35, 4.35it/s, Acc@1=84.203, Acc@5=94.697, Loss=1.6705]
Epoch 90/90. validating: 101it [00:17, 5.93it/s, Acc@1=71.864, Acc@5=90.312, Loss=2.0938]
[09-14 02:15:44] - Train loss: 1.6709 | Acc@1: 84.1553 | Acc@5: 94.6996
[09-14 02:15:44] - Val loss: 1.9290 | Acc@1: 75.7980 | Acc@5: 92.5300
[09-14 02:15:44] - Acc@1 75.798 Acc@5 92.530
[09-14 02:15:44] - Total time: 14h 47.0m
значит reproducability тут хороший exp34 BNet with Sep2 in last stagesarch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Sep2", "Pre_Sep2"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 88/90. training: 2504it [09:44, 4.28it/s, Acc@1=82.246, Acc@5=94.056, Loss=1.7421]
Epoch 88/90. validating: 101it [00:17, 5.94it/s, Acc@1=71.816, Acc@5=90.288, Loss=2.0937]
[09-08 10:26:11] - Train loss: 1.7419 | Acc@1: 82.2516 | Acc@5: 94.0699
[09-08 10:26:11] - Val loss: 1.9333 | Acc@1: 75.5780 | Acc@5: 92.4160
[09-08 10:26:11] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [09:41, 4.31it/s, Acc@1=82.372, Acc@5=94.114, Loss=1.7372]
Epoch 89/90. validating: 101it [00:18, 5.50it/s, Acc@1=79.316, Acc@5=94.576, Loss=1.7730]
[09-08 10:36:11] - Train loss: 1.7367 | Acc@1: 82.3819 | Acc@5: 94.1395
[09-08 10:36:11] - Val loss: 1.9334 | Acc@1: 75.5820 | Acc@5: 92.4360
[09-08 10:36:11] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [09:45, 4.28it/s, Acc@1=82.387, Acc@5=94.173, Loss=1.7352]
Epoch 90/90. validating: 101it [00:17, 5.92it/s, Acc@1=71.864, Acc@5=90.284, Loss=2.0934]
[09-08 10:46:14] - Train loss: 1.7352 | Acc@1: 82.4091 | Acc@5: 94.1676
[09-08 10:46:14] - Val loss: 1.9333 | Acc@1: 75.5920 | Acc@5: 92.4220
[09-08 10:46:15] - Acc@1 75.592 Acc@5 92.422
[09-08 10:46:15] - Total time: 20h 26.5m exp35 Работает хуже чем дефолтная версия GENet не очень понятно почему, но не сильно хуже. 13.4M параметров. BNet with Sep2 in last stages and different depth/filters structuremodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Sep2", "Pre_Sep2"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"dim_reduction": "stride & expand", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [2, 4, 8, 2]
channels: [64, 160, 416, 1024]
mobilenetv3_head: False
Epoch 88/90. training: 2504it [11:09, 3.74it/s, Acc@1=83.207, Acc@5=94.350, Loss=1.7441]
Epoch 88/90. validating: 101it [00:19, 5.23it/s, Acc@1=71.432, Acc@5=89.644, Loss=2.1613]
[09-09 03:40:20] - Train loss: 1.7439 | Acc@1: 83.2188 | Acc@5: 94.3492
[09-09 03:40:20] - Val loss: 1.9880 | Acc@1: 75.2580 | Acc@5: 92.0480
[09-09 03:40:20] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [11:03, 3.77it/s, Acc@1=83.366, Acc@5=94.402, Loss=1.7397]
Epoch 89/90. validating: 101it [00:18, 5.32it/s, Acc@1=79.052, Acc@5=94.444, Loss=1.8147]
[09-09 03:51:43] - Train loss: 1.7391 | Acc@1: 83.3495 | Acc@5: 94.4247
[09-09 03:51:43] - Val loss: 1.9880 | Acc@1: 75.2360 | Acc@5: 92.0560
[09-09 03:51:43] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:09, 3.74it/s, Acc@1=83.387, Acc@5=94.430, Loss=1.7384]
Epoch 90/90. validating: 101it [00:18, 5.45it/s, Acc@1=71.428, Acc@5=89.664, Loss=2.1611]
[09-09 04:03:11] - Train loss: 1.7380 | Acc@1: 83.3884 | Acc@5: 94.4385
[09-09 04:03:11] - Val loss: 1.9880 | Acc@1: 75.2420 | Acc@5: 92.0600
[09-09 04:03:12] - Acc@1 75.242 Acc@5 92.060
[09-09 04:03:12] - Total time: 17h 3.4m exp36 BNet with Sep2 in last stages and different depth/filters structure and expand -> stridemodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Sep2", "Pre_Sep2"]
stage_args: [
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [2, 4, 8, 2]
channels: [64, 160, 416, 1024]
mobilenetv3_head: False
Epoch 88/90. training: 2504it [13:16, 3.14it/s, Acc@1=83.670, Acc@5=94.523, Loss=1.7255]
Epoch 88/90. validating: 101it [00:20, 5.02it/s, Acc@1=71.788, Acc@5=90.064, Loss=2.1349]
[09-09 07:42:46] - Train loss: 1.7254 | Acc@1: 83.6595 | Acc@5: 94.5303
[09-09 07:42:46] - Val loss: 1.9645 | Acc@1: 75.7380 | Acc@5: 92.3140
[09-09 07:42:46] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [13:12, 3.16it/s, Acc@1=83.801, Acc@5=94.622, Loss=1.7207]
Epoch 89/90. validating: 101it [00:20, 5.03it/s, Acc@1=79.696, Acc@5=94.592, Loss=1.7938]
[09-09 07:56:19] - Train loss: 1.7204 | Acc@1: 83.8091 | Acc@5: 94.6292
[09-09 07:56:19] - Val loss: 1.9645 | Acc@1: 75.7220 | Acc@5: 92.3160
[09-09 07:56:19] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:15, 3.15it/s, Acc@1=83.816, Acc@5=94.616, Loss=1.7198]
Epoch 90/90. validating: 101it [00:18, 5.33it/s, Acc@1=71.740, Acc@5=90.032, Loss=2.1350]
[09-09 08:09:54] - Train loss: 1.7192 | Acc@1: 83.8185 | Acc@5: 94.6410
[09-09 08:09:54] - Val loss: 1.9643 | Acc@1: 75.7400 | Acc@5: 92.3140
[09-09 08:09:55] - Acc@1 75.740 Acc@5 92.314
[09-09 08:09:55] - Total time: 20h 28.6m |
Spoiler TemplateTo be added exp37 Simple R34-50 new В итоге чуть лучше чем exp12 (linear bottleneck) и заметно лучше exp9 (pre act), возможно дело в expand -> stride Simple R34-50
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_Btl"]
stage_args: [
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 64
head_width: 2048
norm_act: leaky_relu
stem_type: s2d
layers: [3, 4, 6, 3]
channels: [64, 128, 256, 512]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [12:33, 3.32it/s, Acc@1=79.133, Acc@5=92.771, Loss=1.8631]
Epoch 89/90. validating: 101it [00:20, 5.01it/s, Acc@1=79.560, Acc@5=94.756, Loss=1.7663]
[09-10 08:31:11] - Train loss: 1.8622 | Acc@1: 79.1390 | Acc@5: 92.7930
[09-10 08:31:11] - Val loss: 1.9246 | Acc@1: 75.9180 | Acc@5: 92.8140
[09-10 08:31:11] - Epoch 89: best loss improved from 1.9247 to 1.9246
[09-10 08:31:12] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [12:30, 3.33it/s, Acc@1=79.135, Acc@5=92.783, Loss=1.8625]
Epoch 90/90. validating: 101it [00:19, 5.20it/s, Acc@1=72.296, Acc@5=90.860, Loss=2.0827]
[09-10 08:44:03] - Train loss: 1.8628 | Acc@1: 79.1037 | Acc@5: 92.7860
[09-10 08:44:03] - Val loss: 1.9246 | Acc@1: 75.9340 | Acc@5: 92.8280
[09-10 08:44:03] - Epoch 90: best loss improved from 1.9246 to 1.9246
[09-10 08:44:05] - Acc@1 75.934 Acc@5 92.828
[09-10 08:44:05] - Total time: 19h 33.5m exp38 SimpR34-50 different stagesmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_Btl"]
stage_args: [
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 64
head_width: 2048
norm_act: leaky_relu
stem_type: s2d
layers: [2, 4, 8, 2]
channels: [64, 128, 256, 512]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [12:28, 3.35it/s, Acc@1=78.601, Acc@5=92.516, Loss=1.8986]
Epoch 89/90. validating: 101it [00:21, 4.72it/s, Acc@1=79.852, Acc@5=94.852, Loss=1.7752]
[09-10 08:05:33] - Train loss: 1.8977 | Acc@1: 78.6271 | Acc@5: 92.5148
[09-10 08:05:33] - Val loss: 1.9362 | Acc@1: 76.0480 | Acc@5: 92.7780
[09-10 08:05:33] - Epoch 89: best loss improved from 1.9364 to 1.9362
[09-10 08:05:34] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [12:28, 3.35it/s, Acc@1=78.649, Acc@5=92.540, Loss=1.8978]
Epoch 90/90. validating: 101it [00:20, 4.81it/s, Acc@1=72.224, Acc@5=90.692, Loss=2.0970]
[09-10 08:18:24] - Train loss: 1.8971 | Acc@1: 78.6522 | Acc@5: 92.5358
[09-10 08:18:24] - Val loss: 1.9362 | Acc@1: 76.0540 | Acc@5: 92.7740
[09-10 08:18:24] - Epoch 90: best loss improved from 1.9362 to 1.9362
[09-10 08:18:25] - Acc@1 76.054 Acc@5 92.774
[09-10 08:18:25] - Total time: 19h 7.8m exp39 like exp34 + s2d in XX blocksmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Sep2", "Pre_Sep2"]
stage_args: [
{"dim_reduction": "s2d", "bottle_ratio": 1},
{"dim_reduction": "s2d", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 88/90. training: 2504it [10:20, 4.04it/s, Acc@1=82.184, Acc@5=94.058, Loss=1.7453]
Epoch 88/90. validating: 101it [00:17, 5.75it/s, Acc@1=71.704, Acc@5=90.288, Loss=2.1008]
[09-11 04:06:19] - Train loss: 1.7456 | Acc@1: 82.1720 | Acc@5: 94.0507
[09-11 04:06:19] - Val loss: 1.9365 | Acc@1: 75.4580 | Acc@5: 92.4780
[09-11 04:06:19] - Epoch 89 | lr 4.58e-04
Epoch 89/90. training: 2504it [10:22, 4.02it/s, Acc@1=82.224, Acc@5=94.075, Loss=1.7421]
Epoch 89/90. validating: 101it [00:18, 5.54it/s, Acc@1=79.144, Acc@5=94.676, Loss=1.7722]
[09-11 04:16:59] - Train loss: 1.7407 | Acc@1: 82.2608 | Acc@5: 94.1029
[09-11 04:16:59] - Val loss: 1.9365 | Acc@1: 75.4360 | Acc@5: 92.4760
[09-11 04:16:59] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:21, 4.03it/s, Acc@1=82.305, Acc@5=94.116, Loss=1.7403]
Epoch 90/90. validating: 101it [00:17, 5.72it/s, Acc@1=71.728, Acc@5=90.300, Loss=2.1006]
[09-11 04:27:39] - Train loss: 1.7404 | Acc@1: 82.3131 | Acc@5: 94.1217
[09-11 04:27:39] - Val loss: 1.9364 | Acc@1: 75.4240 | Acc@5: 92.4840
[09-11 04:27:40] - Acc@1 75.424 Acc@5 92.484
[09-11 04:27:40] - Total time: 17h 17.1m exp40 Работает хуже чем exp39. не ясно почему. может просто фильтров в последнем блоке не хватает? exp39 + different stagesmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Sep2", "Pre_Sep2"]
stage_args: [
{"dim_reduction": "s2d", "bottle_ratio": 1},
{"dim_reduction": "s2d", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: default
layers: [1, 2, 10, 1]
channels: [128, 192, 480, 1024]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [10:28, 3.99it/s, Acc@1=82.872, Acc@5=94.283, Loss=1.7682]
Epoch 89/90. validating: 101it [00:17, 5.63it/s, Acc@1=79.536, Acc@5=94.528, Loss=1.8103]
[09-11 04:27:55] - Train loss: 1.7676 | Acc@1: 82.8851 | Acc@5: 94.2790
[09-11 04:27:55] - Val loss: 1.9747 | Acc@1: 75.7100 | Acc@5: 92.3880
[09-11 04:27:55] - Epoch 89: best loss improved from 1.9747 to 1.9747
[09-11 04:27:55] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:11, 4.10it/s, Acc@1=82.993, Acc@5=94.288, Loss=1.7666]
Epoch 90/90. validating: 101it [00:17, 5.83it/s, Acc@1=71.900, Acc@5=90.244, Loss=2.1387]
[09-11 04:38:24] - Train loss: 1.7664 | Acc@1: 82.9583 | Acc@5: 94.3036
[09-11 04:38:24] - Val loss: 1.9745 | Acc@1: 75.7300 | Acc@5: 92.3800
[09-11 04:38:24] - Epoch 90: best loss improved from 1.9747 to 1.9745
[09-11 04:38:27] - Acc@1 75.730 Acc@5 92.380
[09-11 04:38:27] - Total time: 17h 27.8m exp41 exp39 + expand -> stridearch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Sep2", "Pre_Sep2"]
stage_args: [
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"dim_reduction": "expand -> stride", "bottle_ratio": 1},
{"bottle_ratio": 1},
{"bottle_ratio": 1},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [12:18, 3.39it/s, Acc@1=82.768, Acc@5=94.312, Loss=1.7219]
Epoch 89/90. validating: 101it [00:18, 5.33it/s, Acc@1=79.804, Acc@5=94.848, Loss=1.7519]
[09-12 08:01:03] - Train loss: 1.7209 | Acc@1: 82.7881 | Acc@5: 94.3153
[09-12 08:01:03] - Val loss: 1.9148 | Acc@1: 76.0940 | Acc@5: 92.7300
[09-12 08:01:03] - Epoch 89: best loss improved from 1.9148 to 1.9148
[09-12 08:01:03] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [12:18, 3.39it/s, Acc@1=82.817, Acc@5=94.296, Loss=1.7205]
Epoch 90/90. validating: 101it [00:18, 5.49it/s, Acc@1=72.388, Acc@5=90.644, Loss=2.0773]
[09-12 08:13:41] - Train loss: 1.7197 | Acc@1: 82.8322 | Acc@5: 94.3132
[09-12 08:13:41] - Val loss: 1.9147 | Acc@1: 76.1000 | Acc@5: 92.7440
[09-12 08:13:41] - Epoch 90: best loss improved from 1.9148 to 1.9147
[09-12 08:13:42] - Acc@1 76.100 Acc@5 92.744
[09-12 08:13:42] - Total time: 18h 54.2m exp42 этот эксперимент нужно сравнивать с exp32 и exp33. видно что на трейне лосс стал чуточку лучше (и даже лучше чем у оригинальной версии GENet, но в пределах погрешности. но на валидации стало чуточку хуже (хотя возможно стало хуже из-за оверфита) GENet preact + partial residual in stride=2 blocksmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 0.25, "force_residual": True},
{"bottle_ratio": 3, "force_residual": True},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [10:41, 3.90it/s, Acc@1=84.666, Acc@5=94.865, Loss=1.6573]
Epoch 89/90. validating: 101it [00:18, 5.60it/s, Acc@1=79.496, Acc@5=94.664, Loss=1.7640]
[09-13 04:53:21] - Train loss: 1.6566 | Acc@1: 84.6706 | Acc@5: 94.8812
[09-13 04:53:21] - Val loss: 1.9315 | Acc@1: 75.6340 | Acc@5: 92.5320
[09-13 04:53:21] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:40, 3.91it/s, Acc@1=84.660, Acc@5=94.879, Loss=1.6567]
Epoch 90/90. validating: 101it [00:17, 5.75it/s, Acc@1=71.740, Acc@5=90.360, Loss=2.0989]
[09-13 05:04:19] - Train loss: 1.6568 | Acc@1: 84.6684 | Acc@5: 94.8755
[09-13 05:04:19] - Val loss: 1.9315 | Acc@1: 75.6220 | Acc@5: 92.5120
[09-13 05:04:20] - Acc@1 75.622 Acc@5 92.512
[09-13 05:04:20] - Total time: 16h 29.5m exp43 Custom small BNetmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_Btl"]
stage_args: [
{"dim_reduction": "expand -> stride", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "expand -> stride", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "groups_width": 1},
{"bottle_ratio": 1, "force_residual": True, "groups_width": 1},
]
stem_width: 32
head_width: 2048
norm_act: leaky_relu
stem_type: s2d
layers: [2, 4, 10, 2]
channels: [64, 128, 192, 480]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [10:21, 4.03it/s, Acc@1=76.580, Acc@5=91.488, Loss=2.0020]
Epoch 89/90. validating: 101it [00:17, 5.92it/s, Acc@1=78.324, Acc@5=93.964, Loss=1.8601]
[09-14 23:53:06] - Train loss: 2.0009 | Acc@1: 76.6031 | Acc@5: 91.4854
[09-14 23:53:06] - Val loss: 2.0254 | Acc@1: 74.4240 | Acc@5: 91.7860
[09-14 23:53:06] - Epoch 89: best loss improved from 2.0255 to 2.0254
[09-14 23:53:06] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:20, 4.03it/s, Acc@1=76.662, Acc@5=91.466, Loss=1.9999]
Epoch 90/90. validating: 101it [00:16, 6.11it/s, Acc@1=70.516, Acc@5=89.616, Loss=2.1906]
[09-15 00:03:44] - Train loss: 2.0004 | Acc@1: 76.6412 | Acc@5: 91.4545
[09-15 00:03:44] - Val loss: 2.0253 | Acc@1: 74.4080 | Acc@5: 91.8000
[09-15 00:03:44] - Epoch 90: best loss improved from 2.0254 to 2.0253
[09-15 00:03:44] - Acc@1 74.408 Acc@5 91.800
[09-15 00:03:44] - Total time: 15h 57.3m exp44 upd. в этой моделе был баг, забыл написать "groups_width": 1 для последнего слоя. т.е. в конце был обычный ботллнек. количество параметров огромное - 66М видимо из-за этого и лучше качество на трейне. exp46 будет исправленным Spoiler Templatemodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_Btl"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 0.25, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 1024]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [11:48, 3.53it/s, Acc@1=86.918, Acc@5=95.543, Loss=1.5654]
Epoch 89/90. validating: 101it [00:18, 5.34it/s, Acc@1=79.468, Acc@5=94.664, Loss=1.7608]
[09-15 23:49:09] - Train loss: 1.5648 | Acc@1: 86.9205 | Acc@5: 95.5545
[09-15 23:49:09] - Val loss: 1.9256 | Acc@1: 75.7620 | Acc@5: 92.5520
[09-15 23:49:09] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:50, 3.52it/s, Acc@1=86.931, Acc@5=95.565, Loss=1.5640]
Epoch 90/90. validating: 101it [00:18, 5.51it/s, Acc@1=72.112, Acc@5=90.432, Loss=2.0903]
[09-16 00:01:19] - Train loss: 1.5642 | Acc@1: 86.9176 | Acc@5: 95.5675
[09-16 00:01:19] - Val loss: 1.9256 | Acc@1: 75.7900 | Acc@5: 92.5360
[09-16 00:01:20] - Acc@1 75.790 Acc@5 92.536
[09-16 00:01:20] - Total time: 18h 32.2m exp45
exp44 + larger dw kernel size# close to exp44 but increased dw kernel size for last stage + leaky_relu + s2d
name : exp45.GENet_preact_Btl_last_s2d_leaky
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 0.25, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 1024]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [11:02, 3.78it/s, Acc@1=85.322, Acc@5=95.094, Loss=1.6330]
Epoch 89/90. validating: 101it [00:18, 5.54it/s, Acc@1=79.288, Acc@5=94.552, Loss=1.7754]
[09-30 00:35:51] - Train loss: 1.6315 | Acc@1: 85.3534 | Acc@5: 95.1186
[09-30 00:35:51] - Val loss: 1.9501 | Acc@1: 75.3840 | Acc@5: 92.2340
[09-30 00:35:51] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:01, 3.79it/s, Acc@1=85.338, Acc@5=95.120, Loss=1.6314]
Epoch 90/90. validating: 101it [00:17, 5.66it/s, Acc@1=71.456, Acc@5=89.940, Loss=2.1245]
[09-30 00:47:11] - Train loss: 1.6312 | Acc@1: 85.3278 | Acc@5: 95.1118
[09-30 00:47:11] - Val loss: 1.9500 | Acc@1: 75.3880 | Acc@5: 92.2380
[09-30 00:47:14] - Acc@1 75.388 Acc@5 92.238
[09-30 00:47:14] - Total time: 17h 48.0m exp46 exp44 done right# close to exp42 but replacing IR in last stage with Btl with larger number of channels
# number of channels ~matches the number of parameters. 640 * 3 x 640 ~= 1024 ^ 2
# This version fixed gr width in last stage
name : exp46.GENet_preact_Btl_last_fixed
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_Btl", "Pre_Btl"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 0.25, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "groups_width": 1},
]
stem_width: 32
head_width: 2560
norm_act: relu
stem_type: default
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 1024]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [10:47, 3.86it/s, Acc@1=84.792, Acc@5=94.956, Loss=1.6591]
Epoch 89/90. validating: 101it [00:18, 5.39it/s, Acc@1=79.512, Acc@5=94.632, Loss=1.7714]
[09-29 23:35:56] - Train loss: 1.6585 | Acc@1: 84.8136 | Acc@5: 94.9462
[09-29 23:35:56] - Val loss: 1.9429 | Acc@1: 75.7020 | Acc@5: 92.3640
[09-29 23:35:56] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [10:47, 3.87it/s, Acc@1=84.765, Acc@5=94.978, Loss=1.6581]
Epoch 90/90. validating: 101it [00:18, 5.46it/s, Acc@1=71.912, Acc@5=90.104, Loss=2.1141]
[09-29 23:47:02] - Train loss: 1.6581 | Acc@1: 84.7827 | Acc@5: 94.9586
[09-29 23:47:02] - Val loss: 1.9427 | Acc@1: 75.7060 | Acc@5: 92.3900
[09-29 23:47:03] - Acc@1 75.706 Acc@5 92.390
[09-29 23:47:03] - Total time: 16h 47.5m exp?? exp?? exp?? exp?? exp?? exp?? exp?? |
Spoiler TemplateTo be added exp47 No dim reduction Netmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 1024]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [13:53, 3.00it/s, Acc@1=86.378, Acc@5=95.489, Loss=1.5865]
Epoch 89/90. validating: 101it [00:19, 5.20it/s, Acc@1=79.880, Acc@5=94.776, Loss=1.7543]
[10-01 10:16:41] - Train loss: 1.5858 | Acc@1: 86.3902 | Acc@5: 95.4946
[10-01 10:16:41] - Val loss: 1.9147 | Acc@1: 76.3260 | Acc@5: 92.7160
[10-01 10:16:41] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:55, 3.00it/s, Acc@1=86.467, Acc@5=95.500, Loss=1.5852]
Epoch 90/90. validating: 101it [00:18, 5.34it/s, Acc@1=72.760, Acc@5=90.668, Loss=2.0748]
[10-01 10:30:55] - Train loss: 1.5855 | Acc@1: 86.4553 | Acc@5: 95.4867
[10-01 10:30:55] - Val loss: 1.9147 | Acc@1: 76.3180 | Acc@5: 92.7120
[10-01 10:30:56] - Acc@1 76.318 Acc@5 92.712
[10-01 10:30:56] - Total time: 21h 22.9m exp48 exp47 + cutmixmodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 1024]
mobilenetv3_head: False
cutmix: 1.0
Epoch 89/90. training: 2504it [13:53, 3.00it/s, Acc@1=78.895, Acc@5=92.467, Loss=2.1141]
Epoch 89/90. validating: 101it [00:19, 5.22it/s, Acc@1=80.836, Acc@5=95.448, Loss=1.6855]
[10-01 10:16:42] - Train loss: 2.1165 | Acc@1: 78.8613 | Acc@5: 92.4580
[10-01 10:16:42] - Val loss: 1.8302 | Acc@1: 77.4960 | Acc@5: 93.6140
[10-01 10:16:42] - Epoch 89: best loss improved from 1.8303 to 1.8302
[10-01 10:16:42] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:55, 3.00it/s, Acc@1=78.801, Acc@5=92.440, Loss=2.1155]
Epoch 90/90. validating: 101it [00:19, 5.31it/s, Acc@1=74.144, Acc@5=91.776, Loss=1.9747]
[10-01 10:30:57] - Train loss: 2.1051 | Acc@1: 79.0235 | Acc@5: 92.5364
[10-01 10:30:57] - Val loss: 1.8301 | Acc@1: 77.5100 | Acc@5: 93.6200
[10-01 10:30:57] - Epoch 90: best loss improved from 1.8302 to 1.8301
[10-01 10:30:58] - Acc@1 77.510 Acc@5 93.620
[10-01 10:30:58] - Total time: 21h 22.7m exp49 upd. ответ на вопрос почему плохо работает можно получить с помощью двух дополнительных экспериментов. поставить в конец поменьше фильтров, чтобы скачок был не такой большой и сравнить. можно поставить например 768. см. exp51 & exp52 еще важность глубины vs ширины можно сравнить поставив в конец меньше блоков (например 2) и тоже сравнив. скорее всего это будут exp53 & exp54 exp48 but deeper instead of widermodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 10, 5]
channels: [128, 192, 480, 1024]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [12:47, 3.26it/s, Acc@1=78.830, Acc@5=92.449, Loss=2.1163]
Epoch 89/90. validating: 101it [00:19, 5.26it/s, Acc@1=80.788, Acc@5=95.320, Loss=1.6900]
[10-03 05:07:04] - Train loss: 2.1189 | Acc@1: 78.7062 | Acc@5: 92.4229
[10-03 05:07:04] - Val loss: 1.8320 | Acc@1: 77.3180 | Acc@5: 93.5620
[10-03 05:07:04] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [12:48, 3.26it/s, Acc@1=79.011, Acc@5=92.560, Loss=2.0976]
Epoch 90/90. validating: 101it [00:18, 5.40it/s, Acc@1=73.828, Acc@5=91.756, Loss=1.9738]
[10-03 05:20:12] - Train loss: 2.1104 | Acc@1: 78.8178 | Acc@5: 92.4644
[10-03 05:20:12] - Val loss: 1.8317 | Acc@1: 77.3120 | Acc@5: 93.5360
[10-03 05:20:14] - Acc@1 77.312 Acc@5 93.536
[10-03 05:20:14] - Total time: 20h 3.9m exp50 возможно я еще не правильно делаю увеличение фильров. нужно будет снова просмотреть статью про ReXNet в поисках интересных идея exp49 + increase filters each step# but with gradualy increasing number of filters each block
# This model has only 16.71M Params vs 21M in exp49
name : exp50.GENet_no_dim_red_ctmx_deeper_steps
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True, "filter_steps": 32},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True, "filter_steps": 80},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 10, 5]
# 224 + 32 * 9 = 512
# 704 + 80 * 4 = 1024 - same as before
channels: [128, 192, 224, 704]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [11:24, 3.66it/s, Acc@1=77.162, Acc@5=91.697, Loss=2.1943]
Epoch 89/90. validating: 101it [00:18, 5.51it/s, Acc@1=80.420, Acc@5=95.288, Loss=1.7088]
[10-03 03:06:30] - Train loss: 2.1823 | Acc@1: 77.3762 | Acc@5: 91.8050
[10-03 03:06:30] - Val loss: 1.8564 | Acc@1: 76.8460 | Acc@5: 93.3800
[10-03 03:06:30] - Epoch 89: best loss improved from 1.8565 to 1.8564
[10-03 03:06:31] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [11:24, 3.66it/s, Acc@1=77.726, Acc@5=91.970, Loss=2.1569]
Epoch 90/90. validating: 101it [00:17, 5.63it/s, Acc@1=73.296, Acc@5=91.468, Loss=2.0037]
[10-03 03:18:14] - Train loss: 2.1695 | Acc@1: 77.5699 | Acc@5: 91.9056
[10-03 03:18:14] - Val loss: 1.8561 | Acc@1: 76.8620 | Acc@5: 93.3840
[10-03 03:18:14] - Epoch 90: best loss improved from 1.8564 to 1.8561
[10-03 03:18:15] - Acc@1 76.862 Acc@5 93.384
[10-03 03:18:15] - Total time: 17h 35.8m exp51 Deep 3rd stagemodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 10, 5]
channels: [128, 192, 480, 640]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [12:31, 3.33it/s, Acc@1=75.995, Acc@5=91.148, Loss=2.2274]
Epoch 89/90. validating: 101it [00:18, 5.37it/s, Acc@1=80.724, Acc@5=95.320, Loss=1.6948]
[10-04 07:32:31] - Train loss: 2.2190 | Acc@1: 75.9496 | Acc@5: 91.1647
[10-04 07:32:31] - Val loss: 1.8385 | Acc@1: 77.2700 | Acc@5: 93.5800
[10-04 07:32:31] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [12:29, 3.34it/s, Acc@1=75.959, Acc@5=91.145, Loss=2.2261]
Epoch 90/90. validating: 101it [00:18, 5.50it/s, Acc@1=73.820, Acc@5=91.844, Loss=1.9815]
[10-04 07:45:20] - Train loss: 2.2274 | Acc@1: 75.8621 | Acc@5: 91.1374
[10-04 07:45:20] - Val loss: 1.8379 | Acc@1: 77.2880 | Acc@5: 93.5840
[10-04 07:45:20] - Epoch 90: best loss improved from 1.8381 to 1.8379
[10-04 07:45:21] - Acc@1 77.288 Acc@5 93.584
[10-04 07:45:21] - Total time: 19h 56.6 exp52 Wide 3rd stagemodel_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
head_width: 2560
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
Epoch 89/90. training: 2504it [13:05, 3.19it/s, Acc@1=75.819, Acc@5=91.075, Loss=2.2206]
Epoch 89/90. validating: 101it [00:18, 5.41it/s, Acc@1=80.372, Acc@5=95.244, Loss=1.7018]
[10-04 08:32:51] - Train loss: 2.2257 | Acc@1: 75.7942 | Acc@5: 91.0592
[10-04 08:32:51] - Val loss: 1.8447 | Acc@1: 77.1080 | Acc@5: 93.4140
[10-04 08:32:51] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:05, 3.19it/s, Acc@1=76.137, Acc@5=91.212, Loss=2.2048]
Epoch 90/90. validating: 101it [00:18, 5.56it/s, Acc@1=73.852, Acc@5=91.608, Loss=1.9868]
[10-04 08:46:15] - Train loss: 2.2147 | Acc@1: 76.0806 | Acc@5: 91.1929
[10-04 08:46:15] - Val loss: 1.8441 | Acc@1: 77.1040 | Acc@5: 93.4320
[10-04 08:46:15] - Epoch 90: best loss improved from 1.8445 to 1.8441
[10-04 08:46:19] - Acc@1 77.104 Acc@5 93.432
[10-04 08:46:19] - Total time: 20h 57.6m exp53
Wide 3d stage with 2L MLPname : exp53.GEnet_wider_mlp2
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
head_width: [1536, 2560]
head_type: mlp_2
head_norm_act: swish_hard
Epoch 89/90. training: 2504it [13:56, 2.99it/s, Acc@1=79.916, Acc@5=92.758, Loss=2.1880]
Epoch 89/90. validating: 101it [00:21, 4.68it/s, Acc@1=80.000, Acc@5=94.944, Loss=1.7498]
[10-06 13:05:07] - Train loss: 2.1865 | Acc@1: 79.8614 | Acc@5: 92.7484
[10-06 13:05:07] - Val loss: 1.9143 | Acc@1: 76.2480 | Acc@5: 92.7240
[10-06 13:05:07] - Epoch 89: best loss improved from 1.9145 to 1.9143
[10-06 13:05:07] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:02, 3.20it/s, Acc@1=79.643, Acc@5=92.681, Loss=2.1912]
Epoch 90/90. validating: 101it [00:18, 5.47it/s, Acc@1=72.508, Acc@5=90.524, Loss=2.0784]
[10-06 13:18:28] - Train loss: 2.1872 | Acc@1: 79.7169 | Acc@5: 92.6993
[10-06 13:18:28] - Val loss: 1.9142 | Acc@1: 76.2440 | Acc@5: 92.7400
[10-06 13:18:28] - Epoch 90: best loss improved from 1.9143 to 1.9142
[10-06 13:18:29] - Acc@1 76.244 Acc@5 92.740
[10-06 13:18:29] - Total time: 20h 3.0m exp54 для истории оставлю как выглядит голова -
Wide 3d stage with 3L MLPname : exp54.GEnet_wider_mlp3
arch : BNet
model_params:
stage_fns: ["simpl", "simpl", "simpl", "simpl"]
block_fns: ["Pre_XX", "Pre_XX", "Pre_IR", "Pre_IR"]
stage_args: [
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"dim_reduction": "stride & expand", "bottle_ratio": 1, "force_residual": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
{"bottle_ratio": 1, "force_residual": True, "dw_str2_kernel_size": 9, "force_expansion": True},
]
stem_width: 32
norm_act: leaky_relu
stem_type: s2d
layers: [1, 2, 6, 5]
channels: [128, 192, 640, 640]
mobilenetv3_head: False
head_width: [1024, 1536, 2560]
head_type: mlp_3
head_norm_act: swish_hard
Epoch 89/90. training: 2504it [13:56, 2.99it/s, Acc@1=79.062, Acc@5=92.308, Loss=2.2058]
Epoch 89/90. validating: 101it [00:21, 4.61it/s, Acc@1=80.248, Acc@5=94.916, Loss=1.7398]
[10-06 13:05:06] - Train loss: 2.2128 | Acc@1: 79.0271 | Acc@5: 92.3409
[10-06 13:05:06] - Val loss: 1.9001 | Acc@1: 76.3000 | Acc@5: 92.8280
[10-06 13:05:06] - Epoch 89: best loss improved from 1.9006 to 1.9001
[10-06 13:05:06] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:03, 3.20it/s, Acc@1=79.307, Acc@5=92.530, Loss=2.2127]
Epoch 90/90. validating: 101it [00:18, 5.42it/s, Acc@1=72.384, Acc@5=90.748, Loss=2.0597]
[10-06 13:18:29] - Train loss: 2.2111 | Acc@1: 79.1769 | Acc@5: 92.4477
[10-06 13:18:29] - Val loss: 1.8995 | Acc@1: 76.3180 | Acc@5: 92.8420
[10-06 13:18:29] - Epoch 90: best loss improved from 1.9001 to 1.8995
[10-06 13:18:30] - Acc@1 76.318 Acc@5 92.842
[10-06 13:18:30] - Total time: 20h 2.9m exp??? |
Spoiler TemplateTo be added Пытаюсь уйти от CE к другим лоссампока они всё очень сильно оверфитятся. Видимо ambigiouty которое вносит CE служило хорошей регуляризацией. Есть два варианта - либо добавить dropout/dropconnect, либо переехать со своими экспериментами на модель поменьше. Второй вариант выглядит проще exp70-exp80 Вся идея попробовать sigmoid пришла из статьи Are we done with Imagenet? но авторы не выложили код и не понятно как именно они обучались с сигмоидой, что оно им так докидывало. Еще пытался использовать Novograd, если поставить очень большой LR (0.1 что очень много для adaptive методов) то оно учится примерно до такого же качества как с SGD, что неплохо exp82 exp48 + CCE + Temperature=0.1criterion_params:
temperature: 0.1
cutmix: 1.0
weight_decay : 3e-5
# smooth: false # false for exp82
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
Epoch 89/90. training: 2503it [13:27, 3.10it/s, Acc@1=80.464, Acc@5=93.062, Loss=1.1918]
Epoch 89/90. validating: 101it [00:18, 5.43it/s, Acc@1=79.724, Acc@5=94.860, Loss=0.7964]
[10-31 08:26:41] - Train loss: 1.1971 | Acc@1: 80.3969 | Acc@5: 93.0314
[10-31 08:26:41] - Val loss: 0.9661 | Acc@1: 76.2140 | Acc@5: 92.7420
[10-31 08:26:41] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:27, 3.10it/s, Acc@1=80.154, Acc@5=92.923, Loss=1.2080]
Epoch 90/90. validating: 101it [00:18, 5.59it/s, Acc@1=72.684, Acc@5=90.664, Loss=1.1355]
[10-31 08:40:27] - Train loss: 1.2152 | Acc@1: 80.0942 | Acc@5: 92.8924
[10-31 08:40:27] - Val loss: 0.9661 | Acc@1: 76.2020 | Acc@5: 92.7700
[10-31 08:40:27] - Model params: 21.57M
[10-31 08:40:28] - Acc@1 76.202 Acc@5 92.770
[10-31 08:40:28] - Total time: 20h 39.8m повторил эксперимент выше с smooth=False. как видно это сильно регуляризирует в плане лосса и качество на валидации заметно лучше чем в варианте выше, но всё равно как будто хуже чем exp48. exp48 + CCE + Temperature=0.1 + smoothEpoch 89/90. training: 2503it [13:46, 3.03it/s, Acc@1=80.406, Acc@5=93.151, Loss=2.1034]
Epoch 89/90. validating: 101it [00:19, 5.25it/s, Acc@1=80.740, Acc@5=95.144, Loss=1.7388]
[11-03 04:01:14] - Train loss: 2.1147 | Acc@1: 80.1818 | Acc@5: 93.0761
[11-03 04:01:14] - Val loss: 1.8886 | Acc@1: 77.1900 | Acc@5: 93.2920
[11-03 04:01:14] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:46, 3.03it/s, Acc@1=79.968, Acc@5=92.983, Loss=2.1238]
Epoch 90/90. validating: 101it [00:18, 5.38it/s, Acc@1=73.664, Acc@5=91.440, Loss=2.0380]
[11-03 04:15:20] - Train loss: 2.1178 | Acc@1: 80.0714 | Acc@5: 93.0148
[11-03 04:15:20] - Val loss: 1.8884 | Acc@1: 77.2100 | Acc@5: 93.2900
[11-03 04:15:20] - Model params: 21.57M
[11-03 04:15:21] - Acc@1 77.210 Acc@5 93.290
[11-03 04:15:21] - Total time: 21h 21.6m exp83 exp48 + Blurblur: true
cutmix: 1.0
weight_decay : 3e-5
# smooth: false # false for exp82
ctwist: true
# very short period of ~3 epoch for ema: 0.9993 ** (2500 * 3) ~= 5e-3
ema_decay: 0.9993
# lr should be BS/256 * 0.1
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mom": 0.9, "mode": "cos"},
]
Epoch 89/90. training: 2503it [16:23, 2.54it/s, Acc@1=78.342, Acc@5=92.212, Loss=1.2685]
Epoch 89/90. validating: 101it [00:19, 5.18it/s, Acc@1=80.484, Acc@5=95.164, Loss=0.7507]
[10-31 10:21:56] - Train loss: 1.2621 | Acc@1: 78.3775 | Acc@5: 92.2247
[10-31 10:21:56] - Val loss: 0.9054 | Acc@1: 76.9520 | Acc@5: 93.3680
[10-31 10:21:56] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [16:26, 2.54it/s, Acc@1=78.196, Acc@5=92.154, Loss=1.2753]
Epoch 90/90. validating: 101it [00:19, 5.07it/s, Acc@1=73.444, Acc@5=91.560, Loss=1.0600]
[10-31 10:38:43] - Train loss: 1.2819 | Acc@1: 78.1197 | Acc@5: 92.1305
[10-31 10:38:43] - Val loss: 0.9054 | Acc@1: 76.9660 | Acc@5: 93.3600
[10-31 10:38:43] - Model params: 21.57M
[10-31 10:38:44] - Acc@1 76.966 Acc@5 93.360
[10-31 10:38:44] - Total time: 21h 41.1m повторил эксперимент выше со smooth=True, сильно регулиризирует, валидация лучше. но как будто все равно хуже чем exp48. exp48 + Blur + smoothEpoch 89/90. training: 2503it [13:47, 3.03it/s, Acc@1=78.079, Acc@5=92.096, Loss=2.1431]
Epoch 89/90. validating: 101it [00:19, 5.16it/s, Acc@1=80.548, Acc@5=95.280, Loss=1.6945]
[11-03 04:05:48] - Train loss: 2.1534 | Acc@1: 77.9282 | Acc@5: 92.0183
[11-03 04:05:48] - Val loss: 1.8339 | Acc@1: 77.1120 | Acc@5: 93.5560
[11-03 04:05:48] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [14:30, 2.88it/s, Acc@1=77.196, Acc@5=91.671, Loss=2.1822]
Epoch 90/90. validating: 101it [00:19, 5.20it/s, Acc@1=73.676, Acc@5=91.800, Loss=1.9737]
[11-03 04:20:38] - Train loss: 2.1695 | Acc@1: 77.5135 | Acc@5: 91.8176
[11-03 04:20:38] - Val loss: 1.8344 | Acc@1: 77.1080 | Acc@5: 93.5540
[11-03 04:20:38] - Model params: 21.57M
[11-03 04:20:39] - Acc@1 77.108 Acc@5 93.554
[11-03 04:20:39] - Total time: 21h 23.3m exp48 (again) exp48 (again)Epoch 89/90. training: 2503it [13:53, 3.00it/s, Acc@1=78.806, Acc@5=92.428, Loss=2.1194]
Epoch 89/90. validating: 101it [00:19, 5.30it/s, Acc@1=80.868, Acc@5=95.432, Loss=1.6887]
[11-01 14:50:07] - Train loss: 2.1231 | Acc@1: 78.6401 | Acc@5: 92.3581
[11-01 14:50:07] - Val loss: 1.8339 | Acc@1: 77.2540 | Acc@5: 93.6480
[11-01 14:50:07] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:40, 3.05it/s, Acc@1=78.772, Acc@5=92.430, Loss=2.1268]
Epoch 90/90. validating: 101it [00:18, 5.44it/s, Acc@1=73.672, Acc@5=91.884, Loss=1.9793]
[11-01 15:04:06] - Train loss: 2.1195 | Acc@1: 78.8330 | Acc@5: 92.4460
[11-01 15:04:06] - Val loss: 1.8342 | Acc@1: 77.2640 | Acc@5: 93.6520
[11-01 15:04:06] - Model params: 21.57M
[11-01 15:04:09] - Acc@1 77.264 Acc@5 93.652
[11-01 15:04:09] - Total time: 21h 2.1m exp84 exp48 + Blur + Temp + smoothEpoch 89/90. training: 2503it [13:53, 3.00it/s, Acc@1=79.250, Acc@5=92.642, Loss=2.1554]
Epoch 89/90. validating: 101it [00:19, 5.28it/s, Acc@1=80.448, Acc@5=95.160, Loss=1.7482]
[11-03 09:11:14] - Train loss: 2.1652 | Acc@1: 79.0706 | Acc@5: 92.5653
[11-03 09:11:14] - Val loss: 1.8981 | Acc@1: 76.9520 | Acc@5: 93.1720
[11-03 09:11:14] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:52, 3.01it/s, Acc@1=78.874, Acc@5=92.430, Loss=2.1801]
Epoch 90/90. validating: 101it [00:18, 5.43it/s, Acc@1=73.488, Acc@5=91.192, Loss=2.0481]
[11-03 09:25:26] - Train loss: 2.1706 | Acc@1: 78.9673 | Acc@5: 92.5004
[11-03 09:25:26] - Val loss: 1.8981 | Acc@1: 76.9860 | Acc@5: 93.1820
[11-03 09:25:26] - Model params: 21.57M
[11-03 09:25:26] - Acc@1 76.986 Acc@5 93.182
[11-03 09:25:26] - Total time: 23h 31.9m exp85 BNet resetphases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 6], "lr": [0, 0.4], "mom": 0.95},
{"ep": [6, 60], "lr": [0.4, 0], "mode": "cos"},
{"ep": [60, 90], "lr": [0.01, 0], "mode": "cos"},
]
Epoch 60/90. training: 2503it [13:53, 3.00it/s, Acc@1=74.609, Acc@5=90.443, Loss=2.2765]
Epoch 60/90. validating: 101it [00:18, 5.40it/s, Acc@1=74.220, Acc@5=92.236, Loss=1.9527]
[11-04 01:19:41] - Train loss: 2.2765 | Acc@1: 74.5169 | Acc@5: 90.3970
[11-04 01:19:41] - Val loss: 1.8253 | Acc@1: 77.3800 | Acc@5: 93.7920
[11-04 01:19:41] - Epoch 61 | lr 8.46e-05
Epoch 89/90. training: 2503it [13:46, 3.03it/s, Acc@1=77.693, Acc@5=91.985, Loss=2.1583]
Epoch 89/90. validating: 101it [00:19, 5.22it/s, Acc@1=81.036, Acc@5=95.472, Loss=1.6834]
[11-04 08:10:57] - Train loss: 2.1522 | Acc@1: 77.8565 | Acc@5: 92.0423
[11-04 08:10:57] - Val loss: 1.8129 | Acc@1: 77.7800 | Acc@5: 93.9280
[11-04 08:10:57] - Epoch 90 | lr 6.16e-05
Epoch 90/90. training: 2504it [14:23, 2.90it/s, Acc@1=77.939, Acc@5=92.012, Loss=2.1401]
Epoch 90/90. validating: 101it [00:18, 5.38it/s, Acc@1=74.548, Acc@5=92.388, Loss=1.9421]
[11-04 08:25:40] - Train loss: 2.1498 | Acc@1: 77.9024 | Acc@5: 91.9953
[11-04 08:25:40] - Val loss: 1.8127 | Acc@1: 77.7980 | Acc@5: 93.9200
[11-04 08:25:40] - Epoch 90: best loss improved from 1.8129 to 1.8127
[11-04 08:25:40] - Model params: 21.57M
[11-04 08:25:41] - Acc@1 77.798 Acc@5 93.920
[11-04 08:25:41] - Total time: 22h 35.3m exp86 Normalized CEEpoch 89/90. training: 2503it [16:18, 2.56it/s, Acc@1=72.725, Acc@5=86.219, Loss=6.2849]
Epoch 89/90. validating: 101it [00:19, 5.20it/s, Acc@1=78.448, Acc@5=92.412, Loss=6.1837]
[11-04 17:22:55] - Train loss: 6.2844 | Acc@1: 72.7285 | Acc@5: 86.1958
[11-04 17:22:55] - Val loss: 6.2154 | Acc@1: 74.7220 | Acc@5: 90.0080
[11-04 17:22:55] - Epoch 89: best loss improved from 6.2154 to 6.2154
[11-04 17:22:56] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [16:20, 2.55it/s, Acc@1=73.049, Acc@5=86.363, Loss=6.2798]
Epoch 90/90. validating: 101it [00:19, 5.24it/s, Acc@1=70.920, Acc@5=87.632, Loss=6.2471]
[11-04 17:39:36] - Train loss: 6.2831 | Acc@1: 72.8597 | Acc@5: 86.2751
[11-04 17:39:36] - Val loss: 6.2154 | Acc@1: 74.6740 | Acc@5: 90.0240
[11-04 17:39:36] - Model params: 21.57M
[11-04 17:39:36] - Acc@1 74.674 Acc@5 90.024
[11-04 17:39:36] - Total time: 23h 4.5m exp88 Norm + Temperature head_width: 256 # originally in was 2560
head_norm_act: none
criterion_params:
normalize: true
temperature: 0.1
Epoch 89/90. training: 2503it [15:49, 2.64it/s, Acc@1=79.805, Acc@5=91.182, Loss=1.4865]
Epoch 89/90. validating: 101it [00:18, 5.35it/s, Acc@1=79.172, Acc@5=93.776, Loss=1.3644]
[11-08 16:49:21] - Train loss: 1.4868 | Acc@1: 79.8130 | Acc@5: 91.1656
[11-08 16:49:21] - Val loss: 1.6291 | Acc@1: 76.0000 | Acc@5: 91.4660
[11-08 16:49:21] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [15:41, 2.66it/s, Acc@1=79.672, Acc@5=91.171, Loss=1.4893]
Epoch 90/90. validating: 101it [00:18, 5.49it/s, Acc@1=72.856, Acc@5=89.176, Loss=1.8935]
[11-08 17:05:21] - Train loss: 1.4881 | Acc@1: 79.7178 | Acc@5: 91.1625
[11-08 17:05:21] - Val loss: 1.6291 | Acc@1: 76.0200 | Acc@5: 91.4800
[11-08 17:05:21] - Model params: 16.90M
[11-08 17:05:24] - Acc@1 76.020 Acc@5 91.480
[11-08 17:05:24] - Total time: 21h 55.8m exp87 ArcFace (emb=256) head_width: 256 # originally in was 2560
head_norm_act: none
Epoch 89/90. training: 2503it [15:49, 2.64it/s, Acc@1=79.805, Acc@5=91.182, Loss=1.4865]
Epoch 89/90. validating: 101it [00:18, 5.35it/s, Acc@1=79.172, Acc@5=93.776, Loss=1.3644]
[11-08 16:49:21] - Train loss: 1.4868 | Acc@1: 79.8130 | Acc@5: 91.1656
[11-08 16:49:21] - Val loss: 1.6291 | Acc@1: 76.0000 | Acc@5: 91.4660
[11-08 16:49:21] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [15:41, 2.66it/s, Acc@1=79.672, Acc@5=91.171, Loss=1.4893]
Epoch 90/90. validating: 101it [00:18, 5.49it/s, Acc@1=72.856, Acc@5=89.176, Loss=1.8935]
[11-08 17:05:21] - Train loss: 1.4881 | Acc@1: 79.7178 | Acc@5: 91.1625
[11-08 17:05:21] - Val loss: 1.6291 | Acc@1: 76.0200 | Acc@5: 91.4800
[11-08 17:05:21] - Model params: 16.90M
[11-08 17:05:24] - Acc@1 76.020 Acc@5 91.480
[11-08 17:05:24] - Total time: 21h 55.8m exp89 Angular SoftmaxEpoch 89/90. training: 2503it [13:45, 3.03it/s, Acc@1=80.710, Acc@5=92.310, Loss=0.9378]
Epoch 89/90. validating: 101it [00:18, 5.37it/s, Acc@1=79.608, Acc@5=94.116, Loss=0.9038]
[11-08 12:49:55] - Train loss: 0.9377 | Acc@1: 80.7350 | Acc@5: 92.3072
[11-08 12:49:55] - Val loss: 1.0862 | Acc@1: 76.0600 | Acc@5: 91.9060
[11-08 12:49:55] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:45, 3.03it/s, Acc@1=80.704, Acc@5=92.262, Loss=0.9386]
Epoch 90/90. validating: 101it [00:18, 5.54it/s, Acc@1=72.528, Acc@5=89.700, Loss=1.2685]
[11-08 13:03:59] - Train loss: 0.9382 | Acc@1: 80.7454 | Acc@5: 92.2795
[11-08 13:03:59] - Val loss: 1.0862 | Acc@1: 76.0500 | Acc@5: 91.9120
[11-08 13:03:59] - Model params: 16.90M
[11-08 13:03:59] - Acc@1 76.050 Acc@5 91.912
[11-08 13:03:59] - Total time: 23h 41.4m exp90 A-Softmax + cutmixEpoch 89/90. training: 2503it [13:36, 3.07it/s, Acc@1=75.384, Acc@5=89.663, Loss=1.5914]
Epoch 89/90. validating: 101it [00:19, 5.27it/s, Acc@1=80.212, Acc@5=94.816, Loss=0.8513]
[11-10 06:58:55] - Train loss: 1.5841 | Acc@1: 75.4045 | Acc@5: 89.6570
[11-10 06:58:55] - Val loss: 1.0250 | Acc@1: 76.8720 | Acc@5: 92.7460
[11-10 06:58:55] - Epoch 89: best loss improved from 1.0251 to 1.0250
[11-10 06:58:55] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:37, 3.06it/s, Acc@1=75.344, Acc@5=89.691, Loss=1.5897]
Epoch 90/90. validating: 101it [00:18, 5.40it/s, Acc@1=73.528, Acc@5=90.688, Loss=1.1986]
[11-10 07:12:51] - Train loss: 1.5928 | Acc@1: 75.2722 | Acc@5: 89.6274
[11-10 07:12:51] - Val loss: 1.0251 | Acc@1: 76.8780 | Acc@5: 92.7480
[11-10 07:12:51] - Model params: 16.90M
[11-10 07:12:52] - Acc@1 76.878 Acc@5 92.748
[11-10 07:12:52] - Total time: 21h 17.3m Запустил тот же конфиг но embedding_size = 128. интересно посмотреть, на сколько из-за этого упадёт качество (и упадёт ли вообще), кажется что с таким маленьким количеством классов, 256 может быть даже много. A-Softmax + cutmix + emb 128[11-11 05:31:53] - Epoch 89 | lr 4.58e-04
[11-11 05:45:47] - Train loss: 1.6215 | Acc@1: 75.0090 | Acc@5: 89.3813
[11-11 05:45:47] - Val loss: 1.0377 | Acc@1: 76.7260 | Acc@5: 92.7180
[11-11 05:45:47] - Epoch 89: best loss improved from 1.0381 to 1.0377
[11-11 05:45:47] - Epoch 90 | lr 1.65e-04
[11-11 05:59:42] - Train loss: 1.6177 | Acc@1: 74.9387 | Acc@5: 89.3578
[11-11 05:59:42] - Val loss: 1.0376 | Acc@1: 76.7260 | Acc@5: 92.7220
[11-11 05:59:42] - Epoch 90: best loss improved from 1.0377 to 1.0376
[11-11 05:59:42] - Model params: 16.64M
[11-11 05:59:43] - Acc@1 76.726 Acc@5 92.722
[11-11 05:59:43] - Total time: 21h 37.0m Запустил с прям очень маленьким embedding = 64, падение по качеству очень маленькое A-Softmax + cutmix + emb 64[11-11 19:40:16] - Train loss: 1.6929 | Acc@1: 73.9992 | Acc@5: 88.5876
[11-11 19:40:16] - Val loss: 1.0606 | Acc@1: 76.6880 | Acc@5: 92.3080
[11-11 19:40:16] - Epoch 89: best loss improved from 1.0610 to 1.0606
[11-11 19:40:16] - Epoch 90 | lr 1.65e-04
[11-11 19:56:14] - Train loss: 1.7164 | Acc@1: 73.8119 | Acc@5: 88.4599
[11-11 19:56:14] - Val loss: 1.0606 | Acc@1: 76.6780 | Acc@5: 92.3100
[11-11 19:56:14] - Epoch 90: best loss improved from 1.0606 to 1.0606
[11-11 19:56:15] - Model params: 16.51M
[11-11 19:56:17] - Acc@1 76.678 Acc@5 92.310
[11-11 19:56:17] - Total time: 22h 46.8m exp92 Arc Softmaxcriterion_params: {temperature: 0.15}
[11-10 16:27:46] - Epoch 89 | lr 4.58e-04
[11-10 16:41:54] - Train loss: 1.8420 | Acc@1: 73.8341 | Acc@5: 87.5725
[11-10 16:41:54] - Val loss: 1.1496 | Acc@1: 76.0900 | Acc@5: 91.1780
[11-10 16:41:54] - Epoch 89: best loss improved from 1.1502 to 1.1496
[11-10 16:41:54] - Epoch 90 | lr 1.65e-04
[11-10 16:57:49] - Train loss: 1.8384 | Acc@1: 73.6800 | Acc@5: 87.4934
[11-10 16:57:49] - Val loss: 1.1495 | Acc@1: 76.0840 | Acc@5: 91.1800
[11-10 16:57:49] - Epoch 90: best loss improved from 1.1496 to 1.1495
[11-10 16:57:49] - Model params: 16.90M
[11-10 16:57:50] - Acc@1 76.084 Acc@5 91.180
[11-10 16:57:50] - Total time: 21h 14.1m Arc Softmax + Embedding 64Epoch 89/90. training: 2503it [13:46, 3.03it/s, Acc@1=73.310, Acc@5=87.166, Loss=1.8870]
Epoch 89/90. validating: 101it [00:18, 5.38it/s, Acc@1=79.532, Acc@5=93.512, Loss=0.9568]
[11-11 18:14:15] - Train loss: 1.8801 | Acc@1: 73.2704 | Acc@5: 87.0995
[11-11 18:14:15] - Val loss: 1.1596 | Acc@1: 76.1140 | Acc@5: 90.9620
[11-11 18:14:15] - Epoch 89: best loss improved from 1.1600 to 1.1596
[11-11 18:14:15] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 2504it [13:45, 3.03it/s, Acc@1=73.519, Acc@5=87.253, Loss=1.8515]
Epoch 90/90. validating: 101it [00:18, 5.54it/s, Acc@1=72.708, Acc@5=88.412, Loss=1.3621]
[11-11 18:28:20] - Train loss: 1.8853 | Acc@1: 73.2185 | Acc@5: 87.0526
[11-11 18:28:20] - Val loss: 1.1595 | Acc@1: 76.1060 | Acc@5: 90.9600
[11-11 18:28:20] - Epoch 90: best loss improved from 1.1596 to 1.1595
[11-11 18:28:20] - Model params: 16.51M
[11-11 18:28:20] - Acc@1 76.106 Acc@5 90.960
[11-11 18:28:20] - Total time: 21h 9.0m exp93 Spoiler Template[11-10 16:30:22] - Epoch 89 | lr 4.58e-04
[11-10 16:44:31] - Train loss: 2.3200 | Acc@1: 72.9741 | Acc@5: 86.7050
[11-10 16:44:31] - Val loss: 1.4490 | Acc@1: 75.8240 | Acc@5: 90.3940
[11-10 16:44:31] - Epoch 89: best loss improved from 1.4494 to 1.4490
[11-10 16:44:32] - Epoch 90 | lr 1.65e-04
[11-10 16:58:40] - Train loss: 2.3336 | Acc@1: 72.9550 | Acc@5: 86.7019
[11-10 16:58:40] - Val loss: 1.4488 | Acc@1: 75.8360 | Acc@5: 90.3840
[11-10 16:58:40] - Epoch 90: best loss improved from 1.4490 to 1.4488
[11-10 16:58:40] - Model params: 16.90M
[11-10 16:58:41] - Acc@1 75.836 Acc@5 90.384
[11-10 16:58:41] - Total time: 21h 15.2m exp?? Spoiler TemplateTo be added Spoiler TemplateTo be added ИДЕИ
|
Spoiler TemplateTo be added Новый цикл экспериментов, цель - выяснить как использовать Novograd и затестить одну новую аугу от Ильиexp97 в итоге регуляризации сработали хорошо - сеть очень далеко от оверфита, который наблюдается при обучении бейзлайна. из минусов - во время одной из смены lr поскольку не было warmup, точность сильно упала и так и не восстановилась до конца, поэтому результаты такие же как если бы учил 90 эпох :c R50 + reg + long training# default ResNet50 with almost all possible augmentations and regularizations + trained for very long time
# the idea is to check the best obtainable quality
# config is tuned for 2 GPUs
name : exp97.R50_hard_reg_base
arch : resnet50
model_params :
drop_rate: 0.2
drop_connect_rate: 0.2
weight_decay : 3e-5
cutmix : 1.0
smooth: True
ctwist : True
blur: true
crop_method: full
ema_decay: 0.9997 # using EMA instead of Lookahead
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 100], "lr": [0.2, 0], "mode": "cos"},
{"ep": [100, 150], "lr": [0.02, 0], "mode": "cos"},
{"ep": [150, 200], "lr": [0.02, 0], "mode": "cos"},
]
Epoch 199/200. training: 2503it [18:52, 2.21it/s, Acc@1=71.435, Acc@5=88.727, Loss=2.4223]
Epoch 199/200. validating: 101it [00:31, 3.25it/s, Acc@1=80.668, Acc@5=95.276, Loss=1.6923]
[12-25 01:48:19] - Train loss: 2.4181 | Acc@1: 71.5346 | Acc@5: 88.7588
[12-25 01:48:19] - Val loss: 1.8230 | Acc@1: 77.4420 | Acc@5: 93.6340
[12-25 01:48:19] - Epoch 199: best loss improved from 1.8231 to 1.8230
[12-25 01:48:19] - Epoch 200 | lr 4.44e-05
Epoch 200/200. training: 2503it [18:35, 2.24it/s, Acc@1=70.987, Acc@5=88.445, Loss=2.4524]
Epoch 200/200. validating: 101it [00:29, 3.44it/s, Acc@1=74.192, Acc@5=92.016, Loss=1.9542]
[12-25 02:07:24] - Train loss: 2.4373 | Acc@1: 71.2615 | Acc@5: 88.5853
[12-25 02:07:24] - Val loss: 1.8235 | Acc@1: 77.4360 | Acc@5: 93.6420
[12-25 02:07:24] - Model params: 25.56M
[12-25 02:07:26] - Acc@1 77.436 Acc@5 93.642
[12-25 02:07:26] - Total time: 60h 41.9m exp98 как и выше, из-за отсутствия warmup в какой-то момент лосс сильно скакнул и не восстановился. в конце качество чуть хуже чем в exp97, НО performance gap между вал и трейном выше. поэтому если бы я тюнил условные 500 эпох, этот вариант почти наверняка был бы лучше. да и в целом тот факт что оно нормально обучается с таким большим wd это классно R50 + high WD# same as 97 but wd increased to 0.002
name : exp98.R50_hard_reg_base_high_wd
arch : resnet50
model_params :
drop_rate: 0.2
drop_connect_rate: 0.2
cutmix : 1.0
smooth: True
ctwist : True
blur: true
crop_method: full
ema_decay: 0.9997 # using EMA instead of Lookahead
weight_decay : 0.002 # 40x times higher than in exp97
optim: fused_sgd
optim_params: # want SGDW behaviour
wd_after_momentum: True
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 100], "lr": [0.2, 0], "mode": "cos"},
{"ep": [100, 150], "lr": [0.02, 0], "mode": "cos"},
{"ep": [150, 200], "lr": [0.02, 0], "mode": "cos"},ц
]
Epoch 199/200. training: 2503it [18:48, 2.22it/s, Acc@1=68.633, Acc@5=87.144, Loss=2.5238]
Epoch 199/200. validating: 101it [00:25, 3.98it/s, Acc@1=80.024, Acc@5=95.192, Loss=1.7061]
[12-25 01:54:34] - Train loss: 2.5360 | Acc@1: 68.4841 | Acc@5: 87.0170
[12-25 01:54:34] - Val loss: 1.8344 | Acc@1: 76.8020 | Acc@5: 93.5640
[12-25 01:54:34] - Epoch 200 | lr 4.44e-05
Epoch 200/200. training: 2503it [18:23, 2.27it/s, Acc@1=68.604, Acc@5=86.993, Loss=2.5429]
Epoch 200/200. validating: 101it [00:25, 3.99it/s, Acc@1=73.604, Acc@5=91.932, Loss=1.9628]
[12-25 02:13:25] - Train loss: 2.5357 | Acc@1: 68.6075 | Acc@5: 87.0516
[12-25 02:13:25] - Val loss: 1.8346 | Acc@1: 76.7940 | Acc@5: 93.5580
[12-25 02:13:25] - Model params: 25.56M
[12-25 02:13:26] - Acc@1 76.794 Acc@5 93.558
[12-25 02:13:26] - Total time: 60h 33.8m exp99 Adacos + margin (0.2) head_width: 128 # need much smaller for angular losses 2560
# in exp.99 realized that we may need a better head! need to investigate this moment
head_type: default
head_norm_act: none # only for exp87
criterion: adacos
criterion_params:
margin: 0.2
Epoch 89/90. validating: 101it [00:17, 5.90it/s, Acc@1=80.472, Acc@5=93.880, Loss=2.1644]
[12-26 12:20:29] - Train loss: 2.8462 | Acc@1: 76.3154 | Acc@5: 88.7966
[12-26 12:20:29] - Val loss: 2.5252 | Acc@1: 77.0280 | Acc@5: 91.9380
[12-26 12:20:29] - Epoch 89: best loss improved from 2.5254 to 2.5252
[12-26 12:20:29] - Epoch 90 | lr 1.65e-04
Epoch 90/90. training: 16% 396/2503 [02:27<14:10, 2.48it/s, Acc@1=78.621, Acc@5=90.703, Loss=2.5073][12-26 12:22:58] -
Running B: 188609.11. Running theta: 0.76. Running S: 20.00
Epoch 90/90. training: 56% 1396/2503 [08:53<07:04, 2.61it/s, Acc@1=74.321, Acc@5=87.376, Loss=3.0162][12-26 12:29:23] -
Running B: 200736.11. Running theta: 0.75. Running S: 20.00
Epoch 90/90. training: 96% 2396/2503 [15:18<00:41, 2.60it/s, Acc@1=76.157, Acc@5=89.091, Loss=2.6989][12-26 12:35:48] -
Running B: 172138.70. Running theta: 0.76. Running S: 20.00
Epoch 90/90. training: 2504it [15:58, 2.61it/s, Acc@1=76.454, Acc@5=88.870, Loss=2.8326]
Epoch 90/90. validating: 101it [00:19, 5.11it/s, Acc@1=73.616, Acc@5=90.004, Loss=2.8854]
[12-26 12:36:48] - Train loss: 2.8434 | Acc@1: 76.4061 | Acc@5: 88.8176
[12-26 12:36:48] - Val loss: 2.5252 | Acc@1: 77.0420 | Acc@5: 91.9400
[12-26 12:36:48] - Model params: 16.64M
[12-26 12:36:49] - Acc@1 77.042 Acc@5 91.940
[12-26 12:36:49] - Total time: 25h 45.0m exp100 (юху!) exp101 почему-то завис на 70й эпохе, поэтому финальных результатов по нему нет, но по сравнению с exp100 работало чуть хуже. Уже после конца эксперимента задумался, что может нужно ставить affine=False в голове upd. решил посмотрть как делать другие. У Ильи идет GAP -> FC -> BatchNorm d1, говорит что так работает лучше чем без norm. в BYOL делают очень похоже на MoCov2 с двумя отличиями - hidden size 4096 (в два раза жирнее, но опять таки он не используется во время валидации) и MLP: FC - BN - ReLU - FC. в untitled blog пишут что BN критически важен и без него не будет работать, потому что он делает не явный contrastive Adacos Margin + Mobilnet head[12-28 08:01:31] - Epoch 90 | lr 1.65e-04
[12-28 08:17:23] - Running B: 208025.92. Running theta: 0.73. Running S: 20.00
Epoch 90/90. training: 2504it [16:33, 2.52it/s, Acc@1=76.567, Acc@5=88.957, Loss=2.8292]
Epoch 90/90. validating: 101it [00:21, 4.70it/s, Acc@1=73.204, Acc@5=89.464, Loss=2.8979]
[12-28 08:18:26] - Train loss: 2.8405 | Acc@1: 76.4747 | Acc@5: 88.8893
[12-28 08:18:26] - Val loss: 2.5298 | Acc@1: 76.7200 | Acc@5: 91.7740
[12-28 08:18:26] - Epoch 90: best loss improved from 2.5308 to 2.5298
[12-28 08:18:27] - Model params: 16.64M
[12-28 08:18:28] - Acc@1 76.720 Acc@5 91.774
[12-28 08:18:28] - Total time: 24h 41.6m exp102
exp103
MLP head after GAP head_type: mlp_bn_fc # conv1x1 -> GAP -> BN -> Act -> FC
head_norm_act: swish_hard # hswish to avoid loss of information
criterion: a-softmax
criterion_params:
temperature: 0.1 # scale is inside CCE
[12-29 16:00:31] - Epoch 90 | lr 1.65e-04
[12-29 16:17:56] - Train loss: 1.6111 | Acc@1: 75.1764 | Acc@5: 89.5536
[12-29 16:17:56] - Val loss: 1.0210 | Acc@1: 77.0500 | Acc@5: 92.8080
[12-29 16:17:56] - Epoch 90: best loss improved from 1.0211 to 1.0210
[12-29 16:17:57] - Model params: 17.95M
[12-29 16:17:58] - Acc@1 77.050 Acc@5 92.808
[12-29 16:17:58] - Total time: 25h 30.2m exp104
по итогу exp104 работает чуть лучше чем exp103, на нём и остановимся, но достоверность результатов низкая MLP with final norm head_type: mlp_bn_fc_bn # conv1x1 -> GAP -> BN -> Act -> FC -> BN
head_norm_act: swish_hard # hswish to avoid loss of information
criterion: a-softmax
criterion_params:
temperature: 0.1 # scale is inside CCE
[12-29 18:37:32] - Epoch 90 | lr 1.65e-04
[12-29 18:56:09] - Train loss: 1.6170 | Acc@1: 74.9274 | Acc@5: 89.4424
[12-29 18:56:09] - Val loss: 1.0226 | Acc@1: 76.9440 | Acc@5: 92.7260
[12-29 18:56:09] - Model params: 17.95M
[12-29 18:56:10] - Acc@1 76.944 Acc@5 92.726
[12-29 18:56:10] - Total time: 27h 14.7m exp105 Default no normhead_type: default_nonorm # conv1x1 -> GAP
head_norm_act: none # not used with default_nonorm head
criterion: a-softmax
criterion_params:
temperature: 0.1 # scale is inside CCE
[12-30 21:08:40] - Epoch 47 | lr 1.13e-01
[12-30 21:23:57] - Train loss: 2.2654 | Acc@1: 60.5302 | Acc@5: 80.8098
[12-30 21:23:57] - Val loss: 1.1509 | Acc@1: 73.6520 | Acc@5: 91.2900 exp106 exp107 Spoiler TemplateTo be added exp108 R50 Hard Reg Basearch : resnet50
model_params :
drop_rate: 0.1
drop_connect_rate: 0.1
weight_decay : 3e-5
cutmix : 1.0
smooth: True
ctwist : True
blur: true
crop_method: full
ema_decay: 0.9993 # using EMA instead of Lookahead
phases : [
{"ep": 0, "sz": 224, "bs": 256},
{"ep": [0, 8], "lr": [0, 0.2], "mom": 0.9},
{"ep": [8, 90], "lr": [0.2, 0], "mode": "cos"},
# {"ep": [90, 95], "lr": [0.02, 0]}, - училось вот с таким вариантом
{"ep": [90, 95], "lr": [0, 0.02]},
{"ep": [95, 120], "lr": [0.02, 0], "mode": "cos"},
]
[01-11 17:06:04] - Epoch 90 | lr 1.65e-04
[01-11 17:22:04] - Train loss: 2.4435 | Acc@1: 70.6287 | Acc@5: 88.2824
[01-11 17:22:04] - Val loss: 1.8560 | Acc@1: 76.6160 | Acc@5: 93.3100
[01-12 01:07:32] - Epoch 120 | lr 1.77e-04
[01-12 01:23:35] - Train loss: 2.3915 | Acc@1: 72.2584 | Acc@5: 89.2017
[01-12 01:23:35] - Val loss: 1.8399 | Acc@1: 76.8520 | Acc@5: 93.4540
[01-12 01:23:35] - Model params: 25.56M
[01-12 01:23:35] - Acc@1 76.852 Acc@5 93.454
[01-12 01:23:35] - Total time: 32h 12.1m exp109 R50 + Hard Reg + SE-var3[01-11 20:37:12] - Epoch 90 | lr 1.65e-04
[01-11 20:55:29] - Train loss: 2.3783 | Acc@1: 73.2948 | Acc@5: 89.6698
[01-11 20:55:29] - Val loss: 1.8296 | Acc@1: 77.0880 | Acc@5: 93.6420
[01-12 05:45:09] - Epoch 120 | lr 1.77e-04
[01-12 06:03:19] - Train loss: 2.3068 | Acc@1: 75.0707 | Acc@5: 90.5739
[01-12 06:03:19] - Val loss: 1.8200 | Acc@1: 77.4600 | Acc@5: 93.6720
[01-12 06:03:19] - Model params: 45.69M
[01-12 06:03:19] - Acc@1 77.460 Acc@5 93.672
[01-12 06:03:19] - Total time: 36h 42.2m exp110 R50 + Hard Reg + SEДля сравнения с exp111 & exp112 прикладываю результаты после 90 эпох
[01-11 23:33:45] - Epoch 90 | lr 1.65e-04
[01-11 23:51:53] - Train loss: 2.3715 | Acc@1: 72.9695 | Acc@5: 89.6153
[01-11 23:51:53] - Val loss: 1.8135 | Acc@1: 77.5260 | Acc@5: 93.7700
[01-12 09:03:05] - Epoch 120 | lr 1.77e-04
[01-12 09:23:29] - Train loss: 2.3132 | Acc@1: 74.5208 | Acc@5: 90.4480
[01-12 09:23:29] - Val loss: 1.8006 | Acc@1: 77.8480 | Acc@5: 94.0400
[01-12 09:23:29] - Model params: 28.09M
[01-12 09:23:29] - Acc@1 77.848 Acc@5 94.040
[01-12 09:23:29] - Total time: 39h 59.2m exp111 R50 + Hard Reg + ECA[01-13 14:38:27] - Epoch 90 | lr 1.65e-04
[01-13 14:56:35] - Train loss: 2.3476 | Acc@1: 73.0016 | Acc@5: 89.5411
[01-13 14:56:35] - Val loss: 1.7983 | Acc@1: 77.6180 | Acc@5: 93.9180 exp112 R50 + Hard Reg + ECA (with kernel size=9)[01-14 12:54:45] - Epoch 91 | lr 1.83e-05
[01-14 13:12:52] - Train loss: 2.3598 | Acc@1: 72.8702 | Acc@5: 89.4777
[01-14 13:12:52] - Val loss: 1.8029 | Acc@1: 77.4080 | Acc@5: 93.8320 Выводы после серии экспериментов 108-112:Лучше всего работает ECA (но честно говоря я до сих пор не понимю почему). SE близко, но сильнее оверфитит. SE-var3 не смотря на всю заманчивость идеи оказался нерабочим ( exp113 R50 + Hard Reg + FCA[01-22 17:04:23] - Epoch 90 | lr 1.65e-04
[01-22 17:23:27] - Train loss: 2.3781 | Acc@1: 72.7870 | Acc@5: 89.5151
[01-22 17:23:27] - Val loss: 1.8219 | Acc@1: 77.3680 | Acc@5: 93.7620
[01-23 02:43:26] - Epoch 120 | lr 1.77e-04
[01-23 03:02:29] - Train loss: 2.3156 | Acc@1: 74.3831 | Acc@5: 90.3479
[01-23 03:02:29] - Val loss: 1.8119 | Acc@1: 77.6780 | Acc@5: 93.8120
[01-23 03:02:30] - Model params: 28.09M
[01-23 03:02:30] - Acc@1 77.678 Acc@5 93.812
[01-23 03:02:30] - Total time: 41h 22.7m exp114 Spoiler TemplateTo be added exp115 Spoiler TemplateTo be added |
Перенос обзора статей из репозитория по HUAWEI DIGIX Contest
Note: In Google Landmarks task was only to generate good features. No post-processing was allowed, so it's not covered here.
This part I didn't fully understand, so will leave here for the future
Didn't understand:
WHAT IS THE BEST PRACTICE FOR CNNS APPLIED TO VISUAL INSTANCE RETRIEVAL?
Here is good illustration how all this works (taken from Subcenter ArcFace page) How to initialise weights in ArcFace / CosFace loss?
In code from last year winners used xavier_uniform_ Metrics: Cumulative Matching Characteristics (CMC) are not defined in case of multi-gallery-shot (multiple correct answers for one image). I'll do same as in Market-1501 dataset: find position of the first correct image and ignore everything else.
I liked how strongly diffusion boosted their scores on both public / private datasets. Definitely a thing to try in the future.
https://github.com/facebookresearch/faiss
One more iteration of paper readings.
Optimal parameters for different datasets. Margin is 20-40x bigger, than what is used in my experiments.
Here is a long list of papers I didn't have time to read / implement: |
Каждый уважающий себя рисерчер должен в какой-то момент придумать свою собственную сетку. Вот и у меня есть такое желание. я много насмотрелся и думаю что могу сделать лучше объеденив разные идеи под одну крышу.
Плюс я надеюсь сделать из этого магистерский диплом.
Базовые сети и идеи:
BasicBlock
илиBottleNeck
. Первый гораздо быстрее, но заметно хуже работает. интересно почему? кажется, что дело исключительно в глубине сеткиBasicBlock
, последующиеBottleNeck
. из важных изменений - attention после 2й свертки в BottleNeck, а не после 3й как в SE-net и ему подобных.blocks: C,X,X,D,D,C. depth: 1,1,4,8,6,1. width: 32,48,64,160,320,1280. stride: 2,2,2,2,2,1. Acc@1: 77.5%
. потом запускают NAS и оптимизируют. получают два интересных вывода: NAS постоянно выбирает 3x3 свертки и bottle_ratio=3 для DW, хотя в EffNet используют 6. (т.е. видимо 6 много и можно меньше?)Лучшие архитектуры для разных режимов показаны ниже.
мысли после прочтения - надо попрбовать делать как они и менять блоки в конце на блоки с groups, не обязательно даже DW.
Авторы учили свою normal модель на разрешении 192. Провалидировал веса: 79.96@192, 80.7@224 (!), 81@256. выглядит очень мощно
еще чуваки явно умеют тренить сетки, потому что такое качетство без офигенного пайплайна не получить никак. половина их секрета в этом. но что чуваки не увидели, так это то, что у них 21М параметров из которых больше половины приходится на expand и squeeze свертки, потому что у них количество каналов сильно больше чем в mobilenet или effnet. будет ли оно работать лучше, если поставить туда побольше Separable Convs вместо Inverted? кажется что да, но на деле хрен его знает.
Rethinking Bottleneck Structure for Efficient Mobile Network Design - модифицируют блоки в mobilenet и смотрят где лучше ставить residual. получают, что лучше работает с skip connection между широкими слоями, а не узкими. предлагают новый bottleneck block - sandglass block: input -> DW 3x3 -> reduction Conv1x1 -> expansion Conv1x1 -> DW 3x3 + input. Дополнительно предлагают ввести параметер Identity tensor multiplier, который по сути делает то же самое что partial residual, т.е. skip прокидывается только от части фич. в их экспериметах значение 0.5 не ухудшает accuracy, но даёт ~5% буст к скорости. в конце отмечают, что в их блоке 2 DW свертки, а в Inverted Residual только одна, поэтому сравниваются с модификацией Mblnv2 с двумя DW свертками. это докидывает, но все равно работает хуже чем вариант авторов.
CSPNet - (Cross Stage Partial Networks) - Модифицирует Residual, вместо него вход делится на две части, одна копируется, а другая проходит через блок, потом они конкатенируются и проходят еще свертку 1x1 чтобы перемешаться. уменьшет количесто параметров и FLOPS без ухудшения качества. Предыдущая статья тех же авторов Enriching variety of layer-wise learning information by gradient combination paper - в которой они предлагают partial ResNet - это когда skip connection только на половину блоков. утверждают что позволяет избавиться от лишних градиентов. Есть интересные картинки про градиенты, которые я пока не понял :(
Hybrid Composition with IdleBlock: More Efficient Networks for Image Recognition - делают точно то же самое что в CSP Net но для мобильных сеток, называют свой блок Idle. из интересных идей - менять не все слои, а чередовать обычные слои и Idle. обращают внимание на то, что вообще говоря важно какая из частей feaure map остается idle (первая или вторая aka L или R). предлагают две версии L-Idle и R-idle. если стакать только один тип, то receptive field на части фичемап растет, а на части не растет. а если чередовать, то растет одинаково. работает лучше, если ставить только один тип (как в CSP в общем)
Res2Net - предлагают модифицировать BottleNeck иерархическими фичами. При том же количестве параметров стабильно лучше работает, докидывает как на classification так и на downstream задачах.
Attention blocks - нужно выбрать и какой использовать (пока лучше всех выглядит ECA) и где его расположить. upd. 12.09.20. склоняюсь к варианту SE-Var3 из статьи про ECA (см. ниже)
ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network - смотрят на дизайн сетки с точки зрения рангов матриц и показывают, что 1) модные активации типа swish лучше сохраняют ранг 2) сжатие каналов уменьшает model capacity 3) expand layers (где outchannels > in channels) лучше сохраняют ранг. предлагают вставлять их как можно больше. Посмотрев их код можно вынести еще пару идей. 4) Они используют Partial Residual, когда если количество output каналов больше чем input, то add только к первым каналам. 5) они увеличивают количество каналов не каждый stage, а каждый блок (!). на чуть-чуть. таким образом получая бОльшее количество expand layers 6) используют голову как в MobileNet когда на выходе сетки не очень много слоёв (~360), потом conv1x1 360x2500 -> bn -> swish -> AvgPool -> Dropout -> Linear. Возможные улучшения для этой сетки - не использовать Inverted Bottlenecks, а просто линейно наращивать количество каналов, используя group convs вместо depthwise
upd. 27.01.2021
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design - прочитал известную статью про ShuffletNet часто видел её до этого, но не читал. предлагают design principles для построения быстрых сеток: 1) Equal channel width minimizes memory access cost - лучше чтобы количество входных и выходных каналов совпадало. reduction conv1x1 - не очень 2) Excessive group convolution increases MAC - group conv медленные, лучше их не использовать 3) Network fragmentation reduces degree of parallelism - много бранчей или много сверток внутри блока уменьшают скорость по сравнению с одной большой сверткой (при одинаковых FLOPs) 4) Element-wise operations are non-negligible -всякие ReLU и суммы тоже важно учитывать
Предлагают вот такую архитектуру. Очень похоже на CSP выше. пару замечаний 1) "the three successive elementwise operations, “Concat”, “Channel Shuffle” and “Channel Split”, are merged into a single element-wise operation" - ?? не понимаю про что они 2) нет ReLU после DW свертки 3) есть доп. conv1x1 перед GAP 4) их вариант downsampling мне не нравится, я бы воткнул тупо BlurPool и всё
в целом интересная статья, которая в очередной раз подтверждает известные мне мысли
upd. 01.06.21 - авторы сильно обновили статью про ReXNet, чуть переделав свои выводы. модные активации лучше вставлять после сверток которые увеличивают количество каналов, после DW можно оставить ReLU, а после первой conv1x1 нужно swish (aka silu). если вдобавок сделать увеличение фильтров линейным, даже без изменения dimension rate в inverted bottleneck, сетка станет сильно лучше.
Дополнительные идеи:
Все эксперименты будут проводиться на уменьшенной версии Imagenet (128х128) для более быстрых итераций (один эксперимент в таком сетапе занимает
План экспериментов:
Spoiler Template
Vanilla Resnet
Vanilla Resnet + EMA + color twist aug
ResNet with no residual in stride 2 block
ResNet with no residual in stride 2 block + EMA + color twist
ResNet with no residual in stride 2 block and no last activation
Выводы после трех экспериментов выше - no residual in stride 2 block заметно ускоряет, без уменьшения качества. точно имеет смысл оставить.
Resnet34-50 with no residual in stride 2 block
Resnet34-50 with no residual in stride 2 block and no last activation
работает чутка лучше
Timm Darknet53
Работает на уровне моего resnet34-50, только тут 41М параметров и он заметно медленнее
Timm CSPDarknet53
Работает заметно лучше обычного DarkNet при меньшем количестве параметров. Тренится чуть медленее
PreAct Resnet34-50 + no bias in last conv in block
Работает чуть хуже, чем Resnet34-50 + Linear Bottleneck.
Добавлю bias в последний conv слой и повторю
With bias in last conv
Стало даже чутка хуже, чем без bias
PreAct Resnet34-50 + space2depth + stride 2 no bias in last conv in block
Space To Depth вход работает заметно лучше дефолтного. Качество pre-activation версии становится как у обычной. Похоже, что идея linear bottleneck работает лучше, чем pre-activation. Кажется что одна из причин - меньшее количество активаций в основном потоке. эксперимент Откидываю идею pre-activation и начинаю использовать только linear bottleneck
PreAct Resnet34-50 + s2d + stride 2 + groups=16
довольно плохо, но надо делать скидку на то, что тут всего 6М параметров. пока эту ветку экспериментов прикрою, буду экспериментировать с группами для linear bottleneck версии
Это продолжение 5го эксперимента. Если сравнивать с 9м, видно что linear bottleneck работает лучше.
simpl R34 noact space2depth
ResNet 34 noact s2d + groups 16
чёт пока никаких выводов
ResNet 34 noact s2d + groups width 16
меньше параметров чем в 13-м эксперименте, но при этом качество заметно выше. возможно из-за того, что в первых слоях больше параметров.
тут 9М параметров, что больше чем в варианте с groups, но при этом работает хуже.
Хотя в целом для 9М параметров и такой скорости не плохо. (оно раза в 1.5 быстрее чем вариант с grouped свертками, в эксперименте 10).
Нужно попробовать без transition conv перед concat, может станет лучше.
upd. на самом деле кажется, что дело может быть в слишком маленьком количестве сверток в самом начале. нужно попробовать убрать их.
CSP ResNet34-50 + noact + s2d
CSP ResNet34-50 no x2 transition
чуть быстрее чем версия С x2 transition, чуть лучше (но это не очень достоверно), ниже лосс на трейне, т.е. как будто лучше обучается. пока кажется, что смысла в transition нет
Removed csp in first block to reduce representation bottleneck
Increased csp ratio to have more parameters
Сравнивать нужно с 12м. Этот вариант быстрее, на 4М меньше параметров и хуже по качеству. кажется что просадка не значительная. нужно попробовать 12й и 17 на 100 классов
CSP ResNet34-50 no x2 transition no first CSP 0.75 csp ratio
Отличие от 16го - нет CSP в первом блоке
Работает лучше чем 16, хотя параметров всего на 0.03М больше. значит no first csp - хорошая идея
CSP ResNet34-50 no x2 transition no first CSP 0.5 csp ratio
Убрал groups в блоках, где stride=2. количество параметров заметно увеличилось, скорость упала. Лосс лучше чем в 14. и 13. но возможно все дело в лишних параметрах. не понятно пока
ResNet 34 noact s2d + groups width 16 + no groups in stride 2 blocks. 9.01M параметров
??. поменять количество слоёв на 3, 4, 6, 3 -> 2, 4, 8, 2
??. сделать модель пожирнее 64, 128, 256, 512 -> 64, 160, 400, 1024 (идея из regnet, что нужно увеличивать больше чем в 2 раза)
??. идея из rexnet - увеличивать количесто слоёв каждый блок, а не каждый stage
The text was updated successfully, but these errors were encountered: