记录人工智能各种工具,及其在工程上的作用关系,不探讨实现原理和细节。主要是在实践中的使用思路
工具关系
工具 | 说明 | 备注 |
---|---|---|
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=numpy. amax (a, axis=None, out=None, keepdims=numpy. ptp (a, axis=None, out=None, keepdims=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,其余是0numpy.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) :通常在卷积层之后,-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) 网络 |