什么是迁移学习

人工智能197

什么是迁移学习


你好,这篇文章咱们讨论一下关于「什么是迁移学习」的事情...
迁移学习是机器学习中的一种方法,其基本思想是将已经学习到的知识迁移到新问题中,可以大大缩短新问题的学习时间,并提高学习效果。在现实生活中,有很多问题无法通过简单的机器学习算法得到解决,这时可以考虑利用迁移学习来解决这类问题。

1、迁移学习的定义

迁移学习是一种机器学习的技术,其本质是在已经学得的知识的基础之上,对新的知识进行学习的一种方法。换句话说,迁移学习就是将已经学得的某个任务的知识迁移到新的任务中,并利用这些知识来加速学习效果的方法。

2、迁移学习的基本思想

在迁移学习的过程中,我们并不是从零开始学习一个新任务,而是通过利用已经学习到的相关知识,来先对新的任务进行一定的预处理,以此来减少新任务的学习难度和过程。因为我们使用已经学习到的知识作为新任务的先验知识,所以可以大大加快新任务的学习速度,并且可以得到更好的学习效果。

3、迁移学习的应用

(1)在图像识别中的应用

在图像识别中,通常需要大量的数据来进行训练,但是对于一些小的数据集,可能无法达到较好的效果。而迁移学习则可以从已有的图像数据集中提取信息,再将这些信息应用到新的需要识别的图像中,从而能够使得识别效果更好,并且加速模型的训练过程。

(2)在语音识别中的应用

语音识别通常是利用许多人的语音来进行训练,但是这需要很大量的时间和资源。利用迁移学习的方法,我们可以从已经通过学习得到的语音识别模型中提取出一些特征,然后将这些特征应用到新的语音识别任务中,从而节省了时间和资源,提高了学习效果。

(3)在文本分类中的应用

在进行文本分类时,我们可以利用已经通过学习得到的词向量来提高分类效果。对于新的文本分类任务,我们可以直接利用这些词向量来提取特征并进行分类,这样可以减少文本分类的学习时间。

4、迁移学习的挑战

尽管迁移学习在许多领域中都有良好的应用效果,但是它仍然面临一些挑战。首先,迁移学习需要找到已有知识与新问题之间的相似性,才能够实现迁移学习的效果。但是在现实生活中,应用场景复杂多样,找到这种相似性是很难的。其次,迁移学习需要针对具体的任务进行定制化设计,这要求对各种不同的任务都有深入的理解和掌握。

5、结语

迁移学习是一种有很大潜力的机器学习方法,其可以利用已有的知识来加速新任务的学习效果。虽然迁移学习还面临一些挑战,但是我们有理由相信,迁移学习在未来的应用中,将起到越来越重要的作用。

大家都在看:

opencv dnn(C++) 实时人脸检测

目录

环境配置

头文件-quickopencv.h

源文件-quickdemo.cpp

1.dnn::readNetFromTensorflow()

2. dnn::blobFromImage()

3. Mat detectionMat

源文件-test.cpp

环境配置

visual studio2019配置opencv(详细教程) - 知乎 (zhihu.com)

以下代码来自B站贾志刚老师,直接运行不通,做了小小小修改

030 - 案例:实时人脸检测_哔哩哔哩_bilibili

头文件-quickopencv.h

#pragma once
#include

using namespace cv;

class QuickDemo {
public:
    void face_detection_demo();
};

源文件-quickdemo.cpp

写完发现这一篇写的很好,概括我了(42条消息) opencv---关于DNN的若干学习笔记_夜雨_小学徒的博客-CSDN博客_opencv的dnn

1.dnn::readNetFromTensorflow ()

模型导入与加载的相关API支持以下深度学习框架:

  • tensorflow - readNetFromTensorflow
  • caffe - readNetFromCaffe
  • pytorch - readNetFromTorch
  • darknet - readNetFromDarknet

本次代码调用的tensorflow框架:

&#xA0;<span>cv2::dnn::readNetFromTensorflow(pbmodel, pbtxt)</span>函数直接调用 TensorFlow 训练的目标检测模型.

2. dnn::blobFromImage()

摘自:(42条消息) cv2.dnn.blobFromImage()函数用法_田土豆的博客-CSDN博客_blobfromimage

函数:cv2::dnn::blobFromImage(image, scalefactor, size, mean, swapRB, crop, ddepth)
作用:
输入图像转换为模型的标准输入,对图像进行预处理,包括减均值,比例缩放,裁剪,交换通道等,返回一个4通道的blob(blob可以简单理解为一个N维的数组,用于神经网络的输入)

参数:
image:输入图像(1、3或者4通道)
可选参数

scalefactor:图像各通道数值的缩放比例
size:输出图像的空间尺寸,如size=(200,300)表示高h=300,宽w=200
mean:用于各通道减去的值,以降低光照的影响(e.g. image为bgr3通道的图像,mean=[104.0, 177.0, 123.0],表示b通道的值-104,g-177,r-123)
swapRB:交换RB通道,默认为False.(cv2.imread读取的是彩图是bgr通道)
crop:图像裁剪,默认为False.当值为True时,先按比例缩放,然后从中心裁剪成size尺寸
ddepth:输出的图像深度,可选CV_32F 或者 CV_8U.

3. Mat detectionMat

Mat detectionMat是输入图像后经过网络前向传播后的输出的结果矩阵,

如果对象检测网络是SSD/RCNN/Faster-RCNN,输出的是N*7模式,所以其解析方式如下

Mat detectionMat(out.size[2],out.size[3],CV_32F,out.ptr

#include "quickopencv.h"
#include
#include

using namespace cv;
using namespace std;

void QuickDemo::face_detection_demo() {
    dnn::Net net = dnn::readNetFromTensorflow("D:\\opencv\\opencv\\sources\\samples\\dnn\\face_detector\\opencv_face_detector_uint8.pb",
         "D:\\opencv\\opencv\\sources\\samples\\dnn\\face_detector\\opencv_face_detector.pbtxt");
    VideoCapture capture("C:/Users/zhaoliuliu/Pictures/Camera Roll/test1.mp4");
    Mat frame;
    while (true) {
        capture.read(frame);
        if (frame.empty()) {
            break;
        }
        Mat blob = dnn::blobFromImage(frame, 1.0, Size(300, 300), Scalar(104, 177, 123), false, false);
        net.setInput(blob);// NCHW
        Mat probs = net.forward(); //
        Mat detectionMat(probs.size[2], probs.size[3], CV_32F, probs.ptr());
        // 解析结果
        for (int i = 0; i < detectionMat.rows; i++) {
            float confidence = detectionMat.at(i, 2);
            if (confidence > 0.5) {
                int x1 = static_cast(detectionMat.at(i, 3) * frame.cols);//后面四列表示box的四个坐标位置
                int y1 = static_cast(detectionMat.at(i, 4) * frame.rows);//坐标值是浮点数的比率,需要转换成像素坐标
                int x2 = static_cast(detectionMat.at(i, 5) * frame.cols);
                int y2 = static_cast(detectionMat.at(i, 6) * frame.rows);
                Rect box(x1, y1, x2 - x1, y2 - y1);
                rectangle(frame, box, Scalar(0, 0, 255), 2, 8, 0);
            }
        }
        imshow("人脸检测演示", frame);
        int c = waitKey(1);
        if (c == 27) { // 退出
            break;
        }
    }
}

源文件-test.cpp

#include
#include "quickopencv.h"
#include

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    QuickDemo qd;
    qd.face_detection_demo();

    waitKey(0);
    destroyAllWindows();
    return 0;
}

结果

运行输出结果 什么是迁移学习

Original: https://blog.csdn.net/grjhgrh/article/details/127009120
Author: zzzllllllll
Title: opencv dnn(C++) 实时人脸检测