基于YOLOv8算法的照片角度分类项目实践
目录
- 一、任务概述
- 二、YOLOv8算法简介
- 2.1 算法改进
- 2.2 算法特点
- 2.3 网络结构
- 2.4 性能比较
- 三、工程实践
- 3.1 安装算法框架库ultralytics
- 3.2 库存照片预处理
- 3.2.1 提取所有图片
- 3.2.2 去除冗余的相同照片
- 3.2.3 去除无车辆照片
- 3.2.4 随机提取指定数量的图片
- 3.3 照片朝向分类
- 3.3.1 数据准备
- 3.3.2 训练和评估
- 3.3.3 预测
一、任务概述
最近一个项目,需要针对库存的车辆照片运用人工智能算法进行照片朝向分类和矫正,算法在设计时需要满足轻量化需求,适合在CPU环境中进行快速推理。在具体实现时,可以将照片分为4个类别:ni_0、ni_90、ni_180、ni_270,分别表示照片经过0度、90度、180度、270度逆向旋转。综和考虑算法精度和速度要求,本文拟采用YOLOv8算法来实现该任务。
YOLOv8 是当前业界领先的感知模型,它建立在以前 YOLO 版本的基础上,引入了新的功能并做了相关改进,提升了性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。
二、YOLOv8算法简介
- YOLOv8作者:glenn-jocher
- 项目链接:https://github.com/ultralytics/ultralytics
YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来,领域内的研究者们已经对 YOLO 进行了多次更新迭代,模型性能越来越强大。当前最新版本为YOLOv8。
具体的,YOLOv8 是由小型初创公司 Ultralytics 创建并维护的,值得注意的是 YOLOv5 也是由该公司创建的。
2.1 算法改进
YOLOv8 算法的核心特性和改动可以归纳如下:
- 基本特性:提供了一个全新的 SOTA 模型,包括P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求。
- 骨干网络和 Neck 网络:参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,这种精心微调方式大幅提升了模型性能。不过这个C2f 模块中存在 Split 等操作,对特定硬件部署没有之前那么友好了。
- Head网络:相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free。
- Loss损失函数:采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss。
从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践。
2.2 算法特点
- 对用户友好的 API(命令行 + Python);
- 模型更快更准确;
- 模型能完成常见的图像感知任务,包括图像分类、目标检测、实例分割、关键点检测和视频跟踪;
- 与先前所有版本的 YOLO 兼容可扩展;
2.3 网络结构

上图所示即为YOLOv8的完整模型结构图。
查看 N/S/M/L/X 等不同大小模型,可以发现 N/S 和 L/X 两组模型只是改了缩放系数,但是 S/M/L 等骨干网络的通道数设置不一样,没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计,YOLOv7 网络设计时也没有遵循一套缩放系数作用于所有模型。
Head 部分变化最大,从原先的耦合头变成了解耦头,其结构如下所示:

可以看出,不再有之前的 objectness 分支,只有解耦的分类和回归分支,并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。
2.4 性能比较

YOLOv8是由小型初创公司 Ultralytics 创建并维护的,不过 Ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 Ultralytics 这个词,原因是 Ultralytics 将这个库定位为算法框架,而非某一个特定算法。
Ultralytics 开源库的两个主要优点是:
- 融合众多当前 SOTA 技术于一体;
- 未来将支持其他 YOLO 系列以及 YOLO 之外的更多算法;
三、工程实践
下面开始针对实际工程任务进行操作。
3.1 安装算法框架库ultralytics
YOLOv8算法位于开源框架库ultralytics中,因此先要安装ultralytics。
安装方式如下:
pip install ultralytics
为了方便后续配置和使用,可以将github上的ultralytics源码拉取到本地:
git clone https://github.com/ultralytics/ultralytics.git@main
3.2 库存照片预处理
3.2.1 提取所有图片
假设库存照片位于名为“第一批原始照片”的文件夹中,由于库存照片目录结构混乱,图像格式不统一,因此需要将所有图片提取到一个统一的文件夹中,并且所有图片以jpg格式保存,这样方便后续使用。
在同目录下创建文件夹car_data/1,然后使用下面的脚本完成图片提取和转换。
import os
import cv2
import numpy as npdef getFileList(dir, Filelist, ext=None):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext:扩展名返回: 文件路径列表"""newDir = dirif os.path.isfile(dir):if ext is None:Filelist.append(dir)else:if ext in dir[-3:]:Filelist.append(dir)elif os.path.isdir(dir):for s in os.listdir(dir):newDir = os.path.join(dir, s)getFileList(newDir, Filelist, ext)return Filelistorg_img_folder = "./第一批原始照片"# 检索文件
imglist = getFileList(org_img_folder, [], "jpg")
print("本次执行检索到 " + str(len(imglist)) + " 张图像\n")imgIndex = 1
for imgpath in imglist:print(imgpath)try:img = cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), -1)if img is None:print('读取失败')continueif len(img.shape) == 2:img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)elif img.shape[2] == 1:img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)elif img.shape[2] == 4:img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)savepath = os.path.join("car_data/1", 'jianyan_' + str(imgIndex) + ".jpg")cv2.imwrite(savepath, img)imgIndex += 1except:print("异常")else:passprint("完成")
上述脚本用来提取库存中的jpg照片,如果库存中还存在png或bmp图片,那么就修改代码:
imglist = getFileList(org_img_folder, [], "jpg")
将其中的jpg修改为png或bmp,同时修改对应的imgIndex起始标签值。
所有图片提取完以后都存放在car_data/1文件夹中,以jpg格式存储。库存总图片数达到89786张。
3.2.2 去除冗余的相同照片
库存照片中可能存在相同照片多次存放的问题,因此需要将完全相同的图像剔除掉,减少冗余。本文使用哈希比对算法来实现,具体脚本代码如下:
import os
import cv2
import shutil
from PIL import Image
import imagehashsrcFolder = 'car_data/1'
dstFolder = 'delimgs'
imgnames = os.listdir(srcFolder) # 计算所有图像哈希值
hashlst = []
for imgname in imgnames:print('计算哈希值中 '+imgname)hash_size = 16imgpath = os.path.join(srcFolder,imgname)hash = imagehash.dhash(Image.open(imgpath),hash_size=hash_size)hashlst.append(hash)# 检索相似图片
for curIndex in range(len(imgnames)-1):hash1 = hashlst[curIndex]print('比对中 '+imgnames[curIndex])for compIndex in range(curIndex+1,len(imgnames)):hash2 = hashlst[compIndex]if hash1==hash2:imgname = imgnames[curIndex]dstpath = os.path.join(dstFolder, imgname)shutil.move(os.path.join(srcFolder,imgnames[curIndex]), dstpath)imgname = imgname.split('.')[0]dstpath = os.path.join(dstFolder, imgname+'_compare.jpg')shutil.copyfile(os.path.join(srcFolder,imgnames[compIndex]), dstpath)print('找到相同文件')break
print('完成')
去除冗余后的库存总图片数达到74125张。
3.2.3 去除无车辆照片
库存照片中存在大量无车辆的错误照片,因此需要写一个脚本将无车辆照片剔除掉。这里使用预先在coco数据集上训练好的yolov8算法来实现。具体脚本代码如下:
import cv2, os, shutil
from ultralytics import YOLO# 检索文件夹
folderpath = "./car_data/1"
dstFolder = './delimgs'
imgnames = os.listdir(folderpath)# 加载模型
model = YOLO("models/yolov8m-seg.pt")# 循环处理
for imgname in imgnames:# 读取图像imgpath = os.path.join(folderpath, imgname)print(imgpath)img = cv2.imread(imgpath)if img is None:os.remove(imgpath)continue# 车辆检索result = model(img, imgsz=640, conf=0.5)[0]boxes = result.boxesisfind = Falsefor box in boxes:classlabel = box.cls.cpu().numpy()[0]if classlabel == 1 or classlabel == 2 or classlabel == 3 or classlabel == 5 or classlabel == 7:isfind = Truebreak# 没找到车辆,删除图像if not isfind:dstpath = os.path.join(dstFolder, imgname)shutil.move(imgpath, dstpath)print('完成')
在delimgs文件夹中存放着剔除掉的图像,由于算法存在一定的漏检率,因此有些存在车辆的照片被错误的移动到这个delimgs文件夹中,需要人工复核,将这些照片“捞回去”。
去除无车辆照片后,库存总图片数达到51180张。
3.2.4 随机提取指定数量的图片
库存照片数据量庞大,本文只需要提取2万多张图片用来训练算法即可。
import os
import shutil,randomsrcFolder = 'car_data/1'
dstFolder = 'car_data/2'if not os.path.exists(dstFolder):os.makedirs(dstFolder)picIndex = 1
imgnames = os.listdir(srcFolder)
random.shuffle(imgnames)
for imgname in imgnames:if picIndex > 25000:continueimgpath = os.path.join(srcFolder, imgname)dstpath = os.path.join(dstFolder, imgname)shutil.move(imgpath, dstpath)picIndex += 1print('完成')
提取好的图片位于car_data/2文件夹中,总数25000张。
3.3 照片朝向分类
3.3.1 数据准备
首先从预处理后的库存照片中精心挑选照片朝向正确的图像共计2万张整,然后分别对这2万张图像进行旋转,得到对应的逆90、逆180、逆270度角的三个类别图像,这样就组成了可以用来分类的图像库photo_direction,共计8万张图像,分4个类别。
完整生成脚本如下:
import os
from PIL import Imageni0_folder = "./dataset/car_data/ni0"
ni90_folder = "./dataset/car_data/ni90"
ni180_folder = "./dataset/car_data/ni180"
ni270_folder = "./dataset/car_data/ni270"# 创建文件夹
if not os.path.exists(ni90_folder):os.makedirs(ni90_folder)
if not os.path.exists(ni180_folder):os.makedirs(ni180_folder)
if not os.path.exists(ni270_folder):os.makedirs(ni270_folder)# 检索图像
img_names = os.listdir(ni0_folder)
for img_name in img_names:img_path = os.path.join(ni0_folder, img_name)print(img_path)# 读取图像img = Image.open(img_path)# 逆时针旋转90img90 = img.transpose(Image.ROTATE_90)save_path = os.path.join(ni90_folder, img_name)img90.save(save_path)# 逆时针旋转180img180 = img.transpose(Image.ROTATE_180)save_path = os.path.join(ni180_folder, img_name)img180.save(save_path)# 逆时针旋转270img270 = img.transpose(Image.ROTATE_270)save_path = os.path.join(ni270_folder, img_name)img270.save(save_path)print("完成")
其中ni0、ni90、ni180、ni270分别存储了逆时针0°、90°、180°、270°对应的图像。最后从每个文件夹中随机抽取2000张图片作为测试集用来评估算法。
最终数据集目录结构整理如下:
dataset/car_data/
|
|-- train/
| |-- ni0/
| | |-- 10008.jpg
| | |-- 10009.jpg
| | |-- ...
| |
| |-- ni90/
| | |-- 1000.jpg
| | |-- 1001.jpg
| | |-- ...
| |
| |-- ni180/
| | |-- 10014.jpg
| | |-- 10015.jpg
| | |-- ...
| |
| |-- ni270/
| | |-- 10014.jpg
| | |-- 10015.jpg
| | |-- ...
| |
|
|-- test/
| |-- ni0/
| | |-- 10.jpg
| | |-- 11.jpg
| | |-- ...
| |
| |-- ni90/
| | |-- 12.jpg
| | |-- 13.jpg
| | |-- ...
| |
| |-- ni180/
| | |-- 14.jpg
| | |-- 15.jpg
| | |-- ...
| |
| |-- ni270/
| | |-- 16.jpg
| | |-- 17.jpg
| | |-- ...
上述结构就是ultralytics的图像分类所需要的目录结构,整个数据集分为train和test两个文件夹,其中每个种类的图片都放在一起,每个种类的文件夹名称即为对应的类别名称。
3.3.2 训练和评估
找到ultralytics/cfg/models/v8中找到yolov8-cls.yaml文件,拷贝一份到ultralytics/configs目录下面,并重命名为yolov8-cls-photodirection.yaml,修改该文件中的nc参数为4,表示共有4个类别。
训练代码如下:
from ultralytics import YOLO# 加载预训练模型和配置文件
model = YOLO('./configs/yolov8m-cls-photodirection.yaml').load('yolov8m-cls.pt')# 训练模型
results = model.train(data='./dataset/car_data', epochs=100, imgsz=64, batch=32, device='0,1')
启动训练后如果本地没有预训练模型yolov8-cls.pt,则ultralytics框架会自动从github上进行下载。需要注意的是创建的yaml名称为yolov8-cls-photodirection.yaml,而在代码中调用的是yolov8s-cls-photodirection.yaml,这是ultralytics框架提供的一个功能,我们只需要配置一份yaml文件,即可适配不同规模任务的分类模型,包括:
- YOLOv8n-cls
- YOLOv8s-cls
- YOLOv8m-cls
- YOLOv8l-cls
- YOLOv8x-cls
本文共使用7万多张照片在2个GPU上进行训练,测试集为2000张图片,总耗时约17个小时。在测试集上的最佳top1准确率为0.985。
3.3.3 预测
训练好模型以后,使用下面的代码可以对单张图片进行预测和矫正:
from ultralytics import YOLO
import cv2
from PIL import Image
import numpy as np# 加载模型
model = YOLO('./runs/classify/train/weights/best.pt')# 预测模型
img = cv2.imread('./imgs/7.jpg')
results = model(img)
label = int(results[0].probs.top1) # 标签类别
labelconf = results[0].probs.top1conf.cpu().numpy() # 置信度
print(label)
print(labelconf)# 矫正
Thr = 0.8
if labelconf > Thr:if label == 1: # 逆时针180度img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))img = img.transpose(Image.ROTATE_180)img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)save_path = './imgs/result.jpg'cv2.imwrite(save_path,img)elif label == 2: # 逆时针270度img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))img = img.transpose(Image.ROTATE_90)img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)save_path = './imgs/result.jpg'cv2.imwrite(save_path,img)elif label == 3: # 逆时针90度img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))img = img.transpose(Image.ROTATE_270)img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)save_path = './imgs/result.jpg'cv2.imwrite(save_path,img)
最终输出的是分类标签、置信度以及矫正过后的车辆照片。
相关文章:
基于YOLOv8算法的照片角度分类项目实践
目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …...
go语言进阶篇——面向对象(一)
什么是面向对象 在我们设计代码时,比如写一个算法题或者写一个问题结局办法时,我们常常会使用面向过程的方式来书写代码,面向过程主要指的是以解决问题为中心,按照一步步具体的步骤来编写代码或者调用函数,他在问题规…...
C#,栅栏油漆算法(Painting Fence Algorithm)的源代码
1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏,找出油漆围栏的方法,使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的,所以返回10^97的模。 计算结果: 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…...
java_error_in_pycharm.hprof文件是什么?能删除吗?
java_error_in_pycharm.hprof文件是什么?能删除吗? 🌵文章目录🌵 🌳引言🌳🌳hprof格式文件介绍🌳🌳java_error_in_pycharm.hprof文件什么情况下能删除🌳&…...
LeetCode 491 递增序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明: 给定数组的长度不会超过15。 数组中的整数范围是 [-…...
考研/计算机二级数据结构刷题之顺序表
目录 第一题 顺序表的初始化,销毁,头插,尾插,头删,尾删,指定位置插入,指定删除以及打印 第二题 移除元素 题目链接: OJ链接 题目详解:移除元素 第三题:删…...
Git 代码协同的使用方法 for Azure DevOps
1. 登陆Azure 步骤1.1. VS Code,登陆Azure Cloud的Ubuntu环境,如下: 重点: 这里的Azure Cloud的用户名是YourAzureUserName,口令是YourAzurePassword 步骤1.2. 登陆Azure Cloud的Ubuntu环境后,配置Git账户信息&…...
数据库学习笔记2024/2/5
2. SQL 全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准 2.1 SQL通用语法 在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法。 1). SQL语句可以单行或多行书写&…...
PSM-Net根据Stereo图像生成depth图像
一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…...
Mocaverse NFT 概览与数据分析
作者:stellafootprint.network 编译:mingfootprint.network 数据源:Mocaverse NFT Collection Dashboard Mocaverse 是 Animoca Brands 推出的专属 NFT(非同质化代币)系列,包含 8,888 个独特的 "M…...
SpringBoot之事务源码解析
首先事务是基于aop的,如果不了解aop的,建议先去看下我关于aop的文章: Spring之aop源码解析 先说结论,带着结论看源码。首先,在bean的生命周期中, 执行实例化前置增强,会加载所有切面并放入缓存࿰…...
FPGA高端项目:解码索尼IMX327 MIPI相机转USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持
目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构FPGA逻辑设计工程源码架构SDK软件工程源…...
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 ECG信号简介 4.2 高通滤波器原理 4.3 心率统计 5.完整工程文件 1.课题概述 通过高通滤波器对ECG信号进行滤波,然后再统计其心率。 2.系统仿真结果 3.核心程序与模型 版本:…...
springCould中的gateway-从小白开始【9】
目录 1.🍟网关是什么 2.🍿gateway是什么 3.🥚gateway能什么 4.🌭核心概念 5.🧂工作流程 6.🧈实例 7.🥓gateway网关配置的方式 8.🍳配置动态路由 9.🧇pred…...
邮箱营销软件推荐?企业邮箱群发会限制吗?
邮箱营销平台怎么选择?哪种邮箱适合做外贸邮件群发? 邮箱营销凭借其精准触达、低成本和高回报的特点,依然是许多企业不可或缺的营销手段。该如何选择一款适合自己的工具呢?蜂邮EDM将为您推荐几款优秀的邮箱营销软件,并…...
编译原理实验3——自下而上的SLR1语法分析实现(包含画DFA转换图、建表、查表)
文章目录 实验目的实现流程定义DFA状态实现代码运行结果测试1测试2测试3 总结 实验目的 实现自下而上的SLR1语法分析,画出DFA图 实现流程 定义DFA状态 class DFA:def __init__(self, id_, item_, next_ids_):self.id_ id_ # 编号self.item_ item_ # productio…...
基于tomcat的https(ssl)双向认证
一、背景介绍 某个供应商服务需要部署到海外,如果海外多个地区需要部署多个服务,最好能实现统一登录,这样可以减轻用户的使用负担(不用记录一堆密码)。由于安全问题(可能会泄露用户数据)&#x…...
【iOS ARKit】3D人体姿态估计实例
与2D人体姿态检测一样,在ARKit 中,我们不必关心底层的人体骨骼关节点检测算法,也不必自己去调用这些算法,在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后,基于摄像头图像的3D人体姿态估计任务也会启动…...
ROS2 CMakeLists.txt 和 package.xml
这里记录一下ROS2中功能包package.xml和CMakeLists.txt的格式。以LIO-SAM的ROS2版本为例: 一:CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(lio_sam)if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)set(CMAKE_BUILD_TYPE…...
代码献瑞,算力有礼!低代码开发工具PaddleX特色产线新春福利来啦
回望2023年,飞桨在开发套件能力基础上,充分结合大模型能力,正式在飞桨星河社区上线发布了低代码开发工具PaddleX,实现AI应用开发效果和效率的大幅提升。产品通过提供图形界面开发模式,将复杂的编程任务简化为简单易用的…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
