Smorodov 579 Жалоба Опубликовано June 20, 2012 Сегментация изображения при помощи PCNN (Pulse-Coupled Neural Network) (на основе результатов исследования работы глаза морских свинок). Снимок результатов работы программы (при различных параметрах). закомментировал dilate, получилось что-то комиксоподобное ... double Beta=0.8; double alpha_theta=-2; double alpha_F=-0.9; double alpha_L=-0.1; double V_F=1; double V_L=1; ... Mat rect_12 = getStructuringElement(CV_SHAPE_RECT, Size(3,3) , Point(1,1)); erode(Y, Y, rect_12,Point(),1); //Mat rect_6 = getStructuringElement(CV_SHAPE_RECT, Size(3,3) , Point(1,1)); //dilate(Y,Y,rect_6,Point(),1);[/code] Если поэкспериментировать с параметрами, можно получать различные варианты сегментации. При реализации руководствовался книжкой: Lindblad J.M. Kinser "Image Processing Using Pulse-Coupled Neural Networks". Там можно прочитать теорию. Исходники: PCNN.RAR 2 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано June 20, 2012 Хорошо смотрится. А как там по скорости? Есть замеры? (Сам не могу сейчас у себя запустить.) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 20, 2012 Точно не измерял, но на статике быстро работает думаю кадров 10 всяко должно давать. Просто код сейчас немого перелопатил, эксперименты ставлю, как только вычищу засеку время. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 20, 2012 Нет, ошибся в оценке, 0.68 - 0.8 сек, на изображении 512х512 (lena.jpg). Хотя для изображения с лицом (средняя картинка) 0.04 сек. Время будет плавать, так как количество итераций зависит от количества сегментов. Думаю на GPU реалтайм будет, нейросети хорошо параллелятся. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано June 21, 2012 Да, на GPU точно можно будет раз в 10-20 ускорить. Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано June 21, 2012 а какой критерий для сегментации кроме скорости? вроде бы есть датасет-тест где человеком размеченные области и сравниваются с тем что выдал алгоритм.(только как сравниваются непонятно) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 21, 2012 Да как сравниваются то понятно: Истинно-положительные (true positives) – те категории, которые мы ожидали увидеть и получили на выходе Ложно-положительные (false positives) – категории, которых быть на выходе не должно и анализатор их ошибочно вернул на выходе Ложно-отрицательные (false negatives) – категории, которые мы ожидали увидеть, но анализатор их не определил Истинно-отрицательные (true negatives) – категории, которых быть на выходе не должно и на выходе анализатора они тоже совершенно правильно отсутствуют. precision=tp/(tp+fp); - точность recall=tp/(tp+fn); - полнота F1=(2*prec*rec)/(prec+rec); - метрика качества классификатора хорошоая статейка здесь: http://blog.gramant.ru/2012/06/06/f1-measure/ Здесь тестовые сеты с "ground true"-сегментацией, сделанной (вроде бы) вручную. Visual Object Classes Challenge 2010 Вот пример: Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано June 22, 2012 нет дело то в том, что у нас контуры\области же сравниваются, т.е. тут получается как бы процент пересечения чтоли. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 22, 2012 Попиксельно думаю будет самым точным методом. Берем пиксель и смотрим какому классу он принадлежит у нас и на аннотированной картинке. Отсюда считаем tp tf fp fn, и метрику F1. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано June 22, 2012 ну попиксельно не учитывает форму никак, хотя может это и не так важно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах