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

Поиск по сайту

Showing results for tags 'caffe'.



More search options

  • Search By Tags

    Введите теги через запятую.
  • Search By Author

Тип содержимого


Категории и разделы

  • Пакет OpenCV
    • OpenCV
    • Новости
    • Вопросы взаимодействия OpenCV + GDI, GDI+
  • Дополненная реальность (ARToolkit и др.)
    • ARToolkit
  • Нейросети
    • Вопросы по нейросетям и ИИ
  • Общие вопросы
    • Обсуждение общих вопросов
  • Другое

Найдено 35 результатов

  1. День добрый. Возникло желание прикрутить к caffe Jaccard index: Jaccard Тренирую сеть для задачи семантической сегментации, используя датасет с 5 классами. Непременно нужно прикрутить jaccard в python layer. Для этих целей я переделал код, который реализует dice loss: https://github.com/NVIDIA/DIGITS/tree/digits-5.0/examples/medical-imaging Получается, что я не совсем понимаю как устроены блобы в Caffe. Есть подозрение, что необходимо по-другому передавать axis, при суммировании всех предсказаний и масок: def forward(self, bottom, top): smooth = 1e-12 label = bottom[1].data[:,0,:,:] # compute prediction prediction = np.argmax(bottom[0].data, axis=1) # area of predicted contour a_p = np.sum(prediction, axis=self.sum_axes) # area of contour in label a_l = np.sum(label, axis=self.sum_axes) # area of intersection a_pl = np.sum(prediction * label, axis=self.sum_axes) # dice coefficient dice_coeff = np.mean((2.*a_pl+smooth)/(a_p + a_l+smooth)) top[0].data[...] = dice_coeff Получилась следующая реализация: import random import numpy as np import caffe import math class Jaccard(caffe.Layer): """ A layer that calculates the Jaccard coefficient """ def setup(self, bottom, top): if len(bottom) != 2: raise Exception("Need two inputs to compute Jaccard coefficient.") # compute sum over all axes but the batch and channel axes self.sum_axes = tuple(range(1, bottom[0].data.ndim - 1)) def reshape(self, bottom, top): # check input dimensions match if bottom[0].count != 2*bottom[1].count: raise Exception("Prediction must have twice the number of elements of the input.") # loss output is scalar top[0].reshape(1) def forward(self, bottom, top): smooth = 1e-12 label = bottom[1].data[:,0,:,:] # compute prediction prediction = np.argmax(bottom[0].data, axis=1) # area of predicted contour a_p = np.sum(prediction, axis=self.sum_axes) # area of contour in label a_l = np.sum(label, axis=self.sum_axes) # area of intersection a_pl = np.sum(prediction * label, axis=self.sum_axes) # jaccard coef jaccard_coef = np.mean((a_pl+smooth) / (a_p + a_l - a_pl + smooth)) jaccard_coef=0 top[0].data[...] = jaccard_coef def backward(self, top, propagate_down, bottom): if propagate_down[1]: raise Exception("label not diff") elif propagate_down[0]: #crossentropy loss_crossentropy = 0 for i in range(len(prediction)): loss_crossentropy = loss_crossentropy - prediction[i] * (label[i] - (prediction[i] >= 0)) - math.log(1 + math.exp(prediction[i] - 2 * prediction[i] * (prediction[i] >= 0))) bottom[0].diff[...] = -(math.log(jaccard_coef) + loss_crossentropy) else: raise Exception("no diff") Код ошибки error code 1. Если установить кол-во классов равное 2 и использовать код dice loss из вышеприведенной ссылки, все прекрасно заходит. Ошибка в индексах. Есть какие-нибудь соображения?
  2. начал разбираться с caffe. разобрался с тем как распознавать объекты на изображениях. хочу перейти к распознаванию объектов на видео в реальном времени, но не пойму с какого бока к этому вопросу подходить. погуглил, на форуме поискал - не смог найти материалы(( как нужно скармливать видео натренированной модели? в параметрах коммандной строки указывается путь к картинке, а мне нужно указать видеопоток с web-камеры. Я так понимаю, что тут нужно оболочку на питоне писать? может есть уже готовые примеры? подскажите в какую степь гуглить - я в этом деле новичок))) пробовал разобраться с моделью SegNet - но в примерах у них идет обработка изображений((, а как туда видеопоток засунуть - тоже нет информации.
  3. Ковырял тут на досуге задачу семантической сегментации, пробовал сетку SegNet и возник вопрос: а чего там означают веса по классам? Если верить референсным статьям, там классы должны взвешиваться с величиной, обратной площади, занимаемой этими классами...но если посмотреть в их сэмпл-модели, то можно заметить, что там есть веса сильно больше единицы (segnet_train.prototxt): layer { name: "loss" type: "SoftmaxWithLoss" bottom: "conv1_1_D" bottom: "label" top: "loss" softmax_param {engine: CAFFE} loss_param: { weight_by_label_freqs: true ignore_label: 11 class_weighting: 0.2595 class_weighting: 0.1826 class_weighting: 4.5640 class_weighting: 0.1417 class_weighting: 0.9051 class_weighting: 0.3826 class_weighting: 9.6446 class_weighting: 1.8418 class_weighting: 0.6823 class_weighting: 6.2478 class_weighting: 7.3614 } } Что как-то контринтуитивно... как эти веса посчитать для своего кастомного датасета?
  4. Кто нибудь гонял ResNet'ы на Caffe? похоже на форке от nvidia не работает(возможно из-за BN layer). Причем в официальном репозитории только deploy.prototxt https://github.com/KaimingHe/deep-residual-networks Вообщем ищу что то более менее стабильное.
  5. Что делать если Loss не уменьшается? как лечить? как дебажить? Пока пробовал только увеличение batch size и не помогло. Сетка Network In Network, хотя таким страдает и SqeezeNet v1.1 (только 2 раза получилось обучить с положительным результатом и даже не получается повторить результаты на том что работало)
  6. Насколько важно вычитать среднее изображение для предобработки или этим можно пренебречь? Или может есть что то более продвинутое типа whitening?
  7. WaveNet - генеративная модель звука от DeepMind: https://deepmind.com/blog/wavenet-generative-model-raw-audio/
  8. 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
  9. Прикупил еще один GPU, gtx1070 и столкнулся со странным поведением DIGITS. Обе карты обе карты видятся на обеих все запускается без ошибок драйвер 367-й, cuda 8.0, cudnn-v5, ubuntu 14.04 LTS. Но на одной сеть учится, на другой нет. На gtx970 На gtx1070 Кто нибудь сталкивался с подобным ? UPD: Перестроил caffe со включенным NCCL вроде теперь учится. Но странно все это...
  10. SegNet

    Кто нибудь пробовал SegNet? https://habrahabr.ru/company/recognitor/blog/277781/ http://mi.eng.cam.ac.uk/projects/segnet/ http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html https://github.com/alexgkendall/caffe-segnet https://github.com/alexgkendall/SegNet-Tutorial У меня не запускается даже пример: https://github.com/alexgkendall/caffe-segnet/issues/21
  11. Нашел занятный проект пока не ковырял, но выглядит интересно: http://pjreddie.com/darknet/yolo/
  12. Обычно в сверточных сетях, при стыковке двух сверточных слоев, перед применением очередной свертки происходит суммирование некоторых карт признаков с предыдущего слоя в соответствии с картой смежности...но при настройке топологии сети, понятие карты смежности не исопльзуется. И тут возник вопрос: а как в caffe реализуется стыковка карт признаков со сверточным слоем?
  13. Как можно собрать caffe на одной машине и скопировать на другую? Допустим собрал я дома на Ubuntu 14, а кинул на сервер на Ubuntu 12(где не имею sudo). У caffe есть make distribute, но похоже это не копирует в папку все зависимости.
  14. Всем привет. А кто-нибудь находил годную документацию по pycaffe (т.к. не совсем понятно, что в python интерфейс проброшено, а что нет), или быть может в курсе, как можно получить информацию по слоям загруженой сети? Конкретно интересует, как получить информацию о форме bottom и top блобов и параметры слоя. Методом тыка дошел только до того, что могу посмотреть отедльно информацию по блобам данных (без привязки к тому, какой слой в них пишет или принимает на вход), либо параметры слоев (да и то только на уровне формы и содержимого блобов с параметрами).
  15. Собираю Caffe на Ubuntu c openblas в CPU_ONLY mode на Ubuntu 14.04 x64 которая крутится на VirtualBox. https://github.com/mrgloom/Caffe-snippets/blob/master/Virtualbox_Ubuntu_14.04_CPU.sh https://github.com/mrgloom/Caffe-snippets/blob/master/Makefile.config https://github.com/xianyi/OpenBLAS После выставление любой из переменных, я не наблюдаю ускорения вообще. export OPENBLAS_NUM_THREADS=4 export GOTO_NUM_THREADS=4 export OMP_NUM_THREADS=4 Как проверить что несколько потоков используется?
  16. Всем привет. А кто-нибудь находил годную документацию по pycaffe (т.к. не совсем понятно, что в python интерфейс проброшено, а что нет), или быть может в курсе, как можно получить информацию по слоям загруженой сети? Конкретно интересует, как получить информацию о форме bottom и top блобов и параметры слоя. Методом тыка дошел только до того, что могу посмотреть отедльно информацию по блобам данных (без привязки к тому, какой слой в них пишет или принимает на вход), либо параметры слоев (да и то только на уровне формы и содержимого блобов с параметрами).
  17. Можно ли собрать caffe на mingw? По идее есть cmake проекты для сборки и им должно быть всё равно какой компилятор. тут https://github.com/willyd/caffe-builder если использовать то ругается на некий cl который видимо часть VS, видимо как то скрипты заточены под VS? тут http://caffe.berkeleyvision.org/installation.html#cmake-build зависимости не собираются сами, возможно ли написать cmake скрипт чтобы он скачивал так же сорцы и cmake скрипты для зависимостей проекта и собирал всё сразу?
  18. MS тоже соорудила свою ветку: https://github.com/Microsoft/caffe
  19. Всем привет, Решил попробовать пистаь к caffe кастомные слои не на C++, а при помощи имеющего PythonLayer из стандартного caffe. Пишу простой сэмпл: 1) так выглядит sample.prototxt 2) так выглядит собственно код Python-слоя (должен тупо пропихивать блоб с данными дальше без изменения) 3) так выглядит код, который запускает сетку Какое поведение наблюдается при запуске сети: 1) Отключаю пулинг слой, сеть работает корректно. После forward pass я могу с выхода кастомного слоя забрать картинку в первозданном виде. 2) Отключаю python-слой а в качестве bootm для Python-слоя задаю просто data. Все работает корректно и на выходе получаю картинку вдвое меньшую, чем подавал на вход. 3) Запускаю сеть в которой сначала идет мой кастомный слой, а его выход идет на пулинг. Сеть не работает, ругаясь на невалидный блоб на входе пулинга: Может кто-то сталкивался с таким и сумел пофиксить?
  20. Всем привет, А у кого какие мысли, почему сверточные сетки, предтренированные на ImageNet так хорошо работают на большом спектре задач? Например, если взять ObjectDetection, то state of the art алгоритмы, такие как RCNN, SSD, etc. используют VGG16 предтренированную на ImageNet, затем файнтюнят на милипизерных базах PASCAL и получают одни из лучших результатов, например, на KITTI датасетах для детектирования машин/людей при том, что в ImageNet + PASCAL изображений людей дай бог тысяч 20 наберется...хотя по канонам надо брать много миллионов картинок, чтобы DL начал сходиться... Да и вообще большая часть статей по DL сейчас начинаются с того, что "давайте возьмемсеть, предтренированную на ImageNet"
  21. Всем привет, А кто-то сталкивался с тем, что при тренировке сеток на GPU появляется рябь на экране? Оно конечно вполне ожидаемо, когда тренировка бежит на основном GPU (раньше бывало что экран вообще гас), но рябь появляется даже тогда, когда тренирова бегает на дополнительной карте, никак не связанной с монитором. БП вроде тоже не слабый (1300W). Может кто знает, как пофиксить?
  22. Всем привет, А может кто-то сталкивался с исчерпывающим описанием процесса обучения рекурентных сетей (конкретно интересует обучение LSTM'а)? Собственно имеются два вопроса по этому поводу: 1) PBTT подразумевает, что ошибка считается в виде суммы ошибок для всей цепочки LSTM'ов, и не понятно, откуда брать эталонный выход для промежуточных моментов времени, или все таки процесс тренировки там подразумевает, что в момент обуения мы полностью контролируем клеточное состояние в каждый момент времени? 2) Кто-нибудь расписывал руками производные для LSTM'а? А то chain rule расписывать там как-то совсем не радостно.
  23. Всем привет, А кто-то пользовался Slice-слоями в кафе? Не совсем понятен механизм того, как он нарезает картинку... Опытным путем было установлено, что при исопльзовании его вот так: Можно порезать блоб MxNxC на два размерами Mx[0:20]xC и Mx[20:N]xC соответственно. Т.е. вертикальными линиями. При этом логично было-бы предположить, что axis: -3 должно позволять резать картинку по вертикали, но что-то как-то оно с ошибками падает, типа такой:
  24. Понадобилось сконвертить модель torch в caffemodel, нашел https://github.com/facebook/fb-caffe-exts/tree/master/torch2caffe но что-то не очень-то проект собирается. Требует зависимостей, которых мне найти не удалось, и через luarocks не тянутся. Есть ли у кого опыт сборки сего чуда?
  25. Всем привет, Решил я поиграться с разрекламированными DIGITS, но тут возникла проблема: DIGITS не видит GPU устройство, хотя nvcaffe собран с CUDA/cuDNN и `caffe device_query -gpu=0` работает корректно. Может кто-то с таким сталкивался?
×