深度學習基礎(chǔ)與實踐 課件 9.2-基于AlexNet的圖像分類實戰(zhàn)_第1頁
深度學習基礎(chǔ)與實踐 課件 9.2-基于AlexNet的圖像分類實戰(zhàn)_第2頁
深度學習基礎(chǔ)與實踐 課件 9.2-基于AlexNet的圖像分類實戰(zhàn)_第3頁
深度學習基礎(chǔ)與實踐 課件 9.2-基于AlexNet的圖像分類實戰(zhàn)_第4頁
深度學習基礎(chǔ)與實踐 課件 9.2-基于AlexNet的圖像分類實戰(zhàn)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于AlexNet的圖像分類實戰(zhàn)序號超類類別1水生哺乳動物海貍,海豚,水獺,海豹,鯨魚2魚水族館的魚,比目魚,射線,鯊魚,鱒魚3花卉蘭花,罌粟花,玫瑰,向日葵,郁金香4食品容器瓶子,碗,罐子,杯子,盤子5水果和蔬菜蘋果,蘑菇,橘子,梨,甜椒6家用電器時鐘,電腦鍵盤,臺燈,電話機,電視機7家用家具床,椅子,沙發(fā),桌子,衣柜8昆蟲蜜蜂,甲蟲,蝴蝶,毛蟲,蟑螂9大型食肉動物熊,豹,獅子,老虎,狼10大型人造戶外用品橋,城堡,房子,路,摩天大樓11大自然的戶外場景云,森林,山,平原,海12大雜食動物和食草動物駱駝,牛,黑猩猩,大象,袋鼠13中型哺乳動物狐貍,豪豬,負鼠,浣熊,臭鼬14非昆蟲無脊椎動物螃蟹,龍蝦,蝸牛,蜘蛛,蠕蟲15人寶貝,男孩,女孩,男人,女人16爬行動物鱷魚,恐龍,蜥蜴,蛇,烏龜17車輛1自行車,公共汽車,摩托車,皮卡車,火車18車輛2割草機,火箭,有軌電車,坦克,拖拉機19小型哺乳動物倉鼠,老鼠,兔子,母老虎,松鼠20樹木楓樹,橡樹,棕櫚,松樹,柳樹數(shù)據(jù)集介紹CIFAR-100

數(shù)據(jù)集介紹CIFAR100數(shù)據(jù)集和CIFAR10類似,它有100個類,每個類包含600個圖像,600個圖像中有500個訓練圖像和100個測試圖像。100類實際是由20個大類(每個

類又包含5個子類)構(gòu)成(5*20=100)。01圖像分類圖像分類概述

圖像分類,是對輸入圖像按照內(nèi)容、等級或性質(zhì)分別歸類。它是計算機視覺的核心任務之一,應用廣泛。它本質(zhì)上就是在分類對象的屬性空間,找到可將事物分類的最佳視角,使得同類事物在屬性空間內(nèi)靠得很近,而不同類型離得很遠。

圖像分類的目標是將不同的圖像劃分到不同的類別,實現(xiàn)最小分類誤差,最高精度。數(shù)據(jù)預處理數(shù)據(jù)預處理基于機器學習的圖像分類過程02分類器設(shè)計與學習分類決策特征提取與表示特征提取與表示測試圖像訓練圖像目標類別

特征提?。和ǔ膱D像中按照固定步長、尺度提取大量局部特征描述。常用的局部特征包括SIFT(Scale-Invariant

Feature

Transform,尺度不變特征轉(zhuǎn)換)、HOG(Histogram

ofOriented

Gradient,方向梯度直方圖)、LBP(Local

Bianray

Pattern,局部二值模式)等,一般也采用多種特征描述,防止丟失過多的有用信息。

特征編碼

:底層特征中包含了大量冗余與噪聲,為了提高特征表達的魯棒性,需要使用一種特征變換算法對底層特征進行編碼,稱作特征編碼。常用的特征編碼方法包括向量量化編碼、稀疏編碼、局部線性約束編碼、Fisher向量編碼等。圖像分類傳統(tǒng)的圖像分類方法通常完整建立圖像分類模型一般包括特征提取,特征編碼,空間約束,圖像分類等幾個階段。02達。金字塔特征匹配是一種常用的特征匯聚方法,這種方法提出將圖像均勻分塊,在分塊內(nèi)做特征匯聚。

通過分類器分類

:經(jīng)過前面步驟之后一張圖像可以用一個固定維度的向量進行描述,接下來就是經(jīng)過分類器對圖像進行分類。通常使用的分類器包括SVM(Support

Vector

Machine,支持向量機)、隨機森林等。而使用核方法的SVM是最為廣泛的分類器,在傳統(tǒng)圖像分類任務上性能很好。圖像分類傳統(tǒng)的圖像分類方法通常完整建立圖像分類模型一般包括特征提取,特征編碼,空間約束,圖像分類等幾個階。

空間特征約束

:特征編碼之后一般會經(jīng)過空間特征約束,也稱作特征匯聚。特征匯聚是指在一個空間范圍內(nèi),對每一維特征取最大值或者平均值,可以獲得一定特征不變性的特征表02段圖像分類基于深度學習的圖像分類方法

常用的標準網(wǎng)絡模型:LeNet、AlexNet、Vgg系列、ResNet系列、DenseNet系列、GoogleNet、NasNet、Xception、SeNet(stateofart)……

輕量化網(wǎng)絡模型:Mobilenetv1,v2、Shufflenet

v1,v2、Squeezenet……

目前輕量化模型在具體項目應用時用的比較廣泛。

優(yōu)點:參數(shù)模型小,方便部署,計算量小,速度快。

缺點:輕量化模型在精度上沒有Resnet系列、Inception系列、Densenet系列、Senet的

accuracy高。02圖像分類基于深度學習的圖像分類方法LeNet是卷積神經(jīng)網(wǎng)絡的祖師爺LeCun在1998年提出,用于解決手寫數(shù)字識別的視覺任務。自那時起,CNN的最基本的架構(gòu)就定下來了:卷積層、池化層、全連接層。如今各大深度學習框架中所使用的LeNet都是改進過的LeNet-5(-5表示具有5個層),和原始的LeNet有些許不同,比如把激活函數(shù)改為了現(xiàn)在很常用的ReLu。但是這個模型在后來的一段時間并未能火起來,主要原因是費機器(計算跟不上)圖片來源:《Gradient-based

learning

applied

to

document

recognition》02圖像分類基于深度學習的圖像分類方法AlexNet在2012年ImageNet競賽中以超過第二名10.9個百分點的絕對優(yōu)勢一舉奪冠,從此深度學習和卷積神經(jīng)網(wǎng)絡名聲鵲起,深度學習的研究如雨后春筍般出現(xiàn),AlexNet的出現(xiàn)可謂是卷積神經(jīng)網(wǎng)絡的王者歸來。AlexNet為8層深度網(wǎng)絡,其中5層卷積層和3層全連接層,不計LRN層和池化層。圖片來源:《ImageNetClassificationwithDeepConvolutional

Neural

Networks》02基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡代碼介紹AlexNet網(wǎng)絡共包含五個卷積層提取特征,并使用ReLU作為激活函數(shù),避免梯度彌散,使用重疊的最大池化以得到更加豐富的特征。AlexNet((features):Sequential((0):Conv2d(3,96,kernel_size=(11,11),stride=(4,4),padding=(2,2))(1):ReLU(inplace)(2):MaxPool2d(kernel_size=3,stride=2,padding=0,dilation=1,ceil_mode=False)(3):Conv2d(96,256,kernel_size=(5,5),stride=(1,1),padding=(2,2))(4):ReLU(inplace)(5):MaxPool2d(kernel_size=3,stride=2,padding=0,dilation=1,ceil_mode=False)(6):Conv2d(256,384,kernel_size=(3,3),stride=(1,1),padding=(1,1))(7):ReLU(inplace)(8):Conv2d(384,384,kernel_size=(3,3),stride=(1,1),padding=(1,1))(9):ReLU(inplace)(10):Conv2d(384,256,kernel_size=(3,3),stride=(1,1),padding=(1,1))(11):ReLU(inplace)(12):MaxPool2d(kernel_size=3,stride=2,padding=0,dilation=1,ceil_mode=False))03……)(1):

ReLU(inplace)(2):

MaxPool2d(kernel_size=3,

stride=2,

padding=0,

dilation=1,

ceil_mode=False)……)

基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐第一個卷積層輸入通道為3,輸出通道為96,卷積核大小為11×11,步長為4,填充為2,與第一節(jié)所講網(wǎng)絡結(jié)構(gòu)對應。后面緊跟ReLU激活函數(shù)確保梯度收斂,再使用一個3×3的池化提取特征,同時減少參數(shù)的計算。AlexNet((features):Sequential((0):

Conv2d(3,

96,

kernel_size=(11,

11),

stride=(4,

4),

padding=(2,

2))https://www.cnblogs.com/wanghui-garcia/p/10775367.html

03圖片來源:……)基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐第二個卷積層輸入通道是上一層的輸出,輸出通道是192,卷積核大小為5×5,步長為1,填充為2,后依舊接了激活函數(shù)和最大池化層,可與上一節(jié)的網(wǎng)絡結(jié)構(gòu)對應查看。AlexNet((features):Sequential((0):Conv2d(3,96,kernel_size=(11,11),stride=(4,4),padding=(2,2))(1):ReLU(inplace)(2):MaxPool2d(kernel_size=3,stride=2,padding=0,dilation=1,ceil_mode=False)(3):

Conv2d(96,

256,

kernel_size=(5,

5),

stride=(1,

1),

padding=(2,

2))(4):

ReLU(inplace)(5):

MaxPool2d(kernel_size=3,

stride=2,

padding=0,

dilation=1,

ceil_mode=False)……)03……)基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐第三、四、五個卷積層的卷積核大小為3×3,步長為1,填充為1,僅添加激活函數(shù)沒有做最大池化,在最后使用一個最大池化提取特征。AlexNet((features):Sequential((0):Conv2d(3,96,kernel_size=(11,11),stride=(4,4),padding=(2,(1):ReLU(inplace)(2):MaxPool2d(kernel_size=3,stride=2,padding=0,dilation=1,ceil_mode=False)(3):Conv2d(96,256,kernel_size=(5,5),stride=(1,1),padding=(2,2))(4):ReLU(inplace)(5):MaxPool2d(kernel_size=3,stride=2,padding=0,dilation=1,ceil_mode=False)(6):

Conv2d(256,

384,

kernel_size=(3,

3),

stride=(1,

1),

padding=(1,

1))(7):

ReLU(inplace)(8):

Conv2d(384,

384,

kernel_size=(3,

3),

stride=(1,

1),

padding=(1,

1))(9):

ReLU(inplace)(10):

Conv2d(384,

256,

kernel_size=(3,

3),

stride=(1,

1),

padding=(1,

1))(11):

ReLU(inplace)(12):

MaxPool2d(kernel_size=3,

stride=2,

padding=0,

dilation=1,

ceil_mode=False))03……)2))基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐添加一個自適應平均池化操作,對于任意大小的輸入,輸出的特征數(shù)目不會變化。分類使用了三個全連接層對其進行操作,得到最后1000個分類,全連接可以保持輸入輸出不變。AlexNet(……(avgpool):

AdaptiveAvgPool2d(output_size=(6,

6))(classifier):Sequential((0):Dropout(p=0.5)(1):Linear

(in_features=9216,out_features=4096,bias=True)(2):ReLU(inplace)(3):Dropout(p=0.5)(4):Linear

(in_features=4096,out_features=4096,bias=True)(5):ReLU(inplace)(6):Linear

(in_features=4096,out_features=1000,bias=True)))03基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐三個連接層中使用ReLU激活函數(shù)保證梯度收斂,然后使用Dropout避免過擬合。AlexNet(……(avgpool):AdaptiveAvgPool2d(output_size=(6,6))(classifier):Sequential((0):

Dropout(p=0.5)(1):Linear(in_features=9216,out_features=4096,bias=True)(2):

ReLU(inplace)(3):

Dropout(p=0.5)(4):Linear(in_features=4096,out_features=4096,bias=True)(5):

ReLU(inplace)(6):Linear(in_features=4096,out_features=1000,bias=True)))03基于AlexNet網(wǎng)絡實現(xiàn)圖像分類實踐當前在PyTorch中也有內(nèi)置AlexNet網(wǎng)絡模型,使用命令torchvision.models.alexnet()即可獲得該網(wǎng)絡結(jié)構(gòu)。03基于AlexNet

網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡結(jié)構(gòu)定義使用PyTorch定義AlexNet網(wǎng)絡結(jié)構(gòu)實現(xiàn)CIFAR-100的網(wǎng)絡結(jié)構(gòu)及其參數(shù)設(shè)置如圖所示。注意:AlexNet網(wǎng)絡原設(shè)定用于在ImageNet數(shù)據(jù)集中進行訓練,ImageNet數(shù)據(jù)集有1000種類別,

但是,此處數(shù)據(jù)集為CIFAR-100,

只有100個類別,需要對應修改網(wǎng)絡最后輸出的參數(shù)類

別num_classes(即100)。03基于AlexNet

網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡訓練

訓練和測試數(shù)據(jù)集轉(zhuǎn)換對訓練集的數(shù)據(jù)和測試集的數(shù)據(jù)進行分辨率重置、圖像翻轉(zhuǎn)等操作,然后將其轉(zhuǎn)換為tensor。transform_train=transforms.Compose([transforms.Resize(224),#重置圖像分辨率transforms.RandomHorizontalFlip(),#依據(jù)概率p對PIL圖片進行水平翻轉(zhuǎn),默認0.5transforms.ToTensor

(),#將PILImage或者ndarray轉(zhuǎn)換為tensortransforms.Normalize((0.4914,0.4822,0.4465),(0.2023,0.1994,0.2010)),])transform_test=transforms.Compose([transforms.Resize(224),#重置圖像分辨率transforms.ToTensor

(),#將PILImage或者ndarray轉(zhuǎn)換為tensortransforms.Normalize((0.4914,0.4822,0.4465),(0.2023,0.1994,0.2010)),])03#對數(shù)據(jù)按通道進行標準化,即先減均值,再除以標準差])transform_test=transforms.Compose([transforms.Resize(224),transforms.ToTensor(),transforms.Normalize((0.4914,0.4822,0.4465),(0.2023,0.1994,0.2010)),#對數(shù)據(jù)按通道進行標準化,即先減均值,再除以標準差])基于AlexNet

網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡訓練

數(shù)據(jù)標準化transform_train=transforms.Compose([transforms.Resize(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize((0.4914,0.4822,0.4465),(0.2023,0.1994,0.2010)),03基于AlexNet

網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡訓練

導入數(shù)據(jù)集使用內(nèi)置的函數(shù)導入數(shù)據(jù)集#說明數(shù)據(jù)集的路徑、文件目錄等train_dataset=datasets.CIFAR100(root='./data’,train=True,transform=transform_train,download=False)#root設(shè)置根路徑,設(shè)置要進行訓練,設(shè)置數(shù)據(jù)變換類型,是否下載數(shù)據(jù)test_dataset=datasets.CIFAR100(root='./data’,train=False,transform=transform_test)#root設(shè)置根路徑,設(shè)置不需要訓練,設(shè)置數(shù)據(jù)變換類型#批量讀取訓練測試數(shù)據(jù)train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=batch_size,shuffle=False)shuffle=True:參數(shù)設(shè)置為True即打亂數(shù)據(jù)集的順序。03基于AlexNet

網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡訓練

導入模型、定義交叉熵和優(yōu)化函數(shù)#判斷是否存在cuda,存在就使用gpu加速訓練,沒有就使用cpu進行計算。device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")model.to(device)#從AlexNet中導入alexnet網(wǎng)絡模型。model=AlexNet.from_name('alexnet’)#設(shè)置損失函數(shù)為交叉熵。criterion=nn.CrossEntropyLoss()#定義優(yōu)化函數(shù)--Adam(AdaptiveMomentEstimation)本質(zhì)上是帶有動量項的RMSprop。optimizer=torch.optim.Adam(model.parameters(),lr=0.001)03基于AlexNet

網(wǎng)絡實現(xiàn)圖像分類實踐AlexNet網(wǎng)絡訓練循環(huán)迭代數(shù)據(jù),使用for循環(huán)迭代train_loader,將各屬性賦值給i,image,labels,通過網(wǎng)絡計算損失值。for

epoch

in

range(epoches):fori,(images,labels)inenumerate(train_loader):images=images.to(device)labels=labels.to(device)output=model(images)#通過model預測image

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論