成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作

自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作

熱門標(biāo)簽:公司電話機(jī)器人 海南400電話如何申請(qǐng) 陜西金融外呼系統(tǒng) 激戰(zhàn)2地圖標(biāo)注 哈爾濱ai外呼系統(tǒng)定制 廣告地圖標(biāo)注app 騰訊外呼線路 白銀外呼系統(tǒng) 唐山智能外呼系統(tǒng)一般多少錢

直接搭建網(wǎng)絡(luò)必須與torchvision自帶的網(wǎng)絡(luò)的權(quán)重也就是pth文件的結(jié)構(gòu)、尺寸和變量命名完全一致,否則無(wú)法加載權(quán)重文件。

此時(shí)可比較2個(gè)字典逐一加載,詳見

pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案

import torch
import torchvision
import cv2 as cv
from utils.utils import letter_box
from model.backbone import ResNet18

model1 = ResNet18(1)
model2 = torchvision.models.resnet18(progress=False)
fc = model2.fc
model2.fc = torch.nn.Linear(512, 1)
# print(model)
model_dict1 = model1.state_dict()
model_dict2 = torch.load('resnet18.pth')
model_list1 = list(model_dict1.keys())
model_list2 = list(model_dict2.keys())
len1 = len(model_list1)
len2 = len(model_list2)
minlen = min(len1, len2)
for n in range(minlen):
    if model_dict1[model_list1[n]].shape != model_dict2[model_list2[n]].shape:
        continue
    model_dict1[model_list1[n]] = model_dict2[model_list2[n]]
model1.load_state_dict(model_dict1)
missing, unspected = model2.load_state_dict(model_dict2)
image = cv.imread('zhn1.jpg')
image = letter_box(image, 224)
image = image[:, :, ::-1].transpose(2, 0, 1)
print('Network loading complete.')
model1.eval()
model2.eval()
with torch.no_grad():
    image = torch.tensor(image/256, dtype=torch.float32).unsqueeze(0)
    predict1 = model1(image)
    predict2 = model2(image)
print('finished')
# torch.save(model.state_dict(), 'resnet18.pth')

以上為全部程序,最終可測(cè)試原模型與加載了自帶權(quán)重的自定義模型的輸出是否相等。

補(bǔ)充:使用Pytorch搭建ResNet分類網(wǎng)絡(luò)并基于遷移學(xué)習(xí)訓(xùn)練

如果stride=1,padding=1

卷積處理是不會(huì)改變特征矩陣的高和寬

使用BN層時(shí)

卷積中的參數(shù)bias置為False(有無(wú)偏置BN層的輸出都相同),BN層放在conv層和relu層的中間

復(fù)習(xí)BN層:

Batch Norm 層是對(duì)每層數(shù)據(jù)歸一化后再進(jìn)行線性變換改善數(shù)據(jù)分布, 其中的線性變換是可學(xué)習(xí)的.

Batch Norm優(yōu)點(diǎn):減輕過(guò)擬合;改善梯度傳播(權(quán)重不會(huì)過(guò)高或過(guò)低)容許較高的學(xué)習(xí)率,能夠提高訓(xùn)練速度。減輕對(duì)初始化權(quán)重的強(qiáng)依賴,使得數(shù)據(jù)分布在激活函數(shù)的非飽和區(qū)域,一定程度上解決梯度消失問(wèn)題。作為一種正則化的方式,在某種程度上減少對(duì)dropout的使用。

Batch Norm層擺放位置:在激活層(如 ReLU )之前還是之后,沒有一個(gè)統(tǒng)一的定論。

BN層與 Dropout 合作:Batch Norm的提出使得dropout的使用減少,但是Batch Norm不能完全取代dropout,保留較小的dropout率,如0.2可能效果更佳。

為什么要先normalize再通過(guò)γ,β線性變換恢復(fù)接近原來(lái)的樣子,這不是多此一舉嗎?

在一定條件下可以糾正原始數(shù)據(jù)的分布(方差,均值變?yōu)樾轮郸?β),當(dāng)原始數(shù)據(jù)分布足夠好時(shí)就是恒等映射,不改變分布。如果不做BN,方差和均值對(duì)前面網(wǎng)絡(luò)的參數(shù)有復(fù)雜的關(guān)聯(lián)依賴,具有復(fù)雜的非線性。在新參數(shù) γH′ + β 中僅由 γ,β 確定,與前邊網(wǎng)絡(luò)的參數(shù)無(wú)關(guān),因此新參數(shù)很容易通過(guò)梯度下降來(lái)學(xué)習(xí),能夠?qū)W習(xí)到較好的分布。

遷移學(xué)習(xí)導(dǎo)入權(quán)重和下載權(quán)重:

import torchvision.models.resnet#ctrl+鼠標(biāo)左鍵點(diǎn)擊即可下載權(quán)重
net = resnet34()#一開始不能設(shè)置全連接層的輸出種類為自己想要的,必須先將模型參數(shù)載入,再修改全連接層
# 官方提供載入預(yù)訓(xùn)練模型的方法
model_weight_path = "./resnet34-pre.pth"#權(quán)重路徑
missing_keys, unexpected_keys = net.load_state_dict(torch.load(model_weight_path), strict=False)#載入模型權(quán)重
inchannel = net.fc.in_features
net.fc = nn.Linear(inchannel, 5)#重新確定全連接層

完整代碼:

model部分:

import torch.nn as nn
import torch
class BasicBlock(nn.Module):#對(duì)應(yīng)18層和34層所對(duì)應(yīng)的殘差結(jié)構(gòu)(既要有實(shí)線殘差結(jié)構(gòu)功能,也要有虛線殘差結(jié)構(gòu)功能)
    expansion = 1#殘差結(jié)構(gòu)主分支上的三個(gè)卷積層是否相同,相同為1,第三層是一二層四倍則為4
    def __init__(self, in_channel, out_channel, stride=1, downsample=None):#downsample代表虛線殘差結(jié)構(gòu)選項(xiàng)
        super(BasicBlock, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=out_channel,
                               kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channel)
        self.relu = nn.ReLU()
        self.conv2 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel,
                               kernel_size=3, stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channel)
        self.downsample = downsample
    def forward(self, x):
        identity = x
        if self.downsample is not None:
            identity = self.downsample(x)#得到捷徑分支的輸出
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        out += identity
        out = self.relu(out)
        return out#得到殘差結(jié)構(gòu)的最終輸出

class Bottleneck(nn.Module):#對(duì)應(yīng)50層、101層和152層所對(duì)應(yīng)的殘差結(jié)構(gòu)
    expansion = 4#第三層卷積核個(gè)數(shù)是第一層和第二層的四倍
    def __init__(self, in_channel, out_channel, stride=1, downsample=None):
        super(Bottleneck, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=out_channel,
                               kernel_size=1, stride=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channel)
        self.conv2 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel,
                               kernel_size=3, stride=stride, bias=False, padding=1)
        self.bn2 = nn.BatchNorm2d(out_channel)
        self.conv3 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel*self.expansion,
                               kernel_size=1, stride=1, bias=False)
        self.bn3 = nn.BatchNorm2d(out_channel*self.expansion)
        self.relu = nn.ReLU(inplace=True)
        self.downsample = downsample
    def forward(self, x):
        identity = x
        if self.downsample is not None:
            identity = self.downsample(x)
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        out = self.relu(out)
        out = self.conv3(out)
        out = self.bn3(out)
        out += identity
        out = self.relu(out)
        return out

class ResNet(nn.Module):#定義整個(gè)網(wǎng)絡(luò)的框架部分
#blocks_num是殘差結(jié)構(gòu)的數(shù)目,是一個(gè)列表參數(shù),block對(duì)應(yīng)哪個(gè)殘差模塊
    def __init__(self, block, blocks_num, num_classes=1000, include_top=True):
        super(ResNet, self).__init__()
        self.include_top = include_top
        self.in_channel = 64#通過(guò)第一個(gè)池化層后所得到的特征矩陣的深度
        self.conv1 = nn.Conv2d(3, self.in_channel, kernel_size=7, stride=2,
                               padding=3, bias=False)
        self.bn1 = nn.BatchNorm2d(self.in_channel)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.layer1 = self._make_layer(block, 64, blocks_num[0])
        self.layer2 = self._make_layer(block, 128, blocks_num[1], stride=2)
        self.layer3 = self._make_layer(block, 256, blocks_num[2], stride=2)
        self.layer4 = self._make_layer(block, 512, blocks_num[3], stride=2)
        if self.include_top:
            self.avgpool = nn.AdaptiveAvgPool2d((1, 1))  # output size = (1, 1)
            self.fc = nn.Linear(512 * block.expansion, num_classes)
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
    def _make_layer(self, block, channel, block_num, stride=1):#channel:殘差結(jié)構(gòu)中,第一個(gè)卷積層所使用的卷積核的個(gè)數(shù)
        downsample = None
        if stride != 1 or self.in_channel != channel * block.expansion:#18層和34層會(huì)直接跳過(guò)這個(gè)if語(yǔ)句
            downsample = nn.Sequential(
                nn.Conv2d(self.in_channel, channel * block.expansion, kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(channel * block.expansion))
        layers = []
        layers.append(block(self.in_channel, channel, downsample=downsample, stride=stride))
        self.in_channel = channel * block.expansion
        for _ in range(1, block_num):
            layers.append(block(self.in_channel, channel))
        return nn.Sequential(*layers)
    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.maxpool(x)
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        if self.include_top:#默認(rèn)是true
            x = self.avgpool(x)
            x = torch.flatten(x, 1)
            x = self.fc(x)
        return x

def resnet34(num_classes=1000, include_top=True):
    return ResNet(BasicBlock, [3, 4, 6, 3], num_classes=num_classes, include_top=include_top)

def resnet101(num_classes=1000, include_top=True):
    return ResNet(Bottleneck, [3, 4, 23, 3], num_classes=num_classes, include_top=include_top)

訓(xùn)練部分:

import torch
import torch.nn as nn
from torchvision import transforms, datasets
import json
import matplotlib.pyplot as plt
import os
import torch.optim as optim
from model import resnet34, resnet101
import torchvision.models.resnet#ctrl+鼠標(biāo)左鍵點(diǎn)擊即可下載權(quán)重
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)
data_transform = {
    "train": transforms.Compose([transforms.RandomResizedCrop(224),
                                 transforms.RandomHorizontalFlip(),
                                 transforms.ToTensor(),
                                 transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]),#和官網(wǎng)初始化方法保持一致
    "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])])}

data_root = os.path.abspath(os.path.join(os.getcwd(), "../.."))  # get data root path
image_path = data_root + "/data_set/flower_data/"  # flower data set path
train_dataset = datasets.ImageFolder(root=image_path+"train",
                                     transform=data_transform["train"])
train_num = len(train_dataset)
# {'daisy':0, 'dandelion':1, 'roses':2, 'sunflower':3, 'tulips':4}
flower_list = train_dataset.class_to_idx
cla_dict = dict((val, key) for key, val in flower_list.items())
# write dict into json file
json_str = json.dumps(cla_dict, indent=4)
with open('class_indices.json', 'w') as json_file:
    json_file.write(json_str)
batch_size = 16
train_loader = torch.utils.data.DataLoader(train_dataset,
                                           batch_size=batch_size, shuffle=True,
                                           num_workers=0)
validate_dataset = datasets.ImageFolder(root=image_path + "val",
                                        transform=data_transform["val"])
val_num = len(validate_dataset)
validate_loader = torch.utils.data.DataLoader(validate_dataset,
                                              batch_size=batch_size, shuffle=False,
                                              num_workers=0)
net = resnet34()#一開始不能設(shè)置全連接層的輸出種類為自己想要的,必須先將模型參數(shù)載入,再修改全連接層
# 官方提供載入預(yù)訓(xùn)練模型的方法
model_weight_path = "./resnet34-pre.pth"#權(quán)重路徑
missing_keys, unexpected_keys = net.load_state_dict(torch.load(model_weight_path), strict=False)#載入模型權(quán)重
inchannel = net.fc.in_features
net.fc = nn.Linear(inchannel, 5)#重新確定全連接層
net.to(device)
loss_function = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.0001)
best_acc = 0.0
save_path = './resNet34.pth'
for epoch in range(3):
    # train
    net.train()#控制BN層狀態(tài)
    running_loss = 0.0
    for step, data in enumerate(train_loader, start=0):
        images, labels = data
        optimizer.zero_grad()
        logits = net(images.to(device))
        loss = loss_function(logits, labels.to(device))
        loss.backward()
        optimizer.step()
        # print statistics
        running_loss += loss.item()
        # print train process
        rate = (step+1)/len(train_loader)
        a = "*" * int(rate * 50)
        b = "." * int((1 - rate) * 50)
        print("\rtrain loss: {:^3.0f}%[{}->{}]{:.4f}".format(int(rate*100), a, b, loss), end="")
    print()
    # validate
    net.eval()#控制BN層狀態(tài)
    acc = 0.0  # accumulate accurate number / epoch
    with torch.no_grad():
        for val_data in validate_loader:
            val_images, val_labels = val_data
            outputs = net(val_images.to(device))  # eval model only have last output layer
            # loss = loss_function(outputs, test_labels)
            predict_y = torch.max(outputs, dim=1)[1]
            acc += (predict_y == val_labels.to(device)).sum().item()
        val_accurate = acc / val_num
        if val_accurate > best_acc:
            best_acc = val_accurate
            torch.save(net.state_dict(), save_path)
        print('[epoch %d] train_loss: %.3f  test_accuracy: %.3f' %
              (epoch + 1, running_loss / step, val_accurate))
print('Finished Training')

預(yù)測(cè)部分:

import torch
from model import resnet34
from PIL import Image
from torchvision import transforms
import matplotlib.pyplot as plt
import json
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
data_transform = transforms.Compose(
    [transforms.Resize(256),
     transforms.CenterCrop(224),
     transforms.ToTensor(),
     transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])#采用和訓(xùn)練方法一樣的標(biāo)準(zhǔn)化處理
# load image
img = Image.open("../aa.jpg")
plt.imshow(img)
# [N, C, H, W]
img = data_transform(img)
# expand batch dimension
img = torch.unsqueeze(img, dim=0)
# read class_indict
try:
    json_file = open('./class_indices.json', 'r')
    class_indict = json.load(json_file)
except Exception as e:
    print(e)
    exit(-1)
# create model
model = resnet34(num_classes=5)
# load model weights
model_weight_path = "./resNet34.pth"
model.load_state_dict(torch.load(model_weight_path, map_location=device))#載入訓(xùn)練好的模型參數(shù)
model.eval()#使用eval()模式
with torch.no_grad():#不跟蹤損失梯度
    # predict class
    output = torch.squeeze(model(img))#壓縮batch維度
    predict = torch.softmax(output, dim=0)#通過(guò)softmax得到概率分布
    predict_cla = torch.argmax(predict).numpy()#尋找最大值所對(duì)應(yīng)的索引
print(class_indict[str(predict_cla)], predict[predict_cla].numpy())#打印類別信息和概率
plt.show()

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • PyTorch加載預(yù)訓(xùn)練模型實(shí)例(pretrained)
  • 獲取Pytorch中間某一層權(quán)重或者特征的例子
  • Pytorch修改ResNet模型全連接層進(jìn)行直接訓(xùn)練實(shí)例

標(biāo)簽:惠州 上海 黑龍江 常德 四川 鷹潭 益陽(yáng) 黔西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作》,本文關(guān)鍵詞  自己,搭建,resnet18,網(wǎng)絡(luò),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    九色丨porny丨| 国产成人在线视频网址| 国产91网红主播在线观看| 蜜桃视频在线观看一区| 成人在线视频免费观看| 精品少妇一区二区三区免费观看| 麻豆美女网站| 日韩av影音先锋| 午夜免费福利在线| 毛片在线看片| 在线观看av黄网站永久| 一级理论片在线观看| 亚洲国产片色| 国产精品人人| 亚洲国产激情一区二区三区| 99精品中文字幕在线不卡| 影音先锋男人每日资源站| 一个人在线观看免费视频www| 久久国产福利国产秒拍| 日本不良网站在线观看| 首页欧美精品中文字幕| 亚洲三区在线观看无套内射| 久久99国产乱子伦精品免费| 欧美精品播放| 欧美一级高清片在线观看| 久久精品2019中文字幕| 熟女少妇一区二区三区| 成人精品高清在线视频| 日产精品久久久久久久蜜臀| 国产一级片av| 粉嫩一区二区三区性色av| 女生裸体免费视频| 亚洲精品国产综合区久久久久久久| 日本福利一区| 亚洲综合自拍偷拍| 亚洲激情一区二区三区| 韩国精品免费视频| 中文字幕成在线观看| 色综合视频在线观看| 性欧美69xoxoxoxo| 99re亚洲国产精品| 可以看污的网站| 欧美影院午夜播放| 污污影院在线观看| 欧美精品18videosex性欧美| 懂色av一区二区三区免费观看| 色噜噜狠狠永久免费| 欧美日韩综合高清一区二区| www.-级毛片线天内射视视| 日韩av不卡电影| 国产一区二区三区在线看麻豆| 91丨九色丨蝌蚪丨老版| 欧美女同一区| 91国偷自产一区二区三区的观看方式| 亚洲综合在线观看视频| av影片在线播放| 北条麻妃在线一区二区免费播放| 国产成人精品在线| 久久99国产精品免费| 午夜一级免费视频| yellow中文字幕久久| 久热视线观看免费视频| 成人av片网址| 亚洲欧美国产一本综合首页| 精品极品在线| 欧美日韩免费一区二区三区| 国精产品999国精产品官网| 综合另类专区| av男人天堂av| 中文字幕一区二区不卡| 91精品国产综合久久久久久| 久一区二区三区| 香蕉久久免费影视| 欧美国产亚洲精品| 亚洲一区二区在线免费观看| 免费观看欧美大片| 国产黄色大片在线观看| 无码人妻精品一区二区三区在线| 日本久久久久久久久久久| 国产jzjzjz丝袜老师水多| 色婷婷av一区二区三区之e本道| 国产精品女人久久久久久| 老司机精品视频在线观看6| 中文字幕一区二区三区四区视频| 9l国产精品久久久久麻豆| 中文天堂网在线www| 精品无码在线视频| 欧美精品一区二区三区在线播放| 一区二区中文字幕在线| 日韩成人动漫在线观看| 午夜精彩视频| 亚洲国产精品中文| 欧美精品18videosex性欧美| 欧美国产第二页| 亚洲va综合va国产va中文| 国产精品91一区二区三区| 久久久9999久久精品小说| 91综合精品国产丝袜长腿久久| 久久www成人_看片免费不卡| 农村末发育av片一区二区| 国产精品r级在线| 欧美成人免费视频a| 日韩在线观看免费全集电视剧网站| 欧美成人一二区| 福利小视频在线观看| 欧美一级免费大片| 日韩午夜激情视频| 亚洲精品成人av| 色七七在线观看| 新婚的少妇hd中文字幕| 免费在线日本| 欧美成人免费在线观看| 免费成年人高清视频| 黄色在线观看网| 天天做天天摸天天爽天天爱| 性欧美视频videos6一9| 欧美成人日本| 国产精品综合一区二区三区| xxx国产hd| 久久国产精品 国产精品| 亚洲人成电影院色| av资源新版天堂在线| 日韩欧美精品一区二区综合视频| 黄色国产在线| www日韩精品| 美女精品视频在线| 国产在线一在线二| 91在线码无精品| 欧美亚洲日本| 国产在线观看不卡| 秋霞午夜鲁丝一区二区| 精品福利在线| 男男gaygays亚洲| 久久久久久香蕉网| 国产精品999999| 国产亚洲自拍av| 日韩一区二区免费在线电影| 午夜一级在线看亚洲| 日韩经典中文字幕在线观看| 国产伦精品一区二区三区在线| 日韩护士脚交太爽了| 亚洲超碰精品一区二区| 台湾成人av| 成人做爰www看视频软件| 波多野结衣手机在线视频| 中文字幕人妻一区二区三区视频| 日韩三级av| 亚洲小说欧美另类激情| 色94色欧美sute亚洲线路一ni| 亚洲一区二区免费| 日本成人在线电影网| 中文字幕大看焦在线看| 色综合av综合无码综合网站| 51vv免费精品视频一区二区| 国产精品一香蕉国产线看观看| 自拍欧美一区| 午夜精品久久久久久久99老熟妇| 在线免费观看国产精品| 中文字幕久久精品| 国产三区二区一区久久| 欧美视频免费一区二区三区| 在线资源免费观看| 日本乱码高清不卡字幕| 黄色在线免费观看大全| 91短视频版在线观看www免费| 国产精品水嫩水嫩| 亚洲午夜精品在线观看| 国产按摩一区二区三区| 91精品国产九九九久久久亚洲| 偷拍25位美女撒尿视频在线观看| www在线播放| 亚洲欧美天堂网| 国产精品久久久久久久牛牛| 成人情视频高清免费观看电影| 麻豆av观看| 免费毛片观看| 少妇**av毛片在线看| 日韩精品在线观看一区| 色天天综合久久久久综合片| 日韩视频一二区| 国产成人在线播放| 91久久国语露脸精品国产高跟| 亚洲女同一区二区| 国产欧美一区二区三区小说| 久久99久久99小草精品免视看| 国产精品五月天| 偷拍一区二区三区| 欧美成人国产va精品日本一级| 日韩精品一区二区三区色欲av| 北条麻妃在线一区二区| 69久成人做爰电影| 手机在线看福利| 欧洲成人免费视频| xxxxx日韩| 久久久精品三级| 少妇精品无码一区二区三区| 亚洲成人一区二区| 麻豆久久婷婷| 中文字幕亚洲精品乱码| 伊人av成人| 日日干日日操日日射| 99riav在线| av白虎一区| 免费午夜视频在线观看| 日本不卡久久| 国产在线不卡一区二区三区| 99精品人妻少妇一区二区| 97精品在线观看| 嫩草影院一区二区三区| 成人动漫视频在线观看完整版| 久久久一区二区三区四区| 国产在线精品一区免费香蕉| 午夜国产精品视频免费体验区| 激情开心成人网| 日韩高清三区| 精品国产无码一区二区三区| 中文字幕伦理片| 午夜性色福利影院| 国产精品10p综合二区| 国产精品一区二区三区在线观| 欧美二区乱c少妇| 欧美亚洲天堂| 日韩精品一区二区在线| 国产树林野战在线播放| 国产欧美第一页| 无遮挡aaaaa大片免费看| 日本少妇毛茸茸| 婷婷在线视频| 小h片在线观看| 黄页在线观看| 乱小说综合网站| 亚洲一区日韩精品中文字幕| 欧美日韩视频在线| 女生裸体免费视频| 国产黄色影视| 日韩精品诱惑一区?区三区| 91freevideo| 中文字幕在线永久在线视频| 国产亚洲成人精品| 一区二区三区日本视频| 国产视频青青| 狠狠操狠狠色综合网| 91精品福利在线一区二区三区| 国产视色精品亚洲一区二区| 亚洲欧美激情一区二区| 麻豆短视频在线观看| 狠狠操视频网| 秋霞国产精品| 91婷婷韩国| 中文字幕一区二区在线观看视频| 制服丝袜中文字幕在线观看| 亚洲精品无吗| 五月婷婷另类国产| 日本一区二区三区在线播放| 欧美高清视频一区二区三区在线观看| 成人乱色短篇合集| 日本亚洲一区二区| 在线观看17c| 26uuu亚洲国产精品| 亚洲日本三级| 日本一区精品| 国产美女高潮在线观看| 国产私拍一区| 超碰免费97在线观看| 欧美日韩在线另类| 成人亲热视频网站| 欧美成人免费| 在线免费av电影| 欧美xxxx黑人| 国产xxxxxx久色视频在| 成人av资源电影网站| 日韩av在线天堂| 成人性生交xxxxx网站| 91麻豆国产自产在线观看亚洲| 成人免费看黄网站| 欧美xxxxxbb| 97视频网站| 国产欧美日韩在线视频| 久久另类ts人妖一区二区| 亚洲激情婷婷| 在线中文字幕资源| 日本韩国一区| 免费高清成人在线| 亚洲二区视频在线| gogogo高清在线观看一区二区| 性欧美亚洲xxxx乳在线观看| 久久久久久国产精品日本| 九色视频在线观看免费播放| 在线观看三级视频欧美| 天天操天天爽天天射| 一本色道久久88综合日韩精品| 国产精品18久久久久久久久| 精品国产电影一区二区| jizz在线免费观看| 最新天堂在线视频| 中文字幕国产在线| 欧美mv日韩mv国产网站app| 午夜视频在线免费观看| 嫩草影院一区二区三区| 国产女人被狂躁到高潮小说| 初体验·韩国| 免费一级欧美片在线观看网站| avtt在线播放| 91老师国产黑色丝袜在线| 日韩毛片免费视频一级特黄| 无国产精品白浆是免费| 91成人伦理在线电影| 国产精品国产三级国产专播品爱网| 美女啪啪无遮挡| 久久亚洲成人| 亚洲同性同志一二三专区| 在线观看av日韩| 久久精品免费看| 欧美黄色激情| 一区二区三区四区在线不卡高清| 天天干天天操天天爱| 美女航空一级毛片在线播放| 深夜激情久久| 黄页网站视频在线观看| 综合色天天鬼久久鬼色| 欧美日韩第一| 九九视频免费在线观看| 国产精品视频免费一区二区三区| www.日本高清视频| 麻豆精品不卡国产免费看| 欧美成人资源| 日本一区二区不卡高清更新| 欧美在线网站|