主要内容

GoogLeNet을사용하여상분류하기

이예제에서는사전훈련된심층컨벌루션신경망GoogLeNet을사용하여영상을분류하는방법을보여줍니다。

1백만개가넘는영상에대해훈련된GoogLeNet은영상을키보드,커피머그잔,연필,각종동물등1000가지사물범주로분류할수있습니다。이신경망은다양한상을대하는다양한특징을학습했습니다。이신경망은영상을입력값으로받아서영상에있는사물에대한레이블과각사물범주의확률을출력합니다。

사전훈련된신경망불러오기

사전훈련된GoogLeNet신경망을불러옵니다。이단계에서는深度学习工具箱™模型为GoogLeNet网络지원패키지가필합니다。필한지원패키지가설치되어있지않으면이를다운로드할수있는링크가제공됩니다。

상분류를위해사전훈련된다른신경망을불러와도됩니다。사전훈련된다른신경망을사용해보려면MATLAB®에서이예제를연다음다른신경망을선택하십시오。예를들어,googlenet보다 빠른squeezenet신경망을사용해볼수있습니다。사전훈련된다른신경망을사용하여이예제를실행할수있습니다。사용가능한신경망목록은사전훈련된신경망불러오기항목을참조하십시오。

网=googlenet;

분류하려는상의크기는신경망의입력크기와같아야합니다。GoogLeNet의경우신경망의속성의첫번째소는상입력계층입니다。상입력계층의InputSize속성은신경망의입력크기입니다。

inputSize = net.Layers(1).InputSize
inputSize =1×3224 224 3

속성의마지막소는분류출력계층입니다。이 계층의一会속성은신경망이학습한클래스의이름을포함합니다。총1000개의상중에서임의로10개의클래스이름을시합니다。

classNames = net.Layers(end).ClassNames;numClasses = numel(classNames);disp(类名(randperm (numClasses 10)))
“蝶耳犬”、“蛋酒”、“菠萝蜜”、“城堡”、“睡袋”、“红腿”、“创可贴”、“炒锅”、“安全带”、“橙子”

상읽기및크기조정하기

분류하려는상을읽어들이고시합니다。

I = imread(“peppers.png”);图imshow(我)

@ @상의크기를@ @시합니다。상은크기가384×512픽셀이고3개의색채널(rgb)을갖습니다。

大小(我)
ans =1×3384 512 3

imresize를사용하여상의크기를신경망의입력크기에맞게조정합니다。이렇게크기를조정하면상의종횡비가약간변경됩니다。

I = imresize(I,inputSize(1:2));图imshow(我)

응용프로그램에따라다른방식으로상의크기를조정하려할수있습니다。예를들어,我(1:inputSize (1), 1: inputSize (2):)를사용하여상의왼쪽위코너를자를수있습니다。图像处理工具箱™가있다면imcrop함수를사용할수있습니다。

상분류하기

分类를사용하여상을분류하고클래스확률을계산합니다。신경망이상을피망으로올바르게분류합니다。분류용신경망은입력영상하나에사물이여러개들어있더라도입력영상당하나의레이블을출력하도록훈련되어있습니다。

[label,scores] = category (net,I);标签
标签=分类甜椒

tmout = 0 tmout = 0 tmout = 0 tmout = 0

图imshow(I) title(字符串(标签)+”、“+ num2str(100*scores(classNames == label),3) +“%”);

상위예측@ @시하기

상위다섯개의예측된레이블과각각의확률을히스토그램으로@ @시합니다。신경망은영상을수많은사물범주로분류하고그중많은범주가비슷하기때문에신경망을평가할때는보통상위다섯개정확도를고려합니다。신경망이상을높은확률로피망으로분류합니다。

[~,idx] = sort(scores,“下”);Idx = Idx (5:-1:1);classNamesTop = net.Layers(end).ClassNames(idx);scoresTop = scores(idx);图barh(scoresTop) xlim([0 1])“五大预测”)包含(“概率”) yticklabels (classNamesTop)

참고 문헌

[1]塞格迪,克里斯蒂安,刘伟,贾扬青,皮埃尔·塞尔曼内,斯科特·里德,德拉戈米尔·安格洛夫,杜米特鲁·埃尔汉,文森特·范豪克和安德鲁·拉宾诺维奇。“更深入地研究卷积。”在IEEE计算机视觉和模式识别会议论文集,第1-9页。2015.

참고 항목

||||

관련 항목