mrgloom 242 Report post Posted December 18, 2015 Допустим есть сеть натренированная на ImageNet, а мы хотим применить к cifar, соотвественно картинки разного размера. Как можно адаптировать сеть? есть что то лучше просто ресайза картинки? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted December 18, 2015 Думаю что для натренерованной нет, ресайз оптимально. Share this post Link to post Share on other sites
BeS 53 Report post Posted February 19, 2016 On 12/18/2015 at 6:24 PM, Smorodov said: Думаю что для натренерованной нет, ресайз оптимально. Ну, если так подумать, то можно брать от обученой на ImageNet сетки только её сверточные слои, а классификатор самостоятельно обучать уже на нужной базе под нужный размер. По идее, если размера картинки хватает на весь проход по сети, то такой вариант должен работать. Проблемным остается только mean file, который привязан к базе определенного размера, но скорей всего это можно решить новым файлом средних и низким learning rate в сверточных слоях. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted February 19, 2016 Сомневаюсь, что покацанная таким образом сеть, будет работать как исходная. Если доучивать, то да, но встает вопрос датасета. Share this post Link to post Share on other sites
mrgloom 242 Report post Posted February 19, 2016 Где то встречал, что вместо mean image вычитали mean pixel. А просто так не меняя размеры слоёв подать на вход меньшую картинку наверно не получится, т.к. размер свертки (receptive field) настраивается под размер объектов? Вопрос скорее стоит так - во сколько раз уменьшать размеры сверточных слоёв при изменении размера картинки в N раз. Share this post Link to post Share on other sites
BeS 53 Report post Posted February 19, 2016 3 hours ago, Smorodov said: Сомневаюсь, что покацанная таким образом сеть, будет работать как исходная. Если доучивать, то да, но встает вопрос датасета. Так яж говорю, что классификатор надо самостоятельно обучать. 1 hour ago, mrgloom said: т.к. размер свертки (receptive field) настраивается под размер объектов? А можно раскрыть эту идею? Просто при обучении сетки на PASCAL, там все типы объектов имеют разный размер и как размер свертки в данном случае связан с размером объекта - лично мне не совсем понятно. В общем случае вообще пофиг какого размера картинку прогонять через сверточные слои, главное, чтобы размер до 0 не уменьшился... Share this post Link to post Share on other sites
mrgloom 242 Report post Posted February 21, 2016 Вроде как CNN инвариантна к скейлу и сдвигу в каком то диапазоне, это да. Можно провести экперимент взять обученный AlexNet с входным изображением (224x224 вроде), прогнать тестовую выборку, а потом тоже самое только сжимать изображение и потом разжимать до исходного и посмотреть как точность будет падать в зависимости от скейла. По идее при таких манипуляциях высокие частоты будут пропадать и качество будет ухудшаться. Если вы говорите что зафиксировать архитектуру сетки и пихать туда изображения любого размера, то да это должно работать, но где гарантия что такая конфигурация оптимальна? Интуиция подсказывает что при уменьшении размера изображения нужно уменьшать размеры свёртки, тем более что если мы обучаем с нуля мы теряем сетки уже обученные под конкретный размер изображения. Изначально в топике я скорее спрашивал можно ли заресайзить уже обученные свёрточные слои? Share this post Link to post Share on other sites
BeS 53 Report post Posted February 21, 2016 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: Изначально в топике я скорее спрашивал можно ли заресайзить уже обученные свёрточные слои? Чсто теоретически, ничто не должно мешать ресайзить свертку, а веса интерполировать. Правда не совсем понятно, какой эффект получится на выходе. Тут, кстати, можно вспомнить алгоритм Виолы-Джонса, который не использует пирамид, а вместо этого скалирует Хааровские фичи под соответствующие скейлы. Share this post Link to post Share on other sites
mrgloom 242 Report post Posted February 23, 2016 Я не знаю как точно 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. Share this post Link to post Share on other sites
mrgloom 242 Report post Posted September 9, 2016 Провёл еще такой простой эксперимент данные из соревнования Cats vs Dogs https://www.kaggle.com/c/dogs-vs-cats Загнал это всё в DIGITS и сделал базы с размерами 256x256, 128x128, 64x64, 32x32 Попробовал загнать эти базы в сетки Lenet, AlexNet. Так вот сеть данные то кушает в большинстве случаев, т.к. меняется только одна из размерностей первого слоя(?) при изменении размеров входного блоба, но само обучение не идет и соответственно вопрос как при сохранении архитектуры сети поменять размерности слоев так чтобы сеть подстроилась под размер изображения? Возможно ли это делать автоматически? Попозже если надо могу выложить графики\логи. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted September 9, 2016 Ну тут если поменять размер входного слоя, то неизбежно меняется количество связей, а они извлекают первичные фичи. Соответственно, думается, что надо как-то масштабировать и фильтры следующего/следующих слоя/слоев, в соответствии с изменение масштаба изображения, чтобы набор откликов сохранился. Вероятно масштабирование здесь нужно умное, типа какого нибудь pool-а. И еще скорее всего сеть будет хорошо работать только на нескольких фиксированных масштабах, т.к. масштабировать маленькие фичи плавно не получится. Может быть можно часть фич масштабировать, ввести переходный слой-адаптер, заморозить все слои кроме переходного и обучить уже его. Share this post Link to post Share on other sites