教程网站后台密码,招聘网站开发实训报告,电脑速成班短期电脑培训班,唐山网站建设正规公司1.计算机视觉基础
数字图像表示
二值图像
仅包含黑白两种颜色的图像#xff0c;只使用1个比特为#xff08;0黑或1白#xff09;表示
彩色图像#xff1a;分不同的颜色空间
gray灰度图像
每个像素只有一个采样颜色#xff0c;取值范围0--255#xff0c;为8比特位只使用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(5125123)中图像三个数代表高、宽、通道数 分辨率为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 cv2imgcv2.imread(lena.jpg)cv2.imshow(img,img)img2cv2.blur(img,(5,5))cv2.imshow(imgBlur,img2)cv2.waitKey(0) 方框滤波
dstcv2.boxFilter(src,ddepth,ksize[,anchor[,normalize[,borderType]])
ddepth目标图像深度一般用-1表示与原图像深度一致n归一化
import cv2imgcv2.imread(lena2.jpg)cv2.imshow(img,img)img2cv2.boxFilter(img,-1,(3,3),normalizeFalse)cv2.imshow(imgBlur,img2)cv2.waitKey(0) 高斯滤波
import cv2imgcv2.imread(lena2.jpg)cv2.imshow(img,img)img2cv2.GaussianBlur(img,(5,5),0,0)cv2.imshow(imgBlur,img2)cv2.waitKey(0) 中值滤波
dst cv2.medianBlur(src,ksize)
ksize为整形1的正奇数
import cv2
imgcv2.imread(lena2.jpg)
cv2.imshow(img,img)
img2cv2.medianBlur(img,9)
cv2.imshow(imgBlur,img2)
cv2.waitKey(0) 双边滤波
import cv2
imgcv2.imread(lena2.jpg)
cv2.imshow(img,img)
img2cv2.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,threshold150,threshold2150) 当噪声很大时可通过高斯滤波提升效果 几何变换
色彩空间
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,dxx,dyy)dsize代表转换后图像大小
当为None时dxdy不能为0且此时转换后图像宽度为原图像宽度xdx高度xdy不为None时转换后大小以dsize为准其格式为元组widthheight代表宽高。
还有一个插值方式interpolation
最近邻cv2.INTERNEAREST双线性cv2.LINEAR
翻转
cv2.flipimgflipcodeflipcode有三种
0x轴垂直翻转0y轴水平翻转0水平垂直翻转
仿射变换
包括了平移、旋转、缩放、映射。基本思想就是获得变换矩阵m
再通过cv2.warpAffine(img,m,dsize)仿射变换
平移mnp.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/2heigh/2)旋转角度目标图与原图比例 三点映射通过cv2.AffineTransform(srcdst)获得m
src原图三点坐标np.float32([[0,0],[],[]])dst目标图三点坐标
透视通过cv2.warpPerspectiveimgmdsize
m通过cv2.getPerspectiveTransform(srcdst)获得m
src原图四点坐标np.float32([[0,0],[],[]])dst目标图四点坐标 3.深度学习基础
基础
全连接该层的某一个神经元与下一层的每一个神经元都连接
卷积提取特征 过程 无跨步strides1 边界填充padding分
arbitrary padding 任意填充half padding 半填充full padding 全填充
二维卷积
卷积层nn.Conv2d(in_channels1,out_channels2,kernel_size5,stride2,padding2)激活函数nn.ReLU()线性整流单元池化层nn.MaxPool2d(kernel_size(2,2),stride2,padding0) 作用降低维度减小特征图尺寸avg_pool nn.AvgPool2d(kernel_size2, stride2) # 池化窗口大小为 2x2步幅为 2
关于激活函数 激活函数
分组卷积通过一个参数 groups来确定分组
深度可分离卷积DSC
两部分逐通道depthwise卷积逐行逐列卷积逐点pointwise卷积
逐通道卷积就是把输入的k个通道分别通过单个卷积得到k个输出
逐点卷积
通过1x1卷积和把逐通道卷积得到的k个特征图进行融合能够通过改变卷积核的数量改变最终输出通道数 转置卷积和反卷积反卷积即转置卷积的另一种表达。本质就是上采样增加特征图尺寸。应用如图像分割、对抗网络 3D卷积即读视频添加了一个时间维度。4,3,3分别代表时间维度高宽 训练可视化 writer SummaryWriter(log_dir./log, commenttest_tensorboard, filename_suffixtest)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-13] 那么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(), lr0.001, weight_decay0.01)
这里的weight_decay参数就是L2正则化中的λ参数。
过拟合解决方法数据增强、正则化、早停、增加数据集大小
DenseNet
经典卷积
AlexNet共8层ReLu
VGG1613层卷积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为2x5202个框、5个结果、20个类别
卷积最后一层会输出SXS的特征图映射到原始图像原始图像就会被分成SXS的网格gridcell。如果样本的真实标签GroundTruth落在某个网格该网格负责预测该物体网格预测出B个边界框最终使用和真实标签的IOU较大的框。
IOU预测框和真实框的交叠率二者交集/并集结果为1最佳
缺点是无交集时永远为0于是引入GIOU 模块二
NMS非极大值抑制选取邻域分类数值最高的抑制低的窗口
置信度指的是模型对于检测到的目标属于特定类别的确定程度。即模型预测的边界框bounding box中确实存在目标的概率。
回归坐标
指的是bbox预测边界框的坐标 计算过程 colrow指的是中心坐标的框相对于原坐标的偏移量
训练过程
过程根据图像的标注框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
处理需要保持输出尺寸与输入尺寸一致以及需要为边界区域提供上下文信息的场景中。 优势