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

mrgloom

Пользователи
  • Количество публикаций

    2 302
  • Зарегистрирован

  • Посещение

  • Days Won

    142

Сообщения, опубликованные пользователем mrgloom


  1. batch accumulation называется, на самом деле это есть и в обычном Caffe, называется iter_size и прописывать надо в solver.prototxt 

    https://github.com/NVIDIA/DIGITS/blob/6b8995d89abe300f0a7bbdc11e53ce4aff5671c5/digits/model/tasks/caffe_train.py#L741

    https://github.com/BVLC/caffe/pull/1977

     


  2. Тут https://github.com/BVLC/caffe/issues/401 пишут что

    1. это может быть драйвер - с каким вы используете gtx 1070?

    2. это может быть random initialization - но это вроде пофиксили.

    3. это может быть weight initialization - попробую инициализировать bias константой поменьше.

    тут https://github.com/BVLC/caffe/issues/3243

    рекомендуют другие более продвинутые инициализации весов и batch norm

    тут https://github.com/BVLC/caffe/issues/2731 рекомендуют уменьшить learning rate

     

    Еще про уменьшение batch size при нехватке памяти

    https://github.com/BVLC/caffe/issues/430

    Цитата

     In theory when you reduce the batch_size by a factor of X then you should increase the base_lr by a factor of sqrt(X), but Alex have used a factor of X (see http://arxiv.org/abs/1404.5997)

     


  3. Отвечая на свой вопрос, проверил на AlexNet.

    Можно вычитать среднее изображение или пиксель (разница между подходами на деле минимальна), но с вычитанием явно быстрее сходится, насчёт максимальной достижимой accuracy не проверял.

    Еще из AlexNet можно спокойно убрать LRN слои.


  4. У меня было такое, что 5-10 эпох сеть не подаёт признаков жизни, а потом начинает учится или даже более экзотично не учится потом небольшой всплеск в положительную сторону и потом опять возвращается к исходному состоянию.

    Как понять что хотя бы какие то положительные тендеции происходят если loss не меняется как то анализировать состояние слоёв?

     

    В случае с VGG увеличения batch size помогло.

     

    У меня как раз 1070, а caffe вроде master 0.15 https://github.com/NVIDIA/caffe

    AlexNet учится стабильно.

     

    Единственный удачный запуск SqeezeNet v1.1, который правда закончился ошибкой

    https://github.com/mrgloom/kaggle-dogs-vs-cats-solution/tree/master/learning_from_scratch/Models/SqeezeNet_v1.1


  5. Так вы хотите детектирование маркеров и потом расположить картинки на заранее известном расстоянии для сшивки в панораму?

     

    Попробовал 2 соседние картинки сложить руками через FIJI-%3EPlugins-%3EStitching-%3EMosaicJ

     

    5bcbc16af464482184c20db895f45851.PNG

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

     

    Так же можете попробовать для склейки Grid панорамы

    http://research.microsoft.com/en-us/um/redmond/projects/ice/

     

    А так для микроскопии можете это посмотреть https://www.fei.com/software/ , а точнее это https://www.fei.com/software/maps/


  6. Что делать если Loss не уменьшается? как лечить? как дебажить?

    Пока пробовал только увеличение batch size и не помогло.

    Сетка Network In Network, хотя таким страдает и SqeezeNet v1.1 (только 2 раза получилось обучить с положительным результатом и даже не получается повторить результаты на том что работало)


  7. Не написано какого размера изображение, неплохо было бы вывести график зависимости времени от размера изображения.

    Тут не используется многопоточность на CPU, только если внутри самого resize, тоже и для GPU по идее можно кидать данные батчами.

    Еще когда будете использовать многопоточный код важно померить именно wallclock time.
     

    boost::timer::cpu_timer timer;
    
    ...
    
    boost::timer::cpu_times elapsed = timer.elapsed();
    cout << "Processing : "<< " WALLCLOCK TIME: " << elapsed.wall / 1e9 << " seconds" << endl;

     


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

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

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

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

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


  9. Я сжал до стандартного размера для Lenet 28x28 методом squeeze (просто рейсайз?)

    по MNIST и Lenet

    https://github.com/NVIDIA/DIGITS/blob/master/docs/GettingStarted.md

    про finetuning

    https://github.com/NVIDIA/DIGITS/tree/master/examples/fine-tuning

    Если у вас нет проблем с linux, то можно накатить на ubuntu 14.04 DIGITS+Caffe без проблем. Хотя и на винду должно ставиться(нужен VS2013 для сборки Caffe).

    https://github.com/NVIDIA/DIGITS/blob/master/docs/BuildDigitsWindows.md

    Но после обучения модели надо еще быть готовым к тому чтобы прикрутить Caffe к своему проекту и написать inference на C++ с выводом например в текстовый файл или куда еще.

     


  10. Попробовал ваши данные на Lenet используя DIGITS(caffe как бэкэнд), получилось что то положительное даже просто обучив на 80% этих данных, точность 94%, наверно можно и больше если будет больше данных или если зафайнтюнится на MNIST.

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

    454537267b0142dc9e9b1642bc590604.png

    Confusion matrix (тут я дал дурацкие имена буквам т.к. DIGITS не переваривает кирилицу)

    5c19721221564290a1e46ad5acdf9a93.png

    График обучения.

    bc4146d024b9426f9dbdbaf04660b6d8.png

     


  11. Eсть ли какой то пример обучения сети без создания базы leveldb\lmdb, по идее это можно сделать через ImageDataLayer \ MemoryDataLayer?

     

    Есть пример как сделать forward pass

    https://github.com/BVLC/caffe/blob/master/examples/cpp_classification/classification.cpp

    Но непонятно должен ли при этом первый слой сети и последний иметь какой то специальный тип?

    https://github.com/BVLC/caffe/blob/master/examples/cpp_classification/classification.cpp#L150


  12. Ну мой user case тут такой:

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

    Поиск внутри либ для того чтобы понять какую либу надо включать для использования ф-ии, или можно не парится и включать вообще все либы opencv ? при линковке возьмется только нужное, размер файла не увеличится? т.е. тогда будет один Makefile на все проекты.

     

    А вообще эта тема всплыла когда я пытался собирать легаси opencv проекты и была куча undefined reference на старые ф-ии, но дело было не в том, что они отсуствуют, а в том что в Makefile важен порядок.

×