深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案10.4任務(wù)實(shí)施(操作參考)_第1頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案10.4任務(wù)實(shí)施(操作參考)_第2頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案10.4任務(wù)實(shí)施(操作參考)_第3頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案10.4任務(wù)實(shí)施(操作參考)_第4頁(yè)
深度學(xué)習(xí)基礎(chǔ)與實(shí)踐 教案10.4任務(wù)實(shí)施(操作參考)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

10.4任務(wù)實(shí)施10.4.1任務(wù)書(shū)人的重新識(shí)別可以看作是一個(gè)圖像檢索問(wèn)題。給定攝像頭A中的一個(gè)查詢(xún)圖像,來(lái)找到其他攝像頭中同一個(gè)人的圖像。人的重新識(shí)別的關(guān)鍵是找到一個(gè)有區(qū)別的人的表示。利用ResNet進(jìn)行行人重識(shí)別的要求如下:1)下載Market1501數(shù)據(jù),該數(shù)據(jù)包含很多行人圖片數(shù)據(jù);2)處理數(shù)據(jù)集,做好標(biāo)簽化;3)搭建合適的神經(jīng)網(wǎng)絡(luò);4)訓(xùn)練時(shí)能夠使用GPU來(lái)訓(xùn)練;5)完成測(cè)試;6)輸出demo樣本案例。10.4.2任務(wù)分組表10-2學(xué)生任務(wù)分配表班級(jí)組號(hào)指導(dǎo)老師組長(zhǎng)學(xué)號(hào)成員數(shù)量組長(zhǎng)任務(wù)組員姓名學(xué)號(hào)任務(wù)分工10.4.3獲取信息引導(dǎo)問(wèn)題1:查詢(xún)相關(guān)資料,了解ResNet相對(duì)于其它神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的主要特點(diǎn)是什么?ResNet的主要特點(diǎn)是在深度較深的網(wǎng)絡(luò)中,通過(guò)特殊的殘差塊和跨層連接的方式,使得網(wǎng)絡(luò)訓(xùn)練更加容易,使得網(wǎng)絡(luò)深度可以進(jìn)一步增加,從而獲得更好的性能表現(xiàn)。引導(dǎo)問(wèn)題2:查詢(xún)相關(guān)資料,分析實(shí)驗(yàn)中需要用到哪些資料,描述使用ResNet網(wǎng)絡(luò)完成行人重識(shí)別任務(wù)的實(shí)驗(yàn)操作順序。準(zhǔn)備資料:上網(wǎng)搜集Market-1501數(shù)據(jù)集的使用方法,如前往.au/Project/project_reid.html了解Market-1501、獲取數(shù)據(jù)集資源,學(xué)習(xí)其使用方法。通過(guò)網(wǎng)絡(luò)和本書(shū)知識(shí)準(zhǔn)備章節(jié)學(xué)習(xí)ResNet的定義和使用方法。安裝順序:準(zhǔn)備實(shí)驗(yàn)環(huán)境。下載數(shù)據(jù)集和模型。查找資料,編寫(xiě)獲取數(shù)據(jù)、建立模型、訓(xùn)練和測(cè)試的相關(guān)代碼。完成訓(xùn)練和測(cè)試,輸出最終結(jié)果。10.4.4工作實(shí)施1. 實(shí)驗(yàn)前準(zhǔn)備(1)新建項(xiàng)目。創(chuàng)建實(shí)驗(yàn)檢測(cè)路徑及文件:在實(shí)驗(yàn)環(huán)境的桌面右鍵點(diǎn)擊【創(chuàng)建文件夾(F)...】,輸入文件夾名稱(chēng)為【test12】,如圖10-48所示。打開(kāi)【test12】文件夾,會(huì)顯示其路徑為“/home/techuser/Desktop/test12”。圖10-48創(chuàng)建“test12”文件夾引導(dǎo)問(wèn)題3:查看相關(guān)資料,完成配置項(xiàng)目conda虛擬環(huán)境。請(qǐng)?jiān)斒霏h(huán)境配置過(guò)程,并記錄環(huán)境配置過(guò)程中出現(xiàn)的問(wèn)題及解決的方法。安裝過(guò)程(敘述方式描述如步驟1和2這樣描述):步驟1:雙擊桌面中的【pycharm】圖標(biāo),在彈出的界面中點(diǎn)擊【close】按鈕。步驟2:在建好的文件夾中新建一個(gè)工程,進(jìn)行如下操作:左鍵單擊左上角【file】按鈕,然后點(diǎn)擊【open】按鈕。步驟3:選擇"/home/techuser/Desktop/test12"路徑,點(diǎn)擊【ok】按鈕,在彈出框中左鍵點(diǎn)擊【ThisWindow】。步驟4:對(duì)本實(shí)驗(yàn)用到的conda虛擬環(huán)境進(jìn)行配置。左鍵點(diǎn)擊【file】,再左鍵點(diǎn)擊【Settings】。步驟5:左鍵點(diǎn)擊下圖中的【Projcet:test12】按鈕,再左鍵點(diǎn)擊【ProjectInterpreter】按鈕。步驟6:在右側(cè)的紅框處,選擇到conda的虛擬環(huán)境【Course】路徑下,左鍵點(diǎn)擊【ok】按鈕。在【pycharm】界面的右下角出現(xiàn)下圖中紅框中的內(nèi)容即為conda環(huán)境配置正確。出現(xiàn)的問(wèn)題及解決的方法:(2)新建本文所需的python文件。右鍵點(diǎn)擊pychram中的【test12】按鈕,左鍵單擊【new】,再單擊【PythonFile】按鈕,如圖10-49。在框中輸入“prepare”,如圖10-50,敲擊回車(chē),則會(huì)得到【prepare.py】文件,如圖10-51。圖10-49創(chuàng)建Python文件圖10-50為新創(chuàng)建Python文件命名圖10-51創(chuàng)建新Python文件“prepare.py”按照上面的步驟再建5個(gè)python文件。一共建6個(gè)py文件,6個(gè)py文件及其路徑分別是:“/home/techuser/Desktop/test12/prepare.py”“/home/techuser/Desktop/test12/model.py”“/home/techuser/Desktop/test12/train.py”“/home/techuser/Desktop/test12/test.py”“/home/techuser/Desktop/test12/evaluate_gpu.py”“/home/techuser/Desktop/test12/demo.py”(3)下載數(shù)據(jù)集和模型引導(dǎo)問(wèn)題4:上網(wǎng)分別搜索Market-1501數(shù)據(jù)集的下載地址,下載數(shù)據(jù)后將壓縮文件解壓到我們?cè)诘谝徊街性趐ycharm創(chuàng)建在桌面上的test12目錄中。Market-1501數(shù)據(jù)集的下載地址:/file/2765/Market.zip/file/2765/model.zip數(shù)據(jù)準(zhǔn)備在工程文件夾中創(chuàng)建并打開(kāi)“prepare.py”文件。作為下載數(shù)據(jù)以及處理加載數(shù)據(jù)的代碼文件,首先需要導(dǎo)入相應(yīng)的包:importosfromshutilimportcopyfile#導(dǎo)入處理數(shù)據(jù)所需要的包os所使用的數(shù)據(jù)集為Market1501,在下載好數(shù)據(jù)集后,需要進(jìn)一步對(duì)數(shù)據(jù)集作為處理,所以先聲明好數(shù)據(jù)集所在的位置,并且創(chuàng)建處理數(shù)據(jù)之后存放的文件夾。#將數(shù)據(jù)所在路徑更改為test12根目錄下!download_path='./Market'ifnotos.path.isdir(download_path):print('pleasechangethedownload_path')save_path=download_path+'/pytorch'ifnotos.path.isdir(save_path):os.mkdir(save_path)接著需要對(duì)數(shù)據(jù)集中每一個(gè)文件夾里面的圖片做數(shù)據(jù)處理,以query為例:#-----------------------------------------#query#query為Market數(shù)據(jù)庫(kù)中的一個(gè)圖片文件夾,此段代碼目的將其標(biāo)簽化,集合到同一個(gè)文件夾pytorchquery_path=download_path+'/query'#指定路徑為下載路徑下的query文件夾query_save_path=download_path+'/pytorch/query'#處理數(shù)據(jù)后保存在下載路徑下的pytorch文件夾中ifnotos.path.isdir(query_save_path):os.mkdir(query_save_path)#檢測(cè)是否存在query文件夾forroot,dirs,filesinos.walk(query_path,topdown=True):#開(kāi)始處理各個(gè)文件夾下面的圖片數(shù)據(jù)fornameinfiles:ifnotname[-3:]=='jpg':continueID=name.split('_')src_path=query_path+'/'+namedst_path=query_save_path+'/'+ID[0]#根據(jù)圖片ID分配文件夾ifnotos.path.isdir(dst_path):os.mkdir(dst_path)copyfile(src_path,dst_path+'/'+name)#完成對(duì)query文件夾的標(biāo)簽化引導(dǎo)問(wèn)題5:其他文件夾也需進(jìn)行如上操作。請(qǐng)完成對(duì)gt_bbox、bounding_box_test、bounding_box_train的操作代碼,其中g(shù)t_bbox的處理結(jié)果保存在pytorch/multi-query/目錄中,bounding_box_test的處理結(jié)果保存在pytorch/gallery目錄中,bounding_box_train的處理結(jié)果同時(shí)保存在pytorch/train目錄和pytorch/train_all目錄中。處理gt_bbox數(shù)據(jù)的代碼:query_path=download_path+'/gt_bbox'#fordukemtmc-reid,wedonotneedmulti-queryifos.path.isdir(query_path):query_save_path=download_path+'/pytorch/multi-query'ifnotos.path.isdir(query_save_path):os.mkdir(query_save_path)forroot,dirs,filesinos.walk(query_path,topdown=True):fornameinfiles:ifnotname[-3:]=='jpg':continueID=name.split('_')src_path=query_path+'/'+namedst_path=query_save_path+'/'+ID[0]ifnotos.path.isdir(dst_path):os.mkdir(dst_path)copyfile(src_path,dst_path+'/'+name)處理bounding_box_test數(shù)據(jù)的代碼:gallery_path=download_path+'/bounding_box_test'gallery_save_path=download_path+'/pytorch/gallery'ifnotos.path.isdir(gallery_save_path):os.mkdir(gallery_save_path)forroot,dirs,filesinos.walk(gallery_path,topdown=True):fornameinfiles:ifnotname[-3:]=='jpg':continueID=name.split('_')src_path=gallery_path+'/'+namedst_path=gallery_save_path+'/'+ID[0]ifnotos.path.isdir(dst_path):os.mkdir(dst_path)copyfile(src_path,dst_path+'/'+name)處理bounding_box_train數(shù)據(jù)的代碼:train_path=download_path+'/bounding_box_train'train_save_path=download_path+'/pytorch/train_all'ifnotos.path.isdir(train_save_path):os.mkdir(train_save_path)forroot,dirs,filesinos.walk(train_path,topdown=True):fornameinfiles:ifnotname[-3:]=='jpg':continueID=name.split('_')src_path=train_path+'/'+namedst_path=train_save_path+'/'+ID[0]ifnotos.path.isdir(dst_path):os.mkdir(dst_path)copyfile(src_path,dst_path+'/'+name)操作完畢后,打開(kāi)文件在每個(gè)subdir(例如pytorch/train/0002)中,相同ID的圖像都被安排在文件夾中?,F(xiàn)在已經(jīng)成功的準(zhǔn)備好了數(shù)據(jù),以便torchvision讀取數(shù)據(jù)。prepare.py文件中的代碼編寫(xiě)完成,需要將其運(yùn)行。構(gòu)建神經(jīng)網(wǎng)絡(luò)(model.py)引導(dǎo)問(wèn)題6:導(dǎo)入相關(guān)依賴(lài)包,以便后續(xù)函數(shù)功能的使用。因?yàn)闃?gòu)建神經(jīng)網(wǎng)絡(luò)的方法是對(duì)nn.Module進(jìn)行繼承重寫(xiě),所以首先需要導(dǎo)包。查閱資料,考慮實(shí)現(xiàn)一個(gè)ResNet網(wǎng)絡(luò)類(lèi)的定義需要用到哪些包。完善如下代碼,導(dǎo)入必要的包:#創(chuàng)建神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)需要用到以下所有的包。importtorchimporttorchimporttorch.nnasnnfromtorch.nnimportinitfromtorchvisionimportmodelsfromtorch.autogradimportVariableimportpretrainedmodels對(duì)構(gòu)建神經(jīng)網(wǎng)絡(luò)的一些參數(shù)進(jìn)行默認(rèn)賦值:#######################################################################此處代碼來(lái)聲明一個(gè)神經(jīng)網(wǎng)絡(luò)的一些默認(rèn)值。defweights_init_kaiming(m):#該方法用于給classname命名classname=m.__class__.__name__#print(classname)ifclassname.find('Conv')!=-1:#如果尋找到Conv層做以下操作init.kaiming_normal_(m.weight.data,a=0,mode='fan_in')#Foroldpytorch,youmayusekaiming_normal.elifclassname.find('Linear')!=-1:#如果尋找到Linear層作以下操作init.kaiming_normal_(m.weight.data,a=0,mode='fan_out')init.constant_(m.bias.data,0.0)elifclassname.find('BatchNorm1d')!=-1:init.normal_(m.weight.data,1.0,0.02)init.constant_(m.bias.data,0.0)defweights_init_classifier(m):classname=m.__class__.__name__ifclassname.find('Linear')!=-1:init.normal_(m.weight.data,std=0.001)init.constant_(m.bias.data,0.0)引導(dǎo)問(wèn)題7:因?yàn)槭褂肦esnet網(wǎng)絡(luò),所以首先要構(gòu)建基礎(chǔ)塊ClassBlock。請(qǐng)根據(jù)基礎(chǔ)塊的功能實(shí)現(xiàn)基礎(chǔ)塊ClassBlock類(lèi)的定義。#構(gòu)建Resnet網(wǎng)絡(luò)所使用的基礎(chǔ)塊ClassBlockclassClassBlock(nn.Module):#對(duì)Module類(lèi)進(jìn)行重構(gòu)來(lái)構(gòu)建基礎(chǔ)塊神經(jīng)網(wǎng)絡(luò)def__init__(self,input_dim,class_num,droprate,relu=False,bnorm=True,num_bottleneck=512,linear=True,return_f=False):#構(gòu)造方法,用于一些默認(rèn)的參數(shù)的傳輸super(ClassBlock,self).__init__()self.return_f=return_fadd_block=[]#定義列表add_block用于儲(chǔ)存模型的一些信息iflinear:add_block+=[nn.Linear(input_dim,num_bottleneck)]#保存Linear層中的一些信息else:num_bottleneck=input_dimifbnorm:add_block+=[nn.BatchNorm1d(num_bottleneck)]ifrelu:add_block+=[nn.LeakyReLU(0.1)]ifdroprate>0:add_block+=[nn.Dropout(p=droprate)]add_block=nn.Sequential(*add_block)add_block.apply(weights_init_kaiming)classifier=[]classifier+=[nn.Linear(num_bottleneck,class_num)]classifier=nn.Sequential(*classifier)classifier.apply(weights_init_classifier)self.add_block=add_blockself.classifier=classifierdefforward(self,x):#聲明forward方法,forward方法用于返回一些值,這些值經(jīng)過(guò)網(wǎng)絡(luò)結(jié)構(gòu)的處理x=self.add_block(x)ifself.return_f:f=xx=self.classifier(x)returnx,felse:x=self.classifier(x)returnx構(gòu)建完善基礎(chǔ)塊,再修改一下Resnet網(wǎng)絡(luò)。引導(dǎo)問(wèn)題8:Market-1501中有751個(gè)類(lèi)(不同的人),與ImageNet中的1,000個(gè)類(lèi)有所不同。對(duì)所需要的不同層的神經(jīng)網(wǎng)絡(luò)進(jìn)行修改。因此,更改模型以使用分類(lèi)器。參考Pytorch實(shí)現(xiàn)的ResNet類(lèi)的定義,對(duì)其進(jìn)行修改,使得適應(yīng)本實(shí)驗(yàn)的751個(gè)類(lèi)的輸出。classft_net(nn.Module):#對(duì)Module類(lèi)進(jìn)行重載來(lái)構(gòu)造Resnet網(wǎng)絡(luò)def__init__(self,class_num,droprate=0.5,stride=2):#構(gòu)造方法,用于傳遞一些函數(shù)的默認(rèn)參數(shù)super(ft_net,self).__init__()model_ft=models.resnet50(pretrained=True)#avgpoolingtoglobalpoolingifstride==1:model_ft.layer4[0].downsample[0].stride=(1,1)model_ft.layer4[0].conv2.stride=(1,1)model_ft.avgpool=nn.AdaptiveAvgPool2d((1,1))self.model=model_ftself.classifier=ClassBlock(2048,class_num,droprate)#利用之前構(gòu)造的基礎(chǔ)塊來(lái)聲明defforward(self,x):#準(zhǔn)備進(jìn)行構(gòu)造Resnet50的各層網(wǎng)絡(luò)結(jié)構(gòu)x=self.model.conv1(x)x=self.model.bn1(x)x=self.model.relu(x)x=self.model.maxpool(x)x=self.model.layer1(x)#第一層layer層x=self.model.layer2(x)#第二層layer層x=self.model.layer3(x)#第三層layer層x=self.model.layer4(x)#第四層layer層x=self.model.avgpool(x)#構(gòu)造五層Resnet網(wǎng)絡(luò)x=x.view(x.size(0),x.size(1))x=self.classifier(x)returnx程序會(huì)下載resnet50網(wǎng)絡(luò)的模型。對(duì)我們創(chuàng)建的網(wǎng)絡(luò)進(jìn)行測(cè)試輸出:'''#debugmodelstructure構(gòu)造完神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)之后將構(gòu)造的神經(jīng)網(wǎng)絡(luò)進(jìn)行輸出'''if__name__=='__main__':#這里顯示一個(gè)直接的方法,在進(jìn)行訓(xùn)練之前,來(lái)測(cè)試網(wǎng)絡(luò)結(jié)構(gòu)net=ft_net(751,stride=1)net.classifier=nn.Sequential()print(net)input=Variable(torch.FloatTensor(8,3,256,128))output=net(input)print('netoutputsize:')print(output.shape)引導(dǎo)問(wèn)題9:執(zhí)行該程序,會(huì)輸出我們創(chuàng)建的網(wǎng)絡(luò)模型,以及之前下載網(wǎng)絡(luò)模型的界面。完成代碼之后自行執(zhí)行一遍,在下方摘錄關(guān)鍵的輸出信息。開(kāi)始訓(xùn)練創(chuàng)建“train.py”文件來(lái)進(jìn)行訓(xùn)練。引導(dǎo)問(wèn)題10:現(xiàn)在準(zhǔn)備了訓(xùn)練數(shù)據(jù)并定義了模型結(jié)構(gòu),可以開(kāi)始訓(xùn)練,按照此模型來(lái)訓(xùn)練。pythontrain.py--gpu_ids0--nameft_ResNet50--train_all--batchsize32--data_diryour_data_path--gpu_ids要運(yùn)行哪個(gè)GPU。--name模型的名稱(chēng)。--data_dir訓(xùn)練數(shù)據(jù)的路徑。--train_all使用所有圖像進(jìn)行訓(xùn)練。--batchsize批量大小。按照上方命令行格式及參數(shù)完成train.py關(guān)鍵代碼的編寫(xiě)。見(jiàn)配套代碼資源。train.py文件編輯完成后將其運(yùn)行,將會(huì)出現(xiàn)圖10-52的結(jié)果。圖10-52CPU訓(xùn)練輸出結(jié)果假如使用GPU設(shè)備進(jìn)行訓(xùn)練,訓(xùn)練結(jié)果將如圖10-53和圖10-54所示。圖10-53GPU訓(xùn)練輸出結(jié)果(1)圖10-54GPU訓(xùn)練輸出結(jié)果(2)開(kāi)始測(cè)試創(chuàng)建test.py文件。在測(cè)試中,加載網(wǎng)絡(luò)權(quán)重(剛剛訓(xùn)練過(guò))以提取每個(gè)圖像的視覺(jué)特征。此部分功能在test.py中實(shí)現(xiàn)。首先,導(dǎo)入所需要的包:#-*-coding:utf-8-*-from__future__importprint_function,divisionimportargparseimporttorchimporttorch.nnasnnimporttorch.optimasoptimfromtorch.optimimportlr_schedulerfromtorch.autogradimportVariableimporttorch.backends.cudnnascudnnimportnumpyasnpimporttorchvisionfromtorchvisionimportdatasets,models,transformsimporttimeimportosimportscipy.ioimportyamlimportmathfrommodelimportft_net,ft_net_dense,ft_net_NAS,PCB,PCB_testfromtqdmimporttqdm#fp16try:fromapex.fp16_utilsimport*exceptImportError:#willbe3.xseries引導(dǎo)問(wèn)題11:理解train.py的工作,思考如何實(shí)現(xiàn)測(cè)試代碼,完成test.py關(guān)鍵代碼的編寫(xiě)。完成test.py關(guān)鍵代碼的編寫(xiě)。見(jiàn)配套代碼資源。(1)準(zhǔn)備test.py生成的特征文件將桌面上的pytorch_result.mat文件復(fù)制到test12文件夾下。(2)準(zhǔn)備權(quán)重文件將左面上的n

溫馨提示

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

評(píng)論

0/150

提交評(píng)論