图像处理相关

项目描述:基于C++开发了声光一体驱鸟器上位机系统,对区域内的留鸟进行实时监控、驱赶

主要工作:

1.上位机用户界面:包含了显示视频流及检测结果的画布、控制按钮等各种UI元素

2.视频流获取模块:基于OpenCV库实现双摄像头视频流的获取及实时显示,对视频帧进行数据增强和预处理,包括图片缩放、裁剪、旋转、颜色变换、归一化、转换为张量格式,以便输入到模型中进行训练和推理。

3.目标识别模块:封装了YOLOv5算法的实现和预训练模型,负责处理视频帧数据,执行鸟类检测和识别任务,并输出检测结果

张量格式:在PyTorch中,张量的形状一般为、批大小、通道数、高度、宽度,分别代表图片数,通道数、图片的高度和宽度。

配置摄像头并开始捕获图像流,每一帧图像首先经过预处理,以确保图像数据满足YOLO模型的输入要求,经过预处理的图像送入模型进行目标识别并标注,读取处理后的图像更新显示界面。

1.介绍一下YOLO

通过将目标检测任务视为一个回归问题来进行处理,直接在输入图像上密集地预测目标的类别和边界框。

(模型结构)模型主要由骨干网络和检测头组成。

骨干网络:使用了轻量级的骨干网络,通常采用CSPDarknet53或EfficientNet等,这些骨干网络负责提取输入图像的特征。

检测头:在骨干网络之后,使用了一系列的卷积层和激活函数作为检测头,来对图像特征进行处理并生成目标的预测结果。这些层包括卷积、池化、上采样等,以及用于目标分类和边界框回归的输出层。

YOLOv5的主要特点:

单阶段目标检测:是一种单阶段目标检测模型,直接从输入图像中预测目标的类别和边界框,而无需生成候选框。

轻量级设计:通过剪枝、结构优化等方式来减少模型的参数量和计算复杂度,从而实现了轻量级的模型设计。

特征金字塔网络(FPN):采用了特征金字塔网络(Feature Pyramid Network,FPN)来处理不同尺度的特征图,从而能够有效地检测不同尺度的目标。

Anchor-free设计(YOLOv5与之前的版本不同之处):采用了Anchor-free的设计,不依赖于预定义的锚框,而是通过预测目标的中心点和边界框来实现目标检测。

2.单阶段与双阶段目标检测模型区别,YOLOv5的主要特点:

单阶段:

1)YOLO(You Only Look Once)系列

2)SSD(Single Shot Multibox Detector)

3)EfficientDet

双阶段

Faster R-CNN

Mask R-CNN

Cascade R-CNN

单阶段与双阶段目标检测模型区别:

单阶段目标检测模型将目标检测任务视为一个直接的回归问题,通过单一的前向传播过程同时完成目标检测和定位。直接从图像中提取特征,并在特征图上执行预测,通常是在网格单元上预测多个边界框的位置和类别,而不需要额外的区域建议过程。

双阶段目标检测模型将目标检测任务分解为候选区域生成和目标定位两个独立的阶段,

首先通过区域提议网络(Region Proposal Network,RPN)生成候选区域,然后对这些候选区域进行分类和边界框回归。

5.如何评估YOLOv5模型的性能?通常使用哪些指标?

本算法:

图片大小:640x640pixl

mAP得分为0.8

F1-Score为0.81    (精确率和召回率的调和平均值)

精度(Precision):正确预测为目标的数量占所有预测为目标的数量的比例

召回率(Recall):正确检测到的数量占所有实际存在的数量的比例

精确度-召回率(Precision-Recall,PR)曲线:通常用于评估模型在不同置信度阈值下的表现,它反映了模型预测正确正样本的能力与其尝试检测所有正样本的能力之间的关系

准确率(Accuracy):正确检测到的数量与总数量之比

平均精度(mAP):综合考虑了目标检测的准确率和召回率。通常会计算不同类别的AP(Average Precision)并求其平均值作为整体的mAP值。

推理速度(Inference Speed):推理速度指模型在给定硬件环境下的处理速度,通常以每秒处理的图像数量(FPS)来衡量。

6.YOLOv5的训练过程是怎样的?使用了哪些技术和策略?

环境配置:

1)硬件:

显卡(GPU),显存4G以上。(无GPU训练慢)

内存(4G以上)

2)软件:

windows / linux

cuda :允许开发人员可以使用标准的编程语言(如C/C++、Python等)在GPU上编写并行计算程序。

pycharm:pycharm为python的集成开发环境,可以理解为文本编辑器,可以让你运行调试编写代码。

PyTorch:是一个开源的Python机器学习框架,提供了丰富的工具、库、接口、函数、模块、等

anaconda :是python版本管理器,帮助用户管理多个Python环境。

1)数据准备:准备数据集,使用的是网站上下载的加州理工学院CUB-200鸟类数据集,数据集共有11788张鸟类图像,其中训练数据集有5994张图像,测试集有5794张图像。

2)数据增强和预处理:

数据增强:随机缩放、随机裁剪、随机旋转、颜色变换

数据预处理:调整图像尺寸、归一化、转换为张量(将图像转换为张量格式,以便输入到深度学习模型中进行训练和推理)

3)在训练之前,使用官方模型库提供的预训练的权重进行初始化,以加速模型的收敛。

4)在github中下载YOLOV5网络,导入OpenCV库和YOLO模型,在pycharm中运行run_train_model.py进行训练,使用GPU进行训练,使用2个工作进程加载数据,输入图像的大小640x640,训练100个epoch(指所有数据被训练的总轮数),每个批次的大小为8,YOLOv5采用标准的深度学习训练过程进行训练,使用随机梯度下降(SGD)来优化损失函数,模型训练完成后会得到.pt文件

5)通过监测指标如mAP(平均精度)、准确率、召回率等来评估模型的性能,并进行进一步的调优。

6)yolov5的官方代码是用pytorch框架写的,因为opencv 的DNN模块不支持pytorch 的训练模型,因此先将.pt文件转成onnx模型,然后使用DNN模块中的readNet函数加载模型,并对模型进行封装成了一个类,并且其中包含了两个成员函数,一个是初始化函数inital(),另外一个是推理检测函数detect(),

8.YOLOv5比前几代好在哪里?

 1)引入了更多种类的数据增强技术,例如图像随机裁剪、颜色抖动等,可以更好地适应不同的场景和图像变化。

2)可以根据不同的数据集和任务自动调整模型的大小和复杂度,

3) 采用了一些训练加速技术,例如混合精度训练、分布式训练等,使得训练速度更快。

9.NMS(Non-Maximum Suppression,非极大值抑制)是一种常用的目标检测算法中用于去除冗余边界框的技术。在目标检测中,同一个目标可能会被多个边界框检测到,NMS的作用就是从这些重叠的边界框中选择出置信度最高的边界框,同时去除其他高度重叠的边界框。

NMS的基本原理是对所有检测到的边界框按照置信度进行排序,然后从置信度最高的边界框开始,逐个遍历剩余的边界框,计算其与当前选定的边界框的重叠度如果某个边界框与当前选定的边界框的重叠度高于设定的阈值,则将其抑制(移除),否则保留。

10.yolov5训练结果不好的原因:

1)欠拟合:

在训练集上表现很差,测试集上表现也很差

解决办法:

       1)增加数据集的正样本数量

       2)增加训练次数

2)过拟合:

在训练集上表现很好,在测试集上表现很差

解决办法:

        1)增加其他的特征的样本数

        2)训练数据占总数据的比例过小

        3)参数正则化(包括L1正则化和L2正则化(也称为Ridge回归))

L1 正则化(Lasso):通过添加参数向量的 L1 范数作为惩罚项,促使模型中不重要的特征对应的参数趋向于零

L2 正则化(Ridge):通过添加参数向量的 L2 范数作为惩罚项,使得模型参数更加平滑,避免出现过大的参数值,减少模型对训练数据的敏感度。

L1范数:也称为曼哈顿范数或稀疏范数,是指向量中各个元素绝对值之和

L2范数,也称为欧几里得范数,是指向量各个元素的平方和再开方

11.目标识别方法分类:

1)传统机器学习方法:

特征提取和分类器:使用传统的特征提取方法(如HOG、SIFT、SURF等)来提取图像的特征,然后将这些特征输入到分类器(如支持向量机、随机森林等)中进行目标分类和识别。

2)深度学习方法

12.机器学习和深度学习的区别?

1)

机器学习通常需要手动设计和选择特征(如LBP特征、HOG特征、Haar-like),算法的性能很大程度上取决于特征的质量

深度学习可以自动地从原始数据中学习特征表示,无需手动设计特征

2)

机器学习使用的模型通常有明确的数学表示和可解释性,比如线性模型、支持向量机、树形模型(决策树、随机森林)、降维模型(主成分分析PCA)、集成学习模型(Adaboost)

深度学习模型由许多神经网络层组成,这些层之间存在复杂的非线性关系,通常具有大量参数,需要大量的数据和计算资源来进行训练,往往缺乏可解释性。

3)

机器学习对于数据量的需求较小,通常在较小的数据集上能获得良好的性能

深度学习模型通常需要大量的标记数据进行训练

13.图像归一化的种类和作用?

1)Min-Max 归一化:

方法:将图像像素值线性映射到一个特定的区间,通常是[0, 1]。

作用:将像素值缩放到一个固定的范围内,有助于防止梯度爆炸和梯度消失问题

2)Z-Score 归一化(标准化):

方法:对图像像素值进行均值和标准差的归一化操作,将像素值转换成零均值和单位方差的分布

作用:使得图像数据具有零均值和单位方差,有助于加速模型的收敛,并且使得不同特征的重要性更加平衡

3)像素值中心化:

方法:减去图像像素值的均值

作用:使得图像数据的均值为零,有助于加速模型的收敛

14.GAN的定义,怎么对抗的?

GAN(Generative Adversarial Network,生成对抗网络)是一种深度学习模型,由生成器(Generator)和判别器(Discriminator)两个部分组成。核心思想是通过反复迭代训练生成器和判别器,逐渐学习到数据的分布,并生成具有高质量的合成数据样本。

生成器输出合成数据样本,目标是尽可能地欺骗判别器,使得生成的数据样本在外观上与真实数据难以区分

判别器负责对输入的数据进行分类,判断其是否来自真实数据集。

在训练的过程中,生成器和判别器相互对抗、相互竞争。生成器的目标是尽可能地欺骗判别器,生成逼真的合成数据样本,使得判别器无法区分。判别器的目标是尽可能地区分合成数据样本和真实数据样本,以防止被生成器欺骗。

15.PIL/pillow读取的图片和opencv读取的图片有什么区别?

1)PIL和Opencv是两个常用的图像处理库,

2)PIL通常使用Image.open()函数读取图像,OpenCV使用cv2.imread()函数读取图像

3)PIL默认通道顺序为(R, G, B),而opencv刚好相反

4)PIL 像素值通常是整数或浮点数,OpenCV的图像数据以NumPy数组表示,通常是无符号整数类型(uint8),像素值范围在0到255之间

20.AUC 的物理意义和常用性:

AUC(Area Under the ROC Curve)是评价二分类模型性能的指标之一,代表 ROC 曲线下的面积。它的物理意义是:随机选择一个正样本和一个负样本,正样本得分高于负样本的概率。AUC 值越大,说明模型的性能越好。

AUC 常用于评价分类模型的性能,特别是在不同类别的样本分布不均匀的情况下,AUC 比准确率更加稳健。

21.

梯度消失和梯度爆炸的原因和缓解方法:

梯度消失:在深度神经网络中,梯度在反向传播过程中可能会逐层缩小,导致深层网络的底层参数几乎无法更新,从而降低了模型的性能。

缓解方法:使用批量归一化、残差连接等方法。

22.

梯度爆炸:梯度在反向传播过程中可能会逐层放大,导致深层网络的参数变化过大,难以稳定训练

缓解方法:梯度剪裁,使用正则化方法(如权重衰减)等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值