郭震 AI公众号:郭震AI

21 深度学习与 OpenCV 之训练自定义模型

发布日期:

最近更新:

分类: Opencv教程

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点7 个
图文要点6 张
正文规模1.4k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 7 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

深度学习与 OpenCV 之训练自定义模型结构图查看大图
深度学习与 OpenCV 之训练自定义模型结构图

OpenCV 学习要把图像输入、处理步骤、检测结果和工程性能放在一起验证。阅读时可以按「准备工作 -> 数据集收集与预处理 -> 创建模型 -> 训练模型」建立结构,再回到正文里的代码、案例或指标做验证。

深度学习与 OpenCV 之训练自定义模型核对图查看大图
深度学习与 OpenCV 之训练自定义模型核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「准备工作」,再查「数据集收集与预处理」。

在上一篇中,我们讨论了如何使用预训练的深度学习模型进行推断,此次我们将聚焦于如何使用 OpenCV 训练自定义模型。训练自定义模型允许我们针对特定任务优化模型性能。在深度学习的世界中,能够根据自己的需求创建和优化模型是一项重要的技能。本文将详细介绍训练自定义模型的步骤,并结合一个具体的案例,使这一过程更加清晰明了。

准备工作

数据集收集与预处理

OpenCV自定义模型训练判断卡查看大图
OpenCV自定义模型训练判断卡

用 OpenCV 训练自定义模型时,先看数据采集、标注格式、模型结构、训练参数、导出格式和推理验证。

在训练自定义模型之前,首先需要一个适合的训练数据集。假设我们的任务是对手写数字进行分类,我们可以使用“MNIST”数据集。MNIST 数据集包含 60,000 个手写数字的训练样本和 10,000 个测试样本。

数据预处理步骤:

  1. 下载数据集:

    可以从 MNIST官网 下载数据集,或者使用 Python 库直接加载。

    from keras.datasets import mnist
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    
  2. 数据归一化:

将图像数据归一化到 [0, 1] 范围内,有助于模型更有效地训练。

x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
  • 数据形状调整:

    OpenCV 和 Keras 常用的输入形状是 (样本数量, 高, 宽, 通道数),我们需要将数据调整为适当的形状。

    x_train = x_train.reshape(-1, 28, 28, 1)
    x_test = x_test.reshape(-1, 28, 28, 1)
    
  • 创建模型

    我们使用 Keras 构建一个简单的卷积神经网络(CNN)作为我们的自定义模型。该模型旨在识别手写数字。

    OpenCV阅读地图卡查看大图
    OpenCV阅读地图卡

    读《深度学习与 OpenCV 之训练自定义模型》时,可以先看配图里的任务、概念、练习和判断点,再回到正文补细节。这样更容易判断这篇内容能放到哪个真实场景里。

    from keras.models import Sequential
    from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
    
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(10, activation='softmax'))
    
    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    

    训练模型

    模型构建完成后,我们可以开始训练模型。训练过程中会调整模型参数,以便更好地适应训练数据。

    model.fit(x_train, y_train, epochs=10, batch_size=200, validation_split=0.2)
    
    • epochs:训练的轮数。
    • batch_size:每个训练步骤使用多少样本。

    保存模型

    训练完毕后,我们需要保存模型,以便后续使用。OpenCV 支持将 Keras 模型转换为其可用格式。

    model.save('mnist_model.h5')
    

    使用 OpenCV 进行推断

    我们可以使用 OpenCV 加载并使用已经训练好的模型进行预测。首先,需将 Keras 模型转换为 OpenCV 使用的格式,使用以下代码:

    import cv2
    from keras.models import load_model
    
    # 加载训练好的 Keras 模型
    model = load_model('mnist_model.h5')
    
    # 这里是将 Keras 模型转换为 OpenCV DNN 格式(后续可优化)
    def keras_to_opencv(model_path):
        net = cv2.dnn.readNetFromTensorflow(model_path)
        return net
    

    通过 OpenCV 进行推断,您可以处理图像并分类手写数字:

    image = cv2.imread('手写数字样本.png', cv2.IMREAD_GRAYSCALE)
    image = cv2.resize(image, (28, 28))
    image = image.astype('float32') / 255.0
    image = image.reshape(-1, 28, 28, 1)
    
    # 使用模型预测
    pred = model.predict(image)
    predicted_digit = np.argmax(pred)
    print("预测的数字是: ", predicted_digit)
    
    深度学习与 OpenCV 之训练自定义模型应用复盘卡查看大图
    深度学习与 OpenCV 之训练自定义模型应用复盘卡

    复习《深度学习与 OpenCV 之训练自定义模型》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

    深度学习与 OpenCV 之训练自定义模型应用检查卡查看大图
    深度学习与 OpenCV 之训练自定义模型应用检查卡

    练习《深度学习与 OpenCV 之训练自定义模型》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

    总结

    通过本篇教程,我们学习了如何使用 OpenCV 训练自定义模型,并对模型进行了评估和推断。我们使用了经典的手写数字识别任务作为例子,展示了从数据收集到模型使用的完整流程。在下一篇中,我们将探讨一个实践项目——人脸识别,进一步拓展深度学习和 OpenCV 的应用。

    通过这个系列教程,您已经掌握了 OpenCV 与深度学习的基本结合,希望在未来的项目中,您能熟练应用这些知识!

    继续阅读

    从这篇继续找到相关教程

    AI 教程总索引

    常见问题

    读前先确认这三点

    深度学习与 OpenCV 之训练自定义模型适合谁读?

    这是 OpenCV 教程 系列第 21 / 24 篇,适合正在学习OpenCV 教程,并且需要把概念落到操作步骤或判断标准里的读者。

    读这篇OpenCV教程要多久?

    按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

    这篇文章里的图文节点怎么用?

    正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关教程

    AI 教程总索引

    继续阅读

    继续找到相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...