1.演算法模擬效果
matlab2022a模擬結果如下:
2.演算法涉及理論知識概要
YOLOv2是一種基於深度學習的實時目標檢測演算法,由Joseph Redmon等人在論文《YOLO9000: Better, Faster, Stronger》中提出。其主要特點是將影像識別任務視為一個迴歸問題,網路一次前向傳播就能預測出影像中所有目標的位置和類別。
網路結構: YOLOv2採用Darknet-19作為特徵提取網路,這是一種卷積神經網路(CNN),能有效抽取影像的深層特徵。
網格劃分與Anchor Boxes: 將輸入影像劃分為SxS個網格,每個網格負責預測B個邊界框(anchor boxes)。對於每個網格單元,網路輸出T個類別機率(C類物體+C類背景)、B個邊界框的座標(x, y, w, h)以及每個框的置信度(confidence score),表示框記憶體在物體且預測框準確的程度。公式表示為:
Confidence Score = IOU(pred_box, true_box) * Objectness Probability
其中IOU代表交併比,Objectness Probability是網路預測的框記憶體在物體的機率。
座標預測與歸一化: 邊界框座標預測使用相對座標,公式如下:
x, y:預測框中心相對於網格單元的偏移量,範圍[0, 1]。
w, h:預測框寬高相對於整幅影像寬高的比例,經過sigmoid啟用後同樣範圍在[0, 1]。
損失函式: YOLOv2採用了一種複合損失函式,包括位置誤差、分類誤差以及置信度誤差:
Localization Loss: 對於每個網格單元,只有當它包含ground truth box的中心時,才對其負責預測的邊界框計算定位誤差,通常採用L1或L2損失。
Confidence Loss: 包含物體的網格單元,其置信度損失是預測的置信度與真實IOU的交叉熵損失;不包含物體的網格單元,其置信度損失僅考慮背景類別的交叉熵損失。
Classification Loss: 對於每個預測框,使用softmax函式處理類別機率,並計算多分類交叉熵損失。
Batch Normalization: 在YOLOv2中廣泛使用批次歸一化層,加速訓練過程,提高模型效能。
Anchor Boxes最佳化: YOLOv2採用了K-means聚類方法最佳化預設錨框尺寸,使得錨框更好地匹配資料集中的物體形狀。
多尺度預測: YOLOv2透過在不同尺度的特徵圖上進行預測,提高了對不同尺寸目標的檢測能力。
3.MATLAB核心程式
sidx = randperm(size(FACES,1));% 打亂資料集索引 idx = floor(0.75 * length(sidx));% 將75%的資料用作訓練集 train_data = FACES(sidx(1:idx),:);% 選取訓練集 test_data = FACES(sidx(idx+1:end),:);% 選取測試集 % 影像大小 image_size = [224 224 3]; num_classes = size(FACES,2)-1;% 目標類別數量 anchor_boxes = [% 預定義的錨框大小 43 59 18 22 23 29 84 109 ]; % 載入預訓練的 ResNet-50 模型 load mat\Resnet50.mat % 用於目標檢測的特徵層 featureLayer = 'activation_40_relu'; % 構建 YOLOv2 網路 lgraph = yolov2Layers(image_size,num_classes,anchor_boxes,Initial_nn,featureLayer); options = trainingOptions('sgdm', ... 'MiniBatchSize', 8, .... 'InitialLearnRate',1e-4, ... 'MaxEpochs',200,... 'CheckpointPath', Folder, ... 'Shuffle','every-epoch', ... 'ExecutionEnvironment', 'gpu');% 設定訓練選項 % 訓練 YOLOv2 目標檢測器 [detector,info] = trainYOLOv2ObjectDetector(train_data,lgraph,options); save model.mat detector