Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции? |
Опубликован: 02.09.2013 | Доступ: свободный | Студентов: 430 / 54 | Длительность: 19:27:00
Тема: Программирование
Специальности: Программист, Системный архитектор
Теги:
Самостоятельная работа 4: Классификация изображений с использованием bag-of-words методов
4. Контрольные вопросы
- Какие основные этапы включают в себя bag-of-words алгоритмы классификации изображений?
- Какие требования предъявляются к детекторам и дескрипторам ключевых точек?
- Опишите идеи, лежащие в основе детектора и дескриптора SIFT.
- Почему в качестве признакового описания изображения обычно не используются вычисленные дескрипторы ключевых точек?
- Перечислите алгоритмы, которые возможно использовать при построении словаря дескрипторов ключевых точек.
- Что представляет собой итоговое признаковое описание изображения в методах класса bag-of-words, и каким образом оно вычисляется?
- Перечислите алгоритмы, которые можно использовать для классификации изображений с использованием вычисленного признакового описания.
5. Дополнительные задания
- Добавьте в разработанное приложение вывод информации об изображениях из тестовой выборки, которые были неправильно классифицированы.
- Добавьте в разработанное приложение возможность использования в качестве используемого классификатора машины опорных векторов с ядром типа Radial Basis Function. Сравните результаты с ранее реализованным подходом.
- Выполните исследование зависимости ошибки классификации от используемых параметров (типа используемых детекторов и дескрипторов ключевых точек, числа слов в словаре, параметров алгоритма обучения с учителем "случайный лес": числа деревьев в ансамбле, максимальной глубины деревьев, входящих в ансамбль).
- Реализуйте построение словаря на основе Gaussian Mixture Model и сравните полученные результаты с ранее реализованным подходом.
7. Приложения
7.1. Приложение А. Исходный код основной функции консольного редактора изображений
#include "auxiliary.h" #include "bow.h" #include <opencv2/nonfree/nonfree.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char* argv[]) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ }
7.2. Приложение Б. Исходный код заголовочного файла модуля, содержащего вспомогательные функции
#include <string> #include <vector> void GetFilesInFolder(const std::string& dirPath, std::vector<std::string> &filesList); void InitRandomBoolVector(std::vector<bool>& mask, double prob);
7.3. Приложение В. Исходный код модуля, содержащего вспомогательные функции
#include "auxiliary.h" #include <windows.h> #include <opencv2/core/core.hpp> using namespace std; using namespace cv; void GetFilesInFolder(const string& dirPath, std::vector<string> &filesList) { HANDLE handle; WIN32_FIND_DATAA fileData; if ((handle = FindFirstFileA((dirPath + "/*.jpg").c_str(), &fileData)) == INVALID_HANDLE_VALUE) { return; } do { const string file_name = fileData.cFileName; const string full_file_name = dirPath + "/" + file_name; filesList.push_back(full_file_name); } while (FindNextFileA(handle, &fileData)); FindClose(handle); } void InitRandomBoolVector(vector<bool>& mask, double prob) { RNG rng = theRNG(); for (size_t i = 0; i < mask.size(); i++) { mask[i] = (rng.uniform(0.0, 1.0) < prob) ? true : false; } }
7.4. Приложение Г. Исходный код заголовочного файла модуля, содержащего реализацию основных стадий bag-of- words подхода
#include <opencv2/features2d/features2d.hpp> #include <opencv2/ml/ml.hpp> #include <vector> #include <string> cv::Mat TrainVocabulary(const std::vector<std::string>& filesList, const std::vector<bool>& is_voc, const cv::Ptr<cv::FeatureDetector>& keypointsDetector, const cv::Ptr<cv::DescriptorExtractor>& descriptorsExtractor, int vocSize); cv::Mat ExtractFeaturesFromImage( cv::Ptr<cv::FeatureDetector> keypointsDetector, cv::Ptr<cv::BOWImgDescriptorExtractor> bowExtractor, const std::string& fileName); void ExtractTrainData(const std::vector<std::string>& filesList, const std::vector<bool>& isTrain, const cv::Mat& responses, const cv::Ptr<cv::FeatureDetector>& keypointsDetector, const cv::Ptr<cv::BOWImgDescriptorExtractor>& bowExtractor, cv::Mat& trainData, cv::Mat& trainResponses); cv::Ptr<CvRTrees> TrainClassifier(const cv::Mat& trainData, const cv::Mat& trainResponses); int Predict(const cv::Ptr<cv::FeatureDetector> keypointsDetector, const cv::Ptr<cv::BOWImgDescriptorExtractor> bowExtractor, const cv::Ptr<CvRTrees> classifier, const std::string& fileName); cv::Mat PredictOnTestData(const std::vector<std::string>& filesList, const std::vector<bool>& isTrain, const cv::Ptr<cv::FeatureDetector> keypointsDetector, const cv::Ptr<cv::BOWImgDescriptorExtractor> bowExtractor, const cv::Ptr<CvRTrees> classifier); cv::Mat GetTestResponses(const cv::Mat& responses, const std::vector<bool>& isTrain); float CalculateMisclassificationError(cv::Mat& responses, cv::Mat& predictions);
7.5. Приложение Д. Исходный код модуля, содержащего реализацию основных стадий bag-of-words подхода
#include "bow.h" #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; Mat TrainVocabulary(const vector<string>& filesList, const vector<bool>& is_voc, const Ptr<FeatureDetector>& keypointsDetector, const Ptr<DescriptorExtractor>& descriptorsExtractor, int vocSize) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } Mat ExtractFeaturesFromImage( Ptr<FeatureDetector> keypointsDetector, Ptr<BOWImgDescriptorExtractor> bowExtractor, const string& fileName) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } void ExtractTrainData(const vector<string>& filesList, const vector<bool>& isTrain, const Mat& responses, const Ptr<FeatureDetector>& keypointsDetector, const Ptr<BOWImgDescriptorExtractor>& bowExtractor, Mat& trainData, Mat& trainResponses) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } Ptr<CvRTrees> TrainClassifier(const Mat& trainData, const Mat& trainResponses) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } int Predict(const Ptr<FeatureDetector> keypointsDetector, const Ptr<BOWImgDescriptorExtractor> bowExtractor, const Ptr<CvRTrees> classifier, const string& fileName) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } Mat PredictOnTestData(const vector<string>& filesList, const vector<bool>& isTrain, const Ptr<FeatureDetector> keypointsDetector, const Ptr<BOWImgDescriptorExtractor> bowExtractor, const Ptr<CvRTrees> classifier) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } Mat GetTestResponses(const Mat& responses, const vector<bool>& isTrain) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ } float CalculateMisclassificationError(Mat& responses, Mat& predictions) { /* TODO: реализовать функциональность, описаннную в разделе 3.1.2 */ }