基于深度学习网络的烟雾检测算法matlab仿真

发布时间 2023-11-27 20:00:33作者: 简简单单做算法

1.算法运行效果图预览

 

 

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

       基于深度学习网络的烟雾检测算法是一种端到端的检测方法,主要分为基于候选区域的二阶段目标检测器和基于回归的单阶段目标检测器两类。

       基于候选区域的二阶段目标检测器的原理是,先通过训练区域候选网络(RPN)生成候选区域,然后将图片划分为背景和目标两种类别,同时对目标位置进行初步预测;再通过训练目标区域检测网络,实现对候选区域内目标类别的判定和目标位置的确定

具体实现步骤:

1、用遗传算法与Kmeans迭代算出最大可能召回率的anchor组合

2、初始化锚框,并输出预测框

3、将预测框与真实框进行对比,计算两个框之间的差值,再根据差值进行反向更新

4、迭代网络参数,直到收敛,求出最佳的锚框值 该方法具有很好的实用性,但网络结构复杂度较高,导致训练和检测的效率较低。

        另一种是基于回归的单阶段目标检测器。这类检测器的核心思想是将物体的检测视作一个回归任务,直接对每个像素进行分类并回归其边界框。

         其训练方法是采用锚框对每一个像素进行回归,训练出边框的位置和大小。由于所有像素都要进行回归,因此其计算量巨大,训练时间较长。

 

 

 

 

4.部分核心程序

% 预处理训练数据
data           = read(trainingData);
In_layer_Size  = [224 224 3];
 
% 估计锚框
pre_train_data = transform(trainingData, @(data)preprocessData(data,In_layer_Size));
NAnchor        = 3;
NBoxes         = estimateAnchorBoxes(pre_train_data,NAnchor);
numClasses     = width(vehicleDataset)-1;
% 创建Faster R-CNN网络
lgraph         = fasterRCNNLayers(In_layer_Size,numClasses,NBoxes,Initial_nn,featureLayer);
% 数据增强
aug_train_data = transform(trainingData,@augmentData);
augmentedData  = cell(4,1);
 
% 预处理数据并显示标注
trainingData   = transform(aug_train_data,@(data)preprocessData(data,In_layer_Size));
validationData = transform(validationData,@(data)preprocessData(data,In_layer_Size));
data           = read(trainingData);
I              = data{1};
bbox           = data{2};
% 设置训练参数
options = trainingOptions('sgdm',...
    'MaxEpochs',240,...
    'MiniBatchSize',2,...
    'InitialLearnRate',2e-5,...
    'CheckpointPath',tempdir,...
    'ValidationData',validationData);
% 训练Faster R-CNN目标检测器
[detector, info] = trainFasterRCNNObjectDetector(trainingData,lgraph,options,'NegativeOverlapRange',[0 0.15],'PositiveOverlapRange',[0.15 1]);