OpenCV中训练CascadeClassifier(级联分类器)

本文介绍了OpenCV中的级联分类器,重点在于训练过程,包括数据收集、正负样本生成。然而,由于CPU训练速度慢且准确率不高,作者决定不更新后续内容。建议使用labelImg工具进行数据标注。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:


Cascade Classifier Training
[OpenCV3]级联分类器训练——traincascade快速使用详解



级联分类器介绍


  • 文章总概:Cascade分类器全程级联增强弱分类器(boosted cascade of weak classifiers),而使用此分类器主要包括两方面------训练&定位。而麻烦的在于训练,如何训练,正是这篇文章将要介绍的:1.收集数据,2.准备训练数据以及训练模型。
  • 个人理解:人脸检测中一个比较好的算法是mtcnn网络,也是一个级联分类器,与Cascade的区别在于一个用的卷积神经网络,一个用的是Haar或者LBP提取特征。而弱分类器的原理可以总结为:一个分类器通过学习而能够分辨的特征的能力有限,但如果让多个分类器去学习识别不同的特征,这样通过多个分类器进行分类后,所产生的结果错误率将极大降低。



数据准备


不更新了,只能用CPU训练的速度太慢了,而且网上都说这种方法的正确率不太好,所以不更新了

  • 可以通过官方给的样本做正样本标签,也可以通过此工具labelImg,建议使用后者,后者在大数据集方面使用较多(列如微软VOC数据集)。

正样本以及负样本生成


正负样本生成脚本

import sys
import numpy as np
import xml.etree.ElementTree as ET
import cv2
import os
import numpy.random as npr
from utils import IoU
from utils import ensure_directory_exists

save_dir = "/home/rui"
anno_path = "./firepos/annotation"
im_dir = "./firepos/images"
pos_save_dir = os.path.join(save_dir, "./res/positive")
neg_save_dir = os.path.join(save_dir, './res/negative')

ensure_directory_exists(pos_save_dir)
ensure_directory_exists(neg_save_dir)


names_xml = os.listdir(anno_path)

img_rule_h = 45
img_rule_w = 45

size = img_rule_h

num = len(names_xml)
print "%d pics in total" % num
p_idx = 0 # positive
n_idx = 0 # negative
d_idx = 0 # dont care
idx = 0
box_idx = 0
for ne_xml in names_xml:
    tree = ET.parse(os.path.join(anno_path, ne_xml))
    root = tree.getroot()
    loc_bbox = []
    width_xml = root.find("size").find("width").text
    height_xml = root.find("size").find("height").text
    for node in root.findall
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值