




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
實驗一手寫數(shù)字識別實驗一手寫數(shù)字識別實驗?zāi)康恼莆站矸e神經(jīng)網(wǎng)絡(luò)基本原理;掌握PyTorch(或其他框架)的基本用法以及構(gòu)建卷積網(wǎng)絡(luò)的基本操作;了解PyTorch(或其他框架)在GPU上的使用方法。實驗要求搭建PyTorch(或其他框架)環(huán)境;構(gòu)建一個規(guī)范的卷積神經(jīng)網(wǎng)絡(luò)組織結(jié)構(gòu);在MNIST手寫數(shù)字?jǐn)?shù)據(jù)集上進行訓(xùn)練和評估,實現(xiàn)測試集準(zhǔn)確率達到98%及以上;按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。實驗原理(以PyTorch為例)PyTorch基本用法:使用PyTorch,必須了解PyTorch:張量的創(chuàng)建與使用數(shù)據(jù)創(chuàng)建和數(shù)據(jù)加載數(shù)據(jù)增強網(wǎng)絡(luò)模型創(chuàng)建使用torch.autograd自動求梯度模型參數(shù)優(yōu)化模型加載與保存PyTorch的前身是Torch,其底層和Torch框架一樣,但是使用Python重新寫了很多內(nèi)容,不僅更加靈活,支持動態(tài)圖,而且提供了Python接口。它是由Torch7團隊開發(fā),是一個以Python優(yōu)先的深度學(xué)習(xí)框架,不僅能夠?qū)崿F(xiàn)強大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò):典型的卷積神經(jīng)網(wǎng)絡(luò)由卷積層、池化層、激活函數(shù)層交替組合構(gòu)成,因此可將其視為一種層次模型,形象地體現(xiàn)了深度學(xué)習(xí)中“深度”之所在。卷積操作卷積運算是卷積神經(jīng)網(wǎng)絡(luò)的核心操作,給定二維的圖像I作為輸入,二維卷積核K,卷積運算可表示為: (1)給定5×5輸入矩陣、3×3卷積核,相應(yīng)的卷積操作如圖1所示。圖1卷積運算在使用TensorFlow等深度學(xué)習(xí)框架時,卷積層會有padding參數(shù),常用的有兩種選擇,一個是“valid”,一個是“same”。前者是不進行填充,后者則是進行數(shù)據(jù)填充并保證輸出與輸入具有相同尺寸。構(gòu)建卷積或池化神經(jīng)網(wǎng)絡(luò)時,卷積步長也是一個很重要的基本參數(shù)。它控制了每個操作在特征圖上的執(zhí)行間隔。池化操作池化操作使用某位置相鄰輸出的總體統(tǒng)計特征作為該位置的輸出,常用最大池化(max-pooling)和均值池化(average-pooling)。池化層不包含需要訓(xùn)練學(xué)習(xí)的參數(shù),僅需指定池化操作的核大小、操作步長以及池化類型。池化操作示意如圖2所示。圖2池化操作激活函數(shù)層卷積操作可視為對輸入數(shù)值進行線性計算發(fā)揮線性映射的作用。激活函數(shù)的引入,則增強了深度網(wǎng)絡(luò)的非線性表達能力,從而提高了模型的學(xué)習(xí)能力。常用的激活函數(shù)有sigmoid、tanh和ReLU函數(shù)。實驗所用工具及數(shù)據(jù)集工具Anaconda、PyTorch(PyTorch安裝教程參考:PyTorch官網(wǎng):/)數(shù)據(jù)集MNIST手寫數(shù)字?jǐn)?shù)據(jù)集(下載地址及相關(guān)介紹:/exdb/mnist/)實驗步驟與方法(以PyTorch為例)安裝實驗環(huán)境,包括Anaconda、PyTorch,若使用GPU還需要安裝cuda、cudnn;下載MNIST手寫數(shù)字?jǐn)?shù)據(jù)集;加載MNIST數(shù)據(jù);構(gòu)建模型;用class類來建立CNN模型CNN流程: 卷積(Conv2d)->激勵函數(shù)(ReLU)->池化(MaxPooling)->卷積(Conv2d)->激勵函數(shù)(ReLU)->池化(MaxPooling)->展平多維的卷積成的特征圖->接入全連接層(Linear)->輸出創(chuàng)建優(yōu)化器和損失函數(shù);訓(xùn)練和評估模型。實驗二:基于ViT的CIFAR10圖像分類一、實驗?zāi)康膶W(xué)習(xí)如何使用深度學(xué)習(xí)框架來實現(xiàn)和訓(xùn)練一個ViT模型,以及ViT中的Attention機制。進一步掌握使用深度學(xué)習(xí)框架完成任務(wù)的具體流程:如讀取數(shù)據(jù)、構(gòu)造網(wǎng)絡(luò)、訓(xùn)練模型和測試模型等。二、實驗要求基于Python語言和任意一種深度學(xué)習(xí)框架(實驗指導(dǎo)書中使用PyTorch框架進行介紹),從零開始一步步完成數(shù)據(jù)讀取、網(wǎng)絡(luò)構(gòu)建、模型訓(xùn)練和模型測試等過程,最終實現(xiàn)一個可以完成基于ViT的CIFAR10圖像分類任務(wù)的程序。在CIFAR10數(shù)據(jù)集上進行訓(xùn)練和評估,實現(xiàn)測試集準(zhǔn)確率達到90%以上。按照規(guī)定時間在課程網(wǎng)站上提交實驗報告,代碼和PPT。三、實驗原理ViT相關(guān)概念和原理參考《深度學(xué)習(xí)》課程講授內(nèi)容,VIT首次將Transformer模型運用到計算機視覺領(lǐng)域并且取得了不錯的分類效果,模型架構(gòu)圖如圖1所示。從圖1可以看出VIT只用了Transformer模型的編碼器部分,并未涉及解碼器。ViT架構(gòu)由三部分組成:(1)圖像特征嵌入模塊;(2)Transformer編碼器模塊;(3)MLP分類模塊。ViT的組成模塊詳細介紹如下:圖1ViT的架構(gòu)(1)圖像特征嵌入模塊:標(biāo)準(zhǔn)的ViT模型對圖像的輸入尺寸有要求,必須為224*224,圖像輸入之后首先是需要進行Patch分塊,一般設(shè)置Patch的尺寸為16*16,那么一共能生成(224/16)*(224/16)=196個Patch塊。(2)Transformer編碼器模塊:主要由LayerNorm層、多頭注意力機制、MLP模塊、殘差連接這5個部分組成。其中多頭注意力如圖2所示。圖2多頭注意力(3)MLP模塊:由兩個全連接層加上Dropout層實現(xiàn)。四、實驗所需工具和數(shù)據(jù)集數(shù)據(jù)集CIFAR-10(CanadianInstituteforAdvancedResearch-10)是一個常用的計算機視覺數(shù)據(jù)集,由60000張32*32像素的彩色圖片組成,分為10個類別,每個類別有6000張圖片。這個數(shù)據(jù)集包含飛機、汽車、鳥類、貓、鹿、狗、青蛙、馬、船和卡車等類別。其中,訓(xùn)練集包含50000張圖片,測試集包含10000張圖片。CIFAR-10是一個用于測試圖像分類算法性能的標(biāo)準(zhǔn)基準(zhǔn)數(shù)據(jù)集之一,由于圖像尺寸小且類別豐富,因此在計算資源有限的情況下,它通常用于快速驗證和原型設(shè)計。下載地址\h:\h/~kriz/cifar.html\h實驗環(huán)境一臺電腦Python3.XPyTorch深度學(xué)習(xí)框架五、實驗步驟和方法下載數(shù)據(jù)集和數(shù)據(jù)預(yù)處理構(gòu)建模型:包括Attention結(jié)構(gòu)和整體結(jié)構(gòu)Attention結(jié)構(gòu)ViT整體結(jié)構(gòu)前向MLP網(wǎng)絡(luò)模型訓(xùn)練模型驗證實驗3自動寫詩實驗?zāi)康睦斫夂驼莆昭h(huán)神經(jīng)網(wǎng)絡(luò)概念及在深度學(xué)習(xí)框架中的實現(xiàn)。掌握使用深度學(xué)習(xí)框架進行文本生成任務(wù)的基本流程:如數(shù)據(jù)讀取、構(gòu)造網(wǎng)絡(luò)、訓(xùn)練和預(yù)測等。實驗要求基于Python語言和任意一種深度學(xué)習(xí)框架(實驗指導(dǎo)書中使用Pytorch框架進行介紹),完成數(shù)據(jù)讀取、網(wǎng)絡(luò)設(shè)計、網(wǎng)絡(luò)構(gòu)建、模型訓(xùn)練和模型測試等過程,最終實現(xiàn)一個可以自動寫詩的程序。網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計要有自己的方案,不能與實驗指導(dǎo)書完全相同。隨意給出首句,如給定“湖光秋月兩相和”,輸出模型續(xù)寫的詩句。也可以根據(jù)自己的興趣,進一步實現(xiàn)寫藏頭詩(不做要求)。要求輸出的詩句盡可能地滿足漢語語法和表達習(xí)慣。實驗提供預(yù)處理后的唐詩數(shù)據(jù)集,包含57580首唐詩(在課程網(wǎng)站下載),也可以使用其他唐詩數(shù)據(jù)集。按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。實驗原理實驗使用到的網(wǎng)絡(luò)結(jié)構(gòu)主要有Embedding、LSTM以及全連接層。在Pytorch中分別定義如下:Classtorch.nn.Embedding(num_embeddings,embedding_dim,padding_idx=None,max_norm=None,norm_type=2.0,scale_grad_by_freq=False,sparse=False,_weight=None)參數(shù)介紹:num_embeddings:詞匯表的大小。embedding_dim:每個嵌入向量的維度。padding_idx:如果提供的話,輸出遇到此下標(biāo)時用零填充。max_norm:如果提供的話,會對詞嵌入進行歸一化,使它們的范數(shù)小于提供的值。norm_type:對于max_norm選項計算p范數(shù)時的p。scale_grad_by_freq:如果提供的話,會根據(jù)mini-batch中單詞頻率縮放梯度。Classtorch.nn.LSTM(input_size,hidden_size,num_layers=1,bias=True,batch_first=False,dropout=0,bidirectional=False)參數(shù)介紹:input_size:輸入的特征數(shù)目。hidden_size:隱狀態(tài)的特征數(shù)目。num_layers:LSTM的層數(shù)。bias:是否使用偏置。batch_first:是否將batch放在第一維。如果為True,那么輸入輸出的Tensor形式都是(batch,seq_len,num_features)。dropout:如果非零,則除了最后一層,每層的輸出都加個Dropout層。bidirectional:是否使用雙向LSTM。輸入:(注:以下均考慮batch_first為False)intput,形式為(seq_len,batch,input_size)。h_0,形式為(num_layers*num_directions,batch,hidden_size)。c_0,形式為(num_layers*num_directions,batch,hidden_size)。輸出: output,形式為(seq_len,batch,num_directions*hidden_size)。 h_n,形式為(num_layers*num_directions,batch,hidden_size)。 c_n,形式為(num_layers*num_directions,batch,hidden_size)。Classtorch.nn.Linear(in_features,out_features,bias=True)參數(shù):in_features:每個輸入樣本的大小。out_features:每個輸出樣本的大小。bias:默認(rèn)值True,若設(shè)置為False,這層不會學(xué)習(xí)偏置。四、實驗所用數(shù)據(jù)集及工具實驗提供預(yù)處理過的數(shù)據(jù)集,含有57580首唐詩,每首詩限定在125詞,不足125詞的以</s>填充。數(shù)據(jù)集以npz文件形式保存,包含三個部分:data:詩詞數(shù)據(jù),將詩詞中的字轉(zhuǎn)化為其在字典中的序號表示。ix2word:序號到字的映射word2ix:字到序號的映射五、實驗步驟與方法實驗可簡單地劃分為數(shù)據(jù)準(zhǔn)備、模型構(gòu)建、模型訓(xùn)練和模型預(yù)測四個步驟。數(shù)據(jù)準(zhǔn)備defprepareData(): datas=np.load("tang.npz")data=datas['data']ix2word=datas['ix2word'].item()word2ix=datas['word2ix'].item()data=torch.from_numpy(data)dataloader=DataLoader(data,batch_size=16,shuffle=True,num_workers=2) returndataloader,ix2word,word2ix模型構(gòu)建模型構(gòu)建時,需要創(chuàng)建一個繼承自nn.Module的類,在這個類的_init_()中定義網(wǎng)絡(luò)結(jié)構(gòu),在forward中定義前向傳播過程。示例中的模型相當(dāng)簡單,只有Embedding、單層LSTM、全連接層三個網(wǎng)絡(luò)層,同學(xué)們可以自行進行拓展,以獲得更好的效果。示例:classPoetryModel(nn.Module):def__init__(self,vocab_size,embedding_dim,hidden_dim):super(PoetryModel,self).__init__()self.hidden_dim=hidden_dimself.embeddings=nn.Embedding(vocab_size,embedding_dim)self.lstm=nn.LSTM(embedding_dim,self.hidden_dim,num_layers=1,batch_first=True)self.linear=nn.Linear(self.hidden_dim,vocab_size)defforward(self,input,hidden=None):embeds=self.embeddings(input)#[batch,seq_len]=>[batch,seq_len,embed_dim]batch_size,seq_len=input.size()ifhiddenisNone:h_0=input.data.new(1,batch_size,self.hidden_dim).fill_(0).float()c_0=input.data.new(1,batch_size,self.hidden_dim).fill_(0).float()else:h_0,c_0=hiddenoutput,hidden=self.lstm(embeds,(h_0,c_0))output=self.linear(output)output=output.reshape(batch_size*seq_len,-1)returnoutput,hidden模型訓(xùn)練模型訓(xùn)練包括定義模型、設(shè)置優(yōu)化器和損失函數(shù)、獲取模型輸出、計算誤差、誤差反向傳播等步驟。deftrain(dataloader,word2ix):#定義模型model=PoetryModel(len(word2ix),embedding_dim=Config.embedding_dim,hidden_dim=Config.hidden_dim)optimizer=optim.Adam(model.parameters(),lr=Config.lr)criterion=nn.CrossEntropyLoss()loss_meter=meter.AverageValueMeter()模型預(yù)測defgenerate(model,start_words,ix2word,word2ix):results=list(start_words)start_words_len=len(start_words)#第一個詞語是<START>input=t.Tensor([word2ix['<START>']]).view(1,1).long()hidden=Nonemodel.eval()withtorch.no_grad():foriinrange(Config.max_gen_len):output,hidden=model(input,hidden) #如果在給定的句首中,input為句首中的下一個字ifi<start_words_len:w=results[i]input=input.data.new([word2ix[w]]).view(1,1)#否則將output作為下一個input進行else:top_index=output.data[0].topk(1)[1][0].item()w=ix2word[top_index]results.append(w)input=input.data.new([top_index]).view(1,1)ifw=='<EOP>':delresults[-1]breakreturnresults基于Transformer的神經(jīng)機器翻譯實驗?zāi)康谋緦嶒炛荚诮榻B基于Transformer的神經(jīng)機器翻譯任務(wù);掌握使用深度學(xué)習(xí)框架搭建基于Transformer機器翻譯模型。實驗要求利用Python語言和深度學(xué)習(xí)框架(本實驗指導(dǎo)書以Pytorch為例)構(gòu)造簡單的機器翻譯模型,以實現(xiàn)英語和漢語的相互轉(zhuǎn)換。評估指標(biāo)BLEU4(BilingualEvaluationUnderstudy4)大于14。(參考文獻:\h/doi/10.3115/1073083.1073135如果選擇做此實驗作業(yè),按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。實驗原理模型結(jié)構(gòu)(舉例)采用基于Transformers的seq2seq模型,包括編解碼兩大部分,如下圖,編碼部分是由若干個相同的編碼器組成,解碼部分也是由相同個數(shù)的解碼器組成,與編碼器不同的是,每一個解碼器都會接受最后一個編碼器的輸出。圖1.編碼器-解碼器架構(gòu)模型輸入模型輸入為單個文本序列或一對文本序列(例如,[源文,譯文])?!靶蛄小笨梢允沁B續(xù)的任意跨度的文本,而不是實際語言意義上的句子,即可以是單個句子,也可以是兩個句子組合在一起。通過把給定標(biāo)記對應(yīng)的標(biāo)記嵌入、句子嵌入和位置嵌入求和來構(gòu)造其輸入表示,下圖給出了BERT模型輸入序列的可視化表示,引自《BERT:Pre-trainingofDeepBidirectionalTransformersforLanguageUnderstanding》。(請注意:本部分僅用BERT模型介紹輸入文本預(yù)處理的過程,BERT模型是一個嵌入模型,只包含文本編碼部分,不包含解碼部分,不適用于生成式任務(wù))圖2.BERT模型嵌入層架構(gòu)模型輸入包含以下細節(jié):BERT支持的序列長度最長可達512個token(token是指分詞而不是單詞,例如“Ilovenaturelanguageprocessing.”可以被分詞成“I”,“l(fā)ove”,“nature”,“l(fā)anguage”,“process”,“-ing”,“.”,具體的分規(guī)則由模型本身的詞表決定)。每個序列的第一個標(biāo)記始終會被添加為特殊分類嵌入([CLS])。該特殊標(biāo)記對應(yīng)的最終隱藏狀態(tài)(即Transformer的輸出)被用作分類任務(wù)中該序列的總表示,末尾會被添加一個[SEP]截止符,如果在一個batch中有的句子比較短,則需要添加占位符[PAD]。假設(shè)1)中的句子分別為“Iloveyou.”和“Ilovenaturelanguageprocessing.”,設(shè)定序列長度統(tǒng)一為10,那么經(jīng)過分詞后的序列表示如下:“[CLS]”,“I”,“l(fā)ove”,“you”,“.”,“[SEP]”,“[PAD]”,“[PAD]”,“[PAD]”,“[PAD]”“[CLS]”,“I”,“l(fā)ove”,“nature”,“l(fā)anguage”,“process”,“-ing”,“.”,“[PAD]”,“[PAD]”句子對被打包在一起形成一個單獨的序列,可以用兩種方法區(qū)分這些句子:方法一,我們用一個特殊標(biāo)記([SEP])將它們分開;方法二,我們給第一個句子的每個標(biāo)記添加一個可訓(xùn)練的句子A嵌入,給第二個句子的每個標(biāo)記添加一個可訓(xùn)練的句子B嵌入。對于單句輸入,我們只使用句子A嵌入。機器翻譯模型預(yù)訓(xùn)練任務(wù)機器翻譯類模型通常采用自回歸的方式來做預(yù)訓(xùn)練。通過自回歸訓(xùn)練,模型會一個詞一個詞地生成目標(biāo)語言句子,每生成一個詞時都會把前面生成的詞作為輸入,去預(yù)測目標(biāo)序列的后一個詞,通過這種循環(huán)迭代的方式,模型最終可以學(xué)習(xí)出語言間的復(fù)雜對應(yīng)關(guān)系。模型輸出當(dāng)輸入序列的隱狀態(tài)向量在模型內(nèi)部傳遞時,其維度為[bs,seq_length,hidden_dim],其中bs表示當(dāng)前訓(xùn)練或推理的批大小,也就是batch_size,seq_length表示模型當(dāng)前處理過程中句子序列的長度,也就是序列中token的個數(shù),如2a中BERT最大支持512,hidden_dim表示序列中的每個token對應(yīng)的隱狀態(tài)維度,一般基本模型為768,較大的模型為1024,大語言模型(如LLaMA)為4096??梢匀〕鲎詈笠粚咏獯a器輸出的隱狀態(tài)向量為整個模型的輸出,經(jīng)過自回歸預(yù)測頭(自回歸預(yù)測頭通常是一個前向神經(jīng)網(wǎng)絡(luò),其輸入輸出維度為[hidden_dim,vocab_size],vocab_size指的是詞表長度,旨在將輸出的隱狀態(tài)通過自回歸預(yù)測頭,再經(jīng)過softmax的歸一化,得到最有可能出現(xiàn)的單詞,作為當(dāng)前詞的預(yù)測)后送入到3.中損失函數(shù)進行訓(xùn)練;如果為推理階段,同樣需要經(jīng)過自回歸預(yù)測頭,通過計算詞表中每個詞的概率得到當(dāng)前詞的輸出。圖3.GPT-1基礎(chǔ)模型結(jié)構(gòu)與應(yīng)用實驗所用工具以及數(shù)據(jù)集本實驗主要針對中英機器翻譯,使用的數(shù)據(jù)庫來自NiuTrans提供的開源中英平行語料庫,包含中、英文各10萬條,如下圖所示。下載地址:/NiuTrans/NiuTrans.SMT/tree/master/sample-data\h數(shù)據(jù)集包含五部分:TM-training-set:TM訓(xùn)練集是用于翻譯模型訓(xùn)練的雙語數(shù)據(jù),一共提供了199630個句子對作為樣本。包含文件chinese.txt,english.txt,chinese.tree.txt,english.tree.txt,Alignment.txt。Dev-set:Dev集是包含1000個中文句子對和每個中文句子一個參考的英文對應(yīng)翻譯,包含文件:Niu.dev.txt。Test-set:測試集是包含1000個單語句子的測試數(shù)據(jù)文件Niu.test.txt。reference-set:驗證集是測試集的對應(yīng)的英文翻譯供比較使用。包含文件,Niu.test.reference。文件Alignment.txt是chinese.txt,english.txt中對應(yīng)句子的單詞對應(yīng)翻譯,例如:文件“Alignment.txt”的第105行是“0-00-12-23-24-84-95-66-46-57-10”文件“c.txt”的第105行是“愛爾蘭人過去用馬鈴薯作為主食."文件“e.txt”的第105行是“theirishusedtoliveonadietofpotatoes.”“0-1”是指中文中的“愛爾蘭”與相應(yīng)英語句子中的“irish”匹配。本實驗用到的數(shù)據(jù)集已經(jīng)做好了中文分詞,中文的數(shù)據(jù)樣例如下:北約不少飛機不得不攜返航,降低了軍事能力的使用效能,增加了戰(zhàn)斗成本每個詞之間用空格分隔,標(biāo)點符號也算作一個單詞。相應(yīng)的英文樣例如下:manynatoplaneshadtoreturntobaseladenwithmunitions,thusloweringtheefficiencyofuseofmilitarypowerandincreasingthecostsoffighting由于英語中每個單詞之間都有空格并且已經(jīng)從大寫轉(zhuǎn)化成小寫,故不需要分詞。實驗步驟和方法(本部分僅供參考)基于百度飛槳框架的實現(xiàn)可以參考:基于Transformer的機器翻譯-飛槳AIStudio星河社區(qū)()數(shù)據(jù)集加載和處理模型構(gòu)建包含encoder和decoder,需要分別構(gòu)建:Encoder中包含了若干個Encoderlayer,構(gòu)建如下:以下是decoder:以下是前向MLP模型的定義,最后是將encoder和decoder合并到一起,這樣便完成了網(wǎng)絡(luò)的構(gòu)建。訓(xùn)練和測試以上為模型訓(xùn)練部分代碼;以上為模型驗證相關(guān)代碼;以上為模型測試相關(guān)代碼,同學(xué)們可以使用測試代碼查看翻譯效果?;赮OLOv5模型的圖像目標(biāo)檢測實驗指導(dǎo)書一、實驗?zāi)康谋緦嶒炛荚谑褂肶OLOv5目標(biāo)檢測模型進行圖像中的目標(biāo)檢測。YOLOv5是一種流行的目標(biāo)檢測模型,采用了單階段(one-stage)檢測方法,具有極高的檢測速度和良好的檢測性能。(1)理解YOLOv5模型的基本原理和工作機制。(2)掌握YOLOv5模型的部署和使用方法。(3)進行基于YOLOv5模型的目標(biāo)檢測實驗,包括模型訓(xùn)練、推理和評估。二、實驗要求(1)基于Python語言和任意一種深度學(xué)習(xí)框架(實驗指導(dǎo)書中使用PyTorch框架進行介紹),從零開始完成數(shù)據(jù)讀取、網(wǎng)絡(luò)構(gòu)建、模型訓(xùn)練和模型測試等過程,最終實現(xiàn)一個可以完成基于YOLOv5模型的圖像目標(biāo)檢測的程序。(2)在自定義數(shù)據(jù)集上進行訓(xùn)練和評估,實現(xiàn)測試集檢測精度達到90%以上。(3)在規(guī)定時間內(nèi)提交實驗報告、代碼和PPT。三、YOLOv5模型原理YOLOv5主要分為輸入端,backbone、Neck和head(prediction)。backbone是NewCSP-Darknet53。Neck層為SPFF和NewCSP-PAN。Head層為YOLOv3head。YOLOv56.0版本的主要架構(gòu)如下圖所示:實驗所需工具在開始實驗之前,請確保已經(jīng)完成以下準(zhǔn)備工作:安裝Python虛擬環(huán)境(建議使用Anaconda)。安裝PyTorch和torchvision庫。下載YOLOv5源代碼包。五、實驗步驟(以下步驟為YOLOv5安裝配置及訓(xùn)練推理的詳細步驟)。注意:在運行YOLOv5前,先要安裝好Anaconda環(huán)境,具體操作可參考下述Anaconda3的安裝配置及使用教程(詳細過程):\h/article/details/118442904\h。YOLOv5官方指南\h:\h/quick\h-\hstart/\h。5.1.下載YOLOv55.1.1下載YOLOv5源碼Github地址:/ultralytics/YOLOv5命令行g(shù)itclone到本地工作目錄,等待下載完成:gitclone/ultralytics/YOLOv5YOLOv5代碼目錄架構(gòu):5.1.2下載YOLOv5預(yù)訓(xùn)練模型可以直接采用已經(jīng)初始訓(xùn)練好的權(quán)重,不需要在本機再做訓(xùn)練。下載地址:/ultralytics/YOLOv5/releases。找到最新的release,點開下面的Assets下載(.pt文件就是模型的權(quán)重文件)。下載后放到Y(jié)OLOv5源碼根目錄,或新建一個weights/目錄中使用:YOLOv5共有四種預(yù)訓(xùn)練模型權(quán)重:YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x。使用不同的預(yù)訓(xùn)練模型,效果和精度不一樣,如下圖所示:其中,YOLOv5s目標(biāo)檢測速度最快,因為其網(wǎng)絡(luò)參數(shù)最少,但相應(yīng)的,檢測效果相比是最差的。而YOLOv5x是檢測效果最好的,參數(shù)最多,但是運行時間上最慢。可以根據(jù)實際需要,例如目標(biāo)檢測場景比較看重速度,就用YOLOv5s.pt。YOLOv5模型在GPU下的效率測試數(shù)據(jù)圖:YOLOv5模型在Coco數(shù)據(jù)集的訓(xùn)練參數(shù)圖:5.2安裝部署YOLOv5模型源碼下載完后,開始安裝YOLOv5所需模塊。命令行:pipinstall-rrequirements.txt,等待安裝完成即可。如果沒有cuda默認(rèn)安裝的pytorch-cpu版,如果有g(shù)pu可以安裝GPU版:/get-started/locally/,可以提升模型運行速度。也可以打開看下requirements.txt的依賴包:5.3測試YOLOv5使用源碼中的Detect.py即可。(最新版還支持了直接通過Youtube的url進行目標(biāo)檢測。)5.3.1輸入圖像測試通過detect.py對圖像進行目標(biāo)檢測pythondetect.py--source./data/image/bus.jpg(說明:detect.py默認(rèn)使用同目錄下的YOLOv5s.pt模型,如果想用其他的權(quán)重,可以用–weights進行指定。)然后,可以在YOLOv5/runs/detect目錄下找到模型輸出結(jié)果的文件夾:接下來,查看一下源碼自帶的bus.jpg的識別效果:5.3.2Video視頻測試官方源碼自帶沒有視頻demo,我們將待測視頻放到data目錄中即可:然后,通過detect.py對視頻進行目標(biāo)檢測:pythondetect.py--sourcedata/video/dog1.mp4視頻Detect運行速度有些略慢,是因為視頻需要先轉(zhuǎn)換為圖片,再放到模型里處理。5.3.3攝像頭測試使用本機攝像頭測試YOLOv5實時檢測:pythondetect.py--source0之后就會彈出攝像頭頁面,識別到的物體會用不同顏色的方框進行標(biāo)識,同時上面會顯示名稱和概率(置信度)。如果通過攝像頭檢測出識別的物體會打印出來:比如下面的person、cell、phone等。至此,YOLOv5的安裝使用和測試流程都已經(jīng)成功實現(xiàn)。YOLOv5配置簡單,并且識別效率和速度都是很棒的。六、在自定義數(shù)據(jù)集上運行YOLOv5實際上,Github官網(wǎng)的預(yù)訓(xùn)練模型的識別率等也有一定缺陷,并不能很好的直接應(yīng)用在實際工程中,在大多數(shù)應(yīng)用中都需要重新調(diào)整,并基于相應(yīng)數(shù)據(jù)集訓(xùn)練適用于自己項目的模型。參數(shù)調(diào)優(yōu)過程一般要反復(fù)多次進行微調(diào)-訓(xùn)練-測試,最終得出符合需求較優(yōu)的HyperPara,應(yīng)用在項目中。調(diào)整超參數(shù)在data/hyps/hyp.finetune.yaml:最終主要是調(diào)整lr0(學(xué)習(xí)率)為0.0030,同時修改了epoch、batch-size,部分超參數(shù)含義:lr0:0.0032#學(xué)習(xí)率lrf:0.12#余弦退火超參數(shù)(CosineAnnealing)momentum:0.843#學(xué)習(xí)率動量weight_decay:0.00036#權(quán)重衰減系數(shù)warmup_epochs:2.0#預(yù)熱學(xué)習(xí)epochwarmup_momentum:0.5#預(yù)熱學(xué)習(xí)率動量warmup_bias_lr:0.05#預(yù)熱學(xué)習(xí)率box:0.0296#giou損失的系數(shù)cls:0.243#分類損失的系數(shù)cls_pw:0.631#分類BCELoss中正樣本的權(quán)重obj:0.301#有無物體損失的系數(shù)obj_pw:0.911#有無物體BCELoss中正樣本的權(quán)重iou_t:0.2#標(biāo)簽與anchors的iou閾值(iou-training-threshold)當(dāng)然,針對視頻圖像識別中,移動的物體識別率本身就比靜止圖像差,同時運動檢測越劇烈,偏差越大。同時還要考慮到,在測試過程中,手工拍照的數(shù)據(jù)量比較小,也可能會導(dǎo)致模型欠擬合,造成模型識別效果不良。實際圖像數(shù)據(jù)量,每個類別最好大于1500張,并且做一些圖像增強、變換等數(shù)據(jù)預(yù)處理技術(shù)來增加模型的魯棒性,防止過擬合。針對模型調(diào)優(yōu)的技巧,可參考官網(wǎng)的Tips:\h/tutorials/training\h-\htips\h-\hbest\h\hresults/\h。在進行模型測試時,無論是加載模型的速度還是對測試圖片的推理速度,都能明顯感覺到Y(jié)OLOv5速度更快,尤其是加載模型的速度,因為同樣的數(shù)據(jù)集訓(xùn)練出來的模型YOLOv5更加輕量級,模型大小減小為YOLOv3的將近四分之一。至此,YOLOv5自定義數(shù)據(jù)訓(xùn)練、測試和模型調(diào)優(yōu)都已完成。七、實驗總結(jié)本實驗旨在介紹和部署YOLOv5模型進行目標(biāo)檢測任務(wù),并評估其在自定義數(shù)據(jù)集上的性能表現(xiàn)。通過實驗完成以下主要任務(wù):7.1數(shù)據(jù)準(zhǔn)備(1)使用LableImg標(biāo)注工具對自定義數(shù)據(jù)集進行標(biāo)記。(2)將標(biāo)記的數(shù)據(jù)集拆分為訓(xùn)練集和驗證集。7.2模型訓(xùn)練(1)使用YOLOv5模型在訓(xùn)練集上進行訓(xùn)練。(2)優(yōu)化訓(xùn)練參數(shù),包括學(xué)習(xí)率、批量大小等。(3)監(jiān)控訓(xùn)練過程,記錄損失和指標(biāo)的變化。7.3模型評估(1)在驗證集上評估訓(xùn)練后的YOLOv5模型。(2)計算目標(biāo)檢測的準(zhǔn)確率、精確率、召回率和F1分?jǐn)?shù)。(3)可視化模型的檢測結(jié)果,分析模型的性能和缺陷。7.4結(jié)果分析(1)分析模型在不同類別目標(biāo)上的表現(xiàn)差異。(2)探討模型在不同尺度、角度和遮擋情況下的魯棒性?;赟egNet的街景分割實驗指導(dǎo)書一、實驗?zāi)康恼莆丈疃葘W(xué)習(xí)在計算機視覺領(lǐng)域的應(yīng)用,熟悉深度學(xué)習(xí)基礎(chǔ)知識,包括卷積神經(jīng)網(wǎng)絡(luò)和圖像分割技術(shù)。通過實踐,了解SegNet模型的基本原理,掌握模型訓(xùn)練、驗證和測試的流程,以及如何評估模型在街景分割任務(wù)上的性能。二、實驗要求利用Python語言和深度學(xué)習(xí)框架(本實驗指導(dǎo)書以Pytorch為例)構(gòu)造簡單的街景分割模型,以實現(xiàn)街景分割任務(wù)。提供評估指標(biāo)的數(shù)值,包括像素準(zhǔn)確率,平均像素準(zhǔn)確率,平均交并比等,本實驗對指標(biāo)數(shù)值不做要求。(參考文獻/pdf/1511.00561)如果選擇做此實驗作業(yè),按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。三、實驗原理模型結(jié)構(gòu)SegNet是一種用于圖像分割的深度卷積神經(jīng)網(wǎng)絡(luò)。它通過對輸入圖像進行像素級別的分類,將圖像分割為不同的類別。SegNet模型主要由編碼器(Encoder)和解碼器(Decoder)兩部分組成,編碼器負責(zé)提取圖像特征,解碼器負責(zé)將特征映射回原始圖像尺寸并進行分類。如圖1所示。圖1SegNet網(wǎng)絡(luò)結(jié)構(gòu)模型輸入SegNet的輸入是一張待分割的圖像,通常是彩色圖像。輸入圖像的尺寸可以根據(jù)具體任務(wù)和數(shù)據(jù)集而定,但通常會經(jīng)過預(yù)處理,如縮放、裁剪和歸一化,以滿足模型的輸入要求。模型輸出SegNet的輸出是對輸入圖像的像素級別的分類結(jié)果,即對每個像素點進行分類,將圖像分割為不同的類別。輸出通常是一個與輸入圖像尺寸相同的矩陣,每個像素值表示該像素所屬的類別。具體地,SegNet的解碼器輸出的是一個與輸入圖像相同大小的矩陣,其中每個像素對應(yīng)一個類別。這個矩陣可以看作是對輸入圖像的分割結(jié)果,每個像素值表示該像素所屬的類別,如道路、建筑物、汽車等。四、實驗所用工具以及數(shù)據(jù)集本實驗基于SegNet進行街景分割任務(wù)。使用的數(shù)據(jù)集是CambridgedrivingLabeledVideoDatabase(CamVid)。數(shù)據(jù)集下載地址\h:\hhttp://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/\hCamVid是一個常用的用于語義分割的數(shù)據(jù)集,特別是在自動駕駛和計算機視覺領(lǐng)域。該數(shù)據(jù)集包含來自駕駛視頻的圖像和相應(yīng)的像素級標(biāo)簽,用于將圖像中的每個像素分類為不同的類別,如道路、行人、汽車、建筑物等32個不同的類別,標(biāo)簽使用顏色編碼,每種顏色代表一個類別。該數(shù)據(jù)集包含數(shù)百個來自駕駛場景的圖像,分辨率為960x720像素。這些圖像涵蓋了不同的天氣條件、場景和路面情況。每個圖像都有相應(yīng)的像素級標(biāo)簽,用于指示每個像素的類別,如道路、行人、汽車等。五、實驗步驟和方法數(shù)據(jù)加載和處理模型構(gòu)建上述為encoder定義,接下來是decoder接下來是forward計算。訓(xùn)練和測試實驗7神經(jīng)網(wǎng)絡(luò)語言模型實驗指導(dǎo)書實驗?zāi)康恼莆昭h(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),包括LSTM等。掌握使用深度學(xué)習(xí)框架構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)模型的方法。實驗要求使用深度學(xué)習(xí)框架(本實驗指導(dǎo)書以TensorFlow為例)構(gòu)建一個規(guī)范的LSTM網(wǎng)絡(luò)。在PTB(PennTreebank)語料庫上進行神經(jīng)網(wǎng)絡(luò)語言模型的訓(xùn)練和評估,評價指標(biāo)困惑度(Perplexity,PPL)低于80。如果選擇做此實驗作業(yè),按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。實驗原理語言模型語言模型是一個為某一段詞序列分配概率的模型。它對多種自然語言處理任務(wù)都有幫助。例如,在機器翻譯任務(wù)中,需要由語言模型為系統(tǒng)輸出打分,以提高輸出目標(biāo)語言輸出的流暢性。在語音識別任務(wù)中,語言模型與聲學(xué)模型一起預(yù)測下一個詞。語言模型用來計算一個具有N個詞的詞序列概率,即:上式可知,它也可以分解成對給定前綴(一般叫做上下文)的下一詞出現(xiàn)概率的乘積。神經(jīng)語言模型就是用于估計每一個詞出現(xiàn)的條件概率的。循環(huán)神經(jīng)網(wǎng)絡(luò)循環(huán)神經(jīng)網(wǎng)絡(luò)對序列數(shù)據(jù)的處理有先天優(yōu)勢,它的結(jié)構(gòu)使網(wǎng)絡(luò)可以接受變長輸入,當(dāng)網(wǎng)絡(luò)輸入窗口被移位時,不需要重復(fù)計算。其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。我們關(guān)注某一時刻τ的損失,它就等于此時刻之前所有時間步的損失之和。例如,對于時間τ時刻的損失LτL這種在時間步上展開進行反向傳播的算法,稱為基于時間的反向傳播(Back-PropagationThroughTime,BPTT)。循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練就是通過BPTT算法進行的。圖1循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)結(jié)構(gòu)下面以圖1為例,我們將通過BPTT算法來計算RNN的參數(shù)梯度。對于每一個節(jié)點N,我們需要基于N后面的節(jié)點的梯度,遞歸地計算梯度?N?L對于時間步t輸出的梯度?o?從序列的最后時間步τ開始反向計算梯度。對于最后時間步τ,h(τ)只由o?根據(jù)這個梯度我們就可以依次計算時間步τ-1到時間步1的隱層節(jié)點的梯度。由于ht(t<τ)是同時有ot?=在得到了隱層節(jié)點的梯度后,我們就可以計算對于參數(shù)的梯度:?????其中,W(t)、U(t)、b(t)表示時刻t時,W、U、b的副本,則?W(t)長短期記憶網(wǎng)絡(luò)(LSTM)是一種具有門結(jié)構(gòu)的特殊循環(huán)神經(jīng)網(wǎng)絡(luò)。它是為了應(yīng)對長期依賴的挑戰(zhàn)而提出的。LSTM網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。圖2LSTM網(wǎng)絡(luò)結(jié)構(gòu)LSTM引入了“門”機制對細胞狀態(tài)信息進行添加或刪除,由此實現(xiàn)長程記憶?!伴T”機制由一個Sigmoid激活函數(shù)層和一個向量點乘操作組成,Sigmoid層的輸出控制了信息傳遞的比例。每個LSTM基本單元包含遺忘門、輸入門和輸出門三個門結(jié)構(gòu)。1)遺忘門LSTM通過遺忘門(forgetgate)實現(xiàn)對細胞狀態(tài)信息遺忘程度的控制,輸出當(dāng)前狀態(tài)的遺忘權(quán)重,取決于yt-1和xf2)輸入門LSTM通過輸入門(inputgate)實現(xiàn)對細胞狀態(tài)輸入接收程度的控制,輸出當(dāng)前輸入信息的接受權(quán)重,取決于yt-1和xi3)輸出門LSTM通過輸出門(outputgate)實現(xiàn)對細胞狀態(tài)輸出認(rèn)可程度的控制,輸出當(dāng)前輸出信息的認(rèn)可權(quán)重,取決于yt-1和xo4)狀態(tài)更新CCy實驗所用工具及數(shù)據(jù)集工具Anaconda、TensorFlow(Tensorflow安裝教程參考:Tensorflow官網(wǎng)、Tensorflow中文社區(qū)、/tensorflow/tensorflow)數(shù)據(jù)集PennTreebank(PTB)語料庫(下載地址:http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz)實驗步驟與方法下載語料庫數(shù)據(jù)來源于TomasMikolov網(wǎng)站上的PTB數(shù)據(jù)集。該數(shù)據(jù)集已經(jīng)預(yù)先處理過并且包含了全部的10000個不同的詞語,其中包括語句結(jié)束標(biāo)記符,以及標(biāo)記稀有詞語的特殊符號(<unk>)。加載及準(zhǔn)備數(shù)據(jù)#從文件讀入的語料庫數(shù)據(jù)上迭代生成訓(xùn)練、驗證、訓(xùn)練數(shù)據(jù)集#其中raw_data是需要將詞轉(zhuǎn)換成詞序號,方便后續(xù)處理defptb_producer(raw_data,batch_size,num_steps,name=None):with_scope(name,"PTBProducer",[raw_data,batch_size,num_steps]):raw_data=tf.convert_to_tensor(raw_data,name="raw_data",dtype=32) #將數(shù)據(jù)進行切分,去掉多余數(shù)據(jù)data_len=tf.size(raw_data)batch_len=data_len//batch_sizedata=tf.reshape(raw_data[0:batch_size*batch_len],[batch_size,batch_len])epoch_size=(batch_len-1)//num_stepsassertion=tf.assert_positive(epoch_size,message="epoch_size==0,decreasebatch_sizeornum_steps")withtf.control_dependencies([assertion]):epoch_size=tf.identity(epoch_size,name="epoch_size") #從數(shù)據(jù)中獲得批數(shù)據(jù)集i=tf.train.range_input_producer(epoch_size,shuffle=False).dequeue()x=tf.strided_slice(data,[0,i*num_steps],[batch_size,(i+1)*num_steps])x.set_shape([batch_size,num_steps])y=tf.strided_slice(data,[0,i*num_steps+1],[batch_size,(i+1)*num_steps+1])y.set_shape([batch_size,num_steps])returnx,y構(gòu)建計算圖(1)構(gòu)建LSTMwithtf.device("/cpu:0"):embedding=tf.get_variable( "embedding",[vocab_size,size],dtype=data_type())inputs=tf.nn.embedding_lookup(embedding,input_.input_data)#輸入數(shù)據(jù)接dropout層ifis_trainingandconfig.keep_prob<1:inputs=tf.nn.dropout(inputs,config.keep_prob)#為每個LSTM單元加上dropout層defmake_cell():cell=self._get_lstm_cell(config,is_training)ifis_trainingandconfig.keep_prob<1: cell=tf.contrib.rnn.DropoutWrapper( cell,output_keep_prob=config.keep_prob)returncellcell=tf.contrib.rnn.MultiRNNCell( [make_cell()for_inrange(config.num_layers)],state_is_tuple=True)#初始單元狀態(tài)為零狀態(tài)self._initial_state=cell.zero_state(config.batch_size,data_type())state=self._initial_state#構(gòu)建LSTM網(wǎng)絡(luò)outputs=[]withtf.variable_scope("RNN"):fortime_stepinrange(self.num_steps): #設(shè)置參數(shù)共享(重用) iftime_step>0:tf.get_variable_scope().reuse_variables() (cell_output,state)=cell(inputs[:,time_step,:],state) outputs.append(cell_output)output=tf.reshape(tf.concat(outputs,1),[-1,config.hidden_size])#softmax分類層softmax_w=tf.get_variable( "softmax_w",[size,vocab_size],dtype=data_type())softmax_b=tf.get_variable("softmax_b",[vocab_size],dtype=data_type())logits=tf.nn.xw_plus_b(output,softmax_w,softmax_b)#Reshapelogitstobea3-Dtensorforsequencelosslogits=tf.reshape(logits,[self.batch_size,self.num_steps,vocab_size])(2)訓(xùn)練與評估:#用在批上平均的序列損失求得損失loss=tf.contrib.seq2seq.sequence_loss( logits, input_.targets, tf.ones([self.batch_size,self.num_steps],dtype=data_type()), average_across_timesteps=False, average_across_batch=True)#每一時間步損失求和self._cost=tf.reduce_sum(loss)#求得梯度self._lr=tf.Variable(0.0,trainable=False)tvars=tf.trainable_variables()#使用全局梯度的范數(shù)進行梯度截斷grads,_=tf.clip_by_global_norm(tf.gradients(self._cost,tvars),config.max_grad_norm)optimizer=tf.train.GradientDescentOptimizer(self._lr)self._train_op=optimizer.apply_gradients(zip(grads,tvars),global_step=tf.train.get_or_create_global_step()) #更新學(xué)習(xí)率self._new_lr=tf.placeholder(tf.float32,shape=[],name="new_learning_rate")self._lr_update=tf.assign(self._lr,self._new_lr)創(chuàng)建會話,進行模型的訓(xùn)練與評估#在批數(shù)據(jù)集上運行模型defrun_epoch(session,model,eval_op=None,verbose=False):start_time=time.time()costs=0.0iters=0state=session.run(model.initial_state)fetches={"cost":model.cost,"final_state":model.final_state,}ifeval_opisnotNone:fetches["eval_op"]=eval_opforstepinrange(model.input.epoch_size):feed_dict={}fori,(c,h)inenumerate(model.initial_state):feed_dict[c]=state[i].cfeed_dict[h]=state[i].hvals=session.run(fetches,feed_dict)cost=vals["cost"]state=vals["final_state"]costs+=costiters+=model.input.num_stepsifverboseandstep%(model.input.epoch_size//10)==10:print("%.3fperplexity:%.3fspeed:%.0fwps"%(step*1.0/model.input.epoch_size,np.exp(costs/iters),iters*model.input.batch_size*max(1,FLAGS.num_gpus)/(time.time()-start_time)))returnnp.exp(costs/iters)、withtf.Graph().as_default():sv=tf.train.Supervisor(logdir=FLAGS.save_path)config_proto=tf.ConfigProto(allow_soft_placement=soft_placement)withsv.managed_session(config=config_proto)assession:foriinrange(config.max_max_epoch):lr_decay=config.lr_decay**max(i+1-config.max_epoch,0.0)m.assign_lr(session,config.learning_rate*lr_decay)print("Epoch:%dLearningrate:%.3f"%(i+1,session.run(m.lr)))train_perplexity=run_epoch(session,m,eval_op=m.train_op,verbose=True)print("Epoch:%dTrainPerplexity:%.3f"%(i+1,train_perplexity))valid_perplexity=run_epoch(session,mvalid)print("Epoch:%dValidPerplexity:%.3f"%(i+1,valid_perplexity))test_perplexity=run_epoch(session,mtest)print("TestPerplexity:%.3f"%test_perplexity)ifFLAGS.save_path:print("Savingmodelto%s."%FLAGS.save_path)sv.saver.save(session,FLAGS.save_path,global_step=sv.global_step)實驗8:基于CNN-Transformer的圖像描述實驗指導(dǎo)書實驗?zāi)康睦斫鈭D像描述生成任務(wù)的基本概念和挑戰(zhàn)。熟悉卷積神經(jīng)網(wǎng)絡(luò)(CNN)和Transformer模型的原理和應(yīng)用。學(xué)習(xí)如何將CNN和Transformer模型相結(jié)合,以提取圖像特征并生成與圖像內(nèi)容相關(guān)的自然語言描述。掌握數(shù)據(jù)預(yù)處理技術(shù),包括圖像處理和文本處理,以準(zhǔn)備適合模型輸入的數(shù)據(jù)集。學(xué)習(xí)如何構(gòu)建、訓(xùn)練和評估基于CNN-Transformers的圖像描述生成模型。實驗要求安裝深度學(xué)習(xí)框架PyTorch或TensorFlow,配置和搭建CNN和Transformer模型所需的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。構(gòu)建CNN模型作為圖像特征提取器,并加載預(yù)訓(xùn)練的權(quán)重。構(gòu)建Transformer模型作為圖像描述生成器,并將CNN模型的輸出作為輸入(或其他)。使用MSCOCO或其他合適的圖像描述數(shù)據(jù)集,確保圖像和描述文本之間具有對應(yīng)關(guān)系。同時完成數(shù)據(jù)預(yù)處理,包括使用圖像處理庫對圖像進行預(yù)處理,例如調(diào)整大小、裁剪或填充圖像;對描述文本進行文本處理,例如分詞、去除停用詞、構(gòu)建詞匯表等。數(shù)據(jù)集應(yīng)包含訓(xùn)練集和測試集,并按照一定比例進行劃分。提供評估指標(biāo)的數(shù)值,包括BLEU-1、BLEU-4、METEOR、ROUGE-L和CIDEr等,本實驗對指標(biāo)數(shù)值不做要求。如果選擇做此實驗作業(yè),按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。實驗原理卷積神經(jīng)網(wǎng)絡(luò):卷積神經(jīng)網(wǎng)絡(luò)是一種廣泛應(yīng)用于計算機視覺任務(wù)的深度學(xué)習(xí)模型。它通過一系列卷積層和池化層,有效地提取圖像的局部特征和全局特征。在圖像描述生成任務(wù)中,我們可以使用預(yù)訓(xùn)練的CNN模型,如VGGNet、ResNet等,作為圖像特征提取器。通過將圖像輸入CNN模型,可以獲得圖像的高級特征表示。如圖1所示。圖1CNN大致結(jié)構(gòu)Transformer模型:Transformer模型是一種基于自注意力機制的序列建模模型,最初提出用于機器翻譯任務(wù)。它的核心是自注意力機制,能夠在序列中建立全局的依賴關(guān)系。Transformer模型由多個編碼器層和解碼器層組成,其中編碼器負責(zé)將輸入序列編碼為上下文感知的表示,解碼器則根據(jù)編碼器的輸出和先前生成的標(biāo)記來生成下一個標(biāo)記。在圖像描述生成中,我們可以將Transformer模型應(yīng)用于從圖像特征到描述文本的映射。如圖2所示。圖2Transformer的結(jié)構(gòu)CNN-Transformers模型:CNN-Transformers模型將CNN和Transformer模型結(jié)合起來,用于圖像描述生成任務(wù)。首先,通過CNN模型對輸入圖像進行特征提取,得到圖像的高級特征表示。然后,將這些特征表示輸入到Transformer模型中,通過自注意力機制和逐層處理,將圖像特征映射到對應(yīng)的描述文本;最終,模型根據(jù)圖像內(nèi)容生成自然語言描述。如圖3所示。圖3:CNN-Transformers模型結(jié)構(gòu)(M2Transformer)在實驗中,需要對圖像和描述文本進行預(yù)處理。對于圖像,常見的預(yù)處理操作包括調(diào)整大小、裁剪或填充圖像,以確保輸入CNN模型的圖像具有一致的大小。對于描述文本,可以進行分詞、去除停用詞、構(gòu)建詞匯表等操作,以便模型能夠理解和處理文本數(shù)據(jù)。實驗所用工具及數(shù)據(jù)集深度學(xué)習(xí)框架:PyTorch:PyTorch是一個廣泛應(yīng)用于深度學(xué)習(xí)的開源框架,提供了靈活的張量操作和自動求導(dǎo)功能,適合構(gòu)建和訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型。TensorFlow:TensorFlow是另一個廣泛使用的深度學(xué)習(xí)框架,提供了強大的張量計算和高級建模工具,支持分布式訓(xùn)練和部署。數(shù)據(jù)集(以MSCOCO為例):MSCOCO(MicrosoftCommonObjectsinContext)是一個廣泛使用的圖像描述數(shù)據(jù)集,由微軟公司創(chuàng)建和維護。該數(shù)據(jù)集旨在為圖像理解和圖像生成任務(wù)提供豐富的圖像和對應(yīng)的描述文本。MSCOCO數(shù)據(jù)集的主要特點如下:數(shù)據(jù)規(guī)模:MSCOCO數(shù)據(jù)集是一個大規(guī)模的數(shù)據(jù)集,包含超過120,000張圖像。這些圖像涵蓋了多個場景和對象類別,包括人物、動物、自然風(fēng)景、日常物品等。圖像和文本對應(yīng):每張圖像都有多個人工描述文本,每個文本描述約有5至40個單詞。這些描述旨在準(zhǔn)確而詳細地描述圖像中的內(nèi)容,提供了對圖像語義的豐富理解。多樣性和復(fù)雜性:MSCOCO數(shù)據(jù)集中的圖像涵蓋了多樣化和復(fù)雜化的場景,包括多個對象的場景、遮擋、不同視角和光照條件等。這使得該數(shù)據(jù)集對于訓(xùn)練和評估復(fù)雜的圖像理解和生成模型很有挑戰(zhàn)性。標(biāo)注質(zhì)量:MSCOCO數(shù)據(jù)集的圖像和描述文本都經(jīng)過了仔細的人工標(biāo)注,以確保數(shù)據(jù)的質(zhì)量和準(zhǔn)確性。每個描述都是由多個標(biāo)注者獨立編寫的,以提供多樣化和客觀性。圖像結(jié)構(gòu):MSCOCO數(shù)據(jù)集由一組圖像組成,每個圖像都有一個唯一的標(biāo)識符(ID)。圖像存儲在一個層次目錄結(jié)構(gòu)中,每個圖像文件命名為
<image_id>.jpg。例如,ID為000000000001的圖像將被存儲為000000000001.jpg。注釋結(jié)構(gòu):每個圖像的注釋存儲在一個JSON文件中,該文件包含一個字典,具有以下鍵:info:數(shù)據(jù)集的元數(shù)據(jù),例如版本和貢獻者。licenses:與圖像相關(guān)的許可證列表。images:圖像注釋列表,其中每個注釋是一個字典,具有以下鍵:id:圖像的唯一ID。width和height:圖像的尺寸。file_name:圖像的文件名。license:圖像的許可證。flickr_url:圖像在Flickr上的URL(如果適用)。coco_url:圖像在MSCOCO網(wǎng)站上的URL。annotations:注釋對象列表,其中每個對象是一個字典,具有以下鍵:id:注釋的唯一ID。image_id:注釋所屬的圖像ID。category_id:對象類別的ID(例如人、車、狗等)。bbox:對象的邊界框坐標(biāo)(x,y,w,h)。area:對象的面積,以像素為單位。segmentation:定義對象分割掩碼的多邊形坐標(biāo)列表。iscrowd:一個標(biāo)志,指示對象是否是一個crowd(即一組對象)。categories:類別對象列表,其中每個對象是一個字典,具有以下鍵:id:類別的唯一ID。name:類別的名稱(例如人、車、狗等)。supercategory:類別的超類別(例如動物、車輛等)。MSCOCO提供了多種類型的注釋,包括:對象檢測:對象的邊界框注釋。對象分割:對象分割掩碼的多邊形注釋。圖像字幕:圖像的自然語言字幕。視覺問答:關(guān)于圖像的問題和答案。數(shù)據(jù)集劃分:MSCOCO數(shù)據(jù)集通常被劃分為三個子集:訓(xùn)練集(train2014):82,783張圖像用于訓(xùn)練。驗證集(val2014):40,504張圖像用于驗證。測試集(test2014):40,775張圖像用于測試。實驗步驟與方法數(shù)據(jù)準(zhǔn)備下載MSCOCO數(shù)據(jù)集并提取圖像和注釋。對圖像進行預(yù)處理,例如將其resize到固定大?。ɡ?24x224)并normalize像素值。樣例代碼如下:importcv2importnumpyasnp#加載原始圖像image=cv2.imread('input.jpg')#調(diào)整大小resized_image=cv2.resize(image,(224,224))#歸一化像素值normalized_image=resized_image.astype(np.float32)/255.0#打印調(diào)整大小后圖像的形狀和像素值范圍print("ResizedImageShape:",resized_image.shape)print("NormalizedImageRange:",np.min(normalized_image),"-",np.max(nor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025資陽環(huán)境科技職業(yè)學(xué)院輔導(dǎo)員考試試題及答案
- 2025西安汽車職業(yè)大學(xué)輔導(dǎo)員考試試題及答案
- 2025燕京理工學(xué)院輔導(dǎo)員考試試題及答案
- 2025蘇州大學(xué)輔導(dǎo)員考試試題及答案
- 2025科爾沁藝術(shù)職業(yè)學(xué)院輔導(dǎo)員考試試題及答案
- 2025福建醫(yī)科大學(xué)輔導(dǎo)員考試試題及答案
- T/ZHCA 001-2018化妝品美白祛斑功效測試方法
- T/ZGZS 0307-2024危險廢物經(jīng)營單位風(fēng)險評價技術(shù)導(dǎo)則
- 神經(jīng)及精神疾病的臨床生物化學(xué)檢驗
- 2025年用戶體驗設(shè)計的專業(yè)考試試卷及答案
- 水閘安全鑒定報告書
- 湖南省工程建設(shè)地方標(biāo)準(zhǔn)分布式光伏工程驗收標(biāo)準(zhǔn)
- 高等數(shù)學(xué)(第五版)課件 5.1 定積分的概念與性質(zhì)
- 武漢理工大學(xué)網(wǎng)絡(luò)教育學(xué)習(xí)導(dǎo)論期末復(fù)習(xí)題
- 小學(xué)校園防欺凌班會課件
- 山東省臨沂市蘭陵縣2025年下學(xué)期第三次考試英語試題(輔導(dǎo)班)試題含答案
- 餐飲員工手冊和規(guī)章制度
- 江蘇省徐州市2022-2023學(xué)年八下期末數(shù)學(xué)試題(原卷版)
- 特殊教育概論-期末大作業(yè)-國開-參考資料
- 2024年南京市鼓樓區(qū)小升初英語考試題庫及答案解析
- 服務(wù)質(zhì)量評價體系構(gòu)建
評論
0/150
提交評論