opencv_分类器训练指导

news/2024/11/7 11:38:59/

环境:opencv-4.0,python,c++
方法:opencv_createsamples,opencv_traincascade,haar特征或者lbp特征+cascade分类器
流程:

    收集样本,处理样本
    训练分类器
    目标检测

一.
收集样本,处理样本
收集正样本

关于正样本的收集,一张或多张都可以,首先对样本进行处理,我收集了50个正样本。
在这里插入图片描述
处理正样本

处理样本,灰度化,归一化,大小为(50, 50)

path = "/home/yk/project/pyCharm/train/true/"
for i in range(1, 51):
    print(path+str(i)+'.jpg')
    img = cv2.imread(path+str(i)+'.jpg', cv2.IMREAD_GRAYSCALE)
    img5050 = cv2.resize(img, (50, 50))
    cv2.imshow("img", img5050)
    cv2.waitKey(20)
    cv2.imwrite('/home/yk/project/pyCharm/train/pos/'+str(i)+'.jpg', img5050)

处理后效果
在这里插入图片描述

二.
收集负样本

关于负样本,只要不含有正样本图片即可,最好是识别场景的图片。
我找到一个负样本下载链接。https://pythonprogramming.net/static/images/opencv/negative-background-images.zip
下载后如图

在这里插入图片描述


三.
生成描述文件

正负样本描述文件生成。

import os
def create_pos_n_neg():
    for file_type in ['neg']:
        for img in os.listdir(file_type):
            if (file_type == 'neg'):
                line = file_type + '/' + img + '\n'
                with open('bg.txt', 'a') as f:
                    f.write(line)
            elif (file_type == 'pos'):
                line = file_type + '/' + img + ' 1 0 0 50 50\n'
                with open('info.txt', 'a') as f:
                    f.write(line)

if __name__ == '__main__':
    create_pos_n_neg()

生成bg.txt(负)文件和info.txt(正)

四.
opencv_createsamples -vec pos.vec -info info.txt -bg bg.txt -w 20 -h 20 -num 4100     (num为生成正样本数目)
生成pos.vec文件

指令说明:
-vec pos.vec:指定生成的文件,最终生成的就是pos.vec;
-info pos_img\pos.txt:目标图片描述文件,在pos\pos.txt;
-bg neg_img\neg.txt:背景图片描述文件,在neg\neg.txt;
-w 20:输出样本的宽度,20;
-h 20:输出样本的高度,20;

五.
opencv_traincascade -vec pos.vec -bg bg.txt -data xml -w 20 -h 20 -mem 1024 -npos 4000 -nneg 23000 -mode ALL
开始训练(xml为提前创建的文件夹)

opencv_traincascade -data xml -vec pos.vec -bg bg.txt -numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 4000 -numNeg 12000 -w 20 -h 20 -mode ALL


指令说明:
-vec pos.vec:正样本文件名;
-bg neg_img\neg.txt:背景描述文件;
-data xml:指定存放训练好的分类器的路径名,也就是前面建立的xml文件夹;
-w 20:样本图片宽度,20;
-h 20:样本图片高度,20;
-mem 1024:提供的以MB为单位的内存,很明显,这个值越大,提供的内存越多,运算也越快;
-npos 45:取45个正样本,小于总正样本数;
-neg 180:取180个负样本,小于总负样本数;
-nstages 5:指定训练层数,层数越高耗时越长;(可以不写)
-maxFalseAlarmRate 0.5:分类器的每一级希望得到的最大误检率,总的误检率大约为max_false_rate*number_of_stages(0.4~0.5)
-mode:选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。
minHitRate 0.9999:分类器的每一级希望得到的最小检测率,总的最大检测率大约为min_hit_ratenumber_of_stages
minHitRate:影响每个强分类器阈值,当设置为0.95时如果正训练样本个数为10000个,那么其中的500个就很可能背叛别为负样本,第二次选择的时候必须多选择后面的500个,按照这种规律为后面的每级多增加numPosminHitRate个正样本,根据训练的级数可以得到如下公式


http://www.ppmy.cn/news/350612.html

相关文章

Opencv造出属于自己的xml训练器

一、基本步骤 1.利用python爬虫爬取(也可以手动收集)图片集,分为pos(正相关,要识别的)和neg(负相关,里面没有pos,一般是背景之类的无关图)一般1:…

UbuntuServer搭建打印服务器

打印服务器无疑需要的是CUPS(Common Unix Print System),配置及管理还是很简单。但安装驱动却是麻烦事,除非打印机驱动很容易得到,唉,本人就遇到了一麻烦事,服务器操作系统为Ubuntuserver 12.04.1 amd64,打…

这个618,网工最值得买的路由器/交换机设备

大家好,我是老杨。 有小友最近扎堆冒出来问我,企业要采购路由器/交换机,买啥牌子好,买啥型号好。 又或者是,家里要买家用的路由器/电脑,啥性价比最高? 我真的很想吐槽一句,你们再问…

SEMICON China 2023| 加速科技将携全系新品重磅亮相,欢迎打卡加速科技展台

2023年6月29日-7月1日,全球规模最大、规格最高的半导体行业盛会—SEMICON China 2023将在上海新国际博览中心盛大举行。作为业内领先的半导体测试设备供应商,杭州加速科技将携全系重磅新品及全系列测试解决方案受邀参展。 展位信息:E5馆 5643…

LoRA 的学习笔记

什么是 LoRA 模型 LoRA 的全称是 LoRA: Low-Rank Adaptation of Large Language Models,是一种以极低资源微调大模型的方法,其来自于论文 LoRA: Low-Rank Adaptation of Large Language Models 。 LoRA 的核心思想是冻结预训练的模型权重,并…

Python函数详解:从定义到调用

函数是Python编程中一个非常重要的概念,它可以让我们将代码模块化,使程序更易于理解和维护。在本文中,我们将介绍Python函数的各种用法,包括函数的定义、参数传递、返回值等方面。 函数的定义 定义一个函数非常简单,…

Unity中UI方案。IMGUI、UIElement、UGUI、NGUI

引言 unity中有很多ui方案,各种方案有什么优势劣势,这里一一列举一下,知识扩充一下。 UI方案适用范围IMGUI仅用于Editor扩展,或运行时DebugUIElement可用于发布运行时和EditorUGUIRuntime,两大主流 UI 解决方案之一NG…

电脑网页打不开,更改DNS地址(Win10)

1、打开控制面板,选择“网络和Internet”下的“查看网络状态和任务” 2、选择“更改适配器设置” 3、找到电脑连接的无线网络,右键选择“属性” 4、选择“Internet协议版本4(TCP/IPv4)”,点击“属性” 5、将“自动获得…