日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Pytorch神经网络实战案例】25 (带数据增强)基于迁移学习识别多种鸟类(CUB-200数据集)

發(fā)布時(shí)間:2024/7/5 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络实战案例】25 (带数据增强)基于迁移学习识别多种鸟类(CUB-200数据集) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 數(shù)據(jù)增強(qiáng)

在目前分類效果最好的EficientNet系列模型中,EfficientNet-B7版本的模型就是使用隨機(jī)數(shù)據(jù)增強(qiáng)方法訓(xùn)練而成的。

RandAugment方法也是目前主流的數(shù)據(jù)增強(qiáng)方法,用RandAugment方法進(jìn)行訓(xùn)練,會(huì)使模型的精度得到提升。

2 RandAugment

2.1 RandAugment方法簡(jiǎn)介

RandAugment方法是一種新的數(shù)據(jù)增強(qiáng)方法,它比自動(dòng)數(shù)據(jù)增強(qiáng)(AutOAugment)方法更簡(jiǎn)單、更好用。它可以在原有的訓(xùn)練框架中,直接對(duì)AutoAugment方法進(jìn)行替換。

2.1.1 Tip

AuoAugment方法包含30多個(gè)參數(shù),可以對(duì)圖片數(shù)據(jù)進(jìn)行各種變換(參見(jiàn)arXiv網(wǎng)站上編號(hào)為1805.09501的論文)。

2.2 RandAugment方法的構(gòu)成

RandAugment方法是在AutoAugment方法的基礎(chǔ)之上,將30多個(gè)參數(shù)進(jìn)行策略級(jí)的優(yōu)化管理,使這30多個(gè)參數(shù)被簡(jiǎn)化成兩個(gè)參數(shù):圖片的N次變換和每次變換的強(qiáng)度M。其中每次變換的強(qiáng)度M,取值為0~10(只取整數(shù)),表示使原有圖片增強(qiáng)失真的大小。

RandAugment方法以結(jié)果為導(dǎo)向,使數(shù)據(jù)增強(qiáng)過(guò)程更加面向用。在減少AutoAugment的運(yùn)算消耗的同時(shí),又使增強(qiáng)的效果變得可控。詳細(xì)內(nèi)容可以參考相關(guān)論文(參見(jiàn)arXⅳ網(wǎng)站上編號(hào)為1909.13719的論文)。

2.2 代碼獲取

https://github.com/heartInsert/randaugment # 只有一個(gè)代碼文件Rand_Augment,py,將其下載后,直接引入代碼即可使用。

3 本節(jié)案例(帶有數(shù)據(jù)增強(qiáng)的識(shí)別)

3.1 案例簡(jiǎn)介

使用遷移學(xué)習(xí)對(duì)預(yù)訓(xùn)練模型進(jìn)行微調(diào)的基礎(chǔ)上實(shí)現(xiàn)數(shù)據(jù)增強(qiáng),讓其學(xué)習(xí)鳥(niǎo)類數(shù)據(jù)集,實(shí)現(xiàn)對(duì)多種鳥(niǎo)類進(jìn)行識(shí)別。

3.2 代碼實(shí)現(xiàn):load_data函數(shù)加載圖片名稱與標(biāo)簽的加載----Transfer_bird2_Augmentation.py(第1部分)

import glob import numpy as np from PIL import Image import matplotlib.pyplot as plt #plt 用于顯示圖片 import torch import torch.nn as nn import torch.optim as optim from torch.optim import lr_scheduler from torch.utils.data import Dataset,DataLoader import torchvision import torchvision.models as model from torchvision.transforms import ToPILImage import torchvision.transforms as transforms import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 1.1 實(shí)現(xiàn)load_data函數(shù)加載圖片名稱與標(biāo)簽的加載,并使用torch.utils.data接口將其封裝成程序可用的數(shù)據(jù)集類OwnDataset。 def load_dir(directory,labstart=0): # 獲取所有directory中的所有圖與標(biāo)簽# 返回path指定的文件夾所包含的文件或文件名的名稱列表strlabels = os.listdir(directory)# 對(duì)標(biāo)簽進(jìn)行排序,以便訓(xùn)練和驗(yàn)證按照相同的順序進(jìn)行:在不同的操作系統(tǒng)中,加載文件夾的順序可能不同。目錄不同的情況會(huì)導(dǎo)致在不同的操作系統(tǒng)中,模型的標(biāo)簽出現(xiàn)串位的現(xiàn)象。所以需要對(duì)文件夾進(jìn)行排序,保證其順序的一致性。strlabels.sort()# 創(chuàng)建文件標(biāo)簽列表file_labels = []for i,label in enumerate(strlabels):print(label)jpg_names = glob.glob(os.path.join(directory,label,"*.jpg"))print(jpg_names)# 加入列表file_labels.extend(zip(jpg_names, [i + labstart] * len(jpg_names)))return file_labels,strlabelsdef load_data(dataset_path): # 定義函數(shù)load_data函數(shù)完成對(duì)數(shù)據(jù)集中圖片文件名稱和標(biāo)簽的加載。# 該函數(shù)可以實(shí)現(xiàn)兩層文件夾的嵌套結(jié)構(gòu)。其中,外層結(jié)構(gòu)使用load_data函數(shù)進(jìn)行遍歷,內(nèi)層結(jié)構(gòu)使用load_dir函進(jìn)行遍歷。sub_dir = sorted(os.listdir(dataset_path)) # 跳過(guò)子文件夾:在不同的操作系統(tǒng)中,加載文件夾的順序可能不同。目錄不同的情況會(huì)導(dǎo)致在不同的操作系統(tǒng)中,模型的標(biāo)簽出現(xiàn)串位的現(xiàn)象。所以需要對(duì)文件夾進(jìn)行排序,保證其順序的一致性。start = 1 # 第0類是nonetfile_lables,tstrlabels = [],['none'] # 在制作標(biāo)簽時(shí),人為地在前面添加了一個(gè)序號(hào)為0的none類。這是一個(gè)訓(xùn)練圖文類模型的技巧,為了區(qū)分模型輸出值是0和預(yù)測(cè)值是0這兩種情況。for i in sub_dir:directory = os.path.join(dataset_path,i)if os.path.isdir(directory) == False: # 只處理文件夾中的數(shù)據(jù)print(directory)continuefile_labels,strlables = load_dir(directory,labstart=start)tfile_lables.extend(file_labels)tstrlabels.extend(strlables)start = len(strlables)# 將數(shù)據(jù)路徑與標(biāo)簽解壓縮,把數(shù)據(jù)路徑和標(biāo)簽解壓縮出來(lái)filenames,labels = zip(*tfile_lables)return filenames, labels, tstrlabels

3.3 代碼實(shí)現(xiàn):自定義數(shù)據(jù)集類OwnDataset----Transfer_bird2_Augmentation.py(第2部分)

# 1.2 實(shí)現(xiàn)自定義數(shù)據(jù)集OwnDataset def default_loader(path) : # 定義函數(shù)加載圖片return Image.open(path).convert('RGB')class OwnDataset(Dataset): # 復(fù)用性較強(qiáng),可根據(jù)自己的數(shù)據(jù)集略加修改使用# 在PyTorch中,提供了一個(gè)torch.utis.data接口,可以用來(lái)對(duì)數(shù)據(jù)集進(jìn)行封裝。在實(shí)現(xiàn)時(shí),只需要繼承torch.utis.data.Dataset類,并重載其__gettem__方法。# 在使用時(shí),框架會(huì)向__gettem__方法傳入索引index,在__gettem__方法內(nèi)部根據(jù)指定index加載數(shù)據(jù),并返回。def __init__(self,img_dir,labels,indexlist=None,transform=transforms.ToTensor(),loader=default_loader,cache=True): # 初始化self.labels = labels # 存放標(biāo)簽self.img_dir = img_dir # 樣本圖片文件名self.transform = transform # 預(yù)處理方法self.loader = loader # 加載方法self.cache = cache # 緩存標(biāo)志if indexlist is None: # 要加載的數(shù)據(jù)序列self.indexlist = list(range(len(self.img_dir)))else:self.indexlist = indexlistself.data = [None] * len(self.indexlist) # 存放樣本圖片def __getitem__(self, idx): # 加載指定索引數(shù)據(jù)if self.data[idx] is None: # 第一次加載data = self.loader(self.img_dir[self.indexlist[idx]])if self.transform:data = self.transform(data)else:data = self.data[idx]if self.cache: # 保存到緩存里self.data[idx] = datareturn data,self.labels[self.indexlist[idx]]def __len__(self): # 計(jì)算數(shù)據(jù)集長(zhǎng)度return len(self.indexlist)

3.4 代碼實(shí)戰(zhàn):測(cè)試數(shù)據(jù)集----Transfer_bird2_Augmentation.py(第3部分)【數(shù)據(jù)增強(qiáng)模塊】

# 1.3 測(cè)試數(shù)據(jù)集:在完成數(shù)據(jù)集的制作之后,編寫(xiě)代碼對(duì)其進(jìn)行測(cè)試。 # 數(shù)據(jù)增強(qiáng)模塊 from Rand_Augment import Rand_Augment data_transform = { #定義數(shù)據(jù)的預(yù)處理方法'train':transforms.Compose([Rand_Augment(), # 數(shù)據(jù)增強(qiáng)的方法帶入 僅此一處修改transforms.RandomResizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),'val':transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]), } def Reduction_img(tensor,mean,std): #還原圖片,實(shí)現(xiàn)了圖片歸一化的逆操作,顯示數(shù)據(jù)集中的原始圖片。dtype = tensor.dtypemean = torch.as_tensor(mean,dtype=dtype,device=tensor.device)std = torch.as_tensor(std,dtype=dtype,device=tensor.device)tensor.mul_(std[:,None,None]).add_(mean[:,None,None]) # 還原操作dataset_path = r'./data/cub200/' # 加載數(shù)據(jù)集路徑 filenames,labels,classes = load_data(dataset_path) # 調(diào)用load_data函數(shù)對(duì)數(shù)據(jù)集中圖片文件名稱和標(biāo)簽進(jìn)行加載,其返回對(duì)象classes中包含全部的類名。 # 打亂數(shù)據(jù)順序 # 110-115行對(duì)數(shù)據(jù)文件列表的序號(hào)進(jìn)行亂序劃分,分為測(cè)試數(shù)據(jù)集和訓(xùn)練數(shù)集兩個(gè)索引列表。該索引列表會(huì)傳入OwnDataset類做成指定的數(shù)據(jù)集。 np.random.seed(0) label_shuffle_index = np.random.permutation(len(labels)) label_train_num = (len(labels)//10) * 8 # 劃分訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集 train_list = label_shuffle_index[0:label_train_num] test_list = label_shuffle_index[label_train_num:] # 沒(méi)帶:train_dataset = OwnDataset(filenames,labels,train_list,data_transform['train'])# 實(shí)例化訓(xùn)練數(shù)據(jù)集 val_dataset = OwnDataset(filenames,labels,test_list,data_transform['val']) # 實(shí)例化測(cè)試數(shù)據(jù)集 # 實(shí)例化批次數(shù)據(jù)集:OwnDataset類所定義的數(shù)據(jù)集,其使用方法與PyTorch中的內(nèi)置數(shù)據(jù)集的使用方法完全一致,配合DataLoader接口即可生成可以進(jìn)行訓(xùn)練或測(cè)試的批次數(shù)據(jù)。具體代碼如下。 train_loader = DataLoader(dataset=train_dataset,batch_size=32,shuffle=True) val_loader = DataLoader(dataset=val_dataset,batch_size=32,shuffle=True)sample = iter(train_loader) # 獲取一批次數(shù)據(jù),進(jìn)行測(cè)試 images,labels = sample.next() print("樣本形狀",np.shape(images)) print("標(biāo)簽個(gè)數(shù)",len(classes)) mulimgs = torchvision.utils.make_grid(images[:10],nrow=10) # 拼接多張圖片 Reduction_img(mulimgs,[0.485,0.456,0.406],[0.229,0.224,0.225]) _img = ToPILImage()(mulimgs) # 將張量轉(zhuǎn)化為圖片 plt.axis('off') plt.imshow(_img) # 顯示 plt.show() print(','.join('%5s' % classes[labels[j]] for j in range(len(images[:10]))))

輸出:

樣本形狀 torch.Size([32, 3, 224, 224])
標(biāo)簽個(gè)數(shù) 6

輸出數(shù)據(jù)集中的10個(gè)圖片

3.5 代碼實(shí)戰(zhàn):獲取并改造ResNet模型----Transfer_bird2_Augmentation.py(第4部分)

# 1.4 獲取并改造ResNet模型:獲取ResNet模型,并加載預(yù)訓(xùn)練模型的權(quán)重。將其最后一層(輸出層)去掉,換成一個(gè)全新的全連接層,該全連接層的輸出節(jié)點(diǎn)數(shù)與本例分類數(shù)相同。 # 指定設(shè)備 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") print(device) # get_ResNet函數(shù),獲取預(yù)訓(xùn)練模型,可指定pretrained=True來(lái)實(shí)現(xiàn)自動(dòng)下載預(yù)訓(xùn)練模型,也可指定loadfile來(lái)從本地路徑加載預(yù)訓(xùn)練模型。 def get_ResNet(classes,pretrained=True,loadfile=None):ResNet = model.resnet101(pretrained) # 自動(dòng)下載官方的預(yù)訓(xùn)練模型if loadfile != None:ResNet.load_state_dict(torch.load(loadfile)) # 加載本地模型# 將所有的參數(shù)層進(jìn)行凍結(jié):設(shè)置模型僅最后一層可以進(jìn)行訓(xùn)練,使模型只針對(duì)最后一層進(jìn)行微調(diào)。for param in ResNet.parameters():param.requires_grad = False# 輸出全連接層的信息print(ResNet.fc)x = ResNet.fc.in_features # 獲取全連接層的輸入ResNet.fc = nn.Linear(x,len(classes)) # 定義一個(gè)新的全連接層print(ResNet.fc) # 最后輸出新的模型return ResNet ResNet = get_ResNet(classes) # 實(shí)例化模型 ResNet.to(device=device)

3.6 代碼實(shí)戰(zhàn):定義損失函數(shù)、訓(xùn)練函數(shù)及測(cè)試函數(shù),對(duì)模型的最后一層進(jìn)行微調(diào)----Transfer_bird2_Augmentation.py(第5部分)

# 1.5 定義損失函數(shù)、訓(xùn)練函數(shù)及測(cè)試函數(shù),對(duì)模型的最后一層進(jìn)行微調(diào)。 criterion = nn.CrossEntropyLoss() # 指定新加的全連接層的學(xué)習(xí)率 optimizer = torch.optim.Adam([{'params':ResNet.fc.parameters()}],lr=0.01) def train(model,device,train_loader,epoch,optimizer): # 定義訓(xùn)練函數(shù)model.train()allloss = []for batch_idx,data in enumerate(train_loader):x,y = datax = x.to(device)y = y.to(device)optimizer.zero_grad()y_hat = model(x)loss = criterion(y_hat,y)loss.backward()allloss.append(loss.item())optimizer.step()print('Train Epoch:{}\t Loss:{:.6f}'.format(epoch,np.mean(allloss))) # 輸出訓(xùn)練結(jié)果def test(model,device,val_loader): # 定義測(cè)試函數(shù)model.eval()test_loss = []correct = []with torch.no_grad(): # 使模型在運(yùn)行時(shí)不進(jìn)行梯度跟蹤,可以減少模型運(yùn)行時(shí)對(duì)內(nèi)存的占用。for i,data in enumerate(val_loader):x, y = datax = x.to(device)y = y.to(device)y_hat = model(x)test_loss.append(criterion(y_hat,y).item()) # 收集損失函數(shù)pred = y_hat.max(1,keepdim=True)[1] # 獲取預(yù)測(cè)結(jié)果correct.append(pred.eq(y.view_as(pred)).sum().item()/pred.shape[0]) # 收集精確度print('\nTest:Average loss:{:,.4f},Accuracy:({:,.0f}%)\n'.format(np.mean(test_loss),np.mean(correct)*100)) # 輸出測(cè)試結(jié)果# 遷移學(xué)習(xí)的兩個(gè)步驟如下 if __name__ == '__main__': # 遷移學(xué)習(xí)步驟①:固定預(yù)訓(xùn)練模型的特征提取部分,只對(duì)最后一層進(jìn)行訓(xùn)練,使其快速收斂。firstmodepth = './data/cub200/firstmodepth_1.pth' # 定義模型文件的地址if os.path.exists(firstmodepth) == False:print("—————————固定預(yù)訓(xùn)練模型的特征提取部分,只對(duì)最后一層進(jìn)行訓(xùn)練,使其快速收斂—————————")for epoch in range(1,2): # 迭代兩次train(ResNet,device,train_loader,epoch,optimizer)test(ResNet,device,val_loader)# 保存模型torch.save(ResNet.state_dict(),firstmodepth)

3.7 代碼實(shí)戰(zhàn):使用退化學(xué)習(xí)率對(duì)模型進(jìn)行全局微調(diào)----Transfer_bird2_Augmentation.py(第6部分)

# 1.6 使用退化學(xué)習(xí)率對(duì)模型進(jìn)行全局微調(diào) #遷移學(xué)習(xí)步驟②:使用較小的學(xué)習(xí)率,對(duì)全部模型進(jìn)行訓(xùn)練,并對(duì)每層的權(quán)重進(jìn)行細(xì)微的調(diào)節(jié),即將模型的每層權(quán)重都設(shè)為可訓(xùn)練,并定義帶有退化學(xué)習(xí)率的優(yōu)化器。(1.6部分)secondmodepth = './data/cub200/firstmodepth_2.pth'optimizer2 = optim.SGD(ResNet.parameters(),lr=0.001,momentum=0.9) # 第198行代碼定義帶有退化學(xué)習(xí)率的SGD優(yōu)化器。該優(yōu)化器常用來(lái)對(duì)模型進(jìn)行手動(dòng)微調(diào)。有實(shí)驗(yàn)表明,使用經(jīng)過(guò)手動(dòng)調(diào)節(jié)的SGD優(yōu)化器,在訓(xùn)練模型的后期效果優(yōu)于Adam優(yōu)化器。exp_lr_scheduler = lr_scheduler.StepLR(optimizer2,step_size=2,gamma=0.9) # 由于退化學(xué)習(xí)率會(huì)在訓(xùn)練過(guò)程中不斷地變小,為了防止學(xué)習(xí)率過(guò)小,最終無(wú)法進(jìn)行權(quán)重需要對(duì)其設(shè)置最小值。當(dāng)學(xué)習(xí)率低于該值時(shí),停止對(duì)退化學(xué)習(xí)率的操作。for param in ResNet.parameters(): # 所有參數(shù)設(shè)計(jì)為可訓(xùn)練param.requires_grad = Trueif os.path.exists(secondmodepth):ResNet.load_state_dict(torch.load(secondmodepth)) # 加載本地模型else:ResNet.load_state_dict(torch.load(firstmodepth)) # 加載本地模型print("____使用較小的學(xué)習(xí)率,對(duì)全部模型進(jìn)行訓(xùn)練,定義帶有退化學(xué)習(xí)率的優(yōu)化器______")for epoch in range(1,100):train(ResNet,device,train_loader,epoch,optimizer2)if optimizer2.state_dict()['param_groups'][0]['lr'] > 0.00001:exp_lr_scheduler.step()print("___lr:",optimizer2.state_dict()['param_groups'][0]['lr'])test(ResNet,device,val_loader)# 保存模型torch.save(ResNet.state_dict(),secondmodepth)

4 代碼總覽Transfer_bird2_Augmentation.py

import glob import numpy as np from PIL import Image import matplotlib.pyplot as plt #plt 用于顯示圖片 import torch import torch.nn as nn import torch.optim as optim from torch.optim import lr_scheduler from torch.utils.data import Dataset,DataLoader import torchvision import torchvision.models as model from torchvision.transforms import ToPILImage import torchvision.transforms as transforms import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 1.1 實(shí)現(xiàn)load_data函數(shù)加載圖片名稱與標(biāo)簽的加載,并使用torch.utils.data接口將其封裝成程序可用的數(shù)據(jù)集類OwnDataset。 def load_dir(directory,labstart=0): # 獲取所有directory中的所有圖與標(biāo)簽# 返回path指定的文件夾所包含的文件或文件名的名稱列表strlabels = os.listdir(directory)# 對(duì)標(biāo)簽進(jìn)行排序,以便訓(xùn)練和驗(yàn)證按照相同的順序進(jìn)行:在不同的操作系統(tǒng)中,加載文件夾的順序可能不同。目錄不同的情況會(huì)導(dǎo)致在不同的操作系統(tǒng)中,模型的標(biāo)簽出現(xiàn)串位的現(xiàn)象。所以需要對(duì)文件夾進(jìn)行排序,保證其順序的一致性。strlabels.sort()# 創(chuàng)建文件標(biāo)簽列表file_labels = []for i,label in enumerate(strlabels):print(label)jpg_names = glob.glob(os.path.join(directory,label,"*.jpg"))print(jpg_names)# 加入列表file_labels.extend(zip(jpg_names, [i + labstart] * len(jpg_names)))return file_labels,strlabelsdef load_data(dataset_path): # 定義函數(shù)load_data函數(shù)完成對(duì)數(shù)據(jù)集中圖片文件名稱和標(biāo)簽的加載。# 該函數(shù)可以實(shí)現(xiàn)兩層文件夾的嵌套結(jié)構(gòu)。其中,外層結(jié)構(gòu)使用load_data函數(shù)進(jìn)行遍歷,內(nèi)層結(jié)構(gòu)使用load_dir函進(jìn)行遍歷。sub_dir = sorted(os.listdir(dataset_path)) # 跳過(guò)子文件夾:在不同的操作系統(tǒng)中,加載文件夾的順序可能不同。目錄不同的情況會(huì)導(dǎo)致在不同的操作系統(tǒng)中,模型的標(biāo)簽出現(xiàn)串位的現(xiàn)象。所以需要對(duì)文件夾進(jìn)行排序,保證其順序的一致性。start = 1 # 第0類是nonetfile_lables,tstrlabels = [],['none'] # 在制作標(biāo)簽時(shí),人為地在前面添加了一個(gè)序號(hào)為0的none類。這是一個(gè)訓(xùn)練圖文類模型的技巧,為了區(qū)分模型輸出值是0和預(yù)測(cè)值是0這兩種情況。for i in sub_dir:directory = os.path.join(dataset_path,i)if os.path.isdir(directory) == False: # 只處理文件夾中的數(shù)據(jù)print(directory)continuefile_labels,strlables = load_dir(directory,labstart=start)tfile_lables.extend(file_labels)tstrlabels.extend(strlables)start = len(strlables)# 將數(shù)據(jù)路徑與標(biāo)簽解壓縮,把數(shù)據(jù)路徑和標(biāo)簽解壓縮出來(lái)filenames,labels = zip(*tfile_lables)return filenames, labels, tstrlabels# 1.2 實(shí)現(xiàn)自定義數(shù)據(jù)集OwnDataset def default_loader(path) : # 定義函數(shù)加載圖片return Image.open(path).convert('RGB')class OwnDataset(Dataset): # 復(fù)用性較強(qiáng),可根據(jù)自己的數(shù)據(jù)集略加修改使用# 在PyTorch中,提供了一個(gè)torch.utis.data接口,可以用來(lái)對(duì)數(shù)據(jù)集進(jìn)行封裝。在實(shí)現(xiàn)時(shí),只需要繼承torch.utis.data.Dataset類,并重載其__gettem__方法。# 在使用時(shí),框架會(huì)向__gettem__方法傳入索引index,在__gettem__方法內(nèi)部根據(jù)指定index加載數(shù)據(jù),并返回。def __init__(self,img_dir,labels,indexlist=None,transform=transforms.ToTensor(),loader=default_loader,cache=True): # 初始化self.labels = labels # 存放標(biāo)簽self.img_dir = img_dir # 樣本圖片文件名self.transform = transform # 預(yù)處理方法self.loader = loader # 加載方法self.cache = cache # 緩存標(biāo)志if indexlist is None: # 要加載的數(shù)據(jù)序列self.indexlist = list(range(len(self.img_dir)))else:self.indexlist = indexlistself.data = [None] * len(self.indexlist) # 存放樣本圖片def __getitem__(self, idx): # 加載指定索引數(shù)據(jù)if self.data[idx] is None: # 第一次加載data = self.loader(self.img_dir[self.indexlist[idx]])if self.transform:data = self.transform(data)else:data = self.data[idx]if self.cache: # 保存到緩存里self.data[idx] = datareturn data,self.labels[self.indexlist[idx]]def __len__(self): # 計(jì)算數(shù)據(jù)集長(zhǎng)度return len(self.indexlist)# 1.3 測(cè)試數(shù)據(jù)集:在完成數(shù)據(jù)集的制作之后,編寫(xiě)代碼對(duì)其進(jìn)行測(cè)試。 # 數(shù)據(jù)增強(qiáng)模塊 from Rand_Augment import Rand_Augment data_transform = { #定義數(shù)據(jù)的預(yù)處理方法'train':transforms.Compose([Rand_Augment(), # 數(shù)據(jù)增強(qiáng)的方法帶入 僅此一處修改transforms.RandomResizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),'val':transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]), } def Reduction_img(tensor,mean,std): #還原圖片,實(shí)現(xiàn)了圖片歸一化的逆操作,顯示數(shù)據(jù)集中的原始圖片。dtype = tensor.dtypemean = torch.as_tensor(mean,dtype=dtype,device=tensor.device)std = torch.as_tensor(std,dtype=dtype,device=tensor.device)tensor.mul_(std[:,None,None]).add_(mean[:,None,None]) # 還原操作dataset_path = r'./data/cub200/' # 加載數(shù)據(jù)集路徑 filenames,labels,classes = load_data(dataset_path) # 調(diào)用load_data函數(shù)對(duì)數(shù)據(jù)集中圖片文件名稱和標(biāo)簽進(jìn)行加載,其返回對(duì)象classes中包含全部的類名。 # 打亂數(shù)據(jù)順序 # 110-115行對(duì)數(shù)據(jù)文件列表的序號(hào)進(jìn)行亂序劃分,分為測(cè)試數(shù)據(jù)集和訓(xùn)練數(shù)集兩個(gè)索引列表。該索引列表會(huì)傳入OwnDataset類做成指定的數(shù)據(jù)集。 np.random.seed(0) label_shuffle_index = np.random.permutation(len(labels)) label_train_num = (len(labels)//10) * 8 # 劃分訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集 train_list = label_shuffle_index[0:label_train_num] test_list = label_shuffle_index[label_train_num:] # 沒(méi)帶:train_dataset = OwnDataset(filenames,labels,train_list,data_transform['train'])# 實(shí)例化訓(xùn)練數(shù)據(jù)集 val_dataset = OwnDataset(filenames,labels,test_list,data_transform['val']) # 實(shí)例化測(cè)試數(shù)據(jù)集 # 實(shí)例化批次數(shù)據(jù)集:OwnDataset類所定義的數(shù)據(jù)集,其使用方法與PyTorch中的內(nèi)置數(shù)據(jù)集的使用方法完全一致,配合DataLoader接口即可生成可以進(jìn)行訓(xùn)練或測(cè)試的批次數(shù)據(jù)。具體代碼如下。 train_loader = DataLoader(dataset=train_dataset,batch_size=32,shuffle=True) val_loader = DataLoader(dataset=val_dataset,batch_size=32,shuffle=True)sample = iter(train_loader) # 獲取一批次數(shù)據(jù),進(jìn)行測(cè)試 images,labels = sample.next() print("樣本形狀",np.shape(images)) print("標(biāo)簽個(gè)數(shù)",len(classes)) mulimgs = torchvision.utils.make_grid(images[:10],nrow=10) # 拼接多張圖片 Reduction_img(mulimgs,[0.485,0.456,0.406],[0.229,0.224,0.225]) _img = ToPILImage()(mulimgs) # 將張量轉(zhuǎn)化為圖片 plt.axis('off') plt.imshow(_img) # 顯示 plt.show() print(','.join('%5s' % classes[labels[j]] for j in range(len(images[:10]))))# 1.4 獲取并改造ResNet模型:獲取ResNet模型,并加載預(yù)訓(xùn)練模型的權(quán)重。將其最后一層(輸出層)去掉,換成一個(gè)全新的全連接層,該全連接層的輸出節(jié)點(diǎn)數(shù)與本例分類數(shù)相同。 # 指定設(shè)備 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") print(device) # get_ResNet函數(shù),獲取預(yù)訓(xùn)練模型,可指定pretrained=True來(lái)實(shí)現(xiàn)自動(dòng)下載預(yù)訓(xùn)練模型,也可指定loadfile來(lái)從本地路徑加載預(yù)訓(xùn)練模型。 def get_ResNet(classes,pretrained=True,loadfile=None):ResNet = model.resnet101(pretrained) # 自動(dòng)下載官方的預(yù)訓(xùn)練模型if loadfile != None:ResNet.load_state_dict(torch.load(loadfile)) # 加載本地模型# 將所有的參數(shù)層進(jìn)行凍結(jié):設(shè)置模型僅最后一層可以進(jìn)行訓(xùn)練,使模型只針對(duì)最后一層進(jìn)行微調(diào)。for param in ResNet.parameters():param.requires_grad = False# 輸出全連接層的信息print(ResNet.fc)x = ResNet.fc.in_features # 獲取全連接層的輸入ResNet.fc = nn.Linear(x,len(classes)) # 定義一個(gè)新的全連接層print(ResNet.fc) # 最后輸出新的模型return ResNet ResNet = get_ResNet(classes) # 實(shí)例化模型 ResNet.to(device=device)# 1.5 定義損失函數(shù)、訓(xùn)練函數(shù)及測(cè)試函數(shù),對(duì)模型的最后一層進(jìn)行微調(diào)。 criterion = nn.CrossEntropyLoss() # 指定新加的全連接層的學(xué)習(xí)率 optimizer = torch.optim.Adam([{'params':ResNet.fc.parameters()}],lr=0.01) def train(model,device,train_loader,epoch,optimizer): # 定義訓(xùn)練函數(shù)model.train()allloss = []for batch_idx,data in enumerate(train_loader):x,y = datax = x.to(device)y = y.to(device)optimizer.zero_grad()y_hat = model(x)loss = criterion(y_hat,y)loss.backward()allloss.append(loss.item())optimizer.step()print('Train Epoch:{}\t Loss:{:.6f}'.format(epoch,np.mean(allloss))) # 輸出訓(xùn)練結(jié)果def test(model,device,val_loader): # 定義測(cè)試函數(shù)model.eval()test_loss = []correct = []with torch.no_grad(): # 使模型在運(yùn)行時(shí)不進(jìn)行梯度跟蹤,可以減少模型運(yùn)行時(shí)對(duì)內(nèi)存的占用。for i,data in enumerate(val_loader):x, y = datax = x.to(device)y = y.to(device)y_hat = model(x)test_loss.append(criterion(y_hat,y).item()) # 收集損失函數(shù)pred = y_hat.max(1,keepdim=True)[1] # 獲取預(yù)測(cè)結(jié)果correct.append(pred.eq(y.view_as(pred)).sum().item()/pred.shape[0]) # 收集精確度print('\nTest:Average loss:{:,.4f},Accuracy:({:,.0f}%)\n'.format(np.mean(test_loss),np.mean(correct)*100)) # 輸出測(cè)試結(jié)果# 遷移學(xué)習(xí)的兩個(gè)步驟如下 if __name__ == '__main__': # 遷移學(xué)習(xí)步驟①:固定預(yù)訓(xùn)練模型的特征提取部分,只對(duì)最后一層進(jìn)行訓(xùn)練,使其快速收斂。firstmodepth = './data/cub200/firstmodepth_1.pth' # 定義模型文件的地址if os.path.exists(firstmodepth) == False:print("—————————固定預(yù)訓(xùn)練模型的特征提取部分,只對(duì)最后一層進(jìn)行訓(xùn)練,使其快速收斂—————————")for epoch in range(1,2): # 迭代兩次train(ResNet,device,train_loader,epoch,optimizer)test(ResNet,device,val_loader)# 保存模型torch.save(ResNet.state_dict(),firstmodepth) # 1.6 使用退化學(xué)習(xí)率對(duì)模型進(jìn)行全局微調(diào) #遷移學(xué)習(xí)步驟②:使用較小的學(xué)習(xí)率,對(duì)全部模型進(jìn)行訓(xùn)練,并對(duì)每層的權(quán)重進(jìn)行細(xì)微的調(diào)節(jié),即將模型的每層權(quán)重都設(shè)為可訓(xùn)練,并定義帶有退化學(xué)習(xí)率的優(yōu)化器。(1.6部分)secondmodepth = './data/cub200/firstmodepth_2.pth'optimizer2 = optim.SGD(ResNet.parameters(),lr=0.001,momentum=0.9) # 第198行代碼定義帶有退化學(xué)習(xí)率的SGD優(yōu)化器。該優(yōu)化器常用來(lái)對(duì)模型進(jìn)行手動(dòng)微調(diào)。有實(shí)驗(yàn)表明,使用經(jīng)過(guò)手動(dòng)調(diào)節(jié)的SGD優(yōu)化器,在訓(xùn)練模型的后期效果優(yōu)于Adam優(yōu)化器。exp_lr_scheduler = lr_scheduler.StepLR(optimizer2,step_size=2,gamma=0.9) # 由于退化學(xué)習(xí)率會(huì)在訓(xùn)練過(guò)程中不斷地變小,為了防止學(xué)習(xí)率過(guò)小,最終無(wú)法進(jìn)行權(quán)重需要對(duì)其設(shè)置最小值。當(dāng)學(xué)習(xí)率低于該值時(shí),停止對(duì)退化學(xué)習(xí)率的操作。for param in ResNet.parameters(): # 所有參數(shù)設(shè)計(jì)為可訓(xùn)練param.requires_grad = Trueif os.path.exists(secondmodepth):ResNet.load_state_dict(torch.load(secondmodepth)) # 加載本地模型else:ResNet.load_state_dict(torch.load(firstmodepth)) # 加載本地模型print("____使用較小的學(xué)習(xí)率,對(duì)全部模型進(jìn)行訓(xùn)練,定義帶有退化學(xué)習(xí)率的優(yōu)化器______")for epoch in range(1,100):train(ResNet,device,train_loader,epoch,optimizer2)if optimizer2.state_dict()['param_groups'][0]['lr'] > 0.00001:exp_lr_scheduler.step()print("___lr:",optimizer2.state_dict()['param_groups'][0]['lr'])test(ResNet,device,val_loader)# 保存模型torch.save(ResNet.state_dict(),secondmodepth)

總結(jié)

以上是生活随笔為你收集整理的【Pytorch神经网络实战案例】25 (带数据增强)基于迁移学习识别多种鸟类(CUB-200数据集)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产综合激情 | 精品国产激情 | 色综合天天爱 | 成人一级影视 | 国产精品久久久久久久久久ktv | 69精品视频在线观看 | 2019天天干夜夜操 | 操操色| 国产福利精品视频 | 日韩二区三区在线 | 91精品国产一区二区在线观看 | 在线欧美中文字幕 | 免费看片在线观看 | 中文字幕在线观看免费高清完整版 | 国产精品久久久久久电影 | 黄色软件在线观看免费 | 国产日韩欧美在线看 | 久久精品亚洲一区二区三区观看模式 | 国产精品麻豆91 | 亚洲黑丝少妇 | 久久av免费电影 | 在线观看韩国av | av短片在线 | 色搞搞| 婷婷色站| 久久中文网 | 亚洲综合婷婷 | 在线看福利av | 97在线观视频免费观看 | 欧美日韩一区二区在线 | 亚洲精品网址在线观看 | 久久avav | 国产精品久久av | 精品成人网| 欧美日韩免费一区二区 | 午夜精品一二三区 | 97精品国产97久久久久久久久久久久 | 狠狠色2019综合网 | 国产精品丝袜久久久久久久不卡 | 中文字幕在线一区二区三区 | 国产高清视频在线播放 | 最新av电影网址 | 婷婷在线视频观看 | 91色偷偷 | 亚洲国产欧美在线人成大黄瓜 | 欧美日韩国产成人 | 国产一区二区精品 | 五月天激情开心 | 国产精品原创av片国产免费 | 人人爽网站 | 91最新在线观看 | 国产91精品一区二区麻豆网站 | 久久久婷 | 成人性生交大片免费看中文网站 | 一级黄色片在线观看 | 午夜私人影院久久久久 | 福利视频导航网址 | 最近高清中文字幕 | 欧美久久久一区二区三区 | 国产精品18久久久久vr手机版特色 | 成人91在线 | 国产亚洲精品久久网站 | 日韩精品在线播放 | 久久久久高清毛片一级 | 亚洲成人av影片 | 狠狠干美女| 在线国产能看的 | 日韩午夜视频在线观看 | 国产99久久 | 国产精品成人自拍 | 91成年人网站 | 国产黄在线播放 | 国产成人精品一区二区三区福利 | 欧美精品一区二区在线播放 | 一色屋精品视频在线观看 | 四虎成人免费观看 | 一区二区三区手机在线观看 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 玖玖爱在线观看 | 日韩天堂在线观看 | 五月婷婷丁香综合 | 伊人天天狠天天添日日拍 | 久久男人中文字幕资源站 | 欧美精品在线观看免费 | 久久久久久久久免费视频 | 国产精品淫片 | 精品国产理论 | 色资源中文字幕 | 欧美有色| 日韩视频区 | 五月丁色 | 九九在线视频免费观看 | 国产精品久久三 | 免费黄色a级毛片 | 国产精品精品久久久久久 | 国产成人精品一区在线 | 综合亚洲视频 | 精品字幕 | 亚洲欧美日韩一二三区 | av久久在线 | 国产精品久久久777 成人手机在线视频 | 久久综合九色 | 亚洲视屏在线播放 | 成人免费观看视频网站 | 久久五月精品 | 久久午夜影视 | 亚洲一区 影院 | 欧美另类69 | 日本二区三区在线 | 在线亚洲小视频 | 成人va在线观看 | 国产一级二级三级在线观看 | 婷五月激情 | 欧美午夜一区二区福利视频 | www.国产毛片| 日韩av视屏在线观看 | 亚州激情视频 | 国产不卡视频在线 | 在线精品播放 | 色偷偷网站视频 | 青青射 | 亚洲天堂精品 | 97电影在线看视频 | 久久精品日韩 | 91成人在线看 | 一区二区 不卡 | 2019中文| 91黄色小网站 | 成人h在线观看 | 天天射天天 | 五月天六月丁香 | 91插插插网站 | 日韩乱色精品一区二区 | 国产精品美女久久久久久久久久久 | 亚洲人av免费网站 | 91久久久久久久一区二区 | 尤物九九久久国产精品的分类 | 狠狠亚洲 | 国产精品网站 | 中文一区在线 | 在线观看免费色 | 午夜视频在线观看欧美 | 日韩美女黄色片 | 久久艹影院 | 日韩欧美电影在线观看 | 综合色天天 | 成人毛片一区二区三区 | 人人爽爽人人 | 亚洲免费av网站 | 在线免费观看涩涩 | 国内精品福利视频 | 毛片随便看 | 国产资源站 | 久久精品牌麻豆国产大山 | 国产精品日韩精品 | 午夜精品一区二区三区在线观看 | 99精品欧美一区二区三区黑人哦 | 国产精品手机在线 | 看av免费 | 国产成人91 | 国产亚洲精品成人av久久ww | 亚洲一级黄色 | 久久久99国产精品免费 | 天天天干天天射天天天操 | 国产精品久久电影网 | 久久久久久久毛片 | 国产又粗又硬又爽的视频 | 中文在线a∨在线 | 国产在线最新 | 97精品国产97久久久久久春色 | 免费在线观看成人av | 成人影片免费 | 噜噜色官网 | 伊人精品在线 | 久久国产一区二区三区 | 免费国产在线精品 | www,黄视频 | 欧美久久久久久久久久久久久 | 亚洲午夜在线视频 | 亚洲精品在线国产 | 欧美精品一区在线 | v片在线播放 | 又爽又黄又无遮挡网站动态图 | 久久精品欧美一区 | 久久a免费视频 | 久久在线视频在线 | 蜜臀av一区二区 | 欧美激情视频一区 | av资源免费在线观看 | 一色屋精品视频在线观看 | 国产特级毛片 | 蜜臀av性久久久久av蜜臀妖精 | 国产亚洲人成网站在线观看 | 国产女人免费看a级丨片 | 久久久久久久久久久免费视频 | 夜夜爽夜夜操 | 成人黄色大片网站 | 天堂麻豆 | 99视频免费看 | 天天天天射 | 免费高清男女打扑克视频 | 亚洲午夜精品一区 | 成人观看视频 | av成人免费观看 | a'aaa级片在线观看 | 欧美日韩免费看 | 国产伦精品一区二区三区在线 | 日韩精品欧美专区 | 国产亚洲无 | 久久久精品国产一区二区三区 | 国产伦精品一区二区三区… | 一区二区 不卡 | 国产小视频精品 | 欧美日韩国产在线观看 | 波多野结衣资源 | 国产日韩在线看 | 久久久久福利视频 | 国产精品成人久久久 | 亚洲精品视频在线观看免费视频 | 婷婷五天天在线视频 | 国产午夜一级毛片 | 久久在线视频精品 | 免费视频一区 | 日狠狠| 亚洲精品国产高清 | 中文免费 | 欧美国产视频在线 | 西西www4444大胆在线 | 91精品综合在线观看 | 久久综合影音 | 成年人免费电影在线观看 | 最近最新中文字幕 | 夜夜躁狠狠躁日日躁 | 久久网站av | 欧美日韩高清在线 | 999久久久免费精品国产 | 亚洲精品乱码久久久久 | 黄色aa久久 | 伊人久久婷婷 | 五月婷婷免费 | 91成人免费电影 | 91成人免费 | 蜜臀av一区| 中文字幕在线观看第一区 | a黄色大片| 国产 视频 久久 | 精品五月天 | 91麻豆精品国产91久久久使用方法 | 2018亚洲男人天堂 | 国产婷婷 | 人人插人人射 | 欧美二区在线播放 | 91一区啪爱嗯打偷拍欧美 | 欧美不卡视频在线 | 国产免费一区二区三区网站免费 | 亚洲最大av网站 | 99久久精品免费看国产 | 中文字幕在线免费观看视频 | 成人午夜免费剧场 | 国产精品第一页在线观看 | 欧美极品xxx| 在线亚洲欧美日韩 | 日韩在线电影观看 | 午夜av剧场 | 日本高清中文字幕有码在线 | 久久免费av电影 | 色的网站在线观看 | 亚洲国产日韩欧美在线 | 日韩欧美精品在线观看 | 天天草av | 欧美精品视 | 亚洲男人天堂2018 | 日韩av电影中文字幕在线观看 | 超碰97.com | 国产无遮挡猛进猛出免费软件 | 国产成人久| 91手机视频在线 | 丁香六月激情婷婷 | 日日夜夜免费精品 | 婷婷丁香导航 | 中文字幕日韩有码 | 国产精品久久 | 天堂入口网站 | 日本爱爱片 | 国产精品手机播放 | 国产福利精品一区二区 | 久久国产精品99久久久久久老狼 | 久草视频在线免费看 | 亚洲精品在线免费观看视频 | 欧美日韩在线视频一区二区 | 一区二区欧美激情 | 日日爽夜夜操 | 青青色影院 | 国产1区2区3区精品美女 | 中文字幕在线观看完整 | 91字幕| 久青草电影 | 日韩在线首页 | 九九九热精品 | 亚洲成av | 国产成人精品一区二区三区网站观看 | 久久手机免费观看 | 色婷婷综合在线 | 久久久久久久久久电影 | 国产精品乱码久久 | 国产精品99爱 | 亚洲国产久 | av再线观看 | 开心激情五月婷婷 | 黄色一级在线视频 | 91在线精品秘密一区二区 | 91自拍视频在线 | 婷婷5月激情5月 | 在线99视频 | 亚洲国产精品va在线看 | 探花视频在线版播放免费观看 | 97超碰资源总站 | 天天搞天天干 | 91干干干| 国产精品久久久久久久久久久免费 | 久色婷婷 | 97网在线观看 | 亚洲涩涩涩 | 欧美激情视频免费看 | 国产在线观看 | 99久久一区 | www.av免费 | 婷婷丁香色 | 国产黄色在线看 | 国产精品完整版 | 精品国产欧美一区二区 | 欧美二区视频 | 亚洲人成网站精品片在线观看 | 久久精品久久久久电影 | 91久久影院 | 久久a久久 | 日本h视频在线观看 | 亚洲涩涩涩涩涩涩 | 中文字幕在线免费播放 | 亚洲极色| 中文字幕在线免费观看视频 | 国产亚洲精品久久久久秋 | 最近字幕在线观看第一季 | 欧美专区国产专区 | 韩国一区二区av | 天天操天天摸天天爽 | 最近中文字幕在线中文高清版 | 色综合天天天天做夜夜夜夜做 | 欧美成人视 | 国产乱码精品一区二区蜜臀 | 91精品国产91p65 | 69亚洲视频 | 成年人视频在线免费 | 国产精品免费久久久久 | 国产精品欧美激情在线观看 | 久久久精品在线观看 | 日韩av高清| 天天干天天操av | 99热超碰在线| 女人18毛片90分钟 | 欧美精品亚洲精品 | 国产亚洲资源 | 欧美在线aa| 456免费视频 | 免费看的黄色片 | 精品九九九九 | 国产资源中文字幕 | 精品在线小视频 | 国产97av| 播五月综合 | 亚洲欧美日韩国产一区二区三区 | 亚洲精品欧美精品 | 久久国内精品99久久6app | 在线看黄色的网站 | 久久69精品 | 99视频网址 | 中文字幕在线免费观看视频 | 91正在播放| 精品一区二区日韩 | 久久久久久久久久久久国产精品 | 9热精品 | 99精品视频免费全部在线 | 超碰在线97国产 | 欧美aa在线 | 国产福利在线免费 | 成人在线视频观看 | 日韩欧美网址 | 国产精品毛片一区视频播 | 午夜久久影视 | 国产在线不卡精品 | 国产精品午夜免费福利视频 | 亚洲国产精品成人va在线观看 | 亚洲理论在线观看电影 | 久久婷婷影视 | 国产精品激情偷乱一区二区∴ | 久久不见久久见免费影院 | 中文字幕文字幕一区二区 | 亚洲精品视频久久 | 欧美日韩午夜爽爽 | 国产黄色片一级 | 国产高清在线 | 成人在线你懂得 | 免费在线观看日韩视频 | 亚洲自拍偷拍色图 | 亚洲视频1区2区 | 亚洲一级黄色大片 | 成年人国产在线观看 | 91在线视频免费 | 亚洲午夜久久久久久久久电影网 | 亚洲精品网页 | 日韩大片在线免费观看 | 狠狠网| 日韩在线免费看 | 久久99精品视频 | 天天操夜夜想 | 国产香蕉视频 | 四虎影视8848dvd| 日日噜噜噜噜夜夜爽亚洲精品 | www.com久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 日日操日日操 | 精品久久久久久久久久 | 久久久久人人 | 久久久91精品国产一区二区精品 | 国产手机视频在线播放 | bbbbb女女女女女bbbbb国产 | 成人久久18免费网站麻豆 | 欧美成人理伦片 | 欧美中文字幕第一页 | 9999在线视频 | 色黄久久久久久 | 91色在线观看视频 | 国产精品九九久久99视频 | 成人免费在线播放视频 | 99视频在线看 | 亚洲一区二区视频在线播放 | 国产精品视频永久免费播放 | 午夜国产福利在线观看 | 精品三级av | 国产免费视频一区二区裸体 | 精品久久久久久久久久久久久久久久 | 国产青草视频在线观看 | 色狠狠干 | 欧美性色黄 | 精品女同一区二区三区在线观看 | 99久久9 | www国产精品com | 99久久久精品 | 99精品热视频只有精品10 | 亚洲人久久 | 国产午夜精品福利视频 | 中文资源在线观看 | 欧美日韩在线观看一区二区三区 | 日韩99热 | 91精品国产一区二区三区 | 91自拍视频在线观看 | 在线免费黄网站 | 久久8| 久久国产一区 | 久久国产精品免费视频 | 日日干夜夜爱 | 亚洲日韩精品欧美一区二区 | 97视频人人澡人人爽 | 国产亚洲视频在线免费观看 | 天天插夜夜操 | 国产女人40精品一区毛片视频 | 97视频免费播放 | 日韩三区在线观看 | 一区二区三区高清不卡 | 日日操日日操 | 久草视频一区 | 中文字幕在线观看第一区 | 亚洲国产精品va在线 | 草免费视频 | 久久综合狠狠综合久久激情 | 69热国产视频 | 国产视频69| av黄在线播放 | 婷婷丁香视频 | 国产精品麻豆果冻传媒在线播放 | 中文字幕乱码电影 | 91理论片午午伦夜理片久久 | 国产精品6 | 欧美久久久久久久久久 | 色婷婷视频 | 午夜精品电影 | 久久久久久国产精品亚洲78 | 日韩大片在线免费观看 | 日韩欧美精品一区 | 婷婷伊人综合亚洲综合网 | 一本一道久久a久久精品蜜桃 | 欧美一区二区精美视频 | 夜夜澡人模人人添人人看 | 亚洲精品五月天 | 国产精品久久久久久久久久妇女 | 日韩一区二区三区观看 | www.888.av| 欧美一级在线观看视频 | 超碰97免费观看 | 国产一区二区在线免费播放 | 国产小视频免费在线网址 | www.色综合.com | 在线精品亚洲一区二区 | 992tv又爽又黄的免费视频 | 久久综合久色欧美综合狠狠 | 丁香花在线视频观看免费 | 97人人超| 波多野结衣动态图 | 亚洲精品一区二区在线观看 | 麻花天美星空视频 | 五月天六月婷婷 | 91久久黄色 | 精品福利片 | 中文字幕在线视频免费播放 | 人人干网站 | 日日夜夜精品免费观看 | 欧美日韩国产精品一区二区亚洲 | 91在线观看高清 | 色资源网免费观看视频 | 激情五月婷婷 | 日韩免费一区二区三区 | av免费在线播放 | 亚洲视频综合在线 | 日本中文字幕在线视频 | 国产一区不卡在线 | 国产精品麻豆免费版 | 国产黑丝一区二区三区 | 国产日韩精品一区二区三区 | 这里只有精品视频在线观看 | 婷婷在线色 | 免费看搞黄视频网站 | 91国内产香蕉 | 精品91久久久久 | 特黄色大片 | 国产专区在线播放 | 最近中文字幕mv免费高清在线 | 66av99精品福利视频在线 | 亚洲电影网站 | 欧美精品一区二区蜜臀亚洲 | 成人免费xxx在线观看 | 免费观看一区 | 国产麻豆电影在线观看 | 亚洲成人欧美 | 91久久在线观看 | 天天操夜| 伊人午夜 | 久久亚洲热 | 久久久久久久18 | 免费在线观看国产黄 | 91成人亚洲 | 日韩午夜精品 | 丁香在线| 精品国产一区二区三区久久久蜜臀 | 一本一道久久a久久精品 | 黄色大片免费网站 | 青青看片 | 免费观看9x视频网站在线观看 | 日日干天天插 | 久久手机看片 | 久久不卡国产精品一区二区 | 欧美另类网站 | 精品视频在线播放 | 夜夜骑日日操 | 国产亚洲精品久久久久久大师 | 色综合久久久久久久 | 激情视频免费观看 | 天天综合91 | 视频在线观看99 | 久久视频这里有久久精品视频11 | 亚洲国产片 | 国产伦理一区 | 国产成人精品亚洲日本在线观看 | 国产色综合 | 在线观看精品一区 | 亚洲国产精品va在线看黑人动漫 | 国产精品 美女 | 亚洲成人av在线电影 | 日韩激情网 | 丁香六月激情婷婷 | 亚洲精品在线观看免费 | 97国产大学生情侣白嫩酒店 | 国产精品99免费看 | av看片网| 在线视频 你懂得 | 婷婷在线免费 | 五月天中文字幕 | 日韩精品最新在线观看 | 国产成人久久av免费高清密臂 | 亚洲午夜精 | 久久精品视频18 | 91看片在线播放 | 91精品视频观看 | 免费欧美 | 伊人婷婷色 | 在线观看视频91 | 视频福利在线观看 | 中文字幕一区二区三区视频 | 97超碰网| 超级碰99 | 欧美淫aaa免费观看 日韩激情免费视频 | 日韩精品无 | 爱干视频 | 天天操天天色综合 | 国产精品第一 | 婷婷五月色综合 | 九九国产精品视频 | 成年在线观看 | 久草精品视频在线观看 | 色中射| 日韩高清精品免费观看 | 有码视频在线观看 | 国产精品久久精品国产 | 激情视频一区二区三区 | 91在线视频免费91 | 日本护士三级少妇三级999 | 色大片免费看 | 91香蕉视频720p | 久久久久久久久久久免费av | 国产在线高清 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 欧美日韩免费一区二区三区 | 国产精品午夜久久 | 日韩大片在线 | 久久激情日本aⅴ | 国产一级久久 | av在线超碰| 美女视频黄,久久 | 日日干精品| 国产高清av免费在线观看 | 美女网站在线播放 | 国内一级片在线观看 | 色综合久久五月天 | 国产精品精品视频 | 久久a免费视频 | 成人av午夜 | 国产91丝袜在线播放动漫 | 手机av资源| 欧美91视频| 五月婷激情| 黄色大全在线观看 | 97免费在线观看视频 | 国产黄色一级大片 | 99re国产| 最新av电影网址 | 免费福利片2019潦草影视午夜 | 伊人天天干 | 狠狠狠狠狠狠狠干 | 日韩在线视频免费观看 | 亚洲国产成人在线 | 亚洲免费观看视频 | 三级免费黄色 | 国产视频一区二区在线 | 欧美色伊人 | 黄色av电影在线 | 亚洲国产成人精品久久 | 日韩免费播放 | 日本爱爱免费视频 | 成人v| 国产一级大片在线观看 | 国产一区欧美二区 | 久久精品第一页 | 91成人看片| 中文字幕一区二区三区在线观看 | 91精品国产高清 | 一性一交视频 | 久久久久电影网站 | 曰韩精品 | 免费在线观看成年人视频 | 久久资源在线 | 亚洲精品在线观看中文字幕 | 中文字幕日韩电影 | 最新av电影网址 | 欧美精品久久久久久久久老牛影院 | 日韩av不卡在线 | 天天色 天天 | 国产99久久久精品视频 | 亚洲成av| 久久激情片 | 婷婷激情影院 | 91在线视频免费播放 | 久免费 | 精品产品国产在线不卡 | 91在线免费播放视频 | 97在线超碰 | 在线观看深夜福利 | 在线视频免费观看 | 亚洲欧洲精品久久 | 色一色在线 | 日韩在线视频不卡 | 亚洲国产免费看 | 国产首页 | 日本在线视频一区二区三区 | 日日夜夜狠狠 | 美女黄濒| 99精品视频99 | 亚洲成av人电影 | 久久在线免费观看 | 在线а√天堂中文官网 | 免费国产一区二区视频 | 天天激情天天干 | 日韩午夜高清 | 97热在线观看 | 一区二区久久 | 狠狠色狠狠色合久久伊人 | 欧美日韩一区二区在线观看 | 91私密视频 | 精品国产黄色片 | 中文在线字幕免费观 | 久久手机免费观看 | 日韩成人邪恶影片 | 中文字幕一区二区三区视频 | 亚洲精品在线一区二区 | av免费网站 | 婷婷激情五月 | 亚洲欧美日韩国产一区二区 | 丁香六月天婷婷 | 久久免费视频精品 | 日韩激情一二三区 | 丝袜美腿在线播放 | 99久久www免费| 久久96国产精品久久99漫画 | 99精品视频免费在线观看 | 超碰人在线 | 久久观看最新视频 | 国产精品视频资源 | 日本激情视频中文字幕 | 亚洲精品资源在线观看 | 99久久精品免费看国产免费软件 | 午夜色性片| 国产精品青青 | 免费在线h| 久草久视频 | 国产亚洲精品久久久久久久久久久久 | 日韩在线观看一区 | 国产亚洲综合精品 | 久久久国产精品电影 | 国产精品九九九九九 | 九九九视频精品 | 久精品视频 | 青青草国产精品 | 97免费视频在线 | 久久久久久久久久亚洲精品 | 亚洲另类视频在线 | 国产成人精品av在线观 | 99精品视频免费在线观看 | 国产亚洲精品美女久久 | 国产精品一区二区果冻传媒 | 欧美少妇影院 | 亚洲国产网站 | 国产色女人 | 久久草草热国产精品直播 | 亚洲欧美在线视频免费 | 日韩欧美精品在线 | www免费 | 特黄色大片 | 狠狠色狠狠色合久久伊人 | 国产精品一区二区三区在线 | 91视视频在线直接观看在线看网页在线看 | 精品福利视频在线 | 精品女同一区二区三区在线观看 | 精品视频免费播放 | 天堂在线免费视频 | 日韩在线一区二区免费 | 婷婷九九 | 97在线观看免费观看高清 | 91av视频免费在线观看 | 亚洲一区二区精品视频 | 欧美激情综合五月色丁香小说 | 丁香六月婷婷激情 | 免费高清男女打扑克视频 | 国产精品女同一区二区三区久久夜 | 中文字幕在线观看完整版 | 久久免费视频在线观看 | 在线草| 国产精品网红直播 | 一本一本久久a久久精品综合小说 | 91av99| 亚洲精品久久久久久久蜜桃 | 久久午夜色播影院免费高清 | 欧美巨大荫蒂茸毛毛人妖 | 91成人黄色 | 久久视了 | 欧美精品久久99 | 热久久国产精品 | 美女国产精品 | 亚洲精品免费视频 | 三级黄色在线观看 | 精品亚洲一区二区三区 | 国内精品视频一区二区三区八戒 | 欧美一区二区三区不卡 | 亚洲综合欧美激情 | 日本久久成人 | 午夜资源站 | 青青河边草手机免费 | 9色在线视频 | 91亚洲国产成人久久精品网站 | 亚洲va欧美va国产va黑人 | 婷婷丁香九月 | 亚洲国产一区在线观看 | 久久国产精品免费视频 | 精品一区精品二区高清 | 日韩久久久久久久久 | 日韩视频免费观看高清完整版在线 | 成人三级视频 | 四虎在线免费观看 | 亚洲va男人天堂 | 久久久久久久久久久久亚洲 | 美女在线观看网站 | 国产一区自拍视频 | 黄色网址a| 免费视频a| 色五丁香 | 国产精品色婷婷 | 国产这里只有精品 | 探花在线观看 | 日韩美女黄色片 | 天天做天天看 | 成年人免费看 | 欧美色图亚洲图片 | 国产精品中文久久久久久久 | 免费福利在线观看 | 在线小视频国产 | 成人av直播| 亚洲欧洲中文日韩久久av乱码 | 国产人成在线观看 | 婷婷久久五月 | 青青草久草在线 | 国内精品久久久久久久影视麻豆 | 国产最新视频在线 | 99久久夜色精品国产亚洲96 | 成人午夜电影在线 | 2019中文最近的2019中文在线 | 国内精品免费久久影院 | 久久精品系列 | www.福利视频| 免费韩国av | 久久久国产精品人人片99精片欧美一 | 久久99中文字幕 | 久久久男人的天堂 | 丁香综合 | 亚洲视频在线播放 | 日韩精品一区二区在线 | 午夜神马福利 | 久久精品综合一区 | 中文在线免费看视频 | 国产麻豆视频在线观看 | 99视频免费播放 | 欧美精品日韩 | 天天色天天干天天色 | 日韩在线视频一区 | 99精品视频免费看 | 欧美资源在线观看 | 中文字幕在线观看一区二区 | 天天色综合1 | 国产色黄网站 | 久草在线最新 | 天天色天天色天天色 | av成人在线电影 | 日本激情视频中文字幕 | 国产色影院 | 伊人婷婷综合 | 综合网伊人| 97电影手机 | 精品uu| 99久久影院| 日韩免费一区二区 | 婷婷中文在线 | 国产黄色免费 | 亚洲精品啊啊啊 | 麻豆 videos| 久久成年人 | 午夜国产一区二区 | 久艹视频免费观看 | 国产精品久久久网站 | 一级片免费在线 | 超碰人人在 | 成人日韩av | 日韩手机在线 | 国产韩国日本高清视频 | 免费国产一区二区视频 | 日韩在线字幕 | 美女免费网视频 | 国产一卡二卡四卡国 | 又黄又爽的免费高潮视频 | 99视频在线看 | 在线天堂中文在线资源网 | 中文高清av | 一级一片免费视频 | 国产理论在线 | 亚洲激情一区二区三区 | 日韩欧美v | 日本中文字幕在线看 | 免费精品国产 | 91九色在线视频观看 | 国产精品久久精品国产 | 国产伦精品一区二区三区照片91 | 国产美女主播精品一区二区三区 | 91av看片| 国产精品1区2区在线观看 | 久久精品一区二区三区国产主播 | 国产日韩欧美网站 | 狠狠婷婷 | 不卡的av在线播放 | 国产亚洲在线 | 久久99精品国产99久久6尤 | 97成人啪啪网 | 日日操日日干 | 五月婷婷网站 | 久久蜜臀一区二区三区av | 五月婷婷爱 | 99超碰在线观看 | 波多野结衣精品在线 | 欧美一级淫片videoshd | 日韩丝袜在线观看 | 看av免费| 伊人天天操 | 91在线免费观看网站 | 欧美 亚洲 另类 激情 另类 | 在线成人免费电影 | 青青草视频精品 | 91亚洲免费 | 欧美性受极品xxxx喷水 | 日韩色av色资源 | 国产精品一区二区三区视频免费 | av观看免费在线 | 日本午夜免费福利视频 | 精品亚洲免费 | 亚洲影音先锋 | 国产成人精品一区二三区 | 激情在线网 | 亚洲乱码在线观看 | 成人免费视频a | 欧美日韩高清在线一区 | 成人av午夜 | 国产无区一区二区三麻豆 | 国产四虎影院 | 国产精品第二页 | 国产免费一区二区三区最新 | 亚洲精品乱码久久久久v最新版 | 天天天干夜夜夜操 | 中文字幕乱在线伦视频中文字幕乱码在线 | 综合国产视频 | 成人av在线播放网站 | 国产高清福利在线 | 玖玖爱免费视频 | 国产精品欧美久久久久三级 | 97人人人人 | 99一区二区三区 | 色欧美成人精品a∨在线观看 | 黄a在线| 国内丰满少妇猛烈精品播 | 久久国产精品色婷婷 | 在线观看91av | 在线日韩中文字幕 | 六月丁香综合 | 亚洲色图27p | 成人一区在线观看 | 免费色视频在线 | 免费a视频| 久久午夜精品影院一区 | 日本午夜在线亚洲.国产 | 国产成人精品久久久 | 在线中文字幕av观看 | 国产精品永久在线 | 97av视频| 成年人毛片在线观看 | 免费在线观看成人av | 狠狠色丁香九九婷婷综合五月 | 日韩 在线a | 天天干天天搞天天射 | 不卡电影一区二区三区 | h动漫中文字幕 | 91av原创 | 亚洲激情在线观看 | 丝袜美女视频网站 | 免费三级a| 国产精品久久久久免费a∨ 欧美一级性生活片 | av天天干 | 久久国产午夜精品理论片最新版本 | 精品久久久久亚洲 | 日韩中文字幕免费看 | 天天射天天舔天天干 | 在线看中文字幕 | 五月婷香蕉久色在线看 | 国产福利一区二区三区在线观看 | 国产精品粉嫩 | 麻豆94tv免费版 | 国产精品小视频网站 | 91成人在线网站 | 亚洲理论在线观看 | 免费观看www小视频的软件 | 日本高清中文字幕有码在线 | 国产又黄又爽无遮挡 | .国产精品成人自产拍在线观看6 | 超级碰碰碰免费视频 | 亚洲天堂网在线观看视频 | 丝袜美女在线观看 | 视频一区二区在线观看 |