|
Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции? |
Опубликован: 02.09.2013 | Уровень: для всех | Доступ: платный
Самостоятельная работа 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
*/
}
"