-
Notifications
You must be signed in to change notification settings - Fork 0
/
helperPartitionLidarSegmentationDataset.m
64 lines (50 loc) · 2.36 KB
/
helperPartitionLidarSegmentationDataset.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function [imdsTrain, imdsVal, imdsTest, pxdsTrain, pxdsVal, pxdsTest] = helperPartitionLidarSegmentationDataset(imds, pxds, varargin)
% helperPartitionLidarSegmentationDataset Partition Lidar data by randomly dividing data
% for training and validation based on given ratio. Rest is used for
% testing.
%
% 'trainingDataPercentage' - The trainingDataPercentage is used to divide the
% input data into training set of given
% ratio. Rest of the data is divided in 2:1
% ratio as validation and testing data.
p = inputParser;
defaultTrainingRatio = 0.7;
addOptional(p,'trainingDataPercentage', defaultTrainingRatio, @isfloat);
p.KeepUnmatched = true;
parse(p,varargin{:})
ratio = p.Results.trainingDataPercentage;
if(ratio >= 1)
error('Ratio provided is incorrect. No testing data, please update ratio.');
elseif (ratio <= 0)
error('Ratio provided is incorrect. Negative or zero given.');
end
% Set initial random state for example reproducibility.
rng(0);
numFiles = numel(imds.Files);
shuffledIndices = randperm(numFiles);
% Using ratio percentage of images for training.
numTrain = round(ratio * numFiles);
trainingIdx = shuffledIndices(1:numTrain);
% Use 33% of the rest of images for validation.
numVal = round((1-ratio)/3 * numFiles);
valIdx = shuffledIndices(numTrain+1:numTrain+numVal);
% Use the rest for testing.
testIdx = shuffledIndices(numTrain+numVal+1:end);
% Create image ds for training and test.
trainingImages = imds.Files(trainingIdx);
valImages = imds.Files(valIdx);
testImages = imds.Files(testIdx);
imdsTrain = imageDatastore(trainingImages, 'FileExtensions', '.mat', 'ReadFcn', @helperImageMatReader);
imdsVal = imageDatastore(valImages, 'FileExtensions', '.mat', 'ReadFcn', @helperImageMatReader);
imdsTest = imageDatastore(testImages, 'FileExtensions', '.mat', 'ReadFcn', @helperImageMatReader);
% Extract class and label IDs info.
classNames = pxds.ClassNames;
labelIDs = 1:numel(classNames);
% Creating pixel label ds for training and test set.
trainingLabels = pxds.Files(trainingIdx);
valLabels = pxds.Files(valIdx);
testLabels = pxds.Files(testIdx);
pxdsTrain = pixelLabelDatastore(trainingLabels, classNames, labelIDs);
pxdsVal = pixelLabelDatastore(valLabels, classNames, labelIDs);
pxdsTest = pixelLabelDatastore(testLabels, classNames, labelIDs);
end