计算机视觉CV期末总复习
1.计算机视觉基础
数字图像表示
二值图像
仅包含黑白两种颜色的图像,只使用1个比特为(0黑或1白)表示
彩色图像:分不同的颜色空间
gray灰度图像
每个像素只有一个采样颜色,取值范围0--255,为8比特位,0为黑,255为白
RGB颜色空间
(0,0,0)为黑,(255,255,255)为白,对机器友好的色彩模式,没那么人性化
CMY/CMYK颜色空间
C青、M洋红(品红)、Y黄色、K黑色
HSV颜色空间
H色调S饱和度V明度
YUV 颜色空间
Y明亮度、U色度、V浓度(饱和度)
储存格式:
- 平面格式
- 紧凑格式
2.opencv
通用开源功能强大的图像处理和计算机视觉库
主要功能及模块
- 内置了基本数据结构和输入输出结构
- 图像处理操作
- 圆形界面操作
- 视频分析
- 3D重建
基本操作
读写显示图像
读就是imread()将图片读入内存,支持jpg、png
img.shape(512,512,3)中图像三个数代表高、宽、通道数 ,分辨率为512x512,三个数代表彩色图像为三维数组。
img.dtype结果输出为uint8,说明每个数组用1个字节(8位)表示,每个数组元素为rgb通道值
img.size输出为shape中三个数的乘积
写就是imwrite,将数组转化为图像保存
显示图像imshow
waitkey
没有按键返回-1,有的话返回对应按键的ASCII码(A 65 Z90 a97 z122)。负数或零表示无限等待。设置数字参数等待时间结束返回-1,单位为毫秒,1秒 = 1000毫秒。
读写播放视频
把VideoCapture参数设置为0调用摄像头
写入文件:
图像平滑
概念:平滑也称作模糊。为抑制遥感图像因传感器和大气因素影响出现的噪声,使图像亮度趋于平缓的方法。目的是使图像亮度平缓渐变,减小突变梯度,改善图片质量。
图像滤波
均值滤波
dst = cv2.blur(src,ksize,anchor,borderType)
src原图形、ksize卷积核大小(高宽通常相同,为正奇数)、a锚点(可选参数)、b边界值处理方式(可选参数)
import cv2img=cv2.imread('lena.jpg')cv2.imshow('img',img)img2=cv2.blur(img,(5,5))cv2.imshow('imgBlur',img2)cv2.waitKey(0)
方框滤波
dst=cv2.boxFilter(src,ddepth,ksize[,anchor[,normalize[,borderType]])
ddepth目标图像深度,一般用-1表示与原图像深度一致,n归一化
import cv2img=cv2.imread('lena2.jpg')cv2.imshow('img',img)img2=cv2.boxFilter(img,-1,(3,3),normalize=False)cv2.imshow('imgBlur',img2)cv2.waitKey(0)
高斯滤波
import cv2img=cv2.imread('lena2.jpg')cv2.imshow('img',img)img2=cv2.GaussianBlur(img,(5,5),0,0)cv2.imshow('imgBlur',img2)cv2.waitKey(0)
中值滤波
dst = cv2.medianBlur(src,ksize)
ksize为整形,>1的正奇数
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img)
img2=cv2.medianBlur(img,9)
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)
双边滤波
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img)
img2=cv2.bilateralFilter(img,9,100,100)
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)
卷积
上述五个滤波均通过参数设置卷积核,但2D卷积可自定义卷积核
图像分割
概念:把图像分为具有若干特性的、具有独特性质的区域,并提出感兴趣目标的技术和过程。
感兴趣的为前景或目标,其余为背景
主要方法:基于阈值的分割、基于边缘、基于区域、基于聚类、基于图论、基于深度学习
基于阈值的分割
即把前景和背景进行划分
- 全局阈值分割
- 自适应阈值处理
- 迭代法阈值分割
边缘检测
检测出图像中所有灰度值变化较大的点,点连接成线条,即为图像边缘。
目的是标识数字图像中变化明显的点,减少数据量,剔除不相关信息,保留结构属性。
作用:提取物体重要特征
常见边缘检测方法:
soble边缘检测
边缘:像素值发生跃迁的地方(变化率、导数最大处)。
图像梯度:导数差分。图像是二维离散函数,导数为差分,该差分称为图像梯度。
求原图边缘信息可以将原图像和一阶导数算子进行卷积
sobel算子:又称一阶微分算子 。缺点:易受影响,用高斯滤波降噪
sobel边缘检测就是把高斯滤波和微分结合执行卷积,抗噪
x = cv2.Sobel(img,cv2.CV_16S,1,0)
y = cv2.Sobel(img,cv2.CV_16S,0,1)
拉普拉斯边缘检测
使用图像矩阵和拉普拉斯核进行卷积。本质是计算该点水平垂直四个相邻点平均点的差值。和sobel一样通过卷积计算边缘。
求原图边缘信息利用二阶差分计算
dst = cv2.Laplacian(img,cv2.CV_8U)
8位无符号整数,这是一种常见的数据类型,用于表示像素值。
canny边缘检测
多阶段检测方法,比较复杂
- 高斯滤波去除噪声
- sobel核进行滤波,计算梯度
- 边缘使用非极大值预测
- 双阈值筛选:检测边缘双阈值去除假阳性(误检)
- 分析边缘连接性,保留真正的,消除不明显的边缘
dst = cv2.Canny(img,threshold1=50,threshold2=150)
当噪声很大时可通过高斯滤波提升效果:
几何变换
色彩空间
img2 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)灰度图img2 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)RGB色彩img2 = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)HSV色彩空间img2 = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)YUV/YCrCb色彩空间
图像变换
读图像:img = cv2.imread('1.png')显示:cv2.('img',img),注意这里的引号图像名必须有
缩放
通过cv2.resize(img,dsize,dx=x,dy=y)dsize代表转换后图像大小
- 当为None时dxdy不能为0,且此时转换后图像宽度为:原图像宽度xdx,高度xdy
- 不为None时转换后大小以dsize为准,其格式为元组,(width,height),代表宽高。
还有一个插值方式:interpolation :
- 最近邻:cv2.INTERNEAREST
- 双线性:cv2.LINEAR
翻转
cv2.flip(img,flipcode),flipcode有三种:
- 0:x轴,垂直翻转
- >0:y轴,水平翻转
- <0:水平垂直翻转
仿射变换
包括了平移、旋转、缩放、映射。基本思想就是获得变换矩阵m
再通过cv2.warpAffine(img,m,dsize)仿射变换
- 平移m:np.float32([[1,0,100],[0,1,50]]),右移100,下移50
- 缩放:[[0.5,0,0],[0,0.5,0]]
旋转:通过cv2.getRoatation.Martix2D(center,angle,scale)获得m:
- 中心:(width/2,heigh/2)
- 旋转角度
- 目标图与原图比例
三点映射:通过cv2.AffineTransform(src,dst)获得m:
- src:原图三点坐标:np.float32([[0,0],[],[]])
- dst:目标图三点坐标
透视:通过cv2.warpPerspective(img,m,dsize)
m通过cv2.getPerspectiveTransform(src,dst)获得m:
- src:原图四点坐标:np.float32([[0,0],[],[]])
- dst:目标图四点坐标
3.深度学习基础
基础
全连接:该层的某一个神经元与下一层的每一个神经元都连接
卷积:提取特征 过程:
无跨步strides=1 边界填充padding分:
- arbitrary padding 任意填充
- half padding 半填充
- full padding 全填充
二维卷积:
卷积层nn.Conv2d(in_channels=1,out_channels=2,kernel_size=5,stride=2,padding=2)激活函数:nn.ReLU()线性整流单元池化层:nn.MaxPool2d(kernel_size=(2,2),stride=2,padding=0) 作用:降低维度,减小特征图尺寸avg_pool = nn.AvgPool2d(kernel_size=2, stride=2) # 池化窗口大小为 2x2,步幅为 2
关于激活函数: 激活函数
分组卷积:通过一个参数 groups来确定分组
深度可分离卷积:DSC
两部分:逐通道depthwise卷积,逐行逐列卷积(逐点pointwise卷积)
逐通道卷积就是把输入的k个通道分别通过单个卷积得到k个输出
逐点卷积:
- 通过1x1卷积和把逐通道卷积得到的k个特征图进行融合
- 能够通过改变卷积核的数量改变最终输出通道数
转置卷积和反卷积:反卷积即转置卷积的另一种表达。本质就是上采样增加特征图尺寸。应用如:图像分割、对抗网络
3D卷积:即读视频,添加了一个时间维度。4,3,3分别代表时间维度,高,宽
训练可视化
writer = SummaryWriter(log_dir="./log", comment='test_tensorboard', filename_suffix="test")writer.add_scaler()标量数据可视化
writer.add_histogram()数据分布可视化
writer.add_image()特征图可视化
writer.add_graph()模型可视化
标量数据可视化,区别在于add_scalars的dict是字典,而不是常量
模型优化
数据增强:
from torchvision import transforms
transforms.Compose([transforms.ToTensor(),transforms.Resize((224, 224)),transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
])
正则化:
L1正则化:权值向量w中各个元素的绝对值之和。比如 向量A=[1,-1,3], 那么A的L1范数为 |1|+|-1|+|3|。L = L+λ |W|
L2正则化:权值向量中各个元素的平方和然后再求平方根,对参数进行二次约束,参数w变小,但不为零,不会形成稀疏解 。它会使优化求解稳定快速,使权重平滑。所以L2适用于特征之间没有关联的情况。L(w) = Loss(y, y_pred) + λ * ||w||^2
通过weight_decay参数实现L2正则化。optimizer = torch.optim.Adam(model.parameters(), lr=0.001, weight_decay=0.01)
这里的weight_decay参数就是L2正则化中的λ参数。
过拟合:解决方法:数据增强、正则化、早停、增加数据集大小
DenseNet
经典卷积
AlexNet,共8层,ReLu
VGG16,13层卷积3层全连接。通过增加网络层数能提高模型性能,且多个小卷积核替换大卷积核,softmax
GoogleNet 22层 softmax
ResNet 输入输出间引入恒等映射,解决网络退化问题
DenseNet
共121层,分4个DenseBlock,且每个DenseBlock(下左图)内部都采用稠密连接。可理解为:
更激进的残差连接,创新点即每层的输出都有前面所有层在channel维度上连接在一起,作为下一层的输入。
DenseNet121共四个DenseBlock,每个block间使用Transition Layer进行特征降维。
ResAttentionNet
ResNet
网络深度增加时,网络的表现先是逐渐增加至饱和,然后迅速下降,出现网络退化问题
两种残差结构:
ResNet18, 34(浅层网络)的残差块的基本单元是BasicBlock 3、ResNet50, 101, 152 (深层网络)的残差块的基本单元是Bottleneck。原因是bottleneck计算量是basicBlock的1/16,常用于更深的网络,目的是减少计算和参数量
ResAttentionNet
残差注意力网络,是一种结合了注意力机制和ResNet的卷积神经网络,旨在提升图像分类任务的性能。 该网络由多个注意力模块堆叠而成,每个模块包含:
- 软掩膜分支( soft mask branch)
- 主干分支(trunk branch)
软掩膜分支采用自底向上(bottom-up)和自顶向下(top-down)的结构,学习生成一个掩膜(mask),该掩膜作为权重的形式与主干分支的输出特征图相乘,从而生成最终的注意力感知特征图。 Mix Attention对每个通道和每个空间位置使用Sigmoid激活函数。
YOLO
目标检测:找出图像中所有感兴趣的目标,确定他们的位置和类别。图像识别的四大任务:
- 分类、定位、检测、分割
目标检测学习算法可分两类:单阶段onestage和双阶段twostage
twostage:
- 先进行区域生成RP(包含待检测目标物体的预选框),在进行卷积分类
- 任务流程:特征提取、生成RP、分类/定位回归
- 常见算法:R-CNN、Fast R-CNN、Faster R-CNN、R-FCN、SPP-Net
onestage:
- 无RP,直接在网络中提取特征预测物体类别和位置
- 流程:特征提取、分类/定位回归
- 常见算法:YOLO v1-YOLOv3、OverFeat、SSD、RetinaNet
onestage核心理念:
端到端的目标检测,经过一个CNN即可得到最终的检测结果(创新点)
端到端指的是整个系统的输入和输出通过一个统一的模型直接连接,无需中间步骤
核心:通过在原图密集抽样产生大量boundingbox(边界框),在进行分类和回归
YOLOv1
如何使用卷积进行目标检测的呢?三步:
- 卷积提取特征
- 对特征图分类预测得到分类信息
- 使用特征图进行物体位置检测得到bbox边界框坐标
模块1
在经过卷积后得到7x7x30的矩阵,7x7代表划分的网格数,30为2x5+20,2个框、5个结果、20个类别
卷积最后一层会输出SXS的特征图,映射到原始图像,原始图像就会被分成SXS的网格gridcell。如果样本的真实标签GroundTruth落在某个网格,该网格负责预测该物体,网格预测出B个边界框,最终使用和真实标签的IOU较大的框。
IOU:预测框和真实框的交叠率,二者交集/并集,结果为1最佳,
- 缺点是无交集时永远为0,于是引入GIOU
模块二
NMS非极大值抑制:选取邻域分类数值最高的,抑制低的窗口
置信度:指的是模型对于检测到的目标属于特定类别的确定程度。即模型预测的边界框(bounding box)中确实存在目标的概率。
回归坐标
指的是bbox(预测边界框)的坐标
计算过程
col,row指的是中心坐标的框相对于原坐标的偏移量
训练过程
过程:根据图像的标注框(GroundTruth)与模型输出的7X7X30的预测结果进行比较,计算loss和梯度,反向调整参数
训练样本:一个网格会使用2个bbox回归预测,最终使用IOU(预测框和真实框的交叠率)较大的框检测物体
损失函数 3个:
关于坐标损失中根号作用:用于改善回归中相同距离,小框产生误差更大的问题,即对小框惩罚更重。
缺点
YOLOv5
模型结构
输入端
mosaic数据增强:四张图片进行随机缩放、裁剪、排布之后再拼接
letterbox自适应图片缩放:确保图片缩放时保持长宽比,同时填充空白部分适应模型输入要求
自适应锚框anchor box计算:anchor,用于预测框计算时的参考框,基于此预测只需再参考框上进行精修即可,好处:收敛更快、效果更好
Backbone结构
Focus结构
切片操作。举例演示如将4×4×3的图像切片后变成2×2×12的特征图。如下图左:
CSP
该结构将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。在Yolov5s中设计了两种CSP结构,以CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。
Neck
Prediction
GIOU损失函数
优点
- 模型推理速度快
- 可进行实时检测,准确率高
- 促进了目标检测领域技术更新
- 促进卷积网络工业化应用的发展
U-Net
图像分割概述
概念:根据灰度、色彩、空间纹理、几何形状等图像将空间分成若干互不相交的区域。这些特征在同一区域表现相似性,不同区域表现明显不同。
方法主要分两种:语义分割、实例分割
图像分割广泛应用于医疗、自动驾驶、地质检测、人像美妆
UNET图像分割
主要成就
核心思想
模型结构
编码-解码,也称作下采样-上采样。可以总结为:收缩路径提取特征,扩张路径恢复像素。总体上就是同层跳跃连接的U型结构,能融合更多的空间和几何信息
编码就是典型的重复结构:卷积--ReLU激活--池化,且每次下采样都把通道的数量加倍。这里的下采样由卷积和最大池化实现。
- 蓝色箭头:卷积,编码的卷积是无填充的3x3,尺寸减2,通道数不变,用于特征提取。解码层的卷积是无填充的3x3,尺寸减2,但通道数减半,用于信息解析。
- 红色:2x2最大池化操作,步长为2,尺寸减半,用于降低维度
- 灰色:复制裁剪,裁剪同层压缩路径的特征尺寸使其与当前扩展路径特征尺寸一致,合并,用于信息补充
- 绿色:2x2转置卷积,尺寸加倍,通道数量减半,用于上采样
- 青色:无填充的1x1卷积,尺寸不变,通道数为分类数,用于分类
解码是上采样的过程,可以看到,每次卷积通道减小一半(128--64),两次卷积变成原来的1/4,但合并为1/2 :
数据增强方式:
弹性形变,以获得形变不变性。通过模拟图像中可能出现的形变,如拉伸和压缩,来增强训练数据的多样性,从而使模型能够更好地泛化到未见过的形变。
Overlip-tile
处理需要保持输出尺寸与输入尺寸一致,以及需要为边界区域提供上下文信息的场景中。
优势
相关文章:

计算机视觉CV期末总复习
1.计算机视觉基础 数字图像表示 二值图像 仅包含黑白两种颜色的图像,只使用1个比特为(0黑或1白)表示 彩色图像:分不同的颜色空间 gray灰度图像 每个像素只有一个采样颜色,取值范围0--255,为8比特位&a…...

【微信小程序获取用户手机号
微信小程序获取用户手机号有2种,一种是前端自己解密,一种是获取后发给后端,后端去解密 重点:要在微信公众平台设置里面绑定微信开放平台账号,不然反解不出来用户手机号上代码: <button style"font-size: 16px;" open-type"getPhoneNumber" getphonenumb…...

WFP Listbox绑定数据后,数据变化的刷新
Listbox绑定数据通过ItemsSource来的,如果绑定的是普通的List<数据>,不会自己刷新。 使用ObservableCollection集合 解决问题的方法: 将数组替换为 ObservableCollection ObservableCollection 是专为绑定设计的集合类型,可以通知 W…...

Android Camera压力测试工具
背景描述: 随着系统的复杂化和业务的积累,日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化,需要对Android Camera应用进行全面的压测。 对于压…...

【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】
【华为OD-E卷 - 最优资源分配 100分(python、java、c、js、c)】 题目 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分…...

字符串格式时间(HH-MM)添加间隔时间后转为HH-MM输出
转换时间代码如下所示 #include <iostream> #include <iomanip> #include <sstream>//添加时间转换为时间 std::string addMinutesToTime(const std::string& timeStr, int minutesToAdd) {int hours, minutes;char delimiter;//解析输入时间std::istri…...

SQL 基础教程 - SQL ORDER BY 关键字
SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序。 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。 SQL ORD…...

STM32 软件I2C读写
单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…...

neo4j学习笔记
图数据库 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是图论为基础的,图数据库主要用于存储更多的连接数据。 图论(GraphTheory)是数学的一个分支。图论以图为研究对象,图论的图是由若干…...

【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署 1. 软硬件条件和环境测试1.1 软硬件条件1.2 开发环境测试 2. 创建基于 STM32 处理器…...

Nginx代理本地exe服务http为https
Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包,解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入:nginx -v 查看版本 nginx -hÿ…...

C++: glibc: pthread: pthread_cond_destroy,程序hang一例
今天碰到一个程序hang的情况。程序在退出的时候,调用到了pthread_cond_destroy,但是另一个线程还在pthread_cond_timedwait。应该是死锁的一个例子。应该查看libpthread.so的二进制文件,查看具体是在等什么。 Thread 1 (Thread 0x7f7028037580 (LWP 38)): #0 0x00007f7022e…...

【中间件】docker+kafka单节点部署---zookeeper模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控,先在测试环境部署单节点kafka验证…...

深入Android架构(从线程到AIDL)_08 认识Android的主线程
目录 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程编辑 UI线程的责任: 迅速处理UI事件 举例 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程 UI线程的责任: 迅速处理UI事…...

集线器,交换机,路由器,mac地址和ip地址知识记录总结
一篇很不错的视频简介 基本功能 从使用方面来说,都是为了网络传输的标识,和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器,下面是区别: 集线器 集线器:一个简单的物理扩展接口数量的物理硬件。…...

【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程
create-vue 简介 GitHub:https://github.com/vuejs/create-vue 创建的选项有多个,具体的可以看下方截图,当创建完成的时候可以发现工程中是自带vite的。 下面对其中的各种内容进行简单的说明 JSX (可以选择,但是我感觉没什么必要) 全称:JavaScript XML 允许你在 Java…...

Jetpack Compose 学习笔记(一)—— 快速上手
本篇主要是对 Jetpack Compose 有一个宏观上的了解。 1、Jetpack Compose 是什么与优势 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。 Compose 的优势&am…...

Kafka3.x KRaft 模式 (没有zookeeper) 常用命令
版本号:kafka_2.12-3.7.0 说明:如有多个地址,用逗号分隔 创建主题 bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic demo --partitions 1 --replication-factor 1删除主题 bin/kafka-topics.sh --delete --boots…...

Leetcode 最大正方形
java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...

ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题
参考https://cloud.tencent.com/developer/ask/sof/116470494 电脑是联想x1笔记本,显卡是intel的,nvidia显卡好像没看见这种问题。 sudo apt update sudo apt install xserver-xorg打开custom.conf, sudo gedit /etc/gdm3/custom.conf 解…...

沙箱模拟支付宝支付3--支付的实现
1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…...

Golang的代码质量分析工具
Golang的代码质量分析工具 一、介绍 作为一种高效、简洁、可靠的编程语言,被越来越多的开发者所喜爱和采用。而随着项目规模的增长和团队人员的扩大,代码质量的管理变得尤为重要。为了保障代码的可维护性、健壮性和可扩展性,我们需要借助代码…...

【Linux】:多线程(读写锁 自旋锁)
✨ 倘若南方知我意,莫将晚霞落黄昏 🌏 📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 &#…...

Java开发 PDF文件生成方案
业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…...

数学期望和方差
数学期望(Mathematical Expectation)和方差(Variance)是概率论和统计学中两个非常重要的概念。下面将分别对这两个概念进行解释。 数学期望 数学期望是随机变量的平均值,它描述了随机变量的中心位置。对于离散随机变…...

【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍Tensor RT 的优化流程。
【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍Tensor RT 的优化流程。 【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍Tensor RT 的优化流程。 文章目录 【面试AI算法题中的知识点】方向涉及:ML/D…...

BLDC无感控制的驱动逻辑
如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于…...
BP神经网络的反向传播算法
BP神经网络(Backpropagation Neural Network)是一种常用的多层前馈神经网络,通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数,从而调整权重,使得网络的预测输出与真实输出之间…...

[实用指南]如何将视频从iPhone传输到iPad
概括 将视频从 iPhone 传输到 iPad 时遇到问题?您可能知道一种方法,但不知道如何操作。此外,您要传输的视频越大,完成任务就越困难。那么如何将视频从 iPhone 传输到 iPad,特别是当您需要发送大视频文件时?…...

Linux Snipaste 截图闪屏/闪烁
防 csdn 不能看,Go to juejin Linux Snipaste 截图时窗口元素一闪一闪的无法正常使用。 解决此问题时系统环境为 Manjaro KDE6,不过我在其他发行版与 gnome 上也碰到了。 先放解决办法: # 启动 Snipaste 时去掉缩放参数 env -u QT_SCREEN_…...