clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')
%****************************************************************************
%更多关于matlab和fpga的搜索“fpga和matlab”的CSDN博客:
%matlab/FPGA项目开发合作
%https://blog.csdn.net/ccsss22?type=blog
%****************************************************************************
dsTrain = PtCloudClassificationDatastore('train');
dsVal = PtCloudClassificationDatastore('test');
ptCloud = pcread('Chair.ply');
label = 'Chair';
figure;pcshow(ptCloud)
xlabel("X");ylabel("Y");zlabel("Z");title(label)
dsLabelCounts = transform(dsTrain,@(data){data{2} data{1}.Count});
labelCounts = readall(dsLabelCounts);
labels = vertcat(labelCounts{:,1});
counts = vertcat(labelCounts{:,2});
figure;histogram(labels);title('class distribution')
rng(0)
[G,classes] = findgroups(labels);
numObservations = splitapply(@numel,labels,G);
desiredNumObservationsPerClass = max(numObservations);
filesOverSample=[];
for i=1:numel(classes)
if i==1
targetFiles = {dsTrain.Files{1:numObservations(i)}};
else
targetFiles = {dsTrain.Files{numObservations(i-1)+1:sum(numObservations(1:i))}};
end
% Randomly replicate the point clouds belonging to the infrequent classes
files = randReplicateFiles(targetFiles,desiredNumObservationsPerClass);
filesOverSample = vertcat(filesOverSample,files');
end
dsTrain.Files=filesOverSample;
dsTrain.Files = dsTrain.Files(randperm(length(dsTrain.Files)));
dsTrain.MiniBatchSize = 32;
dsVal.MiniBatchSize = dsTrain.MiniBatchSize;
dsTrain = transform(dsTrain,@augmentPointCloud);
data = preview(dsTrain);
ptCloud = data{1,1};
label = data{1,2};
figure;pcshow(ptCloud.Location,[0 0 1],"MarkerSize",40,"VerticalAxisDir","down")
xlabel("X");ylabel("Y");zlabel("Z");title(label)
minPointCount = splitapply(@min,counts,G);
maxPointCount = splitapply(@max,counts,G);
meanPointCount = splitapply(@(x)round(mean(x)),counts,G);
stats = table(classes,numObservations,minPointCount,maxPointCount,meanPointCount)
numPoints = 1000;
dsTrain = transform(dsTrain,@(data)selectPoints(data,numPoints));
dsVal = transform(dsVal,@(data)selectPoints(data,numPoints));
dsTrain = transform(dsTrain,@preprocessPointCloud);
dsVal = transform(dsVal,@preprocessPointCloud);
data = preview(dsTrain);
figure;pcshow(data{1,1},[0 0 1],"MarkerSize",40,"VerticalAxisDir","down");
xlabel("X");ylabel("Y");zlabel("Z");title(data{1,2})
inputChannelSize = 3;
hiddenChannelSize1 = [64,128];
hiddenChannelSize2 = 256;
[parameters.InputTransform, state.InputTransform] = initializeTransform(inputChannelSize,hiddenChannelSize1,hiddenChannelSize2);
inputChannelSize = 3;
hiddenChannelSize = [64 64];
[parameters.SharedMLP1,state.SharedMLP1] = initializeSharedMLP(inputChannelSize,hiddenChannelSize);
inputChannelSize = 64;
hiddenChannelSize1 = [64,128];
hiddenChannelSize2 = 256;
[parameters.FeatureTransform, state.FeatureTransform] = initializeTransform(inputChannelSize,hiddenChannelSize,hiddenChannelSize2);
inputChannelSize = 64;
hiddenChannelSize = 64;
[parameters.SharedMLP2,state.SharedMLP2] = initializeSharedMLP(inputChannelSize,hiddenChannelSize);
inputChannelSize = 64;
hiddenChannelSize = [512,256];
numClasses = numel(classes);
[parameters.ClassificationMLP, state.ClassificationMLP] = initializeClassificationMLP(inputChannelSize,hiddenChannelSize,numClasses);
numEpochs = 60;
learnRate = 0.001;
l2Regularization = 0.1;
learnRateDropPeriod = 15;
learnRateDropFactor = 0.5;
gradientDecayFactor = 0.9;
squaredGradientDecayFactor = 0.999;
avgGradients = [];
avgSquaredGradients = [];
[lossPlotter, trainAccPlotter,valAccPlotter] = initializeTrainingProgressPlot;
% Number of classes
numClasses = numel(classes);
% Initialize the iterations
iteration = 0;
% To calculate the time for training
start = tic;
% Loop over the epochs
for epoch = 1:numEpochs
% Reset training and validation datastores.
reset(dsTrain);
reset(dsVal);
% Iterate through data set.
while hasdata(dsTrain) % if no data to read, exit the loop to start the next epoch
iteration = iteration + 1;
% Read data.
data = read(dsTrain);
% Create batch.
[XTrain,YTrain] = batchData(data,classes);
% Evaluate the model gradients and loss using dlfeval and the
% modelGradients function.
[gradients, loss, state, acc] = dlfeval(@modelGradients,XTrain,YTrain,parameters,state);
% L2 regularization.
gradients = dlupdate(@(g,p) g + l2Regularization*p,gradients,parameters);
% Update the network parameters using the Adam optimizer.
[parameters, avgGradients, avgSquaredGradients] = adamupdate(parameters, gradients, ...
avgGradients, avgSquaredGradients, iteration,learnRate,gradientDecayFactor, squaredGradientDecayFactor);
% Update the training progress.
D = duration(0,0,toc(start),"Format","hh:mm:ss");
title(lossPlotter.Parent,"Epoch: " + epoch + ", Elapsed: " + string(D))
addpoints(lossPlotter,iteration,double(gather(extractdata(loss))))
addpoints(trainAccPlotter,iteration,acc);
drawnow
end
% Create confusion matrix
cmat = sparse(numClasses,numClasses);
% Classify the validation data to monitor the tranining process
while hasdata(dsVal)
data = read(dsVal); % Get the next batch of data.
[XVal,YVal] = batchData(data,classes);% Create batch.
% Compute label predictions.
isTrainingVal = 0; %Set at zero for validation data
YPred = pointnetClassifier(XVal,parameters,state,isTrainingVal);
% Choose prediction with highest score as the class label for
% XTest.
[~,YValLabel] = max(YVal,[],1);
[~,YPredLabel] = max(YPred,[],1);
cmat = aggreateConfusionMetric(cmat,YValLabel,YPredLabel);% Update the confusion matrix
end
% Update training progress plot with average classification accuracy.
acc = sum(diag(cmat))./sum(cmat,"all");
addpoints(valAccPlotter,iteration,acc);
% Update the learning rate
if mod(epoch,learnRateDropPeriod) == 0
learnRate = learnRate * learnRateDropFactor;
end
reset(dsTrain); % Reset the training data since all the training data were already read
% Shuffle the data at every epoch
dsTrain.UnderlyingDatastore.Files = dsTrain.UnderlyingDatastore.Files(randperm(length(dsTrain.UnderlyingDatastore.Files)));
reset(dsVal);
end
cmat = sparse(numClasses,numClasses); % Prepare sparse-double variable to do like zeros(2,2)
reset(dsVal); % Reset the validation data
data = readall(dsVal); % Read all validation data
[XVal,YVal] = batchData(data,classes); % Create batch.
% Classify the validation data using the helper function pointnetClassifier
YPred = pointnetClassifier(XVal,parameters,state,isTrainingVal);
% Choose prediction with highest score as the class label for
% XTest.
[~,YValLabel] = max(YVal,[],1);
[~,YPredLabel] = max(YPred,[],1);
% Collect confusion metrics.
cmat = aggreateConfusionMetric(cmat,YValLabel,YPredLabel);
figure;chart = confusionchart(cmat,classes);
acc = sum(diag(cmat))./sum(cmat,"all")
没有合适的资源?快使用搜索试试~ 我知道了~
matlab-基于pointNet的三维点云目标分类识别matlab仿真,输出混淆矩阵验证识别率-源码
共636个文件
ply:613个
m:23个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 57 浏览量
2021-09-18
00:18:59
上传
评论 1
收藏 22.56MB RAR 举报
温馨提示
matlab_基于pointNet的三维点云目标分类识别matlab仿真,输出混淆矩阵验证识别率_源码
资源推荐
资源详情
资源评论
收起资源包目录
matlab-基于pointNet的三维点云目标分类识别matlab仿真,输出混淆矩阵验证识别率-源码 (636个子文件)
Runme.m 7KB
PtCloudClassificationDatastore.m 3KB
pointnetClassifier.m 1KB
pointnetEncoder.m 1KB
modelGradients.m 1KB
initializeSharedMLP.m 1KB
augmentPointCloud.m 957B
dataTransform.m 896B
perceptron.m 820B
dataPrep.m 742B
selectPoints.m 695B
preprocessPointCloud.m 493B
initializeTrainingProgressPlot.m 481B
batchData.m 394B
initializeClassificationMLP.m 367B
initializeTransform.m 343B
prepareForPrediction.m 321B
oneHotEncode.m 271B
sharedMLP.m 249B
aggreateConfusionMetric.m 205B
randReplicateFiles.m 128B
initializeWeightsHe.m 116B
initializeWeightsGaussian.m 80B
Microwave.ply 2.23MB
Display.ply 1.25MB
Chair.ply 1.18MB
Microwave_67.ply 72KB
Microwave_98.ply 72KB
Microwave_26.ply 72KB
Microwave_33.ply 72KB
Microwave_28.ply 72KB
Microwave_88.ply 71KB
Microwave_30.ply 71KB
Microwave_45.ply 71KB
Chair_154.ply 71KB
Microwave_9.ply 71KB
Microwave_64.ply 71KB
Microwave_32.ply 70KB
Microwave_1.ply 70KB
Microwave_31.ply 70KB
Microwave_26.ply 70KB
Microwave_87.ply 70KB
Microwave_12.ply 70KB
Microwave_6.ply 70KB
Microwave_42.ply 70KB
Microwave_69.ply 70KB
Microwave_50.ply 70KB
Microwave_83.ply 70KB
Chair_49.ply 70KB
Microwave_25.ply 70KB
Microwave_47.ply 70KB
Microwave_6.ply 70KB
Chair_2.ply 70KB
Chair_92.ply 70KB
Chair_21.ply 70KB
Chair_44.ply 70KB
Chair_116.ply 70KB
Chair_158.ply 70KB
Chair_83.ply 70KB
Chair_150.ply 70KB
Chair_32.ply 70KB
Chair_102.ply 70KB
Chair_87.ply 70KB
Chair_33.ply 70KB
Display_86.ply 70KB
Microwave_52.ply 70KB
Chair_43.ply 70KB
Microwave_30.ply 70KB
Chair_23.ply 70KB
Chair_105.ply 70KB
Chair_70.ply 70KB
Chair_125.ply 70KB
Chair_86.ply 70KB
Chair_3.ply 70KB
Chair_97.ply 70KB
Chair_106.ply 70KB
Chair_62.ply 70KB
Chair_148.ply 70KB
Chair_126.ply 70KB
Chair_140.ply 70KB
Chair_136.ply 70KB
Microwave_10.ply 70KB
Chair_71.ply 70KB
Microwave_61.ply 70KB
Chair_69.ply 70KB
Chair_133.ply 69KB
Chair_131.ply 69KB
Chair_123.ply 69KB
Chair_132.ply 69KB
Chair_53.ply 69KB
Chair_14.ply 69KB
Chair_90.ply 69KB
Chair_43.ply 69KB
Chair_51.ply 69KB
Chair_100.ply 69KB
Microwave_21.ply 69KB
Chair_17.ply 69KB
Chair_91.ply 69KB
Chair_114.ply 69KB
Chair_79.ply 69KB
共 636 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
- 2301_773215032023-09-19资源很好用,有较大的参考价值,资源不错,支持一下。
mYlEaVeiSmVp
- 粉丝: 1900
- 资源: 19万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功