学游者

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

记录人工智能各种工具,及其在工程上的作用关系,不探讨实现原理和细节。主要是在实践中的使用思路

工具关系

工具 说明 备注
pandas 基础数据处理工具,数据获取、清理数据 数据获取(excel等)+清理,主要处理:一二维数据
numpy 基础数据工具,主要对数据(矩阵)做数学公式处理。支持大量的维度数组与矩阵运算 数学公式库工具集,可以理解为matlab工具。可以处理多维数据
openCv 计算机视觉的核心工具,根据机器学习结果的特征库,处理视频图片方面的问题 图像、影视工具集
pytorch 用于神经网络的提前训练,根据素材训+各种神经网络算法训练出对应的特征 神经网络算法工具集 ,工程度比较低
TensorFlow 和pytorch功能一样,可以大规模部署 神经网络算法工具集 ,可以大规模部署

常用的算法关系

工具 说明 备注
感知机 识别分类特征
多层感知机(MLP) 解决感知机的问题
卷积神经网络(CNN) 1
循环神经网络(RNN) 2
Transformer 3

pandas 学习总结

知识点 说明 备注
概念
数据获取 CSV、JSON、SQL、Microsoft Excel 导入数据
数据清洗 1、 处理缺失数据、重复数据等 (丰富的函数来处理缺失值、重复数据、数据类型转换、字符串操)
数据转换 改变数据的形状、结构或格式
数据分析 进行统计分析、聚合、分组等 底层也是通过Numpy实现
数据可视化 通过整合 Matplotlib 和 Seaborn 等库,可以进行数据可视化。
使用领域
金融领域 处理和分析股票市场数据、财务数据、交易数据等
科学研究 科学研究领域经常涉及大量的实验数据、观测数据等,Pandas 提供了强大的工具来处理和分析这些数据,例如天文学、生物学、地球科学等领域。
企业数据分析 Pandas 提供了处理和分析企业数据的功能,包括销售数据、客户数据、运营数据等。
社交媒体分析 Pandas 可以帮助分析师处理和分析社交媒体数据,进行用户行为分析、情感分析等。
医疗保健 处理和分析大量的医疗数据,包括患者数据、临床试验数据、医疗图像数据等
教育研究 理学生表现数据、教学评估数据、课程数据等,从而进行教育研究和改进教学质量
市场营销 分析市场数据、客户数据、广告数据等,以制定营销策略和优化市场活动效果
结构
series 一维数组或列表,每个数据都带索引
dataframe 二维表格(多维数组,多个seriers组成),每个数据都索引
api
Series新增 pandas.Series(data=None(数据), index=None(索引结构), dtype=None(数据类型), name=None(名称), copy=False(是否复制数据), fastpath=False(快速路径))
dataframe新增 pandas.DataFrame(data=None(数据), index=None(行索引), columns=None(列索引), dtype=None(数据类型), copy=False(是否复制数据))
读取CSV pd.read_csv('data.csv'(文件地址), sep=';'(分隔符), header=0(指定标题行), names=['A', 'B', 'C'](列名),index_col=index_col(索引列表名),usecols=usecols(读取指定的列,可以是列的名称或列的索引), dtype={'A': int, 'B': float})(强制转列的数据类型),skiprows(跳过行号),nrows(读取前N行),na_values(指定哪些值应视为缺失值),skipfooter(跳过文件结尾的指定行数),encoding=UTF8(文件的编码格式)
读取excel数据 pandas.read_excel(io(文件的路径), sheet_name=0(sheet表名), *, header=0(用作列名的行), names=None(列名的列表), index_col=None(用作行索引的列), usecols=None(要读取的列), dtype=None(数据类型), engine=None(解析引擎), converters=None(转换数据的函数字典), true_values=None(指定应该被视为布尔值True的值), false_values=None(指定应该被视为布尔值False的值), skiprows=None(指定要跳过的行数), nrows=None(指定要读取的行数), na_values=None(指定应该被视为缺失值的值), keep_default_na=True(指定是否要将默认的缺失值(例如NaN)解析为NA), na_filter=True(指定是否要将数据转换为NA), verbose=False(指定是否要输出详细的进度信息), parse_dates=False(指定是否要解析日期), date_parser=<no_default>(用于解析日期的函数), date_format=None(指定日期的格式), thousands=None(指定千位分隔符), decimal='.'(指定小数点字符), comment=None(指定注释字符), skipfooter=0(指定要跳过的文件末尾的行数), storage_options=None(用于云存储的参数字典), dtype_backend=<no_default>(指定数据类型后端), engine_kwargs=None(传递给引擎的额外参数字典))
json数据 df = pd.read_json( path_or_buffer(JSON 文件路径、JSON 字符串或 URL), orient=None(JSON 数据的结构方式,默认是 'columns'), dtype=None(强制指定列的数据类型), convert_axes=True(是否转换行列索引),convert_dates=True(是否将日期解析为日期类型),keep_default_na=True(是否保留默认的缺失值标记))
清洗空值 DataFrame.dropna(axis=0(0:逢空值剔除整行;1:逢空值去掉整列), how='any'(any:出现 NA 就去掉整行;all:都是 NA 才去掉这整行), thresh=None(需要多少非空值的数据才可以保留下来的), subset=None(设置想要检查的列), inplace=False(直接覆盖之前的值并返回 None))
sql读取 pd.read_sql(query, connection_object) 从数据库获取
html读取 pd.read_html(url)
相关性分析
皮尔逊相关系数 衡量变量之间的线性关系,适用于数值型变量
斯皮尔曼等级相关系数 衡量变量之间的单调关系,适用于数值型和顺序型变量
肯德尔秩相关系数 衡量变量之间的秩次关系,适用于小样本数据
相关性 df.corr(method='pearson', min_periods=1)
协方差 DataFrame.cov()
排序/聚合/分组
按值排序 df.sort_values(by, ascending)
按索引排序 df.sort_index(axis)
按列分组并聚合 df.groupby(by).agg()
多重聚合函数应用 df.groupby(by).agg([func1, func2])
分组后排序 df.groupby(by).apply(lambda x: x.sort_values(by='col'))
透视表(特殊聚合) df.pivot_table(values, index, columns, aggfunc)

numpy 学习总结

知识点 说明 备注
基本概念
Ndarray对象 N维数组对象
数据类型 bool_:布尔型数据类型(True 或者 False)
int_:整数类型(类似于 C 语言中的 long,int32 或 int64)
intc:与 C 的 int 类型一样,一般是 int32 或 int 64
intp:用于索引的整数类型
int8:字节(-128 to 127)
int16:整数(-32768 to 32767)
int32:整数(-2147483648 to 2147483647)
int64:整数(-9223372036854775808 to 9223372036854775807)
uint8:无符号整数(0 to 255)
uint16:无符号整数(0 to 65535)
uint32:无符号整数(0 to 4294967295)
uint64:无符号整数(0 to 18446744073709551615)
float_:float64 类型的简写
float16:半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32:单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64:双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_:complex128 类型的简写,即 128 位复数
complex64:复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128:复数,表示双 64 位浮点数(实数部分和虚数部分)
数组属性 ndarray.ndim: 数组的秩(rank),即数组的维度数量或轴的数量。
ndarray.shape:数组的维度,表示数组在每个轴上的大小。对于二维数组(矩阵),表示其行数和列数。
ndarray.size: 数组中元素的总个数,等于 ndarray.shape 中各个轴上大小的乘积。
ndarray.dtype:数组中元素的数据类型
ndarray.itemsize:数组中每个元素的大小,以字节为单位。
ndarray.flags: 包含有关内存布局的信息,如是否为 C 或 Fortran 连续存储,是否为只读等。
ndarray.real: 数组中每个元素的实部(如果元素类型为复数)。
ndarray.imag: 数组中每个元素的虚部(如果元素类型为复数)。
ndarray.data: 实际存储数组元素的缓冲区,一般通过索引访问元素,不直接使用该属性。
api
加载数组 numpy.array(object<数组或嵌套的数列>, dtype = None<数据类型>, copy = True<数据类型>, order = None<创建数组的样式>, subok = False<默认返回一个与基类类型一致的数组>, ndmin = 0<指定生成数组的最小维度>)
创建指定纬度,并制定类型 numpy.empty(shape<形状>, dtype = float<数据类型>, order = 'C'<存储顺序:C-行优先、F-列优先、C-输入数组的存储顺序>) 自动创建
创建指定纬度,元素为0 numpy.zeros(shape, dtype = float, order = 'C') 自动创建
创建指定纬度,元素为1 numpy.ones(shape, dtype = None, order = 'C')
创建指定纬度相同的数组,元素为0 numpy.zeros_like(a<相同形状的数组>, dtype=None<数据类型>, order='K', subok=True, shape=None)
创建指定纬度相同的数组,元素为1 numpy.ones_like(a<相同形状的数组>, dtype=None<数据类型>, order='K', subok=True, shape=None)
范围创建 numpy.arange(start<起始值,默认为0>, stop<终止值>, step<步长,默认为1>, dtype<数据类型>) 一维数据
等差数组 np.linspace(start<起始值>, stop<终止值>,, num=50<等步长的样本数量>, endpoint=True, retstep=False, dtype=None) 一个维等差数组
等比例数组 np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) 一个维等比例数组
切片/索引 slice(start<起始索引>,end<结束索引>,step<步长>)
a[2<起始索引>,7<结束索引>,2<步长>]
广播 在numpy的数组计算中,a*b 切 a.shape==b.shape时对应位相乘,否则会shape小的<一行且列相同,否则报错>会每行自动相乘 可以用其它api
数组操作 numpy.reshape(arr<原数组>, newshape<形状>, order='C')
numpy.ndarray.flat ,主要用于for循环
numpy.ndarray.flatten ,返回一份数组拷贝,降多维数组
numpy.ndarray.ravel ,返回一份数组拷贝,数组更快
numpy.ndarray.transpose ,对换数组的维度,转置
numpy.rollaxis(arr, axis<向后滚动的轴>, start<完整的滚动>) :向后滚动特定的轴到一个特定位置
numpy.swapaxes(arr, axis1<第一个轴>, axis2<第二个轴>) :交换数组的两个轴
numpy.broadcast_to(array, shape, subok) :将数组广播到新形状
numpy.expand_dims(array, axis) :在指定位置插入新的轴来扩展数组形状
numpy.squeeze(array, axis) :删除一维的条目
numpy.concatenate((a1, a2, ...), axis):沿指定轴连接相同形状的两个或多个数组
numpy.stack(arrays, axis) :沿新轴堆叠数组序列
numpy.hstack(arrays, axis) :水平堆叠数组序列
numpy.hstack(arrays, axis) :水平堆叠数组序列
numpy.vstack(arrays, axis) :垂直堆叠数组序列
numpy.split(ary, indices_or_sections<整数:平均切分,数组:沿轴切分>, axis<0-横向切分>) :切分数组
numpy.hsplit(ary, indices_or_sections<整数>) :水平分割数组
numpy.vsplit(ary, indices_or_sections<整数>) :垂直轴分割
numpy.resize(arr, shape) :返回新的形状
numpy.append(ary, values<填加值>, axis=None) :添加数据
numpy.insert(arr, obj<需插入点之前的索引>, values<插入值>, axis<插入轴>) :添加数据
numpy.delete(arr, obj<删除索引>, axis) :删除数据
numpy.unique(arr, return_index<返回重复的下标,行向量>, return_inverse<返回重复的下标,列向量>, return_counts<重复次数>):数组去除重复元素
位运算 按位与:numpy.bitwise_and(x1, x2)
按位或:numpy.bitwise_or(x1, x2)
按位异或:numpy.bitwise_xor(x1, x2)
按位取反:numpy.invert(x)
左移:numpy.left_shift(x1, x2)
右移:numpy.right_shift(x1, x2)
字符串 numpy.char.add():两个数组的逐个字符串元素进行连接
numpy.char.multiply():按元素多重连接后,相同元素链接多次
numpy.char.center():居中字符串,其它填充
numpy.char.capitalize():首字母大写
numpy.char.title():每个单词首字母大写
numpy.char.lower():字母小写
numpy.char.upper():字母大写
numpy.char.split():根据分隔符对字符串进行分割
numpy.char.splitlines():以换行符作为分隔符来分割字符串,返回数组
numpy.char.strip():移除开头或结尾处的特定字符
numpy.char.join():通过分隔符来连接数组中的元素或字符串
numpy.char.replace():使用新字符串替换字符串中的所有子字符串
numpy.char.encode():编码
numpy.char.decode():解码
数学函数 np.sin():正弦值
np.cos():余弦值
np.tan():正切值
np.arcsin():反正弦
np.arccos():反余弦值
np.arctan():反正切值
np.around(a,decimals):数字的四舍五入值
np.floor():向下取整
np.ceil():向上取整
算术函数 np.add():数组对位相加(广播相同形状)
np.subtract():数组对位相减(广播相同形状)
np.multiply():数组对位相乘(广播相同形状)
np.divide():数组对位相除(广播相同形状)
np.reciprocal():返回参数逐元素的倒数
np.power():计算2个数组对位中第二个数组元素的幂
np.mod()/remainder() :数组中相应元素的相除后的余数
统计函数 numpy.amin(a, axis=None, out=None, keepdims=, initial=, where=) :指定轴的最小值
numpy.amax(a, axis=None, out=None, keepdims=, initial=, where=) :指定轴的最大值
numpy.ptp(a, axis=None, out=None, keepdims=, initial=, where=) :最大值与最小值的差
numpy.percentile(a, q<计算的百分位数>, axis):计算元素中的分位数
numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=):分位数
numpy.mean(a, axis=None, dtype=None, out=None, keepdims=):算术平均值
numpy.average(a, axis=None, weights=None, returned=False):加权平均数=(索引为<加权值>*元素)/元素和
np.std():标准差=sqrt(mean((x - x.mean())2))
np.var():方差=mean((x - x.mean())
2)
排序/条件筛选 numpy.sort(a, axis, kind, order):排序
numpy.argsort():数组值从小到大的索引值数组
numpy.lexsort():优先级排序
numpy.quicksort():快排
numpy.mergesort():归并排序
numpy.heapsort():堆排序
numpy.msort():数组按第一个轴排序
numpy.sort_complex():复数按照先实部后虚部的顺序进行排序
numpy.partition():指定一个数,对数组进行分区
numpy.argpartition():通过关键字 kind 指定算法沿着指定轴对数组进行分区
numpy.argmax():沿给定轴返回最大元素的索引
numpy.argmin():沿给定轴返回最小元素的索引
numpy.nonzero():返回输入数组中非零元素的索引
numpy.where():输入数组中满足给定条件的元素的索引
numpy.extract():根据某个条件从数组中抽取元素,返回满条件的元素
字节交换 numpy.ndarray.byteswap() 将 ndarray 中每个元素中的字节进行大小端转换
副本/视图 id():返回对象id
ndarray.view(): 创建一个新的数组对象,变化不会改变原始数据的维数,视图的id()相同
ndarray.copy(): 创建一个副本,变化不会改变原始数据的维数,视图的id()不相同
ndarray.view(): 创建一个新的数组对象,变化不会改变原始数据的维数
矩阵库 ndarray.T:转置
numpy.matlib.empty(shape, dtype, order):新的矩阵
numpy.matlib.zeros():新的矩阵,以0填充
numpy.matlib.ones():新的矩阵,以1填充
numpy.matlib.eye():新的矩阵,对角线元素为 1,其他位置为零
numpy.matlib.identity():返回给定大小的单位矩阵,对角线是1,其余是0
numpy.matlib.rand():返回新矩阵,随机填充的
前面的ndarray已经实现很多相同功能
线性代数 numpy.dot(a, b, out=None):两个数组的点积,即元素对应相乘(相同形状或者广播)
numpy.vdot():两个向量的点积
numpy.inner():两个数组的内积
numpy.matmul():两个数组的矩阵积
numpy.determinant():数组的行列式
numpy.solve():求解线性矩阵方程
numpy.inv():计算矩阵的乘法逆矩阵

openCv学习总结

知识点 说明 备注
总结 开源的计算机视觉和机器学习软件库 。通过 NumPy数组来表示图像数据,图像=多维数组,其中每个元素对应图像中的一个像素。图像的尺寸和颜色模式也可以通过数组的形状来表示
应用领域 图像处理: 图像滤波、图像增强、图像分割、图像特征提取等
视频分析: 目标跟踪、运动检测、行为识别等。
物体识别: 人脸识别、车牌识别、物体识别等
机器学习: 支持向量机、K 均值聚类、神经网络等
深度学习: 图像分类、目标检测、图像分割等
增强现实: 虚拟物体叠加、手势识别等
机器人: 视觉导航、目标抓取等
应用领域 人脸识别与检测: 利用图像中人脸的特征进行身份验证,应用于安全系统、社交媒体和照片管理等领域
物体检测与跟踪: 在监控、无人驾驶、工业检测等场景中,通过检测和跟踪目标物体来进行分析
增强现实(AR): 将虚拟信息叠加到现实世界的图像中,广泛应用于游戏、医疗、工业等领域
医疗图像分析: 使用 OpenCV 分析医学图像(如 CT 扫描、MRI 图像)来帮助诊断疾病
机器人视觉: 机器人通过视觉识别环境,进行物体操作、导航等任务
无人驾驶: 在自动驾驶中,OpenCV 被用于车道检测、交通标志识别、障碍物检测等任务
未来趋势 深度学习: 进一步加强对深度学习的支持,提供更多的预训练模型和算法。
移动端: 优化 OpenCV 在移动端的性能,使其更适合移动应用开发。
云计算:提供基于云计算的计算机视觉服务,方便用户进行大规模图像和视频处理
基础模块 cv2.core:核心模块,包含了图像处理的基础功能(如图像数组的表示和操作)
cv2.imgproc:图像处理模块,提供图像的各种操作,如滤波、图像变换、形态学操作等
cv2.highgui:图形用户界面模块,提供显示图像和视频的功能
cv2.video:提供视频处理的功能,如视频捕捉、视频流的处理等
cv2.features2d:特征检测与匹配模块,包含了角点、边缘、关键点检测等
cv2.ml:机器学习模块,提供了多种机器学习算法,可以进行图像分类、回归、聚类等
cv2.calib3d:相机校准和 3D 重建模块
cv2.objdetect:目标检测模块
cv2.dnn:深度学习模块
颜色通道 1、颜色通道(Color Channels):​​ 是构成图像颜色信息的基础组成部分
-RGB 模型: R(red->红色通道)、G(green->绿色通道)、B(Blue->蓝色通道)。常用于:显示器、摄像头、数字图像处理
-CMYK 模型:C(Cyan->青色通道)、M(Magenta->品红色通道)、​Y(Yellow->黄色通道)、​K(Key/Black->黑色通道)。常用于:通过油墨的反射吸收产生颜色(减色模型),常用于印刷
-HSV/HSL 模型:​H(Hue->色调<颜色类型,如红、蓝>)、S(Saturation->饱和度<颜色鲜艳程度>)、​V(Value)/​K(Lightness):明度(亮度)。常用于:更符合人类对颜色的感知,适合颜色调整(如去饱和度、调整亮度)
单通道与多通道 单通道(RGB)/灰度图像:每个像素点只能有一个值表示颜色(0~255)。用于:图像处理,处理速度快,不影响特征提取
多通道(RGB):每个像素点只能有三个字节表示颜色(0~255)。用于:提取跟多特征
图像基本操作 image[y, x]: 访问像素值,获取或修改像素值
image[y1:y2, x1:x2]:图像 ROI(Region of Interest:感兴趣区域),获取或修改图像中的矩形区域。
cv2.split() / cv2.merge(): 通道分离与合并
cv2.resize(): 图像的大小
cv2.getRotationMatrix2D(): 图像旋转
cv2.warpAffine():图像平移
cv2.flip(): 图像翻转
cv2.add(): 图像相加,尺寸要相同
cv2.subtract(): 图像相减
cv2.addWeighted(): 图像混合
cv2.threshold(): 图像阈值处理
cv2.blur() / cv2.GaussianBlur():平滑处理
cv2.cvtColor():将图片换为灰度图像
图像算术操作 cv2.bitwise_and(): 位与。用于:掩码操作、图像分割
cv2.bitwise_or(): 位或。用于:图像叠加
cv2.bitwise_not(): 取反。用于:图像反色
cv2.bitwise_xor(): 异或。用于:图像差异检测
图像阈值操作 retval<实际使用的阈值>, dst<处理后的图片> = cv2.threshold(src, thresh<设定的阈值>, maxval<当像素值超过(或小于,根据类型)阈值时>, type<阈值处理的类型>)
- cv2.THRESH_BINARY: 如果像素值大于阈值,则赋予 maxval,否则赋予 0。
- cv2.THRESH_BINARY_INV: 与 cv2.THRESH_BINARY 相反,像素值大于阈值,则赋予 0,否则赋予 maxval。
- cv2.THRESH_TRUNC: 如果像素值像素值大于阈值,则赋予阈值,否则保持不变
- cv2.THRESH_TOZERO: 如果像素值像素值大于阈值,则保持不变,否则赋予 0
- cv2.THRESH_TOZERO_INV: 与 cv2.THRESH_TOZERO 相反,如果像素值大于阈值,则赋予 0,否则保持不变
设定一个阈值,将图像转换为二值图像(即黑白图像),将图像中的像素分为两类:高于阈值的像素和低于阈值的像素类始于:亮更亮,暗的更暗
图像平滑操作 cv2.blur(image, (5, 5)):滤波:将图像中每个像素的值替换为其周围像素的平均值。常用:去除图像中的随机噪声
cv2.GaussianBlur():高斯滤波-基于高斯函数的平滑处理方法,中心像素赋予更高的权重,而给边缘像素赋予较低的权重,除噪声时,保留图像的边缘信息常用:去除图像中的高斯噪声,保留图像边缘信息
cv2.medianBlur():非线性平滑处理方法,将图像中每个像素的值替换为其周围像素的中值.去除椒盐噪声(即图像中随机出现的黑白点)时非常有效。常用:去除图像中的椒盐噪声,保留图像边缘信息
cv2.bilateralFilter():非线性的平滑处理方法,结合了空间邻近度和像素值相似度。和高斯滤波相比,平滑图像且保留图像的边缘信息。常用:图像美化或预处理
平滑处理(也称为模糊处理)是一种常见的操作,用于减少图像中的噪声或细节
图像形态学操作 cv2.erode():(腐蚀)用结构元素扫描图像(卷积),如果结构元素覆盖的区域全是前景,则保留中心像素。常用:去除噪声、分离物体
cv2.dilate():(膨胀)用结构元素扫描图像(卷积),如果结构元素覆盖的区域全是前景,则保留中心像素。常用:连接断裂的物体、填充空洞
cv2.morphologyEx():(开运算)开运算,先腐蚀后膨胀。常用:去除小物体、平滑物体边界
cv2.morphologyEx():(闭运算)先膨胀后腐蚀。常用:填充小孔洞、连接邻近物体
cv2.morphologyEx():(形态学梯度)膨胀图减去腐蚀图。常用:提取物体边缘
cv2.morphologyEx():(顶帽运算)原图减去开运算结果。常用:提取比背景亮的细小物体
cv2.morphologyEx():(黑帽运算)闭运算结果减去原图。常用:提取比背景暗的细小物体
主要用于处理二值图像(即黑白图像),实现对图像的噪声去除、对象分离、边缘检测等效果,有助于更好地处理和分析图像数据
图像边缘检测 cv2.Canny():Canny 边缘检测。多阶段算法,检测效果较好,噪声抑制能力强。使用场景:通用边缘检测,适合大多数场景。
cv2.Sobel():Sobel 算子。基于一阶导数的边缘检测,可以检测水平和垂直边缘。使用场景:检测水平和垂直边缘。。
cv2.Scharr():Scharr 算子。Sobel 算子的改进版本,对边缘的响应更强。使用场景:检测细微的边缘。
cv2.Laplacian():Laplacian 算子。基于二阶导数的边缘检测,对噪声敏感。使用场景:检测边缘和角点。
计算机视觉和图像处理中的一项基本任务,识别图像中亮度变化明显的区域。常对应于物体的边界,用于图形的预分析
图像轮廓检测 cv2.findContours():查找图像中的轮廓。需要将彩色图片灰度处理
cv2.drawContours()在图像上绘制轮廓。
cv2.contourArea():计算轮廓的面积。
cv2.arcLength():计算轮廓的周长或弧长。
cv2.boundingRect():计算轮廓的边界矩形。
cv2.minAreaRect():计算轮廓的最小外接矩形。
cv2.minEnclosingCircle():计算轮廓的最小外接圆。
cv2.approxPolyDP():对轮廓进行多边形近似。
边缘检测的基础上,找到连通的闭合边界(轮廓),通常用于分析物体的形状
图像直方图 cv2.calcHist():计算直方图。
cv2.equalizeHist():直方图均衡化,增强图像的对比度,需要灰度图片应用:确定阈值,用于图像分割
cv2.compareHist():直方图比较,比较两个直方图的相似度。。应用:判断两幅图像的相似度,用于图像匹配和检索
matplotlib.pyplot.plot():绘制直方图,使用 Matplotlib 绘制直方图。
帮助我们了解图像的像素分布情况,可以图像增强、对比度调整、图像分割
图像增强:通过直方图均衡化,可以增强图像的对比度,使细节更加清晰。
图像分割:过分析直方图,可以确定阈值,用于图像分割。
图像匹配: 通过比较直方图,可以判断两幅图像的相似度,用于图像匹配和检索。
颜色分析:通过颜色直方图,可以分析图像的颜色分布,用于颜色校正和风格化处理。
视频处理 cap = cv2.VideoCapture():读取视频(地址)或摄像头(0)。
cap.read():读取视频的一帧。
cv2.get(propId):获取视频的属性(如宽度、高度、帧率等)。
cv2.VideoWriter:创建视频写入对象并保存视频。
cv2.TrackerKCF_create():使用目标跟踪算法跟踪视频中的物体。
cv2.createBackgroundSubtractorMOG2():使用背景减除算法检测视频中的运动物体
核心:对这些图像帧进行处理。常见的视频处理任务包括视频读取、视频播放、视频保存、视频帧处理等
视频分析: 通过视频处理技术,可以分析视频中的运动、目标、事件等。
视频增强: 对视频进行去噪、增强、稳定化等处理,提升视频质量。
视频编辑: 对视频进行剪辑、拼接、添加特效等操作
实时监控:: 通过摄像头实时监控场景,并进行目标检测、行为分析等
视频目标追踪 MeanShift 算法:最初用于图像分割,后来被引入到目标跟踪领域。其核心思想是通过迭代计算目标区域的质心,并将窗口中心移动到质心位置,从而实现目标的跟踪
CamShift 算法: MeanShift 的改进版本,它通过自适应调整窗口大小来更好地跟踪目标
场景:用于监控、自动驾驶、人机交互
视频背景减除 MOG(Mixture of Gaussians)算法:高斯混合模型(Gaussian Mixture Model, GMM)的背景减除方法。使用多个高斯分布来建模背景中的像素值。每个像素的值被看作是一个随机变量,其分布由多个高斯分布组成。可以处理背景中的复杂变化:光照变化、阴影
MOG2(Mixture of Gaussians Version 2)算法: 它能够自动选择高斯分布的数量,并且能够更好地适应背景的变化。应用:视频中的移动目标,如行人、车辆,目标的运动轨迹和行为,用户的手势或面部,实现人机交互
核心思想:通过建模背景,然后将当前帧与背景模型进行比较,从而分离出前景对象
人脸检测 cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'):特征分类器。接受灰度图像 核心:基于 Haar 特征分类器的人脸检测方法,简单易用且效果显著
物体识别 使用 cv2.matchTemplate() 进行物体识别 核心:模板匹配就是在一幅大图像中寻找与模板图像(即我们想要识别的物体)最匹配的部分,这种方法适用于物体在图像中的大小、方向和形状基本不变的情况
应用场景:
-物体识别: 用于在图像中定位特定物体,如标志、图标等
-目标跟踪::用于在视频中跟踪目标物体
-图像配准: 用于将两幅图像对齐
图像拼接 开源的计算机视觉和机器学习软件库 核心:多张有重叠区域的图像拼接成一张更大的图像应用场景:
-全景图生成: 将多幅图像拼接成一幅全景图
-地图拼接: 将多幅地图图像拼接成一幅更大的地图
-医学图像处理: 将多幅医学图像拼接成一幅完整的图像
简单滤镜 cap = cv2.cvtColor():灰度滤镜。
怀旧滤镜:通过调整色彩通道的权重,模拟老照片效果。
浮雕滤镜:使用卷积核 [[-2, -1, 0], [-1, 1, 1], [0, 1, 2]] 进行卷积操作。
cv2.GaussianBlur(image, (15, 15), 0):模糊滤镜。
锐化滤镜:使用卷积核 [[0, -1, 0], [-1, 5, -1], [0, -1, 0]] 进行卷积操作。
cv2.Canny(gray_image, 100, 200):边缘检测滤镜。
应用:图像处理、视频分析、物体检测等

pytorch学习总结

知识点 说明 备注
概念 一个开源的机器学习库,主要用于进行计算机视觉(CV)、自然语言处理(NLP)、语音识别等领域的研究和开发 理解:就是用来做数据训练的工具
基本概念
张量(Tensor) :Pytorch的核心数据结构,存储和操作多维数组,并可以在CPU或GPU上进行加速计算。类始于Numpy的数组
-纬度(Dimensionality):张量的维度指的是数据的多维数组结构。例如,一个标量(0维张量)是一个单独的数字,一个向量(1维张量)是一个一维数组,一个矩阵(2维张量)是一个二维数组,以此类推
-形状(Shape):张量的形状指每个维度上的大小。例如:一个形状为(3, 4)的张量意味着它有3行4列
-数据类型(Dtype):张量中的数据类型定义了存储每个元素所需的内存大小和解释方式。例如:整数型(如torch.int8、torch.int32)、浮点型(如torch.float32、torch.float64)和布尔型(torch.bool)
自动求导(Autograd) Pytorch的核自动求导功能,启动计算模型的梯度,便于进行反向传播和优化
-动态图(Dynamic Graph):在动态图中,计算图在运行时动态构建。每次执行操作时,计算图都会更新,这使得调试和修改模型变得更加容易。
-静态图(Static Graph):在静态图中,计算图在开始执行之前构建完成,并且不会改变。TensorFlow最初使用的是静态图,但后来也支持动态图
:在训练神经网络时计算梯度
:进行反向传播算法的实现
神经网络(nn.Module) 模仿人脑神经元连接的计算模型,由多层节点(神经元)组成,用于学习数据之间的复杂模式和关系
-过程:经网络通过调整神经元之间的连接权重来优化预测结果,这一过程涉及前向传播、损失计算、反向传播和参数更新
-神经网络的类型:包括前馈神经网络、卷积神经网络(CNN)、循环神经网络(RNN)和长短期记忆网络(LSTM),它们在图像识别、语音处理、自然语言处理等多个领域都有广泛应用
训练过程
-前向传播(Forward Propagation): 在前向传播阶段,输入数据通过网络层传递,每层应用权重和激活函数,直到产生输出
-计算损失(Calculate Loss): 根据网络的输出和真实标签,计算损失函数的值
-反向传播(Backpropagation): 反向传播利用自动求导技术计算损失函数关于每个参数的梯度
-参数更新(Parameter Update): 使用优化器根据梯度更新网络的权重和偏置
-迭代(Iteration): 重复上述过程,直到模型在训练数据上的性能达到满意的水平
设备(Device) 可以将模型和张量移动到GPU上加速计算
训练步骤 数据准备
- 收集和处理数据,包括清洗、标准化和归一化。
- 将数据分为训练集、验证集和测试集。
定义模型
- 选择模型架构,例如决策树、神经网络等
- 初始化模型参数(权重和偏置)
选择损失函数
- 根据任务类型(如分类、回归)选择合适的损失函数
选择优化器
- 选择一个优化算法,如SGD、Adam等,来更新模型参数
前向传播
-在每次迭代中,将输入数据通过模型传递,计算预测输出
计算损失
- 使用损失函数评估预测输出与真实标签之间的差异
反向传播
- 利用自动求导计算损失相对于模型参数的梯度
参数更新
- 根据计算出的梯度和优化器的策略更新模型参数
迭代优化
- 重复步骤5-8,直到模型在验证集上的性能不再提升或达到预定的迭代次数
评估和测试
- 使用测试集评估模型的最终性能,确保模型没有过拟合。
模型调优
- 根据模型在测试集上的表现进行调参,如改变学习率、增加正则化等
部署模型
- 将训练好的模型部署到生产环境中,用于实际的预测任务
张量 纬度:描述数据的结构。
-1D Tensor / Vector(一维张量/向量):最基本的张量形式,可以看作是一个数组,图中的例子是一个包含 10 个元素的向量。
-2D Tensor / Matrix(二维张量/矩阵): 二维数组,通常用于表示矩阵,图中的例子是一个 4x5 的矩阵,包含了 20 个元素。
-3D Tensor / Cube(三维张量/立方体):三维数组,可以看作是由多个矩阵堆叠而成的立方体,图中的例子展示了一个 3x4x5 的立方体,其中每个 5x5 的矩阵代表立方体的一个"层"。
-4D Tensor / Vector of Cubes(四维张量/立方体向量):四维数组,可以看作是由多个立方体组成的向量,图中的例子没有具体数值,但可以理解为一个包含多个 3D 张量的集合。
-5D Tensor / Matrix of Cubes(五维张量/立方体矩阵):五维数组,可以看作是由多个4D张量组成的矩阵,图中的例子同样没有具体数值,但可以理解为一个包含多个 4D 张量的集合。
创建
-创建:torch.tensor(data)
-创建全为0的张量:torch.zeros(size)
-创建全为1的张量:torch.ones(size)

-未初始化:torch.empty(size)
创建
-随机张量:torch.empty(size)
创建
-正态分布的随机张量:torch.randn(data)
-一维张量:torch.arange(start,end,step)
-指定范围等间距:torch.linspace(start,end,steps)
-单位矩阵:torch.eye(size)
-将Numpy转张量:torch.from_numpy(ndarray)
属性
-形状:tensor.shape
-形状:tensor.size()
-数据类型:tensor.dtype
-所在设备:tensor.device
-纬度数:tensor.dim()
-是否启用梯度计算:tensor.requires_grad()
-元素总数:tensor.numel()
-是否在GPU:tensor.is_cuda
-转置:tensor.T
-获取单元素值:tensor.item()
-联系存储:tensor.is_contiguous()
基础操作
-加减乘除:+、-、*、/
-矩阵乘法:torch.matmul(x, y)
-点积:torch.dot(x, y)
-求和:torch.sum(y)
-求均值:torch.mean(y)
-求最大值:torch.max(y)
-求最小值:torch.min(y)
-求最大值索引:torch.argmax(x,dim)
-计算softmax:torch.sum(y)
形状操作
-改变形状(不变数据):x.view(shape)
-改变形状(不变数据):x.reshape(shape)
-转置:x.t()
-添加纬度:x.unsqueeze(dim)
-去掉纬度:x.squeeze(dim)
-连接多个张量:x.cat((x,y),dim)
与Numpy操作
-将Numpy转成张量:x.from_numpy(ndarray)
-将张量转成Numpy:x.numpy()
神经网络基础 神经元(Neuron):神经元是神经网络的基本单元,它接收输入信号,通过加权求和后与偏置(bias)相加,然后通过激活函数处理以产生输出
层(Layer):输入层和输出层之间的层被称为隐藏层,层与层之间的连接密度和类型构成了网络的配置。
-输入层(input Layer):接收原始输入数据
-隐藏层(HiddenLayer):对输入数据进行处理,可以有多个隐藏层
-输出层(output Layer):产生最终的输出结果。
前馈神经网络(Feedforward Neural Network,FNN):神经网络的基本单元。特点:从输入到输出,可以经过多个隐藏层,全过程没有循环或反馈。
循环神经网络(Recurrent Neural NetWork,RNN):一类专门处理序列数据的神经网络,能够捕获输入数据中时间或顺序信息的依赖关系。特点:有记忆功能,保存之前时间步的信息。用于处理时间变化数据模式
常见神经网络
-nn.Linear(in_features, out_features):全连接层,输入 in_features 个特征,输出 out_features 个特征
-nn.Conv2d(in_channels, out_channels, kernel_size):2D 卷积层,用于图像处理
-nn.MaxPool2d(kernel_size):2D 最大池化层,用于降维
-nn.ReLU():ReLU 激活函数,常用于隐藏层
-nn.Softmax(dim):Softmax 激活函数,通常用于输出层,适用于多类分类问题。
激活函数(Active Function):决定了神经元是否应该被激活。
常见激活函数
-Sigmoid:用于二分类问题,输出值在 0 和 1 之间
-Tanh:输出值在 -1 和 1 之间,常用于输出层之前
-ReLU(Rectified Linear Unit):目前最流行的激活函数之一,定义为 f(x) = max(0, x),有助于解决梯度消失问题
-Softmax:常用于多分类问题的输出层,将输出转换为概率分布
损失函数(Loss Function):损失函数用于衡量模型的预测值真实值之间的差异
常见
-均方误差(MSELoss):回归问题常用,计算输出与目标值的平方差
-交叉熵损失(CrossEntropyLoss):分类问题常用,计算输出和真实标签之间的交叉熵
-BCEWithLogitsLoss:二分类问题,结合了 Sigmoid 激活和二元交叉熵损失
优化器(Optimizer):练过程中更新网络的权重和偏置
常见
-SGD(随机梯度下降)
-Adam(自适应矩估计)
-RMSprop(均方根传播)
训练过程(Training Process)
-准备数据:通过 DataLoader 加载数据
-定义损失函数和优化器
-前向传播:计算模型的输出
-计算损失:与目标进行比较,得到损失值
-反向传播:通过 loss.backward() 计算梯度
-更新参数:通过 optimizer.step() 更新模型的参数
-重复上述步骤,直到达到预定的训练轮数
测试与评估:对模型进行测试和评估
-计算测试集的损失:测试模型在未见过的数据上的表现
-计算准确率(Accuracy):对于分类问题,计算正确预测的比例
数据加载 1、自定义 Dataset:通过继承 torch.utils.data.Dataset 来加载自己的数据集
2、DataLoader:DataLoader 按批次加载数据,支持多线程加载并进行数据打乱
3、数据预处理与增强:使用 torchvision.transforms 进行常见的图像预处理和增强操作,提高模型的泛化能力
3、加载标准数据集:torchvision.datasets 提供了许多常见的数据集,简化了数据加载过程
4、多个数据源:通过组合多个 Dataset 实例来处理来自不同来源的数据
线性回归 1、线性回归是最基本的机器学习算法之一,用于预测一个连续值。一种简单且常见的回归分析方法,通过拟合一个线性函数来预测输出。
卷积神经网络(Convolutional Neural Networks,CNN) 一类专门用于处理有网络拓扑结构数据(如图像)的深度学习模型。计算视觉任务(图像分类,目标检测和分割)的核心技术。
-1.输入图像(Input Image):网络接收的原始图像数据
-2.卷积(Convolution):使用卷积核(Kernel)在输入图像上滑动,提取特征,生成特征图(Feature Maps)
-3.池化(Pooling):通常在卷积层之后,通过最大池化或平均池化减少特征图的尺寸,同时保留重要特征,生成池化特征图(Pooled Feature Maps)
-4.特征提取(Feature Extraction):通过多个卷积和池化层的组合,逐步提取图像的高级特征
-5.展平层(Flatten Layer):将多维的特征图转换为一维向量,以便输入到全连接层
-6.全连接层(Fully Connected Layer):类似于传统的神经网络层,用于将提取的特征映射到输出类别
-7.分类(Classification):网络的输出层,根据全连接层的输出进行分类
-8.概率分布(Probabilistic Distribution):输出层给出每个类别的概率,表示输入图像属于各个类别的可能性
循环神经网络(RNN) 1、一类神经网络架构,专门用于处理序列数据,能够捕捉时间序列或有序数据的动态信息,能够处理序列数据,如文本、时间序列或音频
2、RNN 在自然语言处理(NLP)、语音识别、时间序列预测等任务中有着广泛的应用
3、RNN 的关键特性是其能够保持隐状态(hidden state),使得网络能够记住先前时间步的信息,这对于处理序列数据至关重要
PyTorch 数据集 torch.utils.data.Dataset:数据集的抽象类,需要自定义并实现 len(数据集大小)和 getitem(按索引获取样本)
torch.utils.data.TensorDataset:基于张量的数据集,适合处理数据-标签对,直接支持批处理和迭代
torch.utils.data.DataLoader:封装 Dataset 的迭代器,提供批处理、数据打乱、多线程加载等功能,便于数据输入模型训练
torchvision.datasets.ImageFolder:从文件夹加载图像数据,每个子文件夹代表一个类别,适用于图像分类任务
数据转换(Data Transformation) 1、是一种在加载数据时对数据进行处理的机制,·将原始数据转换成适合模型训练的格式·,主要通过 torchvision.transforms 提供的工具完成
transforms.ToTensor():将PIL图像或NumPy数组转换为PyTorch张量,并自动将像素值归一化到 [0, 1]。
基础变换操作
transforms.Normalize(mean, std):对图像进行标准化,使数据符合零均值和单位方差。
transforms.Resize(size):调整图像尺寸,确保输入到网络的图像大小一致
transforms.CenterCrop(size):从图像中心裁剪指定大小的区域
数据增强操作
transforms.RandomHorizontalFlip(p):随机水平翻转图像
transforms.RandomRotation(degrees):随机旋转图像
transforms.ColorJitter(brightness, contrast, saturation, hue):调整图像的亮度、对比度、饱和度和色调
transforms.RandomCrop(size):随机裁剪指定大小的区域
transforms.RandomResizedCrop(size):随机裁剪图像并调整到指定大小。
组合变换
transforms.Compose():将多个变换组合在一起,按照顺序依次应用。
Transformer 模型 1、现代机器学习中最强大的模型之一
2、一种基于自注意力机制(Self-Attention) 的深度学习架构,它彻底改变了自然语言处理(NLP)领域,并成为现代深度学习模型(如 BERT、GPT 等)的基础。
3、 NLP 领域的核心架构,凭借其强大的长距离依赖建模能力和高效的并行计算优势,在语言翻译和文本摘要等任务中超越了传统的 长短期记忆 (LSTM) 网络
posted on 2025-03-13 18:27  学游者  阅读(54)  评论(0)    收藏  举报