机器学习构建模型的过程
1.数据模型的创建
1.环境配置
1.虚拟环境配置
1.下载python 官网下载
2.使用pip下载virtual.exe pip install virtualenv
3.使用virtual.exe 创造虚拟环境 virtualenv venv
2.下载源更改 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
3.安装需要使用的库及其依赖库 pip install Numpy Scipy Matplotlib scikit-learn
2.导入数据集并进预处理和分组
sklearn.model_selection.train_test_split()
train_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=42)
3.通过网格搜索和交叉验证进行模型参数调优
1.调用原始模型 classifier = svm.SVC(decision_function_shape='ovr', kernel='rbf')
2.生成要验证的参数 param_grid = {'C': [0.1, 1, 100], 'gamma': [0.1, 10, 100]}
3.创建网格搜索进行交叉验证 grid_search = GridSearchCV(classifier, param_grid, cv=5)
4.将数据集合填入网格搜索的对象 grid_search.fit(train_x,train_y)
5.获取经过交叉验证后的最佳参数 grid_search.best_params_ grid_search.score(train_x,train_y)
4.使用最佳参数搭建模型
分类器:
classifier = svm.SVC()
classifier = RandomForestClassifier()
classifier = GaussianNB()
classifier = DecisionTreeClassifier()
聚类器:
estimator = KMeans()
分类 回归 聚类 降维 选型 预处理
https://scikit-learn.org/stable/index.html
5.将数据集(训练集)导入模型训练
classifier.fit()
6.将数据集(测试集)导入模型预测结果并将其与实际结果对照
classifier.predict()
7.分析模型的性能和评价指标
classifier.score()
sklearn.metrics.precision_score()精准值 sklearn.metrics.recall_score()召回率
sklearn.metrics.f1_score() F1值 np.mean()准确率
8.保存模型
1.通用pickle
import pickle 导入库
with open('my_model.pkl', 'wb') as f:
pickle.dump(model, f) 保存模型
model = pickle.load(f) 加载模型
model.fit() 继续训练
model.predict(X) 预测
2.大型模型joblib
import joblib 导入库
joblib.dump(model, 'my_model.joblib') 保存模型
model = joblib.load('my_model.joblib') 加载模型
model.fit(X_train, y_train) 继续训练
model.predict(X) 预测
3.深度学习模型的权重HDF5
import tensorflow as tf 导入库
model.save_weights('my_model_weights.h5') 保存模型
model.load_weights('my_model_weights.h5') 加载模型
model.fit(X_train, y_train) 继续训练
model.predict(X) 预测
4.跨平台学习模型ONNX
import onnx 导入库
onnx_model = onnx.convert(model) 转换模型
onnx.save_model(onnx_model, 'my_model.onnx') 保存模型
onnx_session = onnxruntime.InferenceSession('my_model.onnx') 加载模型
onnx_model.fit() 继续训练
input_name = onnx_session.get_inputs()[0].name 预测
output_name = onnx_session.get_outputs()[0].name
result = onnx_session.run([output_name], {input_name: X})
https://blog.csdn.net/qq_22841387/article/details/130194553
机器学习和深度学习的关系?
9.数据模型可视化表达
使用人脸识别模型的过程
2.数据模型的使用(网站答案)
1.导入级联分类器文件
faceCascade = cv2.CascadeClassifier(Pathname)
2.读入图片
img1 = cv2.imread(img)
3.转为灰度图
imgGray1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
4.调用detectMultiScale()函数进行检测
face1 = faceCascade.detectMultiScale(img, scaleFactor, minNeighbors)
img:待处理的图像(灰度图) s caleFactor:检测框的最小尺寸 minNeighbors:相当于检测的阈值
5.绘制矩形框标记人脸
cv2.rectangle(Img,TLcoordinate,LRcoordinate,Color,Thickness,LineType(可选))
Img:待处理的图像 TLcoordinate:左上角坐标 LRcoordinate:右下角坐标
Color:矩形框颜色 Thickness:矩形框边距 LineType:矩形框线条的类型
6.输出图像
cv2.imshow(imgname, img)
3.数据模型的使用(华清远见人脸识别项目)
1.准备工作
1.路径准备
1.准备人脸图像样本数据集存储路径
2.准备训练后人脸模型的存储路径
3.准备人脸模型对应ID存储路径
os.makedirs(PathName, exist_ok=True) if(not os.path.exists(PathName)) else None
np.loadtxt(PathName,dtype=int,encoding='utf-8',delimiter=',',usecols=(0,))
2.初始化摄像头
1.创建摄像头对象
cap = cv2.VideoCapture(0)
2. 获取摄像头的宽度
cap_w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
3.获取摄像头的高度
cap_h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
3.导入级联分类器文件创建分类器对象
face_cascade = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml")
4.创建LBPH类型人脸识别器对象
recognizer = cv2.face.LBPHFaceRecognizer_create()
2.用摄像头和级联分类器识别人脸样本并形成数据集(获取人脸数据集)
1.清除旧缓存空间所存放的人脸数据集
shutil.rmtree(PathName)
2.创建新缓存空间来存放人脸数据集
os.mkdir(PathName)
3.使用摄像头获取人脸数据集
1.判断是否达到最大缓存容量
2.获取摄像头一帧图像
Cap_ReadSuccess,Img = cap.read()
Cap_ReadSuccess:表示是否读取成功 Img:包含Numpy数组的图像数据
3.获取图像转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
4.将灰度图转给级联分类器识别是否为人脸并返回人脸坐标
face = face_cascade.detectMultiScale(gray, 1.3, 5,cv2.CASCADE_DO_CANNY_PRUNING)
返回值:检测到的目标位置信息的NumPy数组其中每一行表示一个检测到的目标,
每个目标由四个值表示:x坐标、y坐标、宽度和高度。因此,返回的数组的每一行都代表一个矩形框,
用于标识图像中检测到的目标的位置和大小
5.获取坐标并用矩形框标记灰度图中人脸位置
Img,TLcoordinate,LRcoordinate,Color,Thickness,LineType(可选)
6.保存识别到的人脸样本
cv2.imwrite(PathName, img(只包含人脸的那一小部分))
7.对获取图像数据计数
8.显示灰度图像和人脸框
cv2.imshow(ImgName,Img)
3.用从指定路径获取到的人脸数据集训练人脸模型(训练特定的人脸模型)
1.将数据样本依次读出并保存到临时存储空间(全部保存到一起)
face = cv2.imread(PathName)
faces.append(face)
2.用LBPH类型人脸识别器训练人脸模型
recognizer.train(Train_x,Train_y)
3.用LBPH类型人脸识别器保存人脸模型
recognizer.save(PathName)
4.扫描识别到的人脸(识别特定人脸模型)(两层循环第一层循环改变人脸模型,第二层比较人脸模型和摄像头读取照片)
1.人脸识别器从指定路径读取人脸模型(实际是不是将该模型作为人脸识别器模型)
recognizer.read(model_yml)
2.读取摄像头数据
Img = cap.read()
3.将读取的摄像头数据并将其转为灰度图
gray = cv2.cvtColor(Src, Code)
Src:要进行颜色空间转换的输入图像
Code:指定颜色空间转换的类型
cv2.COLOR_BGR2GRAY:BGR彩色图像到灰度图像
cv2.COLOR_BGR2RGB:BGR彩色图像到RGB彩色图像
cv2.COLOR_RGB2GRAY:RGB彩色图像到灰度图像
cv2.COLOR_GRAY2BGR:灰度图像到BGR彩色图像
cv2.COLOR_BGR2HSV:BGR彩色图像到HSV颜色空间
cv2.COLOR_BGR2YUV:BGR彩色图像到YUV颜色空间
cv2.COLOR_BGR2Lab:BGR彩色图像到CIE Lab颜色空间
cv2.COLOR_BGR2XYZ:BGR彩色图像到CIE XYZ颜色空
4.用级联分类器识别是否为人脸
faces = face_cascade.detectMultiScale(Img(gray), scaleFactor, minNeighbors, flags, minSize, maxSize)
image:要检测的输入图像(灰度图) scaleFactor:在每个图像尺度上图像尺寸减小的比例,用于创建图像金字塔,通常为1.1到1.5之间
minNeighbors:每个候选矩形应该保留的邻近矩形的数量。这个参数可以影响检测器的灵敏度。
flags:检测器的操作标志。
minSize(可不填):目标的最小尺寸。小于此尺寸的对象将被忽略
maxSize(可不填):目标的最大尺寸。大于此尺寸的对象将被忽略
5.用人脸识别器对灰度图进行预测
label, Confidence = recognizer.predict(此处输入灰度图被矩形框框住的人脸数据)
lable:预测的标签或者类别 Confidence:置信度越低越准确
6.在人脸区域绘制矩形框、预测类别和置信度
cv2.rectangle(Img,TLcoordinate,LRcoordinate,Color,Thickness,LineType(可选))
cv2.putText(img, text(label),OrgPosition, Font, FontScale, Color, Thickness,LineType(可选),bottomLeftOrigin(可选))
cv2.putText(img, text(Confidence),OrgPosition, Font, FontScale, Color, Thickness,LineType(可选),bottomLeftOrigin(可选))
img:要绘制文本的图像 text:要绘制的文本内容 OrgPosition:文本的起始坐标点默认左上角
font:指定字体类型 fontScale:指定字体大小 color:指定文本的颜色
thickness:指定文本线条的宽度 lineType:指定文本线条的类型 bottomLeftOrigin:默认Flase如果为True则起始坐标点为文本框左下角
7.循环显示图片 cv2.imshow(imgname, img)
8.循环读取和识别n张照片并根据实际得分判断识别准确性
1.根据不同的预测准确率设定分数
2.设定阈值
3.将分数累加并与阈值比较当达到阈值后认为是某个模型
有一些问题存个档
4.问题(AI答案)
1.什么是级联分类器?
以人脸为例,我们可以把眼睛、鼻子、眉毛、嘴巴等属性分别定义成一个分类器,如果检测到一个模型符合所有定义人脸的属性,那么就认为它是一个人脸。
级联分类器就是将所有分类器集成到一起级联检测。(既然有类那么和数据库的知识有哪些联系?)
2.Haar,LBP,HOG三种特征是什么?
Haar特征是一种基于矩形区域的特征,常用于人脸检测。
LBP特征是一种用于纹理分析的局部特征描述符,常用于人脸识别。
HOG特征是一种用于目标检测的特征描述符,常用于行人检测等任务。
3.LBP和LBPH有什么关联和区别
LBP是一种用于纹理分析的局部特征描述符,它通过对图像中的每个像素点及其邻域像素的灰度值进行比较,生成二进制模式来描述局部纹理特征。
LBPH是基于LBP的人脸识别方法,它利用LBP算子来提取人脸图像的局部纹理特征,并将这些特征表示为直方图的形式,然后使用这些直方图来训练和识别人脸。
4.常用特诊描述符有哪些
方向梯度直方图(Histogram of Oriented Gradients,HOG) 与上面呼应
加速稳健特征(Speeded-Up Robust Features,SURF)
局部二进制模式(Local Binary Patterns,LBP)
尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)
高斯局部描述符(Gaussian Local Descriptors,GLOH)