Detección de objetivos de Matlab: implementación de R-CNN basada en el aprendizaje de transferencia de Alexnet

        La detección de objetos consiste en encontrar los objetos de interés en la imagen y determinar su tipo y ubicación. El método tradicional de detección de objetos toma la extracción y la coincidencia de características como núcleo, lo que tiene las desventajas de una alta complejidad de tiempo y poca robustez de la extracción de características.

        En este documento, sobre la base del modelo de red Alexnet, la red de detección de objetivos R-CNN se entrena según el principio de aprendizaje de transferencia. E identifique el conjunto de datos de imagen de la señal de alto (stop sign) que viene con Matlab, y el conjunto de datos ha sido marcado. Sus pasos de implementación son los siguientes:

        Paso 1: Importe el modelo preentrenado de Alexnet (debe descargarse con anticipación, consulte https://blog.csdn.net/shitao99/article/details/106536156 ). El código de implementación es el siguiente:

%% 步骤1:载入AlexNet
% net=alexnet;  
net =load('alexnet.mat');
net =net.netTransfer;

        Paso 2: Cargue la imagen del conjunto de entrenamiento, el código de implementación es el siguiente:

data = load('stopSignsAndCars.mat', 'stopSignsAndCars');
stopSignsAndCars = data.stopSignsAndCars;
% 设置图像路径参数
visiondata = fullfile(toolboxdir('vision'),'visiondata');
stopSignsAndCars.imageFilename = fullfile(visiondata, stopSignsAndCars.imageFilename);
% 显示数据
summary(stopSignsAndCars)
% 只保留文件名及其所包含的“stop sign”区域
stopSigns = stopSignsAndCars(:, {'imageFilename','stopSign'});

        Paso 3: establezca los parámetros de entrenamiento y, según el principio de transferencia de aprendizaje, entrene el detector R-CNN a través de 41 imágenes, incluida la señal de alto, sobre la base de la red neuronal convolucional de Alexnet. El código de implementación es el siguiente:

% 设置训练策略
    options = trainingOptions('sgdm', ...
        'MiniBatchSize', 128, ...
        'InitialLearnRate', 1e-3, ...
        'LearnRateSchedule', 'piecewise', ...
        'LearnRateDropFactor', 0.1, ...
        'LearnRateDropPeriod', 100, ...
        'MaxEpochs', 2, ...
        'Plots','training-progress', ...
        'Verbose', true);    
% 训练网络.    
rcnn = trainRCNNObjectDetector(stopSigns, net, options, ...
    'NegativeOverlapRange', [0 0.3], 'PositiveOverlapRange',[0.5 1])

         Paso 4: use la imagen de prueba para probar el efecto de detección del detector de objetivos entrenado en la imagen de la señal de alto, marque el área objetivo en la imagen original y muestre la categoría y la confianza. El código de implementación es el siguiente:

% 载入测试图片
testImage = imread('stopSignTest.jpg');
% 检测“stop sign“标志
[bboxes,score,label] = detect(rcnn,testImage,'MiniBatchSize',128)

% 计算置信度并显示
[score, idx] = max(score);
bbox = bboxes(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);
outputImage = insertObjectAnnotation(testImage, 'rectangle', bbox, annotation);
figure
imshow(outputImage)

         Lo anterior es todo el código de matlab para realizar la detección de objetivos R-CNN, para su referencia y estudio. Si hay amigos que no entienden, bienvenidos a dejar un comentario o enviar un mensaje privado, y también puede enviar un mensaje privado al blogger para personalizar el código (Q: 809315756).

Supongo que te gusta

Origin blog.csdn.net/qq_37904531/article/details/131490670
Recomendado
Clasificación