关于训练样本的真值标定

        机器学习算法总是离不开训练样本的,通常情况下,你找到的图片并非仅仅含有正样本的,而应该是同时含有正样本和负样本的图片;例如,你打算利用机器学习的算法来进行人脸检测,需要找到人脸的正样本(人脸图片)和负样本(非人脸图片),这个时候,正样本和负样本往往不是那么容易找到的(当然,人脸的训练样本目前在网上能找到很多公开的训练样本库,但如果你要找车辆的训练样本呢?表情的训练样本呢?猫的训练样本?飞机的训练样本?。。。);这个时候,就需要拍摄或者下载很多包含正样本(如,人脸)的图片;当然,这个图片当中,某些区域是人脸(正样本),其它区域是非人脸(负样本);显然,用画图工具之类的软件把一张一张的图片中的正样本区域人工扣去下来,作为正样本, 剩下的区域,作为负样本,这是一个可行的办法;你可以这么做,但作为程序员,似乎写个程序,遍历文件夹中所有的图片,依次显示图片,由用户通过鼠标点击几下得到正样本区域和负样本区域,这样要更高效一些吧。前者是纯人工的办法,后者是半人工的办法;当你扣取了足够的正负样本,训练得到分类器之后,利用机器(计算机)就能自动的把图片中的正样本区域(人脸)给扣取出来,这就是全自动的办法了;机器学习的目的,就是让机器来代替人工高效的完成重复性的工作嘛;当然了,在没有得到训练样本之前,你还是得利用纯人工或者半人工的方法来解决训练样本的问题;笔者给出一个半人工的程序,方便朋友们以后在样本制作过程中使用;

参考代码:

#include "stdafx.h"
#include "windows.h"
#include <vector>
#include <string>
#include "opencv.hpp"
#include "iostream"
#include "fstream"
using namespace std;
typedef std::vector<std::string> file_lists;

static int str_compare(const void *arg1, const void *arg2)
{
	return strcmp((*(std::string*)arg1).c_str(), (*(std::string*)a
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值