Перейти к содержимому
Compvision.ru
mrgloom

Как адаптировать сеть под другой размер изображения?

Recommended Posts

Допустим есть сеть натренированная на ImageNet, а мы хотим применить к cifar, соотвественно картинки разного размера.

Как можно адаптировать сеть? есть что то лучше просто ресайза картинки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Думаю что для натренерованной нет, ресайз оптимально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 12/18/2015 at 6:24 PM, Smorodov said:

Думаю что для натренерованной нет, ресайз оптимально.

Ну, если так подумать, то можно брать от обученой на ImageNet сетки только её сверточные слои, а классификатор самостоятельно обучать уже на нужной базе под нужный размер. По идее, если размера картинки хватает на весь проход по сети, то такой вариант должен работать. Проблемным остается только mean file, который привязан к базе определенного размера, но скорей всего это можно решить новым файлом средних и низким learning rate в сверточных слоях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сомневаюсь, что покацанная таким образом сеть, будет работать как исходная.

Если доучивать, то да, но встает вопрос датасета.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Где то встречал, что вместо mean image вычитали mean pixel.

А просто так не меняя размеры слоёв подать на вход меньшую картинку наверно не получится, т.к. размер свертки (receptive field) настраивается под размер объектов?

Вопрос скорее стоит так - во сколько раз уменьшать размеры сверточных слоёв при изменении размера картинки в N раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 hours ago, Smorodov said:

Сомневаюсь, что покацанная таким образом сеть, будет работать как исходная.

Если доучивать, то да, но встает вопрос датасета.

Так яж говорю, что классификатор надо самостоятельно обучать.

1 hour ago, mrgloom said:

т.к. размер свертки (receptive field) настраивается под размер объектов?

А можно раскрыть эту идею? Просто при обучении сетки на PASCAL, там все типы объектов имеют разный размер и как размер свертки в данном случае связан с размером объекта - лично мне не совсем понятно. В общем случае вообще пофиг какого размера картинку прогонять через сверточные слои, главное, чтобы размер до 0 не уменьшился...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вроде как CNN инвариантна к скейлу и сдвигу в каком то диапазоне, это да.

Можно провести экперимент взять обученный AlexNet с входным изображением (224x224 вроде), прогнать тестовую выборку, а потом тоже самое только сжимать изображение и потом разжимать до исходного и посмотреть как точность будет падать в зависимости от скейла. По идее при таких манипуляциях высокие частоты будут пропадать и качество будет ухудшаться.

 

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

 

Изначально в топике я скорее спрашивал можно ли заресайзить уже обученные свёрточные слои?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 hour ago, mrgloom said:

Интуиция подсказывает что при уменьшении размера изображения нужно уменьшать размеры свёртки,

А есть какие-то популярные архитектуры, использующие большие свертки? У всяких VGG, GoogleNet etc. вроде бы максимум - это свертки 7х7, но основа - это 3х3 и 5х5 - т.е. практически "универсальный" размер.

 

1 hour ago, mrgloom said:

тем более что если мы обучаем с нуля мы теряем сетки уже обученные под конкретный размер изображения.

Веса сверточных слоев мы можем оставить. Сверточному слою ведь пофигу, какого размера картинка к нему пришла на вход...на этом принципе строятся многие object detector'ы, не исопльзующие генераторов гипотез типа скользящих окон или Selective Search...теже RCNN, например, которые через дефолтные сверточные слои VGG16 прогоняют картинку поризвольного размера, без скалирования к 224x224, и инвариантность к масштабу объекта там, признаться, поражает и сравнима с алгоритмами работающими на пирамидах. 

1 hour ago, mrgloom said:

Изначально в топике я скорее спрашивал можно ли заресайзить уже обученные свёрточные слои?

Чсто теоретически, ничто не должно мешать ресайзить свертку, а веса интерполировать. Правда не совсем понятно, какой эффект получится на выходе.

Тут, кстати, можно вспомнить алгоритм Виолы-Джонса, который не использует пирамид, а вместо этого скалирует Хааровские фичи под соответствующие скейлы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не знаю как точно receptive field влияет на распознавание, но кажется что чем он больше тем больше контекста захватывается,  но может быть больше не значит лучше т.к. будет больше влиять бэкграунд и меньше концентрации на мелкие детали.

но это все догадки.

 

еще про receptive field, но не очень понятно о чем они вообще говорят.

https://www.cs.berkeley.edu/~rbg/papers/r-cnn-cvpr.pdf

Цитата

We alsa considered adopting a sliding-window approach. However, units high up in our network, which has five convolutional layers, have very large receptive fields (195x195pixels) and strides (32x32pixels) in the input image, which makes precise localization within the sliding-window paradigm an open technical challenge.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Провёл еще такой простой эксперимент данные из соревнования Cats vs Dogs https://www.kaggle.com/c/dogs-vs-cats

Загнал это всё в DIGITS и сделал базы с размерами 256x256, 128x128, 64x64, 32x32

Попробовал загнать эти базы в сетки Lenet, AlexNet.

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

Попозже если надо могу выложить графики\логи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Соответственно, думается, что надо как-то масштабировать и фильтры следующего/следующих слоя/слоев, в соответствии с изменение масштаба изображения, чтобы набор откликов сохранился.

Вероятно масштабирование здесь нужно умное, типа какого нибудь pool-а.

И еще скорее всего сеть будет хорошо работать только на нескольких фиксированных масштабах, т.к. масштабировать маленькие фичи плавно не получится.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×