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

Андрей_Андрей

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

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

  • Посещение

Все публикации пользователя Андрей_Андрей

  1. Коллеги, суть проблемы: не удается загрузить мной созданную модель tensorFlow в opencv.dnn методом cv2.dnn.readNetFromTensorflow(weights,config) выдается ошибка распарсивания графа вида Error parsing text-format opencv_tensorflow.GraphDef: 4059:5: Unknown enumeration value of "DT_RESOURCE" for field "type". гугление приводит к рецептам вроде заморозьте граф, преобразуйте файл *.pbtxt с помощью файлов, входящих в opencv, конфиг для сети при этом скачайте по ссылке, везде рекомендации, примерно как тут: https://github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-API вопрос: но ведь это-же для конкретной заранее спроектированной сети - mobilenet, rcnn, yolo и других известных, я правильно понимаю или нет? и если да, то, что делать, если моя структура самописная? это не lenet, не guglonet, не yolo, это моя собственная сетка. мне что, не удастся ее в dnn прочитать? Спасибо.
  2. не удается загрузить модель в dnn

    Спасибо, большое за ответ, теперь я сделал так: python tf_text_graph_faster_rcnn.py --input hr_model_lstm.pb --config example.config --output hr_model_lstm.pbtxt в качестве конфига взял # Faster R-CNN with Inception Resnet v2, Atrous version; В ответ при импорте в net = cv2.dnn.readNetFromTensorflow(weights, config) получил ошибку: [libprotobuf ERROR D:\Build\OpenCV\opencv-3.4.4\3rdparty\protobuf\src\google\protobuf\text_format.cc:288] Error parsing text-format opencv_tensorflow.GraphDef: 13334:5: Unknown enumeration value of "20" for field "type". раньше он ругался на значение DT_RESOURCE, теперь ругается на значение 20. нода из pbtxt выглядит так: node { name: "lstm1_b/while/TensorArrayWrite/TensorArrayWriteV3/Enter" op: "Enter" input: "lstm1_b/TensorArray" attr { key: "T" value { type: 20 } } attr { key: "_class" value { list { s: "loc:@lstm1_b/while/mul_5" } } } attr { key: "frame_name" value { s: "lstm1_b/while/while_context" } } attr { key: "is_constant" value { b: true } } attr { key: "parallel_iterations" value { i: 32 } } } что я не так делаю?
  3. DNN на CPU из C++

    GRU не хватает. я так понимаю тема давно поднималась, но не хватает до сих пор...
  4. svm.predict возвращает int, вместо float.

    Коллеги, svm.predict возвращает мне int, вместо float. Я никак не могу оценить с какой достоверностью он мне распознает. Что я делаю не так? код примерно такой (С++): vector <float>predicted_vector(img_vector.size());{ for (int i = 0; i < img_vector.size(); i++){ img_vector = symbRecognitor.deskew(img_vector); //наклон перед распознаванием hists = symbRecognitor.preprocess_hog(img_vector); // hog predicted_vector = svm.predict(hists, true); .... } вот параметры: SVMParams param; param.kernel_type = SVM::POLY; param.svm_type = SVM::C_SVC; param.C = 1; svm.load(datFilePath);
  5. svm.predict возвращает int, вместо float.

    нет, это не скользящее окно. это символы автомобильного номера, разделенные по градиенту яркости вдоль широкой стороны номера. в целом все хорошо, но есть символы, которые этим алгоритмом режутся пополам ( м, н, 8, 6 ) - у всех них есть ложный максимум гистограммы яркости посередине, довольно большой, простым сравнением с соседними надежно отфильтровать его не удается. А для буквы М он даже выше чем соседние максимумы. И вот дилемма - то-ли это 2 цифры "1"? то-ли одна буква "м"... вот как-то так. вроде питонская библиотека sklearn.svm обучает классификатор с возможностью определять вероятность, но эта либа не для С++. Ищу аналог. вот народ вроде про аналоги пишет: https://stackoverflow.com/questions/11378819/scikit-learn-equivalent-for-c не знаю во что у меня все эти приседания выльются в плане быстродействия...
  6. svm.predict возвращает int, вместо float.

    Коллеги, огромное спасибо за Ваши комментарии. Насколько я понимаю, получить значение функции для классификации у меня нет вариантов, бо я распознаю 22 символа (буквы и цифры) и это никак не бинарная классификация. У меня нет проблемы, что получить из алгоритма - надежность (confidence) или вероятность (probability) - мне хоть-бы что-нибудь заиметь, уже было-бы неплохо, т.к. сейчас нет вообще ничего. Из описания упомянутого mrgloom'ом в предыдущем посте хака, я вынес только то, что все сказанное справедливо только для бинарной классификации, что не есть мой случай. Разбираюсь в упомянутом RVM. Беда моя в том, что без достоверности (вероятности),в любом виде, ничего у меня не выйдет, т.к. у меня нет четких областей в которых я распознаю символ. а есть набор предположительно областей, каждую из которых я отправляю на распознавание и вот по достоверности( вероятности) хотел определять, что-же за символ на самом деле передо мной. Что еще можно придумать, прежде чем отказаться от SVM в пользу другого алгоритма?
  7. svm.predict возвращает int, вместо float.

    Похоже проблема в том, что я использую классификацию, CvSVM::C_SVC C-Support Vector Classification; а должен исп регрессию CvSVM::EPS_SVR \epsilon-Support Vector Regression. тогда predict вернет значение функции. переучиваю каскад. UPD. predict стал возвращать float. но количество ошибок с 0.11% выросло до 74%... а новый *.dat файл стал размером в 1 кБ вместо 6кБ у старого.. что-то не так..
  8. svm.predict возвращает int, вместо float.

    может у вас это getDecisionFunction()? в opencv2 svm.predict(Mat img, true) должен мне возвращать это значение отражающее дистанцию от плоскости. но почему-то он мне возвращает label... Кто знает почему?
  9. svm.predict возвращает int, вместо float.

    ну например значения векторов у меня такие: 0.055761, 0.0971997, 0.188256, 0.149404, 0.176307, 0.16017, 0.167007, 0.0969387 количество векторов - всегда 5650, сумма значений длин векторов для разных символов тоже одинаковая. Например для первого она вседа 536.1, для второго 634.7 и т.д. но эти цифры повторяются, для разных символов, в том числе для неправильно распознанных. Я как-раз все и делаю на основе этого примера. Вот тут: http://www.recognition.mccme.ru/pub/RecognitionLab.html/methods.html#nonLinearSVM автор в разделе Уверенность классификации говорит о некоем значении классифицирующей функции, по которому можно судить о достоверности классификации. Где ее, эту функцию взять?
  10. svm.predict возвращает int, вместо float.

    оох. Андрей Владимирович, расстояние не меняется ни в примере points_classifier, ни у меня в программе, и не зависит от параметра С. я ставил С =1000, и цифры суппорт вектора абсолютно такие-же вне зависимости даже от того, корректно распознался символ, или нет. Подскажите что еще можно подумать?
  11. svm.predict возвращает int, вместо float.

    Спасибо. запускаю points_classifier, разбираюсь. svm.predict возвращает float, но десятичная часть всегда ==0 . я не очень Вас понял - какой именно параметр из Вашего списка у меня может быть целочисленный? я распознаю символы на картинке методом hog + svm пробую выводить svm.get_support_vector(i) - для совершенно разных символов он мне выводит абсолютно одинаковые числа.
  12. svm.predict возвращает int, вместо float.

    дистанция до гиперплоскости меня абсолютно устроит. и в документации говорят, что, мол если returnDFVal = true, то predict ее и вернет . а у меня все равно int на выходе... как мне ее (дистанцию) получить?
  13. svm.predict возвращает int, вместо float.

    да, но я ставлю returnDFVal = true
  14. Чем лучше распознать цифры?

    я искал связанные контуры (findContours), оставлял из всех только символы ( по размеру и соотношению сторон), преобразовывал их в полигоны (approxPolyDP), и обводил их прямоугольниками (boundingRect) . Потом строил прямую между левыми нижними углами прямоугольников в одной строке, и искал наклон (арктангенс разности по y / разность по x.), и потом этот наклон компенсировал. Получилось хорошо.
  15. Здравствуйте. Наша фирма занимается разработкой микропроцессорных встраиваемых систем. Появились новые проекты, и нам требуется программист Python, C++ Требования: Уверенные знания Python, CPP, опыт разработки приложений под Windows, Linux от 2-х лет. Опыт работы с opencv, уверенное знание основного функционала этой библиотеки. Опыт работы с системой контроля версий, багтрекером (любыми) Приветствуется опыт решения задач классификации объектов, использования нейронных сетей. Мы предлагаем: Работу над проектами в области машинного зрения, систем "Умный город", интеллектуальных транспортных систем. Дружный коллектив, спокойная, доброжелательная атмосфера. Работа в офисе в 3 минутах ходьбы от метро Фонвизинская. Полное соблюдение трудового законодательства РФ. ЗП по результатам собеседования. Не агентство, прямой работодатель. пишите: fader@mail.ru
  16. Сегментация

    1 померяйте соотношение ширины/высоты всех найденных прямоугольников. 2 отсейте все, у которых это соотношение получилось больше 1.1 ... 1.2 3 ??? 4 Profit!
  17. Здравствуйте, для распознавания символов на на номерном знаке автомобиля хочу применить нейронную сеть. Читаю про "обычную" полносвязную НС. В качестве недостатка упоминается большое чисто ее элементов, и как альтернатива рассматривается сверточная сеть. А она, наряду с DeepLearning вроде как относится к другому классу сетей. И вот думаю: действительно мне нужна сверточная НС, нужно-ли мне для задачи идентификации 22-х символов поднимать caffe или подобную серьезную систему, или смотреть в сторону SVM. Сложно сориентироваться, т.к. у меня в этом деле нет опыта совсем. Вообще входные требования - максимальная точность классификатора при условии что на входе будет картинка символа с различной яркостью, контрастностью, и четкостью монохромного (не бинаризованного, т.к. бинаризовать некоторые символы без существенного искажения не выходит) изображения символа, как чистая, так и зашумленная (пыль, грязь, различные артефакты вызванные деформацией номерной пластины, тенями, неравномерной освещенностью). Размер картинки с символом примерно 20Х20 пикселей. Как мне определиться с выбором метода, пожалуйста, посоветуйте.
  18. Сделал. Почитал инет и решил пока отложить сеть в сторону, и сделал распознавалку на hog+SVM. Получилось неплохо (0.11 % ошибок ) на 13300 картинок в символами. Пока меня устраивает, хотя сети изучать тоже конечно нужно.
  19. Спасибо за ответ. вот тут: http://nordavind.ru/node/550 для моей задачи автор пишет : " 625 нейронов во входном слое. Количество нейронов скрытых слоев нейронной сети обычно выбирается в 10-20 раз больше количества входных значений нейронной сети. Пусть наша нейронная сеть состоит из двух скрытых слоев. Первый скрытый слой состоит из 6000 нейронов (и 3,75 млн. связей с входным слоем), а второй из 3000 нейронов (и 18 млн. связей с первым скрытым слоем). " 18 млн связей - приличное количество. сколько -ж они учиться будут....
  20. Захват картинки в opencv

    Здравствуйте, у меня такая ситуация - web сервер RaspberryPI из пакета RPi_Cam_Web_Interface выдает мне непрерывно меняющиеся картинки на адрес вида http://<ipaddr>/html/cam_pic.php? в браузере эта картинка видна, обновляется по F5. Пытаюсь получить ее с пом. cv2.imread() в opencv - выдает ошибку warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:545) файл при этом на месте. Картинки из jpg файлов открываю нормально, ffmpeg установлен. Видеопотоки h264 и MJPEG из файлов открываю, также открываю поток сгенерированный с помощью Raspivid (h264) поток этот получаю с адреса http://<ipaddr>:8160 -путем cap = cv2.VideoCapture('http://<ipaddr>:8160') c задержкой в 40 сек, но получаю. встречал рекомендации удалить все opencv_** **.dll из C:/Windows/System32 - у меня там нет таких dll. переключение в web-сервере RaspberryPi с передачи последовательности картинок на MJPEG ( с переходом, соответственно, от imread к VideoCapture) ничего не изменило Что это может быть? Как мне эту картинку вытащить? Спасибо.
  21. Сборка OpenCV 2.4

    Пытаюсь собрать Opencv 2.4.11 с TBB и IPP в надежде что это уменьшит тормоза моего приложения Если кто знает, просветите пожалуйста насчет следующих моментов: - встречал посты где люди пишут, что начиная с версии OpenCV 2.4.5 нет необходимости в сборке с TBB, якобы автоматом будут задействованы методы, которые используют мультрединг, так-ли это? - я с первого раза собрал Opencv 2.4.11 с TBB под студию 2013 с родным компилятором студии. посмотрел getBuildInformation() - TBB задействовано, но прироста производительности я не замечаю - как было 60 мс на один проход цикла, так и осталось. Что с TBB, что без него, загрузка всех 4-х ядер процессора равномерная. - при попытке собрать и с TBB и с IPP компилятор валит ошибки вида: Error 95 error LNK1181: cannot open input file '..\..\lib\Release\opencv_calib3d2411.lib' C:\opencv\build_tbb_ipp\modules\ocl\LINK opencv_ocl - хотя делаю все так-же, с чем это может быть связано? - в скомпилированной директории я не нахожу файлов #include <opencv2/highgui/highgui.hpp> и #include <opencv2/opencv.hpp> и дело не в путях , в получившейся в рез-те компиляции папке build этих файлов *.hpp нет в принципе. ЧЯДНТ? Спасибо.
  22. Сборка OpenCV 2.4

    mrgloom, правильно я понял Вашу мысль, что если есть TBB, то OpenMP задействовано не будет? Что Вы имеете ввиду "cv::parallel_for может иметь несколько "бэкэндов" ? в файле по ссылке упоминаний про IPP я не нашел...
  23. Сборка OpenCV 2.4

    Да
  24. Сборка OpenCV 2.4

    Включаю\отключаю использование OpenMP и TBB. Включаю/отключаю именно их вместе, т.к. они оба включены в сборке. вне зависимости от того, включены они или нет, вижу от 5 до 12 потоков своего приложения. они в совокупности грузят все 4 ядра. совокупная загрузка цп - 38 - 40%. включаю использование OpenMP добавляя #include <omp.h> и #pragma omp parallel for перед процедурами, которые, как мне кажется, можно распараллелить. никаких изменений по сравнению с вариантом когда я не использую OpenMP я не вижу. что так ,что эдак, время цикла на CoreI7 с 4 ядрами колеблется от 50 до 60 мс. Можно-ли выжать что-то еще из моего железа, до того как перейти на GPU ?
  25. Тормозит Release версия С++ каскада Хаара

    Ищу в потоке машин пластины номеров. нахожу обученным каскадом Хаара. использую detectMultiScale. Каскад обучен на примерно 1000 положительных примеров и 5000 отрицательных. Прототипировал на python2. При этом искал пластины сначала на всем кадре 2560х2048 точек, потом пробовал выделять зоны в которых есть движущиеся автомобили, и искать только в них. Обнаружил, что вариант с поиском по всему кадру в итоге быстрее, чем вариант с предварительным поиском зон движения. длительность цикла программы на питоне около 250 мс, что неприемлемо по быстродействию. Перешел на С++/VS2013. С родным компилятором MSVS. Удивительно то, что программа в Debug версии имеет цикл больше секунды, а в Release - 300 - 350 мс, что больше, чем у питона!. Все 4 ядра Core I5 и в питоне, и в С++ при работе release версии грузятся примерно на 90%. Утечек памяти не наблюдаю. Почему С++ не дает выигрыша по скорости, хотя должен? Где я не прав? Что подправить в настройках в Visual Studio 2013? и главное, что дальше делать? Спасибо.
×