Jump to content
Compvision.ru
Sign in to follow this  
BeS

Большая база, или Fine-tuning

Recommended Posts

Всем привет,

Возник такой вопрос:

Вот хочу я на основе DL сделать, например, детектор котиков. И вот тут есть два варианта решения задачи:

1) Насобирать огромную базу изображений котиков и тренировать на них сетку в надежде, что база достаточно репрезентативная и сетка обобщится хорошо.

2) Взять предтренированную на ImageNet сетку и зафайнтюнить её базой котиков среднего размера.

Учитывая опыт всяких RCNN и YOLO, тренировка на ImageNet + файнтюнинг на PASCAL дает близкие к state of the art результаты на задачах, например детектированию пешеходов. Хотя в ImageNet + PASCAL число людей вряд ли достигает хотя бы 1M...а вот методов основанных только на тренировке большой базой, без предтренировке на ImageNet в топах не видно...отсюда возникает вопрос, что же все таки лучше: специализированный детектор для конкретного класс объектов, или что-то универсальное, что умеет различать несколько различных классов? В литературе сравнений таких не встреал.

Share this post


Link to post
Share on other sites

Думаю лучше файнтюнить, тем более что можно ведь зафайнтюнить и на большой базе, если она есть.

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

 

Кстати еще интересен вопрос сколько вообще нужно данных, т.е. построить график зависимости точности классификатора от кол-ва данных.

Сейчас самый простой вариант это построить график точность относительно кол-ва итераций, но это не совсем тоже самое, т.к. если мы фиксируем кол-во данных то сеть может пробегать по данным более 1 раза.

 

Share this post


Link to post
Share on other sites

Я думаю что для уменьшения ошибки в два раза, нужно увеличить размер выборки вдвое.

Но это грубо конечно очень.

Резутьтат теоретически должен сильно зависеть от эффективной размерности данных.

Share this post


Link to post
Share on other sites
58 minutes ago, Smorodov said:

Я думаю что для уменьшения ошибки в два раза, нужно увеличить размер выборки вдвое.

Но это грубо конечно очень.

Резутьтат теоретически должен сильно зависеть от эффективной размерности данных.

Ну вот тут не совсем понятно, относительно чего уменьшать ошибку.

Грубо говоря, если я беру хорошую, выровненую базу жестких объектов, скажем из 100K сэмплов необходимого класса и начинаю на ней обучать сетку, то на тестовой выборке в итоге получается точность ~99%. Но на реальных данных сеть фолсит. При этом как бороться с оверфитом на глубоких сетках не понятно, т.к. весь Deep Learning строится на оверфите моделей (dropout'ы, dither'ы и прочие техники для избегания оверфита не особо как помогают).

Да и выобрку можно увеличивать долго...можно, скажем, взять 10M изображений людей и получить результаты хуже, чем у Faster-RCNN, который взял фичи от VGG16 и зафайнтюнился на PASCAL, где людей всего дай бог тысяч 5-10...

Share this post


Link to post
Share on other sites

что такое dither'ы?

 

Скорее всего на реальных данных намного больше сэмплов отрицательного класса и поэтому точность падает.

 

Цитата

можно, скажем, взять 10M изображений людей и получить результаты хуже, чем у Faster-RCNN, который взял фичи от VGG16 и зафайнтюнился на PASCAL, где людей всего дай бог тысяч 5-10

это реальная история из жизни? или результаты из какого то пейпера?

 

Можно попробовать 2 варианта обучить с нуля на 10M и зафайнтюнится на 10M и посмотреть что лучше.

 

Share this post


Link to post
Share on other sites
8 minutes ago, mrgloom said:

что такое dither'ы?

Очень простая техника для улучшения обобщающей способности(тупо примешивает к блобам равномерно распределенный шум): http://arxiv.org/abs/1508.04826

10 minutes ago, mrgloom said:

Скорее всего на реальных данных намного больше сэмплов отрицательного класса и поэтому точность падает.

 

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

17 minutes ago, mrgloom said:

это реальная история из жизни?

Это эмпирическое предположение, основанное на том, что сетка обучаема с нуля, правда на базе меньшего размера, чем 10M, катастрофически проигрывает Faster-RCNN, который обучался на базе, содержащей на порядок меньше искомых объектов. При этом увеличение базы за счет jittering'а не сильно улучшает ситуацию.

Share this post


Link to post
Share on other sites
Цитата

негативные сэмплы - это тоже большая проблема. Больше чем позитивов их брать нельзя, иначе на разбалансированной базе сетка не обобщится на позитивный класс

я имел ввиду что когда у вас в caffe test phase то у вас accuracy считается по данным в которых pos:neg 50%:50%, а может надо тестировать на выборке которая по распределению pos:neg близка к распределение на реальных данных и так вы получите accuracy приближенную к реальной.

 

Вообще метрика accuracy не применима к unbalanced data, т.к. например у нас pos:neg 1:100 и если  мы предиктим всё как негативное, то получаем хорошую accuracy, но понятно что это неадекватно.

 

Кстати как в caffe можно управлять соотношением pos:neg в батче? Только в изначальное хранилище записывать в необходимой пропорции pos:neg и предполагая что оттуда будет брать сэмплы равномерно рэндомом и в среднем в батче мы получим pos:neg примерно в таком же отношении?

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×