doTrainingAndEval = true;
data =负载(“miovehicleDatasetGtruth.mat”);
miovehicleDataset = data.data.miovehicleDataset
rng (0)
shuffledIndices = randperm(高度(miovehicleDataset));
地板idx =(0.6 *高(miovehicleDataset));
trainingIdx = 1: idx;
trainingDataTbl = miovehicleDataset (shuffledIndices (trainingIdx):);
validationIdx = idx + 1: idx + 1 +地板(0.1 *长度(shuffledIndices));
validationDataTbl = miovehicleDataset (shuffledIndices (validationIdx):);
testIdx = validationIdx(结束)+ 1:长度(shuffledIndices);
testDataTbl = miovehicleDataset (shuffledIndices (testIdx):);
imdsTrain = imageDatastore (trainingDataTbl {:,“imageFilename”});
bldsTrain = boxLabelDatastore (trainingDataTbl(:, 2:结束));
imdsValidation = imageDatastore (validationDataTbl {:,“imageFilename”});
bldsValidation = boxLabelDatastore (validationDataTbl(:, 2:结束));
imdsTest = imageDatastore (testDataTbl {:,“imageFilename”});
bldsTest = boxLabelDatastore (testDataTbl(:, 2:结束));
trainingData =结合(imdsTrain bldsTrain);
validationData =结合(imdsValidation bldsValidation);
testData =结合(imdsTest bldsTest);
inputSize = (224 224 3);
preprocessedTrainingData =变换(trainingData @(数据)preprocessData(数据、inputSize));
numAnchors = 3;
anchorBoxes = estimateAnchorBoxes (preprocessedTrainingData numAnchors)
featureExtractionNetwork = resnet50;
featureLayer =“activation_40_relu”;
numClasses =宽度(miovehicleDataset) 1;
lgraph = fasterRCNNLayers (inputSize numClasses、anchorBoxes featureExtractionNetwork, featureLayer);
augmentedTrainingData =变换(trainingData @augmentData);
augmentedData =细胞(4,1);
为k = 1:4
data =阅读(augmentedTrainingData);
augmentedData {k} = insertShape(数据{1},“矩形”、数据{2});
重置(augmentedTrainingData);
结束
trainingData =变换(augmentedTrainingData @(数据)preprocessData(数据、inputSize));
validationData =变换(validationData @(数据)preprocessData(数据、inputSize));
选择= trainingOptions (“个”,…
“MaxEpochs”10…
“MiniBatchSize”2,…
“InitialLearnRate”1 e - 3,…
“CheckpointPath”tempdir,…
“ValidationData”,validationData);
pretrained =负载(“rcnnresnet50dectrvehicleexample.mat”);
detector1 = pretrained.detector1;
[detector1,信息]= trainFasterRCNNObjectDetector (trainingData lgraph,选项,…
“NegativeOverlapRange”,0.3 [0],…
“PositiveOverlapRange”(0.6 - 1));
faster_rcnn_detector_miovehicleDataset = detector1
保存(“faster_rcnn_detector_miovehicleDataset”)
我= imread (testDataTbl.imageFilename {1});
我= imresize(我inputSize (1:2));
[bboxes,分数]=检测(detector1,我);
我= insertObjectAnnotation (,“矩形”bboxes,分数);
图
imshow(我)
函数data = augmentData(数据)
tform = randomAffine2d (“XReflection”,真正的);
溃败= affineOutputView(尺寸(数据{1}),tform);
{1}= imwarp数据(数据{1}、tform“OutputView”,溃败);
{2}= bboxwarp数据(数据{2}、tform溃败);
结束
函数targetSize data = preprocessData(数据)
规模= targetSize (1:2)。{1}/大小(数据,[1 - 2]);
{1}= imresize数据(数据{1},targetSize (1:2));
{2}= bboxresize数据(数据{2},规模);
结束