人工智能领域-CNN 卷积神经网络 性能调优
在自动驾驶领域,对卷积神经网络(CNN)进行性能调优至关重要,以下从数据处理、模型架构、训练过程、超参数调整和模型部署优化等多个方面为你详细介绍调优方法,并给出相应的代码示例。
1. 数据处理
- 数据增强:通过对原始图像进行随机裁剪、旋转、翻转、缩放、颜色变换等操作,增加数据的多样性,提高模型的泛化能力。
import torchvision.transforms as transforms# 定义数据增强的转换操作
transform = transforms.Compose([transforms.RandomResizedCrop(224), # 随机裁剪并调整大小transforms.RandomHorizontalFlip(), # 随机水平翻转transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1), # 颜色抖动transforms.ToTensor(), # 转换为张量transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 归一化
])
- 数据清洗:去除数据集中的噪声、错误标注和重复数据,确保数据质量。
import pandas as pd# 假设 labels.csv 包含图像的标签信息
data = pd.read_csv('labels.csv')
# 去除重复数据
data = data.drop_duplicates()
# 去除错误标注数据,这里假设标签范围是 0 - 9
valid_data = data[(data['label'] >= 0) & (data['label'] <= 9)]
2. 模型架构优化
- 选择合适的网络架构:根据具体任务选择合适的预训练模型,如 ResNet、VGG、EfficientNet 等,并根据需求进行微调。
import torchvision.models as models
import torch.nn as nn# 加载预训练的 ResNet18 模型
model = models.resnet18(pretrained=True)
# 修改最后一层全连接层以适应具体任务
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 10) # 假设是 10 分类任务
- 添加注意力机制:在模型中添加注意力机制,如 SE 模块(Squeeze-and-Excitation),可以让模型更加关注重要的特征。
import torch
import torch.nn as nnclass SELayer(nn.Module):def __init__(self, channel, reduction=16):super(SELayer, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(channel, channel // reduction, bias=False),nn.ReLU(inplace=True),nn.Linear(channel // reduction, channel, bias=False),nn.Sigmoid())def forward(self, x):b, c, _, _ = x.size()y = self.avg_pool(x).view(b, c)y = self.fc(y).view(b, c, 1, 1)return x * y.expand_as(x)# 在卷积层后添加 SE 模块
class SEBlock(nn.Module):def __init__(self, in_channels, out_channels):super(SEBlock, self).__init__()self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1)self.se = SELayer(out_channels)self.relu = nn.ReLU(inplace=True)def forward(self, x):x = self.conv(x)x = self.se(x)x = self.relu(x)return x
3. 训练过程优化
- 使用合适的损失函数:根据任务类型选择合适的损失函数,如交叉熵损失函数适用于分类任务,均方误差损失函数适用于回归任务。
import torch.nn as nn# 分类任务使用交叉熵损失函数
criterion = nn.CrossEntropyLoss()
- 优化器和学习率调整:选择合适的优化器,如 Adam、SGD 等,并使用学习率调度器动态调整学习率。
import torch.optim as optim
from torch.optim.lr_scheduler import StepLR# 使用 Adam 优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 学习率调度器,每 10 个 epoch 学习率乘以 0.1
scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
- 早停策略:在验证集上监控模型的性能,如果在一定的 epoch 内性能没有提升,则提前停止训练,防止过拟合。
best_val_loss = float('inf')
patience = 5 # 容忍的 epoch 数
counter = 0for epoch in range(num_epochs):# 训练代码...val_loss = 0.0# 验证代码...if val_loss < best_val_loss:best_val_loss = val_losscounter = 0# 保存最佳模型torch.save(model.state_dict(), 'best_model.pth')else:counter += 1if counter >= patience:print("Early stopping!")breakscheduler.step()
4. 超参数调整
- 网格搜索和随机搜索:使用网格搜索或随机搜索来寻找最优的超参数组合,如学习率、批量大小、模型层数等。
from sklearn.model_selection import ParameterGrid# 定义超参数网格
param_grid = {'learning_rate': [0.001, 0.01, 0.1],'batch_size': [16, 32, 64]
}for params in ParameterGrid(param_grid):learning_rate = params['learning_rate']batch_size = params['batch_size']# 重新初始化模型、优化器等model = ...optimizer = optim.Adam(model.parameters(), lr=learning_rate)# 训练模型并评估性能...
5. 模型部署优化
- 模型量化:将模型的权重和激活值从浮点数转换为低精度的数据类型,如 8 位整数,以减少模型的存储空间和计算量。
import torch.quantization# 定义量化配置
backend = 'fbgemm'
model.qconfig = torch.quantization.get_default_qconfig(backend)
torch.quantization.prepare(model, inplace=True)
# 进行校准(需要一些校准数据)
model.eval()
with torch.no_grad():for data in calibration_data:model(data)
torch.quantization.convert(model, inplace=True)
- 模型剪枝:去除模型中对性能影响较小的连接或神经元,以减小模型的复杂度。
import torch.nn.utils.prune as prune# 对模型的卷积层进行剪枝
for name, module in model.named_modules():if isinstance(module, torch.nn.Conv2d):prune.l1_unstructured(module, name='weight', amount=0.2)
通过以上这些方法,可以显著提升 CNN 在自动驾驶任务中的性能,使其更加高效和准确。
相关文章:
人工智能领域-CNN 卷积神经网络 性能调优
在自动驾驶领域,对卷积神经网络(CNN)进行性能调优至关重要,以下从数据处理、模型架构、训练过程、超参数调整和模型部署优化等多个方面为你详细介绍调优方法,并给出相应的代码示例。 1. 数据处理 数据增强࿱…...
STM32的HAL库开发---高级定时器---输出比较模式实验
一、高级定时器输出比较模式实验原理 定时器的输出比较模式总共有8种,本文使用其中的翻转模式,当TIMXCCR1TIMXCNT时,翻转OC1REF的电平,OC1REF为输出参考信号,高电平有效,OC1REF信号连接到0C1上面ÿ…...
DeepSeek使用技巧大全(含本地部署教程)
在人工智能技术日新月异的今天,DeepSeek 作为一款极具创新性和实用性的 AI,在众多同类产品中崭露头角,凭借其卓越的性能和丰富的功能,吸引了大量用户的关注。 DeepSeek 是一款由国内顶尖团队研发的人工智能,它基于先进…...
python安装mitmproxy遇到的问题
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 加-i https://pypi.tuna.tsinghua.edu.cn/simple是为了加速下载。 1、vc build-tools 发现下面错误。 需要安装vc build-tools,有些py包需要vc来编译。 安装路径:Micr…...
基于HTML生成网页有什么优势
在互联网时代,网页是人们获取信息、交流互动的重要窗口,而基于HTML生成网页,是搭建网络大厦的关键。HTML语法简洁直观,标签和属性语义明确,新手也能迅速上手,创建包含基础元素的网页,极大降低了…...
c++ template-3
第 7 章 按值传递还是按引用传递 从一开始,C就提供了按值传递(call-by-value)和按引用传递(call-by-reference)两种参数传递方式,但是具体该怎么选择,有时并不容易确定:通常对复杂类…...
【实战篇】巧用 DeepSeek,让 Excel 数据处理更高效
一、为何选择用 DeepSeek 处理 Excel 在日常工作与生活里,Excel 是我们频繁使用的工具。不管是统计公司销售数据、分析学生成绩,还是梳理个人财务状况,Excel 凭借其强大的功能,如数据排序、筛选和简单公式计算,为我们提供了诸多便利。但当面对复杂的数据处理任务,比如从…...
【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)
本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…...
黑马 Linux零基础快速入门到精通 笔记
初识Linux Linux简介 提及操作系统,我们可能最先想到的是windows和mac,这两者都属于个人桌面操作系统领域,而Linux则属于服务器操作系统领域。无论是后端软件、大数据系统、网页服务等等都需要运行在Linux操作系统上。 Linux是一个开源的操作…...
蓝桥杯真题 - 像素放置 - 题解
题目链接:https://www.lanqiao.cn/problems/3508/learning/ 个人评价:难度 3 星(满星:5) 前置知识:深度优先搜索 整体思路 深搜,在搜索过程中进行剪枝,剪枝有以下限制条件…...
即梦(Dreamina)技术浅析(六):多模态生成模型
多模态生成模型是即梦(Dreamina)的核心技术之一,旨在结合文本和图像信息,生成更符合用户需求的视觉内容。多模态生成模型通过整合不同类型的数据(如文本和图像),能够实现更丰富、更精准的生成效果。 1. 基本原理 1.1 多模态生成模型概述 多模态生成模型的目标是结合不…...
C++小等于的所有奇数和=最大奇数除2加1的平方。
缘由 三种思路解题:依据算术推导得到一个规律:小等于的所有奇数和等于最大奇数除以2加1的平方。将在后续发布,总计有十种推导出来的实现代码。 int a 0,aa 1,aaa 0;cin >> a; while (aa<a) aaa aa, aa 2;cout << aaa;i…...
react的antd表单校验,禁止输入空格并触发校验提示
首先需要用到form组件,在form.item内添加rules属性,写正则表达式 <Form.Itemlabel"员工姓名"name"name"rules{[{ required: true, message: 员工姓名 },{ pattern: /^(?!\s*$).$/, message: 不能全是空格 },]}> <Input p…...
Kubernetes架构原则和对象设计(三)
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes常见问题解答 本文主要对kubernetes的核心技术概念和核心A…...
Qt+海康虚拟相机的调试
做机器视觉项目的时候,在没有相机或需要把现场采集的图片在本地跑一下做测试时,可以使用海康的虚拟相机调试。以下是设置步骤: 1.安装好海康MVS软件,在菜单栏->工具选择虚拟相机工具,如下图: 2.打开虚拟…...
485网关数据收发测试
目录 1.UDP SERVER数据收发测试 使用产品: || ZQWL-GW1600NM 产品||【智嵌物联】智能网关型串口服务器 1.UDP SERVER数据收发测试 A(TX)连接RX B(RX)连接TX 打开1个网络调试助手,模拟用户的UDP客户端设…...
【C#】一维、二维、三维数组的使用
在C#中,数组是用于存储固定数量相同类型元素的数据结构。根据维度的不同,可以分为一维数组、二维数组(矩阵阵列)、三维数组等。每增加一个维度,数据的组织方式就会变得更加复杂。 一维数组 一维数组是最简单的数组形…...
65【服务器攻击原理讲解】
我们经常可能会听说,某某的服务器被打了,被打死了,这里的打死并不一是指服务器直接死机 服务器有2个决定性参数 1:宽带,宽带越大,能传输的数据就越多 2:CPU,CPU越好能处理的运算…...
用AI写游戏3——模拟发牌
提示词 写一个python程序 ,输入参数为玩家数,输出参数为每个玩家的3张扑克牌 # 写一个python程序 ,输入参数为玩家数,输出参数为每个玩家的3张扑克牌 # 为了实现这个功能,我们可以使用Python的标准库random来生成随机…...
React 生命周期函数详解
React 组件在其生命周期中有多个阶段,每个阶段都有特定的生命周期函数(Lifecycle Methods)。这些函数允许你在组件的不同阶段执行特定的操作。以下是 React 组件生命周期的主要阶段及其对应的生命周期函数,并结合了 React 16.3 的…...
android 动态库加载机制
省流:android 不兼容 glibc,而是写了一套独立的 c 运行时库 (bionic libc),为移动设备和 google 自己推的东西做了大量优化。在这套工具链里,aosp 实现了一个兼容 bionic libc 的链接器,放到系统中代替 ld。 这个链接…...
PyTorch torch.sign函数介绍
torch.sign 是 PyTorch 库中用于计算输入张量每个元素符号的函数。下面从功能概述、函数原型、参数解释、返回值、使用示例以及与相关函数对比等方面详细介绍 torch.sign。 功能概述 torch.sign 函数会返回一个与输入张量形状相同的新张量,其中每个元素的值表示输…...
Flink CDC YAML:面向数据集成的 API 设计
摘要:本文整理自阿里云智能集团 、Flink PMC Member & Committer 徐榜江(雪尽)老师在 Flink Forward Asia 2024 数据集成(一)专场中的分享。主要分为以下四个方面: Flink CDC YAML API Transform A…...
计算机网络知识速记:TCP 与 UDP
计算机网络知识速记:TCP 与 UDP 一、概念 TCP (Transmission Control Protocol): 一个面向连接的协议,确保数据在传输过程中完整无误。通过建立连接和数据确认机制,提高数据传输的可靠性。是面向字节传输的。 UDP (User Datagram Protocol)…...
差分算法解析
差分(Difference Array)是一种常见的算法技巧,广泛应用于区间更新与区间查询的问题。它通过将数组的更新操作转化为数组的差分操作,使得某些类型的算法能在更短的时间内完成计算,尤其在处理频繁的区间更新时表现得尤为…...
makefile 的strip,filter,ifeq,ifneq基础使用
目录 一、strip1.1 语法1.2 示例1.3 使用场景 二、filter2.1 语法2.2 示例2.3 使用 * 和 ? 通配符2.4 结合使用2.5 使用场景 三、ifeq 和 ifneq3.1 ifeq3.1.1 语法3.1.2 示例 3.2 ifneq3.2.1 语法3.2.2 示例 3.3 典型使用场景3.3.1 根据版本控制编译选项:3.3.2 选择不同的源文…...
SOA(面向服务架构)全面解析
1. 引言 什么是SOA(面向服务架构) SOA(Service-Oriented Architecture,面向服务架构)是一种将应用程序功能以“服务”的形式进行模块化设计的架构风格。这些服务是独立的功能模块,它们通过定义明确的接口…...
B树详解及其C语言实现
目录 一、B树的基本原理 二、B树操作过程图形化演示 三、B树的应用场景 四、C语言实现B树及示例 五、代码执行结果说明 六、应用实例:文件系统目录索引 七、总结 一、B树的基本原理 B树(B-Tree) 是一种自平衡的树数据结构,…...
3.1 学习UVM中的uvm_component类分为几步?
文章目录 前言一、定义1.1 角色和功能:1.2 与其他UVM类的区别:1.3 主要属性和方法: 二、使用方法2.1 定义和实例化:2.2 生命周期管理:2.3 组件间通信: 三、何时使用3.1 使用场景3.2 适用组件3.3 与uvm_obje…...
python:面向对象之魔法方法
概念:主要是提供一些特殊的功能。 1.__init__方法: 一.不带参数: python中类似__xx__() __init__():初始化对象class Car():def __init__(self):self.color blueself.type suvdef info(self):print(f车的颜色是:{self.color})p…...
postgresql 游标(cursor)的使用
概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标,因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量,这是函数返回大数据集的有效方式,函数调用者…...
vivado 7 系列器件时钟
7 系列器件时钟 注释: 本章节以 Virtex -7 时钟源为例。 Virtex-6 的时钟资源与此类似。如果使用不同的架构,请参阅有关器件的 《时 钟资源指南》 [ 参照 40] 。 Virtex-6 和 Virtex-7 器件内含 32 个称为 BUFG 的全局时钟缓存。 BUFG 可满…...
Vue 3 部分新特性解析
1. 引言 Vue 3 引入了许多新特性和改进,使得开发更加高效和灵活。本文将深入探讨 Vue 3 的高阶部分,包括 Composition API、自定义指令、插件开发、状态管理和性能优化。 2. Composition API 2.1 引入 Composition API Composition API 是 Vue 3 中引…...
ubuntu24.04安装布置ros
最近换电脑布置机器人环境,下了24.04,但是网上的都不太合适,于是自己试着布置好了,留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…...
数据结构与算法-链表
单向链表(带哨兵) public class SinglyLinkedList {private Node head new Node(Integer.MIN_VALUE, null); // 定义一个哨兵节点作为头部节点,避免对头节点进行特殊处理// 节点类,包含值和指向下一个节点的引用private static …...
【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现
医院在为患者进行诊断和治疗过程中,会产生大量的医学影像图片,如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存,需要将每个患者文件夹下的图片合并成…...
协议-ACLLite-ffmpeg
是什么? FFmpeg是一个开源的多媒体处理工具包,它集成了多种功能,包括音视频的录制、转换和流式传输处理。FFmpeg由一系列的库和工具组成,其中最核心的是libavcodec和libavformat库。 libavcodec是一个领先的音频/视频编解码器库&…...
flask开发的网站,后端服务关闭后,可以找回之前的数据的吗
如果使用 Flask 开发的网页,后端服务关闭后,是否还能找回数据取决于数据的存储方式: 可能找回数据的情况: 数据库存储(MySQL、PostgreSQL、SQLite 等) 如果 Flask 连接的是持久化数据库,即使后…...
deepseek API开发简介
1、申请deepseek api key: https://platform.deepseek.com/api_keys创建API Key,并复制Key 2、安装python、pip,然后安装requests pip install requests3、.示例代码 import requests import json# DeepSeek API 地址 API_URL "ht…...
【AI】在Ubuntu中使用docker对DeepSeek的部署与使用
这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中,有效地利用机器学习工具来解决问题变得越来越重要。今天,我将引入一个名为DeepSeek 的工具,它作为一种强大的搜索引擎&a…...
Baklib推进内容中台智能推荐系统的技术创新与执行方案
内容概要 在当前数字化快速发展的背景下,内容中台的智能化推荐系统显得尤为重要。通过技术创新,Baklib致力于提升平台的用户体验,实现精准的个性化推荐,满足多样化的用户需求。内容中台不仅能够高效管理和组织大量的信息与知识&a…...
MySQL8.0实现MHA高可用
一、简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点…...
ip地址是手机号地址还是手机地址
在数字化生活的浪潮中,IP地址、手机号和手机地址这三个概念如影随形,它们各自承载着网络世界的独特功能,却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语,经常被错误地与手机号地址或手机地址划上等号。本文旨在…...
多光谱成像技术在华为Mate70系列的应用
华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…...
21.2.6 字体和边框
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体,设置Range.Borders就可以修改边框样式。 【例 21.6】【项目ÿ…...
详解命令模式
引言 当遇到发送者和接受者之间不是直接连接关系,而是间接连接关系,即发送者和接受者之间需要解耦,我们通常需要命令模式。比如电灯和开关,开关设计时并不知道自己是控制电灯的,也可能控制排气扇、电力设备等等&#x…...
Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
前言 之前通过 docker在ubuntu上安装Nextcloud,但是现在我使用PVE安装Debian虚拟机,不想通过docker安装了。下面开始折腾。 安装过程 步骤 1:更新系统并安装必要的软件 sudo apt update && sudo apt upgrade -y sudo apt install…...
string 与 wstring 的字符编码
测试代码: #include<stdio.h> #include<stdlib.h> #include<windows.h> #include <locale.h> #include <string> #include <iostream>// 函数用于计算UTF-8字符串中的字符数 int utf8_strlen(const char* str) {int len = 0;for (; *s…...
golang 开启HTTP代理认证
内部网路不能直接访问外网接口,可以通过代理发送HTTP请求。 HTTP代理服务需要进行认证。 package cmdimport ("fmt""io/ioutil""log""net/http""net/url""strings" )// 推送CBC07功能 func main() {l…...
第九届华为ICT大赛实践赛中国总决赛举行通知及考试地址
经大赛组委会决定,第九届华为ICT大赛实践赛中国总决赛将于2025年3月8日-9日举行具体赛事安排如下,期待与您顶峰相见! 理论考试:线上答题,团队3名成员共同完成1套试题,统一提交一份答案【60分钟,20道试题(含判断、单选…...