OpenSURF другой вывод с одним и тем же изображением при запуске из Visual Studio или непосредственно из.EXE
Я разработал приложение для распознавания объектов, используя реализацию алгоритма SURF Криса Эванса OpenSURF. Я делаю некоторые эксперименты, и я только что понял, что алгоритм не работает хорошо, если я запускаю приложение через IDE или напрямую с двойным щелчком в файле.exe. Я проверил, что файл.exe - это двоичный файл, скомпилированный из кода, который я запускаю через IDE. Похоже, что-то другое может быть связано с точностью с плавающей запятой при запуске приложения из IDE или из.EXE, потому что алгоритм SURF является детерминированным и с одним и тем же вводом всегда должен возвращать один и тот же вывод. Некоторые примеры. Первый и второй столбцы - это количество точек, извлеченных из изображений. Третий столбец - это разница между первым и вторым.
EXE VS Diff
17340 17366 -26 Image001
4639 4631 8 Image002
3196 3189 7 Image003
10442 10441 1 Image004
1485 1477 8 Image005
5539 5555 -16 Image006
18102 18073 29 Image007
Кто-нибудь может сказать мне, почему выходной результат отличается, если алгоритм и код в точности совпадают?
Спасибо
1 ответ
Это связано с тем, что когда мы компилируем код, нам приходится компилировать режим оптимизации.
Компиляция в режиме оптимизации позволяет ускорить или сократить код. В Visual Studio, когда вы переходите к опции проекта, вы видите настройку оптимизации в опции C/C++, где вы устанавливаете максимальную оптимизацию кода, следуя опции в зависимости от самого кода.1. Оптимизация: максимальная скорость 2. Включаемая встроенная функция: Да 3. Размер фаворита или скорость: Быстрый код фаворита
и есть больше возможностей оптимизации в опции генерации кодов
Модель с плавающей точкой: быстро
Примечание: 1.Эти варианты для ускорения обработки, но некоторое время нестабильный код.
- Всегда собирайте релизную версию при тестировании времени.
- Запустите отдельную программу exe(не из IDE, такой как Visual Studio), потому что, если вы запускаете ее из Visual Studio, к ней присоединяется отладчик Visual Studio, что замедляет время выполнения.
- Всегда используйте выпускную версию DLL.