学习心得

                                                          机器学习构建模型的过程
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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值