traincascade相关知识总结
CvCascadeClassifier(级联分类器)
CvCascadeParams cascadeParams; // 级联分类器参数
cv::Ptr<CvFeatureParams> featureParams; // 特征参数
cv::Ptr<CvCascadeBoostParams> stageParams; // 强分类器参数
cv::Ptr<CvFeatureEvaluator> featureEvaluator;// 特征计算
std::vector< cv::Ptr<CvCascadeBoost> > stageClassifiers; // 强分类器
CvCascadeImageReader imgReader; // 样本图像读取
int numStages, curNumSamples; // 强分类器数目,当前样本数目
int numPos, numNeg; // 正样本数目,负样本数目
CvCascadeParams(级联分类器参数)
static const int defaultStageType = BOOST; // 默认级联分类器类型
static const int defaultFeatureType = CvFeatureParams::HAAR; // 默认级联分类器特征
int stageType; // 强分类器类型
int featureType; // 特征类型
cv::Size winSize; // 级联分类器窗口信息
CvFeatureParams(特征参数)
int maxCatCount; // 0 in case of numerical features // 最大特征数目
int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features // 特征尺寸
CvCascadeBoostParams(强分类器参数)
float minHitRate; // 最小检测率
float maxFalseAlarm; // 最大误检率
CvFeatureEvaluator(特征计算)
int npos, nneg; //正样本数目,负样本数目
int numFeatures; // 特征数目
cv::Size winSize; // 窗口尺寸
CvFeatureParams *featureParams; // 特征参数
cv::Mat cls; // 设置样本类别矩阵
CvCascadeBoost(强分类器)
float threshold; // 强分类器阈值
float minHitRate, maxFalseAlarm; // 强分类器最小检测率,最大误检率
CvBoostTree(弱分类器)使用CvDTree实现(ml模块中的随机树实现)
CvDTreeNode* root; // 根节点
CvMat* var_importance; // 重要变脸
CvDTreeTrainData* data; // 训练数据
CvMat train_data_hdr, responses_hdr; // 训练数据和响应数据
cv::Mat train_data_mat, responses_mat; // 训练数据矩阵和响应数据矩阵
int pruned_tree_idx; // 树裁剪索引
CvDTreeNode(弱分类器节点信息)
int class_idx; // 赋给节点的归一化的类别索引(从0到class_count-1),用在分类树和树集成中
int Tn; // 在有序排列的树中的树索引。用在剪枝过程中和之后。
double value; // 赋给节点的值。可以是一个类别标签,也可以是估计函数值
CvDTreeNode* parent; // 父节点
CvDTreeNode* left; // 左子树
CvDTreeNode* right; // 右子树
CvDTreeSplit* split; // 指向第一个分裂点(初始分裂点)的指针
int sample_count; // 在训练阶段所用到的样本数目
int depth; // 节点深度。根节点为0,子节点是父节点深度加1
int* num_valid; // 合法数目
int offset;
int buf_idx;
double maxlr;
// global pruning data
// 全局裁剪数据
int complexity;
double alpha;
double node_risk, tree_risk, tree_error;
// cross-validation pruning data
// 交叉验证裁剪数据
int* cv_Tn; // 如果该参数大于1,用叠一交叉验证来进行剪枝
double* cv_node_risk;
double* cv_node_error;// 节点错误率