这次的任务是识别损坏的绝缘子的照片,经过对比考虑,最终采用的是基于alexnet的svm,alexnet负责目标检测,svm负责对图像进行分类。
alexnet相比较googlenet而言,在小型数据集上表现更为优越。(不过有个gg的消息,google将dropout申为专利了。。。)
matlab出了一个深度学习工具箱,所以考虑使用matlab来解决这个问题。
第一步:安装matlabR2019a
win64的补丁在这,怎么用google即可
链接:https://pan.baidu.com/s/1xjWccxi3sBKsfnAr8gOi9Q
提取码:no5b
我用的是直接解压镜像文件然后打补丁的方式,前面试了其他几种都没有成功
镜像文件在下面
链接:https://pan.baidu.com/s/12prAuqg6xIQo0PH7fyfRxA
提取码:e8uu
第二步:收集数据集并处理
老师给了我十个破损的绝缘子图片,然后我自己又找了十八个完好的绝缘子图片,然后将其处理为227 * 227 *3的图像尺寸。
处理代码为:
function [ ] = photoresize( readdir )
% 图像批量改大小函数
% 输入参数:readdir 需要改大小的图像所在目录(要求只有图像文件,格式无所谓)
readdir ='D:\MATLAB\deeplearing\Date\good';
% 写入图像格式
writetype = 'jpg';
% 写入图像目录,直接附加在读取目录后加上"png resize"
writedir = [readdir,' resize ',writetype];
% 大小改变因子,有两种表示方法,比例或者尺寸
resizefactor = [227 227];
% resizefactor = [800 600];
% 创建改大小之后图像目录,如果目录已经存在会报警告,但是不影响使用
mkdir(writedir);
% 读取目录内所有所有图像目录信息
imnames = dir(readdir);
% 去掉目录信息中的无用项( . .. )
% 统计图像个数
imcnt=length(imnames);
% 针对每一个图像
for imidx = 1:1:imcnt
% 读入图像
imtemp = imread(fullfile(readdir,imnames(imidx).name));
% 改变图像大小
imtemp = imresize(imtemp,resizefactor);
% 按照需要格式写入图像
imwrite(imtemp,fullfile(writedir,[imnames(imidx).name(1:end-3),writetype]));
end
end
第三步:学习alexnet
Alex在2012年提出的alexnet网络结构模型引爆了神经网络的应用热潮,并赢得