FPGA部署CNN全流程1——基础知识

FPGA部署CNN全流程1——基础知识

目录

1.机器学习模式

1.1. 有监督学习 (Supervised Learning)

1.2. 无监督学习 (Unsupervised Learning)

1.3. 强化学习 (Reinforcement Learning, RL)

1.4. RLHF (Reinforcement Learning from Human Feedback)

四者对比总结

2.数据集获取方式

2.1. 有监督学习数据集 (Supervised Dataset)

2.2. 无监督学习数据集 (Unsupervised Dataset)

2.3. 强化学习数据集 (Reinforcement Learning Dataset)

2.4. RLHF 数据集 (RLHF Datasets)

2.5四种模式对比表

2.6 获取数据集的方式

2.6.1公开数据集网站获取

2.6.2 手动自作

(1)文件夹分割

(2)目标检测类型

(3)图像分割

3.机器学习网络搭建流程

3.1. 明确问题与数据准备 (Problem & Data)

3.2. 划分数据集 (Dataset Splitting)

3.3. 网络架构设计 (Model Architecture)

1. 架构是自己写的吗?

2. 如何搭建:神经网络的“积木”逻辑

A. 输入层 (Input Layer)

B. 特征提取层 (Feature Extraction / Backbone)

C. 分类层 (Classification Head)

3. 从简单到复杂

级别一:入门级(类 LeNet-5)

级别二:工业级标杆(ResNet - 残差网络)

级别三:硬件友好型(MobileNet / TinyML)

4. 针对 FPGA 部署的架构设计建议

搭建工具推荐

3.4. 编译模型 (Model Compilation)

3.5. 模型训练 (Model Training)

3.6. 模型评估与调试 (Evaluation & Tuning)

3.7. 模型保存与转换 (Deployment Preparation)


        本篇笔记总结了最近所学的机器学习的知识,包括机器学习模式、数据集类型、网络搭建全流程,作为在FPGA中部署神经网络的基础知识。

1.机器学习模式

1.1. 有监督学习 (Supervised Learning)

核心比喻:老师带着有标准答案的课本来教课。

        在有监督学习中,模型接收的是带标签 (Labeled) 的数据。每一条输入数据 x 都有一个对应的正确答案 y。

  • 工作原理:模型预测一个结果,然后将其与标准答案对比。如果错了,模型会通过损失函数(Loss Function)计算误差,并调整内部参数以减少下次的误差。其目标是学习一个映射函数 f(x) = y。
  • 常见任务
    • 分类 (Classification):判断一张图片是猫还是狗。
    • 回归 (Regression):预测明年的房价(连续数值)。
  • 应用场景:垃圾邮件检测、人脸识别、医疗诊断。

1.2. 无监督学习 (Unsupervised Learning)

        核心比喻:给学生一堆杂乱的乐高积木,让他们自己按颜色或形状分类。

        模型处理的是没有标签 (Unlabeled) 的数据。它不知道这些数据“是什么”,它的任务是发现数据内部潜藏的结构模式

  • 工作原理:模型通过计算数据点之间的相似度或分布特征,将相似的东西聚在一起,或者压缩数据的维度。
  • 常见任务
    • 聚类 (Clustering):根据购买行为将客户分为不同的群体。
    • 降维 (Dimensionality Reduction):简化复杂数据,提取核心特征(如 PCA)。
    • 关联分析:发现“买尿布的人通常也会买啤酒”这种规律。
  • 应用场景:用户画像分析、异常检测(如信用卡欺诈)、基因序列分析。

1.3. 强化学习 (Reinforcement Learning, RL)

        核心比喻:驯兽师训练小狗,做对了给骨头,做错了不给。

        强化学习不依赖静态的数据集,而是在交互中学习。

  • 核心组件
    • 智能体 (Agent):学习者。
    • 环境 (Environment):智能体所处的场景。
    • 动作 (Action):智能体做出的行为。
    • 奖励 (Reward):反馈信号(正奖或负罚)。
  • 工作原理:智能体在环境中采取行动,观察结果并获得奖励。它的目标是找到一种策略(Policy),使长期累积奖励最大化
  • 应用场景:自动驾驶、游戏 AI(如 AlphaGo)、机器人控制、量化交易。

1.4. RLHF (Reinforcement Learning from Human Feedback)

        核心比喻:老师不再给标准答案,而是根据学生的作文写得“好不好看”来打分。

        RLHF 是强化学习的一个特殊变种,也是让大语言模型(如 ChatGPT, Gemini)表现得像人类的关键技术。

  • 为什么需要它?:对于“写一首优美的诗”这种任务,没有唯一的标准答案(有监督学习很难做),也很难写出公式化的奖励函数(强化学习很难写 Reward)。但人类可以轻易判断:A 写的诗比 B 写的更好。
  • 训练步骤
    1. 有监督微调 (SFT):用人类写好的高质量问答对模型进行初步训练。
    2. 奖励模型训练 (RM):模型生成几个不同的回答,让人类进行排序(比如 A > C > B)。利用这些偏好数据训练一个“奖励模型”,这个模型学会了模拟人类的品味。
    3. 近端策略优化 (PPO):用这个“奖励模型”去指导原始模型进行强化学习。如果模型说出人类喜欢的话,奖励模型就给高分。
  • 作用:它解决了 AI 的**对齐(Alignment)**问题,确保模型生成的回答不仅逻辑正确,而且符合人类的价值观、安全且有用。

四者对比总结

维度有监督学习无监督学习强化学习RLHF
数据源结构化的标签数据原始无标签数据动态环境反馈人类偏好排序
反馈机制直接对比标准答案寻找数据内在联系奖励信号 (Reward)模拟人类品味的奖励模型
学习目标预测准确度发现潜在模式获取最大奖励与人类意图/价值观对齐

2.数据集获取方式

        这四种学习模式对数据的“胃口”完全不同。简单来说,它们的差异在于数据的加工深度反馈的及时性以及人参与的方式

2.1. 有监督学习数据集 (Supervised Dataset)

  • 特征成对出现。每一条数据都必须由“输入 x”和对应的“标签 y”组成。(可以理解为图片+图片属于什么标签)
  • 获取方式
    • 公开数据集:如 ImageNet(图像分类)、MNIST(手写数字)、COCO(目标检测)。
    • 人工标注:这是最常见的商业手段。通过数据标注公司(如 Scale AI、Appen)雇佣大量人力,手动给图片打框或给文字分类。
    • 合成数据:利用已有的物理引擎或模拟器生成带标签的数据。

数据集构成

$D = \{(x_1, y_1), (x_2, y_2), ... , (x_n, y_n)\}$


2.2. 无监督学习数据集 (Unsupervised Dataset)

  • 特征原始且海量。只有“输入 x”,没有任何人为标记的答案。
  • 获取方式
    • 网络爬虫:从互联网抓取的文本(如 Common Crawl 数据集)、图片、视频。
    • 日志记录:服务器产生的用户访问日志、传感器采集的原始信号(如你之前研究的卫星频谱原始数据)。
    • 公共仓库Wikipedia 全文、GitHub 代码库等。

数据集构成

$D = \{x_1, x_2, ... , x_n\}$


2.3. 强化学习数据集 (Reinforcement Learning Dataset)

  • 特征交互式序列。强化学习通常不需要预先准备好的“静态数据集”,而是需要一个环境 (Environment)
  • 获取方式
    • 仿真环境/模拟器
      • OpenAI Gymnasium:经典的控制类环境(如倒立摆、走迷宫)。
      • MuJoCo:高级物理动力学模拟。
      • CARLA:自动驾驶模拟器。
    • 离线强化学习 (Offline RL):如果无法实时交互,可以使用已有的历史运行记录(如工业机器人的历史操作日志)。

数据集构成:由状态、动作、奖励组成的轨迹

$(s, a, r, s')$


2.4. RLHF 数据集 (RLHF Datasets)

        RLHF 并不是一种单一数据集,它通常包含三个阶段的不同数据:

  1. SFT 数据集(有监督微调)
    • 内容:人类写出的高质量“标准范文”。(例如:提问“如何写诗?”,给出一个人类写的优美示例)。
    • 获取:雇佣专业的“专家”来撰写回答。
  2. RM 数据集(奖励模型/偏好数据)
    • 内容排序/比较数据。模型给出 A 和 B 两个回答,人类勾选“A 比 B 好”。
    • 获取:通过标注平台,让标注员对模型生成的多个结果进行打分或排序。
  3. Prompt 数据集(提示词集)
    • 内容:纯问题集。用于最后的强化学习训练,让模型面对这些问题不断生成新回答。

2.5四种模式对比表

模式数据核心成分数据成本获取难点
有监督(x, y) 键值对高(标注贵)标注的准确性和一致性
无监督纯 x 原始数据低(量大)数据的清洗和去重
强化学习(s, a, r, s') 序列中(仿真成本)构建高精度的模拟环境
RLHF人类偏好排序 (A > B)极高(专家成本)人类主观标准的一致性

2.6 获取数据集的方式

2.6.1公开数据集网站获取

       KaggleDatasets Find Open Datasets and Machine Learning Projects | Kaggle

       Hugging Face Datasets:Datasets – Hugging Face

2.6.2 手动自作

        (1)文件夹分割
        (2)目标检测类型

                通过labelim等工具手动标注。(这个我还没用过)

        (3)图像分割

        通过labelme进行图像分割来标注。

3.机器学习网络搭建流程

        搭建一个机器学习(尤其是深度学习)网络是一个系统工程,通常遵循从数据到模型,再到部署的标准化流程。

3.1. 明确问题与数据准备 (Problem & Data)

        行业里有一句话:Data is the new oil. 模型的上限由数据决定,算法只是在逼近这个上限。一切模型的基础都是数据。在开始写代码前,必须定义清楚任务。

  • 定义任务:确定是分类(分类别)、回归(预测连续值)还是聚类
  • 数据采集:从 Kaggle、Hugging Face 或传感器获取原始数据。
  • 数据清洗:处理缺失值、异常值和重复数据。
  • 特征工程
    • 归一化/标准化:将数据缩放到 [0, 1] 或均值为 0、方差为 1 的区间,防止梯度爆炸。
    • 提取特征:例如音频信号需要做 FFT(快速傅里叶变换)转为频谱图。比如做哨声识别,不能直接把波形丢进去,通常需要做 STFT(短时傅里叶变换) 转化为梅尔频谱图

3.2. 划分数据集 (Dataset Splitting)

为了保证模型的泛化能力,必须将数据分为三部分:

数据集占比作用
训练集 (Train)70% - 80%给模型“看”和“学”的,用于更新网络权重和偏置。
验证集 (Val)10% - 15%训练期间调整超参数,监控是否过拟合
测试集 (Test)10% - 15%最后用来考试的,模型之前从未见过,模型训练完成后,评估其实际表现。

3.3. 网络架构设计 (Model Architecture)

        根据任务类型选择或设计神经网络结构。

  • 选择框架:目前主流是 PyTorch(灵活、好调试)或 TensorFlow/Keras(工程化强)。
  • 定义架构
    • 选择层类型:
      • 全连接层 (Dense/Linear):处理通用特征。
      • 卷积层 (Conv2D):处理空间特征(图像、频谱图)。
      • 循环层 (LSTM/GRU):处理时间序列(语音、文本)。
    • 激活函数:给网络注入非线性。例如 :
      • ReLU:隐层最常用,解决梯度消失。
      • Sigmoid/Softmax:用于输出层分类。
  • 初始化权重:随机给网络里的参数赋初值,好的初始化能让收敛快一倍。

        架构一般是根据经典的模型来修改的。

        决定神经网络的“长相”确实是整个开发过程中最具创造力的部分。简单来说:你可以完全“手搓”一个架构,也可以在巨人的肩膀上进行“微调”。

        对于初学者或有特定硬件限制(如你的 FPGA 背景)的开发者,建议遵循从“借鉴成熟架构”到“自定义修改”的过程。1. 架构是自己写的吗?

在实际开发中,通常有三种选择:完全自定义 (Custom Architecture):如果你有一个非常特殊的任务(比如在极其有限的资源下识别特定的哨声频率),你可以从头开始堆叠 Conv2dReLUMaxPool。这就像用乐高积木拼出一个全新的造型。经典背骨 (Backbones):直接套用学术界公认的结构(如 ResNet, MobileNet)。这些结构经过了成千上万次实验验证,性能非常稳定。迁移学习 (Transfer Learning):直接拿别人训练好的模型(已经在数百万张图片上学过如何提取特征),你只需要把最后一层“分类头”换成你自己的(比如换成识别“哨声”和“环境音”)。2. 如何搭建:神经网络的“积木”逻辑

        一个标准的卷积神经网络(CNN)通常由三部分组成:A. 输入层 (Input Layer)

        你需要告诉网络数据的大小。如果你把哨声转成了的梅尔频谱图,那么输入就是 (1, 64, 64)(1代表单通道)。B. 特征提取层 (Feature Extraction / Backbone)

        这是网络的主体,负责从原始信号中提取特征(如线条、频率跳变等)。卷积层 (Convolution):像一个放大镜,滑动观察局部特征。激活层 (Activation):通常用 $ReLU(x) = \max(0, x)$,目的是给网络增加非线性能力。池化层 (Pooling):压缩图片尺寸,减少计算量,同时保留最重要的信息。C. 分类层 (Classification Head)全连接层 (Linear/Dense):将提取到的二维特征“拍扁”成一维向量。Softmax 层:将输出转化为概率(比如:哨声 95%,噪音 5%)。3. 从简单到复杂

        如果你要实现哨声识别,以下是三个级别的参考架构:级别一:入门级(类 LeNet-5)

适合初学者和资源极其匮乏的 FPGA 部署。结构:2个卷积层 + 2个池化层 + 2个全连接层。优点:参数极少(几万个),计算非常快,FPGA 逻辑资源占用低。级别二:工业级标杆(ResNet - 残差网络)

如果你发现网络加深后反而学不动了,ResNet 是救星。核心残差连接 (Shortcut Connection)。它允许信息跨层传递,解决了深层网络的梯度消失问题。参考场景:如果你需要极高的识别准确率,且不介意稍大的计算量。级别三:硬件友好型(MobileNet / TinyML)

这是最推荐你关注的方向,因为它专门为移动端和嵌入式(FPGA 可能借鉴其思想)设计。核心深度可分离卷积 (Depthwise Separable Convolution)。4. 针对 FPGA 部署的架构设计建议

既然你熟悉 Verilog 和信号处理,在搭建架构时需要特别考虑“硬件友好性”:权重的定点化 (Quantization Friendly):在搭建时尽量选择简单的激活函数(如 ReLU),避免使用 Sigmoid 或 Tanh,因为后者在 FPGA 上需要消耗大量的查找表(LUT)或复杂的浮点计算。避免巨大的全连接层:全连接层非常吃内存(BRAM)。尽量多用卷积层减少尺寸,最后接一个小的全连接层。步长 (Stride) 代替池化:有时直接在卷积层设置 stride=2 来降维,比专门加一个 Pooling 层在硬件实现上更简洁。算力对齐:尽量让通道数(Channel)是 8、16 或 32 的倍数,这样在 FPGA 并行处理(PE 阵列)时效率最高。搭建工具推荐可视化工具:使用 Netron。你可以下载别人的模型文件(.onnx 或 .h5),直接把文件拖进去,就能看到清晰的架构图。

        网站地址:saved_model.pb

代码参考:在 GitHub 搜索 Simple Audio Classification PyTorch,你会看到很多现成的、专门针对声音识别优化过的精简架构。

参考价值:它将标准卷积拆分为两步,计算量直接下降到原来的

$1/8$

$1/9$

,且准确率下降很少。

参考代码 (PyTorch)

self.conv1 = nn.Conv2d(1, 16, kernel_size=3) # 提取基础频率特征 self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(16, 32, kernel_size=3) self.fc1 = nn.Linear(32 * 14 * 14, 128) self.fc2 = nn.Linear(128, 2) # 输出两类:有哨声,无哨声 

3.4. 编译模型 (Model Compilation)

在训练开始前,需要配置三个核心要素:

  1. 优化器 (Optimizer):决定如何更新权重。
    • 常用:Adam (自适应)、SGD (随机梯度下降)。
  2. 评价指标 (Metrics):如 Accuracy(准确率)、Recall(召回率)。

分类:交叉熵

$CrossEntropy$

回归:均方误差

$MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$

损失函数 (Loss Function):衡量预测值

$\hat{y}$

与真实值

$y$

的差距。


3.5. 模型训练 (Model Training)

        模型开始在训练集上迭代。

  • 正向传播:输入数据通过网络层,计算预测结果。
  • 超参数调节:设置 Batch Size(每批处理样本数)和 Epochs(全量数据训练次数)。

反向传播:利用梯度下降法更新权重 W:

$W_{new} = W_{old} - \eta \cdot \frac{\partial Loss}{\partial W}$

其中

$\eta$

是学习率(Learning Rate)。


3.6. 模型评估与调试 (Evaluation & Tuning)

        观察训练曲线,判断模型状态:

  • 欠拟合 (Underfitting):训练集和验证集准确率都很低。解决:增加模型复杂度、减少正则化。
  • 过拟合 (Overfitting):训练集表现极好,但验证集表现很差。解决:引入 DropoutL2 正则化或增加数据量。

3.7. 模型保存与转换 (Deployment Preparation)

  • 格式导出:将模型保存为 .pth (PyTorch)、.h5 (TensorFlow) 或通用格式 ONNX
  • 量化/压缩:如果要在嵌入式设备或硬件(如 FPGA)上运行,通常需要将 浮点数转为 定点数。

Read more

2025必备10个降AIGC工具,继续教育学生必看

2025必备10个降AIGC工具,继续教育学生必看

2025必备10个降AIGC工具,继续教育学生必看 AI降重工具:高效降低AIGC率,让论文更自然 随着人工智能技术的快速发展,越来越多的学术论文开始借助AI生成内容。然而,这种便捷背后也带来了AIGC率偏高、查重率超标等问题。对于继续教育学生而言,如何在保证论文质量的同时有效降低AI痕迹和查重率,已成为亟需解决的关键课题。 AI降重工具的出现,为这一难题提供了专业且高效的解决方案。这些工具不仅能够识别并去除明显的AI痕迹,还能在不改变原意的前提下对文本进行语义优化,使论文更加符合学术规范,提升通过率。同时,它们支持多种格式和场景,适用于初稿处理、定稿自查以及最终检测等多个阶段。 工具名称主要功能适用场景千笔强力去除AI痕迹、保语义降重AI率过高急需降重云笔AI多模式降重初稿快速处理锐智 AI综合查重与降重定稿前自查文途AI操作简单片段修改降重鸟同义词替换小幅度修改笔杆在线写作辅助辅助润色维普官方查重最终检测万方数据库查重数据对比Turnitin国际通用检测留学生降重ChatGPT辅助润色指令手动辅助 千笔AI(官网直达入口) :https://www.qianbi

AI绘画:解锁商业设计新宇宙(6/10)

AI绘画:解锁商业设计新宇宙(6/10)

1.AI 绘画:商业领域的潜力新星 近年来,AI 绘画技术以惊人的速度发展,从最初简单的图像生成,逐渐演变为能够创造出高度逼真、富有创意的艺术作品。随着深度学习算法的不断优化,AI 绘画工具如 Midjourney、Stable Diffusion 等的出现,更是让这一技术走进了大众的视野,引发了广泛的关注和讨论。这些工具不仅操作简便,而且能够在短时间内生成多种风格的绘画作品,大大降低了绘画创作的门槛。 AI 绘画在商业领域展现出了巨大的潜力。据相关数据显示,2021 年中国 AI 绘画市场规模仅为 0.1 亿元,而预计到 2026 年将激增至 154.66 亿元 ,年复合增长率高达 244.1%。这一迅猛的增长趋势,反映出 AI 绘画在商业应用中的广阔前景。越来越多的企业开始认识到 AI 绘画的价值,并将其应用到广告、插画、

OpenClaw 集成 GitHub Copilot 指南

OpenClaw 集成 GitHub Copilot 指南

OpenClaw 集成 GitHub Copilot 指南 本文档介绍如何将 GitHub Copilot 作为模型提供商集成到 OpenClaw 中,实现通过 GitHub 账户调用 Copilot 模型能力。 目录 * 什么是 OpenClaw * 什么是 GitHub Copilot * 前提条件 * 安装 OpenClaw * 两种集成方式 * 方式一:内置 GitHub Copilot 提供商(推荐) * 方式二:Copilot Proxy 插件 * 设置默认模型 * 配置文件示例 * 模型管理 * 常见问题排查 * 参考资料 什么是 OpenClaw OpenClaw 是一个开源的 AI 助手平台,提供自托管的 AI 网关(

SD-PPP终极使用指南:快速打通Photoshop与AI绘画的完整教程

SD-PPP终极使用指南:快速打通Photoshop与AI绘画的完整教程 【免费下载链接】sd-pppGetting/sending picture from/to Photoshop in ComfyUI or SD 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp SD-PPP(Photoshop Picture Portal)是一款革命性的开源工具,专门为想要将专业图像编辑与AI绘画能力相结合的创意工作者设计。通过这款强大的插件,你可以在熟悉的Photoshop环境中直接调用Stable Diffusion模型,实现真正的无缝创作体验。 🚀 一键安装方法 自动安装(推荐新手) 下载项目中的ccx文件,双击即可通过Adobe Creative Cloud自动完成整个安装过程,无需任何技术操作。 手动安装步骤 1. 将ccx文件扩展名改为zip格式 2. 解压到Photoshop的Plug-ins插件目录 3. 重启Photoshop即可在扩展面板中找到SD-PPP 开发者模式安装 如果你需要进行定制开发,可以通