精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

對(duì)抗生成網(wǎng)絡(luò)GAN 原創(chuàng) 精華

發(fā)布于 2024-11-26 09:06
瀏覽
0收藏

前言

在前一階段課程中,我們學(xué)習(xí)了圖像分割中的語(yǔ)義分割、實(shí)例分割、旋轉(zhuǎn)目標(biāo)檢測(cè)等。這些圖像分割算法都是有監(jiān)督學(xué)習(xí),而GAN(生成對(duì)抗網(wǎng)絡(luò))是一種特別的學(xué)習(xí)策略,其核心思想非常值得借鑒,所以本章將以GAN網(wǎng)絡(luò)的代碼為切入口,了解掌握其核心思想。

學(xué)習(xí)策略

人工智能方面的學(xué)習(xí)策略有兩種:有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)。

有監(jiān)督學(xué)習(xí)

定義:有監(jiān)督學(xué)習(xí)是使用帶標(biāo)簽的數(shù)據(jù)集進(jìn)行訓(xùn)練。每個(gè)輸入數(shù)據(jù)都有對(duì)應(yīng)的輸出標(biāo)簽,模型通過(guò)學(xué)習(xí)輸入與輸出之間的關(guān)系來(lái)進(jìn)行預(yù)測(cè)。

舉個(gè)例子:孩子的個(gè)人成長(zhǎng),有經(jīng)驗(yàn)的家長(zhǎng)為期規(guī)劃了發(fā)展的路線,孩子在規(guī)劃下有計(jì)劃地學(xué)習(xí)成長(zhǎng),這屬于有監(jiān)督學(xué)習(xí)。

無(wú)監(jiān)督學(xué)習(xí)

定義:無(wú)監(jiān)督學(xué)習(xí)使用沒(méi)有標(biāo)簽的數(shù)據(jù)集進(jìn)行訓(xùn)練。模型試圖發(fā)現(xiàn)數(shù)據(jù)中的模式或結(jié)構(gòu),而不依賴(lài)于任何預(yù)先定義的標(biāo)簽。

同樣的例子:孩子在無(wú)監(jiān)督學(xué)習(xí)下,是沒(méi)有家長(zhǎng)為期進(jìn)行規(guī)劃,而是經(jīng)歷社會(huì)"捶打"(做得好了有加分、做不好扣分),最終學(xué)習(xí)成長(zhǎng)起來(lái)。

GAN的基礎(chǔ)介紹

在上述的兩種學(xué)習(xí)策略中,有一種特殊的、獨(dú)立的學(xué)習(xí)策略:GAN(生成對(duì)抗網(wǎng)絡(luò))。

它由兩個(gè)網(wǎng)絡(luò)(生成器和判別器),通過(guò)對(duì)抗在競(jìng)爭(zhēng)中共同發(fā)展。

  • G:生成器(造假)
  • D:鑒別器(打假)
  • 訓(xùn)練過(guò)程:

兩個(gè)網(wǎng)絡(luò)剛開(kāi)始都沒(méi)有任何能力

在競(jìng)爭(zhēng)中共同發(fā)展

最后兩個(gè)網(wǎng)絡(luò)能力都得到提升

舉個(gè)例子:GAN網(wǎng)絡(luò)就像警察和小偷,警察和小偷之間互相對(duì)抗。

GAN示例

為了對(duì)GAN網(wǎng)絡(luò)有個(gè)直觀印象,我們可以參考Github上一個(gè)開(kāi)源項(xiàng)目,對(duì)GAN有個(gè)初步認(rèn)知。

頁(yè)面地址:https://poloclub.github.io/ganlab/

示例目的

  • 在頁(yè)面中添加一個(gè)手寫(xiě)數(shù)字圖像
  • 通過(guò)訓(xùn)練模型來(lái)模擬手寫(xiě)數(shù)字圖像
  • 從而達(dá)到新圖像與原來(lái)的風(fēng)格類(lèi)似,分不出真假

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

核心思想

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

論文地址:https://arxiv.org/pdf/1406.2661

生成器(Generator):

  • 作用:負(fù)責(zé)憑空編造假的數(shù)據(jù)出來(lái)。
  • 目的:通過(guò)機(jī)器生成假的數(shù)據(jù)(大部分情況下是圖像),最終目的是“騙過(guò)”判別器。
  • 過(guò)程:G是一個(gè)生成圖片的網(wǎng)絡(luò),它接收一個(gè)隨機(jī)的噪聲z,通過(guò)這個(gè)噪聲生成圖片,記做G(z)。

判別器(Discriminator):

  • 作用:負(fù)責(zé)判斷傳來(lái)的數(shù)據(jù)是真還是假。
  • 目的:判斷這張圖像是真實(shí)的還是機(jī)器生成的,目的是找出生成器做的“假數(shù)據(jù)”。
  • 過(guò)程:D是一個(gè)判別網(wǎng)絡(luò),判別一張圖片是不是“真實(shí)的”。它的輸入?yún)?shù)是x,x代表一張圖片,輸出D(x)代表x為真實(shí)圖片的概率,如果為1,就代表100%是真實(shí)的圖片,而輸出為0,就代表不可能是真實(shí)的圖片。

接下來(lái),我們通過(guò)詳細(xì)了解GAN網(wǎng)絡(luò)的代碼,深入了解其運(yùn)行過(guò)程。

引入依賴(lài)

import torch
from torch import nn
from torch.nn import functional as F

import torchvision
from torchvision import transforms
from torchvision import datasets
from torchvision.utils import save_image
from torch.utils.data importDataLoader

import os
import numpy as np
import matplotlib.pyplot as plt

# 判斷當(dāng)前設(shè)備是否GPU
device = torch.device('cuda'if torch.cuda.is_available()else'cpu')
device

讀取數(shù)據(jù)集

# 加載并預(yù)處理圖像
data = datasets.MNIST(root="data", 
                      train=True, 
                      transform = transforms.Compose(transforms=[transforms.ToTensor(),
                      transforms.Normalize(mean=[0.5], std=[0.5])]),
                      download=True)

# 封裝成 DataLoader
data_loader = DataLoader(dataset=data, batch_size=100, shuffle=True)
  • 備注:上述??transform = transforms.Compose?? 的作用主要是進(jìn)行數(shù)據(jù)增強(qiáng),詳細(xì)內(nèi)容在補(bǔ)充知識(shí)部分展開(kāi)介紹。

定義模型

定義生成器

"""
    定義生成器
"""

classGenerator(nn.Module):
"""
        定義一個(gè)圖像生成
        輸入:一個(gè)向量
        輸出:一個(gè)向量(代表圖像)
    """
def__init__(self, in_features=100, out_features=28 * 28):
"""
            掛載超參數(shù)
        """
# 先初始化父類(lèi),再初始化子類(lèi)
super(Generator, self).__init__()
        self.in_features = in_features
        self.out_features = out_features

# 第一個(gè)隱藏層
        self.hidden0 = nn.Linear(in_features=self.in_features, out_features=256)

# 第二個(gè)隱藏層
        self.hidden1 = nn.Linear(in_features=256, out_features=512)

# 第三個(gè)隱藏層
        self.hidden2 = nn.Linear(in_features=512, out_features=self.out_features)

defforward(self, x):

# 第一層 [b, 100] --> [b, 256]
        h = self.hidden0(x)
        h = F.leaky_relu(input=h, negative_slope=0.2)

# 第二層 [b, 256] --> [b, 512]
        h = self.hidden1(h)
        h = F.leaky_relu(input=h, negative_slope=0.2)

# 第三層 [b, 512] --> [b, 28 * 28]
        h = self.hidden2(h)

# 壓縮數(shù)據(jù)的變化范圍
        o = torch.tanh(h)

return o

定義鑒別器

"""
    定義一個(gè)鑒別器
"""

classDiscriminator(nn.Module):
"""
        本質(zhì):二分類(lèi)分類(lèi)器
        輸入:一個(gè)對(duì)象
        輸出:真品還是贗品
    """
def__init__(self, in_features=28*28, out_features=1):
super(Discriminator, self).__init__()

        self.in_features=in_features
        self.out_features=out_features

# 第一個(gè)隱藏層
        self.hidden0= nn.Linear(in_features=self.in_features, out_features=512)

# 第二個(gè)隱藏層
        self.hidden1= nn.Linear(in_features=512, out_features=256)

# 第三個(gè)隱藏層
        self.hidden2= nn.Linear(in_features=256, out_features=32)

# 第四個(gè)隱藏層
        self.hidden3= nn.Linear(in_features=32, out_features=self.out_features)


defforward(self, x):

# 第一層
        h = self.hidden0(x)
        h = F.leaky_relu(input=h, negative_slope=0.2)
        h = F.dropout(input=h, p=0.2)

# 第二層
        h = self.hidden1(h)
        h = F.leaky_relu(input=h, negative_slope=0.2)
        h = F.dropout(input=h, p=0.2)

# 第三層
        h = self.hidden2(h)
        h = F.leaky_relu(input=h, negative_slope=0.2)
        h = F.dropout(input=h, p=0.2)

# 第四層
        h = self.hidden3(h)

# 輸出概率
        o = torch.sigmoid(h)

return o

構(gòu)建模型

"""
    構(gòu)建模型
"""
# 定義一個(gè)生成器
generator = Generator(in_features=100, out_features=784)
generator.to(device=device)

# 定義一個(gè)鑒別器
discriminator = Discriminator(in_features=784, out_features=1)
discriminator.to(device=device)

定義優(yōu)化器

"""
    定義優(yōu)化器
"""

# 定義一個(gè)生成器的優(yōu)化器
g_optimizer = torch.optim.Adam(params=generator.parameters(), lr=1e-4)

# 定義一個(gè)鑒別的優(yōu)化器
d_optimizer = torch.optim.Adam(params=discriminator.parameters(), lr=1e-4)

定義損失函數(shù)

"""
    定義一個(gè)損失函數(shù)
"""
loss_fn = nn.BCELoss()

籌備訓(xùn)練

定義訓(xùn)練輪次

# 定義訓(xùn)練輪次
num_epochs = 1000

獲取數(shù)據(jù)的標(biāo)簽

"""
    獲取數(shù)據(jù)的標(biāo)簽
"""

defget_real_data_labels(size):
"""
        獲取真實(shí)數(shù)據(jù)的標(biāo)簽
    """
    labels = torch.ones(size,1, device=device)

return labels

defget_fake_data_labels(size):
"""
        獲取虛假數(shù)據(jù)的標(biāo)簽
    """
    labels = torch.zeros(size,1, device=device)

return labels

定義噪聲生成器

"""
    噪聲生成器
"""
defget_noise(size):
"""
        給生成器準(zhǔn)備數(shù)據(jù)
        - 100維度的向量
    """
    X = torch.randn(size,100, device=device)

return X

# 獲取一批測(cè)試數(shù)據(jù)

num_test_samples =16
test_noise = get_noise(num_test_samples)

噪聲生成器的作用:因?yàn)槲覀冃枰O(jiān)控模型訓(xùn)練的效果,所以將噪聲固定下來(lái),在訓(xùn)練過(guò)程中看同樣的噪聲最后給出的結(jié)果是否變得越來(lái)越好。

訓(xùn)練模型

"""
    訓(xùn)練過(guò)程
"""

g_losses =[]
d_losses =[]
for epoch inrange(1, num_epochs+1):

print(f"當(dāng)前正在進(jìn)行 第 {epoch} 輪 ....")

# 設(shè)置訓(xùn)練模式
    generator.train()
    discriminator.train()

# 遍歷真實(shí)的圖像
for batch_idx,(batch_real_data, _)inenumerate(data_loader):
"""
        1, 先訓(xùn)練鑒別器
            鑒別器就是一個(gè)二分類(lèi)問(wèn)題
            - 給一批真數(shù)據(jù),輸出真
            - 給一批假數(shù)據(jù),輸出假
        
        """

# 1.1 準(zhǔn)備數(shù)據(jù)
# 圖像轉(zhuǎn)向量 [b, 1, 28, 28] ---> [b, 784]
# 從數(shù)據(jù)集中獲取100個(gè)真實(shí)的手寫(xiě)數(shù)字圖像
        real_data = batch_real_data.view(batch_real_data.size(0),-1).to(device=device)

# 噪聲[b, 100]
# 隨機(jī)生成100個(gè)100維度的噪聲,用于生成假圖像
        noise = get_noise(real_data.size(0))

# 根據(jù)噪聲,生成假數(shù)據(jù) 
# [b, 100] --> [b, 784]
        fake_data = generator(noise).detach()


# 1.2 訓(xùn)練過(guò)程

# 鑒別器的優(yōu)化器梯度情況
        d_optimizer.zero_grad()

# 對(duì)真實(shí)數(shù)據(jù)鑒別
        real_pred = discriminator(real_data)

# 計(jì)算真實(shí)數(shù)據(jù)的誤差
        real_loss = loss_fn(real_pred, get_real_data_labels(real_data.size(0)))

# 真實(shí)數(shù)據(jù)的梯度回傳
        real_loss.backward()


# 對(duì)假數(shù)據(jù)鑒別
        fake_pred = discriminator(fake_data)

# 計(jì)算假數(shù)據(jù)的誤差
        fake_loss = loss_fn(fake_pred, get_fake_data_labels(fake_data.size(0)))

# 假數(shù)據(jù)梯度回傳
        fake_loss.backward()

# 梯度更新
        d_optimizer.step()

# ----------------
        d_losses.append((real_loss + fake_loss).item())
# print(f"鑒別器的損失:{real_loss + fake_loss}")


"""2, 再訓(xùn)練生成器"""

# 獲取生成器的生成結(jié)果
        fake_pred = generator(get_noise(real_data.size(0)))

# 生產(chǎn)器梯度清空
        g_optimizer.zero_grad()

# 把假數(shù)據(jù)讓鑒別器鑒別一下
# 把discriminator requires_grad = False
# 設(shè)置為不可學(xué)習(xí)
for param in discriminator.parameters():
            param.requires_grad =False

        d_pred = discriminator(fake_pred)

# 設(shè)置為可學(xué)習(xí)
for param in discriminator.parameters():
            param.requires_grad =True

# 計(jì)算損失
# 把一個(gè)假東西,給專(zhuān)家看,專(zhuān)家說(shuō)是真的,這個(gè)時(shí)候,造假的水平就可以了
        g_loss = loss_fn(d_pred, get_real_data_labels(d_pred.size(0)))

# 梯度回傳
        g_loss.backward()

# 參數(shù)更新
        g_optimizer.step()

# print(f"生成器誤差:{g_loss}")
        g_losses.append(g_loss.item())

# 每輪訓(xùn)練之后,觀察生成器的效果
    generator.eval()

with torch.no_grad():

# 正向推理
        img_pred = generator(test_noise)
        img_pred = img_pred.view(img_pred.size(0),28,28).cpu().data

# 畫(huà)圖
        display.clear_output(wait=True)

# 設(shè)置畫(huà)圖的大小
        fig = plt.figure(1, figsize=(12,8))
# 劃分為 4 x 4 的 網(wǎng)格
        gs = gridspec.GridSpec(4,4)

# 遍歷每一個(gè)
for i inrange(4):
for j inrange(4):
# 取每一個(gè)圖
                X = img_pred[i *4+ j,:,:]
# 添加一個(gè)對(duì)應(yīng)網(wǎng)格內(nèi)的子圖
                ax = fig.add_subplot(gs[i, j])
# 在子圖內(nèi)繪制圖像
                ax.matshow(X, cmap=plt.get_cmap("Greys"))
# ax.set_xlabel(f"{label}")
                ax.set_xticks(())
                ax.set_yticks(())
        plt.show()

運(yùn)行結(jié)果:

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

核心代碼說(shuō)明:

訓(xùn)練過(guò)程

  • 隨機(jī)生成一組潛在向量z,并使用生成器生成一組假數(shù)據(jù)。
  • 將一組真實(shí)數(shù)據(jù)和一組假數(shù)據(jù)作為輸入,訓(xùn)練判別器。
  • 使用生成器生成一組新的假數(shù)據(jù),并訓(xùn)練判別器。
  • 重復(fù)步驟2和3,直到生成器生成的假數(shù)據(jù)與真實(shí)數(shù)據(jù)的分布相似。

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

核心代碼

  • ??fake_data = generator(noise).detach()??:

作用:是生成器生成一組假數(shù)據(jù),并使用detach()方法將其從計(jì)算圖中分離出來(lái),防止梯度回傳。

說(shuō)明:(因?yàn)樵谟?xùn)練鑒別器時(shí),生成器只是工具人,其前向傳播過(guò)程中記錄的梯度信息不會(huì)被使用,所以不需要記錄梯度信息)

  • ??g_loss = loss_fn(d_pred, get_real_data_labels(d_pred.size(0)))?? 這里是體現(xiàn)對(duì)抗的核心代碼,即:生成器訓(xùn)練的好不好,是要與真實(shí)數(shù)據(jù)的判別結(jié)果越接近越好。

補(bǔ)充知識(shí)

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

在人工智能模型的訓(xùn)練中,采集樣本是需要成本的,所以為了提升樣本的豐富性,一般會(huì)采用數(shù)據(jù)增強(qiáng)的方式。

  • 方式:在樣本固定的基礎(chǔ)上,通過(guò)軟件模擬,來(lái)生成假數(shù)據(jù),豐富樣本的多樣性
  • 本質(zhì):給樣本加上適當(dāng)?shù)脑肼暎M出不同場(chǎng)景的樣本
  • 說(shuō)明:數(shù)據(jù)增強(qiáng)只發(fā)生在模型訓(xùn)練中,為了增加訓(xùn)練樣本的多樣性

transform介紹

在 PyTorch 中,transform 主要用于數(shù)據(jù)預(yù)處理和增強(qiáng),特別是在圖像處理任務(wù)中。transform 是 torchvision 庫(kù)的一部分,能夠?qū)?shù)據(jù)集中的圖像進(jìn)行各種轉(zhuǎn)換,以便更好地適應(yīng)模型訓(xùn)練的需求。以下是 transform 的主要作用

import torch
from torchvision import datasets, transforms

from PIL import Image
import matplotlib.pyplot as plt

# 讀取本地下載的一張圖片
img = Image.open('girl.png')
img

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

重設(shè)圖片尺寸

resize = transforms.Resize((300, 200))
resize_img = resize(img)
resize_img

運(yùn)行效果:

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

中心裁剪

centercrop = transforms.CenterCrop(size=(200, 200))
center_img = centercrop(img)
center_img

運(yùn)行效果:

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

隨機(jī)調(diào)整亮度、飽和度、對(duì)比度等

color_jitter = transforms.ColorJitter(brightness=0.5, 
                                      contrast=0.5, 
                                      saturation=0.5, 
                                      hue=0.5)
color_jitter(img)

運(yùn)行效果:

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

隨機(jī)旋轉(zhuǎn)

random_rotation = transforms.RandomRotation(degrees=10)
random_rotation(img)

運(yùn)行效果:

對(duì)抗生成網(wǎng)絡(luò)GAN-AI.x社區(qū)

組合變換

Compose:可以將多個(gè)變換組合在一起,形成一個(gè)轉(zhuǎn)換管道,方便批量處理。例如:

from torchvision import transforms

transform = transforms.Compose([
    transforms.Resize((128, 128)),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),          # 將PIL Image轉(zhuǎn)換為T(mén)ensor
    transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]), # 將數(shù)據(jù)歸一化到[-1, 1]之間
])

內(nèi)容小結(jié)

  • GAN(生成對(duì)抗網(wǎng)絡(luò))是一種特殊的學(xué)習(xí)策略,它由生成器和判別器組成,生成器生成假數(shù)據(jù),判別器判斷真假。
  • 生成器(Generator)通過(guò)機(jī)器生成假的數(shù)據(jù)(大部分情況下是圖像),最終目的是“騙過(guò)”判別器。
  • 判別器(Discriminator):判斷這張圖像是真實(shí)的還是機(jī)器生成的,目的是找出生成器做的“假數(shù)據(jù)”。
  • 訓(xùn)練過(guò)程是:先訓(xùn)練判別器,再訓(xùn)練生成器。
  • 訓(xùn)練判別器時(shí),生成器是"工具人",所以需要使用detach()方法,將生成器生成的假數(shù)據(jù)從計(jì)算圖中分離出來(lái),防止梯度回傳。
  • 訓(xùn)練生成器時(shí),判別器是"工具人",為了避免整個(gè)梯度消失,需要使用param.requires_grad = False設(shè)置為不可學(xué)習(xí),判別完之后再使用param.requires_grad = True設(shè)置為可學(xué)習(xí)。
  • 在人工智能模型訓(xùn)練過(guò)程中,通常會(huì)使用數(shù)據(jù)增強(qiáng)的方式,在樣本固定的基礎(chǔ)上,通過(guò)軟件模擬,來(lái)生成假數(shù)據(jù),豐富樣本的多樣性。
  • transform:在 PyTorch 中,transform 主要用于數(shù)據(jù)預(yù)處理和增強(qiáng),特別是在圖像處理任務(wù)中。

?

本文轉(zhuǎn)載自公眾號(hào)一起AI技術(shù) 作者:Dongming

原文鏈接:??https://mp.weixin.qq.com/s/tHEfP7_rTXkXWfWJZu9vYw??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
中文字幕乱码视频| 懂色av蜜桃av| 手机av在线| 久久精品男人的天堂| 国产美女久久精品香蕉69| 永久久久久久久| 日本中文字幕在线一区| 欧美视频第二页| 成人小视频在线观看免费| 午夜视频在线免费播放| 久久狠狠亚洲综合| 69精品小视频| 国产一二三区精品| 亚洲传媒在线| 欧美一二三区在线观看| 免费无码不卡视频在线观看| 在线观看免费高清完整| 成人免费视频caoporn| 国产精品第一区| 免费在线一区二区三区| 亚洲欧洲免费| 日韩欧美色综合网站| aa在线免费观看| av免费网站在线观看| 91在线视频官网| 亚洲aⅴ男人的天堂在线观看| 国产精品100| 欧美日韩18| 色综久久综合桃花网| 日本少妇毛茸茸| 精品中文字幕一区二区三区四区| 欧美日韩裸体免费视频| 97在线免费视频观看| 国产福利片在线| 成人av影院在线| 国产欧美日韩综合精品| 久久夜靖品2区| 欧美激情日韩| 久久综合免费视频| 夫妇露脸对白88av| 奇米狠狠一区二区三区| 亚洲国产欧美自拍| avtt中文字幕| 精品亚洲二区| 91精品中文字幕一区二区三区| 国产黄色特级片| 欧美极品videos大乳护士| 亚洲精品美国一| 韩国黄色一级大片| 日本不卡三区| 国产精品久久久久婷婷二区次| 欧洲一区二区日韩在线视频观看免费 | 无码精品人妻一区二区| 国产精品一级片| 91久久国产精品91久久性色| 中文在线字幕av| 日韩av一二三| 国产精品久久久久久久久久久久久| 日本三级小视频| 午夜在线精品| 国产成人在线一区| www.日韩一区| 青娱乐精品视频| 国产精品老女人精品视频| 欧美三级网站在线观看| 日韩国产精品久久| 国产精品永久免费在线| 亚洲综合精品国产一区二区三区| 日韩vs国产vs欧美| 国产日韩精品在线观看| 国产欧美一级片| 国产成人综合亚洲91猫咪| 粉嫩精品一区二区三区在线观看 | 亚洲第一综合网站| av免费在线观看网站| 一区二区三区精品视频| 免费看国产一级片| 伊人久久国产| 欧美日韩在线综合| 永久看看免费大片| 精品少妇3p| 伊是香蕉大人久久| caoporn91| 亚洲激情在线| 国产精品爽爽ⅴa在线观看| 亚洲综合免费视频| 岛国一区二区在线观看| 欧美日韩精品中文字幕一区二区| 国产一级免费在线观看| 成人欧美一区二区三区小说| 17c丨国产丨精品视频| 男人久久天堂| 欧美日韩免费视频| 国产精品日日摸夜夜爽| 九九精品久久| 久久91亚洲人成电影网站 | 91久久精品一区二区三区| 日韩一级理论片| 欧美2区3区4区| 亚洲乱码一区av黑人高潮| 永久av免费网站| 99热在线精品观看| 国产啪精品视频网站| 免费成人在线看| 国产精品私人影院| 被灌满精子的波多野结衣| 日韩毛片在线| 亚洲大胆人体视频| 极品色av影院| 久久精品毛片| 99久久精品无码一区二区毛片| 涩涩视频在线观看免费| 亚洲天堂2016| av网址在线观看免费| 日韩精品视频一区二区三区| 亚洲欧美中文字幕在线一区| 久草网站在线观看| 开心九九激情九九欧美日韩精美视频电影 | 国产污污视频在线观看| 久久99久久99精品免视看婷婷| 久久国产精品免费一区| www视频在线免费观看| 欧美性做爰猛烈叫床潮| 少妇精品无码一区二区三区| 91久久国产| 国产精品国语对白| 香港三日本三级少妇66| 一区二区三区中文字幕精品精品| 999精彩视频| 亚洲97av| 992tv成人免费影院| 亚洲不卡免费视频| 亚洲视频在线观看三级| 五月婷婷激情久久| 国产精品免费不| 欧美一级高清免费播放| 秋霞欧美在线观看| 亚洲综合色网站| 欧美一级小视频| 日韩久久久久| 国产成+人+综合+亚洲欧洲| 香蕉久久国产av一区二区| 亚洲综合另类小说| 精人妻一区二区三区| 欧美va天堂在线| 97超碰人人看人人| 羞羞视频在线观看不卡| 91精品国产综合久久香蕉麻豆| 超碰人人人人人人人| 日韩av电影一区| 午夜视频久久久| 123成人网| 中文字幕视频在线免费欧美日韩综合在线看| 日韩精品一区二区三区国语自制| 国产99久久久国产精品免费看| 久久av喷吹av高潮av| 欧美精品三级在线| 欧美激情欧美激情| 欧美一级特黄aaaaaa大片在线观看| 亚洲最新在线观看| 国产麻豆xxxvideo实拍| 国产欧美三级| 日韩一区免费观看| 日韩精品第二页| 另类色图亚洲色图| www.日本在线观看| 午夜国产不卡在线观看视频| 中文字幕一区二区久久人妻网站| 一区二区三区高清视频在线观看| 久久综合伊人77777麻豆| 欧美特黄aaaaaaaa大片| 中文字幕日韩有码| 国产成人精品一区二三区四区五区| 亚洲综合色成人| 国产精品三级在线观看无码| 日韩高清不卡在线| 超碰成人在线免费观看| 99这里只有精品视频| 91成人国产在线观看| 精彩国产在线| 欧美高清www午色夜在线视频| 欧洲猛交xxxx乱大交3| 成人黄色网址在线观看| 欧美一级黄色片视频| 久久中文视频| 国产精品香蕉视屏| 91p九色成人| 欧美情侣性视频| 国产永久免费高清在线观看视频| 欧美肥妇毛茸茸| 免费在线不卡视频| 日韩理论片一区二区| 日本三级日本三级日本三级极| 久久福利精品| 中文字幕精品在线播放| 天堂俺去俺来也www久久婷婷| 国产精品久久久久久亚洲影视 | 国内精品久久久久久久影视简单| 成人激情春色网| 美女在线视频免费| 久久精品最新地址| 三级在线播放| 91精品视频网| 69视频免费看| 亚洲国产你懂的| 中文国语毛片高清视频| 99精品在线免费| 红桃视频一区二区三区免费| 久久av最新网址| 日韩欧美猛交xxxxx无码| 欧美三级情趣内衣| 韩国成人av| 国产精品2区| 国产精品免费久久久| 欧美aaaxxxx做受视频| 色噜噜狠狠色综合网图区| 天堂网在线观看视频| 91精品国产麻豆国产自产在线| 潘金莲一级淫片aaaaaa播放| 亚洲国产毛片aaaaa无费看| 小嫩苞一区二区三区| 久久精品人人爽人人爽| 影音先锋人妻啪啪av资源网站| 国产精品一级二级三级| 亚洲男人天堂av在线| 天堂精品中文字幕在线| 国产婷婷一区二区三区| 欧美1区2区视频| 中文字幕不卡每日更新1区2区| 久久99国产精一区二区三区| 精品不卡在线| 国产精品白丝一区二区三区| 亚洲一区二区三| 日韩电影精品| 国产日韩欧美一二三区| 欧美日韩女优| 国产精品第1页| 精品欧美一区二区三区在线观看| 欧美又大粗又爽又黄大片视频| 久久青草伊人| 777午夜精品福利在线观看| 大桥未久在线播放| 欧美激情视频在线免费观看 欧美视频免费一| 99riav在线| 色综合伊人色综合网| 欧美a免费在线| 日韩在线播放视频| 色多多视频在线观看| 日韩亚洲精品电影| 毛片在线看网站| 久久精品夜夜夜夜夜久久| 成视频免费观看在线看| 欧美成人午夜视频| 欧美草逼视频| 91国产视频在线| 神马午夜在线视频| 国产精品九九九| 国产亚洲精彩久久| 91久久在线观看| 99re8这里有精品热视频免费| av一本久道久久波多野结衣| 亚洲一区二区免费在线观看| 懂色一区二区三区av片| 日本欧美高清| 色噜噜狠狠色综合网| 久久中文字幕二区| 超碰超碰超碰超碰超碰| 激情婷婷欧美| 欧美日韩第二页| 久久精品国产亚洲高清剧情介绍 | 日韩视频精品在线| h片在线免费| 91av中文字幕| 久草综合在线| 国产精品二区在线| 一区二区三区韩国免费中文网站| 日韩精品资源| 一本到12不卡视频在线dvd| 日韩精品视频在线观看视频| 久久av在线| 日本黄色www| 久久视频一区二区| 黄色香蕉视频在线观看| 亚洲成a人v欧美综合天堂下载 | 国内精品久久久久影院色| 亚洲 自拍 另类 欧美 丝袜| 99久久99久久精品国产片果冻 | jjzz黄色片| 久久女同精品一区二区| www.5588.com毛片| 欧美日韩美女在线观看| 在线观看中文字幕av| 精品国产免费人成在线观看| 都市激情在线视频| 久久久久久国产精品三级玉女聊斋 | 97精品国产97久久久久久免费| 成人va天堂| www.久久艹| 成人一二三区| 久久成人免费观看| 国产在线国偷精品免费看| 亚洲av成人片色在线观看高潮| 18涩涩午夜精品.www| 国产一级片毛片| 日韩三级视频中文字幕| 国产中文字幕在线| 韩国欧美亚洲国产| 91麻豆精品国产综合久久久| 久久综合九色欧美狠狠| 欧美日韩三级| 中文字幕第88页| 91女厕偷拍女厕偷拍高清| 99精品久久久久| 欧美日韩免费在线视频| 深夜福利在线观看直播| 久国内精品在线| 亚洲欧美一级| 水蜜桃一区二区| 免费欧美在线| 日本三级日本三级日本三级极| 亚洲欧美一区二区久久| 免费在线不卡av| 亚洲欧洲第一视频| 97超碰免费在线| 99久久免费国| 欧美日韩国产探花| 国产探花在线观看视频| 亚洲国产成人午夜在线一区| 欧美日韩精品区| 精品成人一区二区三区四区| caoporn97在线视频| 国产精品久久电影观看| 国产aⅴ精品一区二区三区久久| 欧美视频在线观看网站| 成人免费高清视频| 国产精选第一页| 精品国偷自产国产一区| 中文字幕中文字幕在线十八区| 国产欧美精品va在线观看| 成人动漫免费在线观看| 亚洲老女人av| 亚洲国产高清在线| 91av国产精品| 日韩在线免费视频| 日韩三级成人| 正在播放一区二区三区| 久草在线在线精品观看| 在线观看天堂av| 欧美老年两性高潮| 日韩精品黄色| 91精品综合视频| 欧美日韩国产高清| 好吊色视频一区二区三区| 亚洲午夜一区二区三区| 欧美熟妇交换久久久久久分类| 97在线视频免费| 九九视频精品全部免费播放| 玩弄japan白嫩少妇hd| 国产亚洲欧美激情| 亚洲天堂狠狠干| 欧美精品性视频| 国产欧美一区二区三区米奇| 日韩欧美一区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 日本va欧美va欧美va精品| 国产视频不卡在线| 3atv一区二区三区| 91精品久久| 久久久久久久免费| 日本sm残虐另类| 欧美三根一起进三p| 亚洲第一精品夜夜躁人人躁| 综合日韩av| 亚洲一区三区| 国产成人av一区二区| wwwwww国产| 日韩小视频在线| www.成人网| 国产三级三级三级看三级| 中文字幕字幕中文在线中不卡视频| 黄频网站在线观看| 国产成人在线亚洲欧美| 欧美 亚欧 日韩视频在线| 亚洲av无码国产精品久久| 欧美视频在线观看一区| 日本伦理一区二区| 欧美日韩系列| 国产精品18久久久久久久网站| 日韩欧美激情视频| 日韩中文在线不卡| 好吊妞视频这里有精品| 色悠悠久久综合网| 亚洲h动漫在线| 男人天堂手机在线| 久久精品中文字幕一区二区三区| 麻豆国产欧美一区二区三区| 国产在线成人精品午夜| 中文字幕日韩有码| 日韩成人av在线资源| 国产精品嫩草影视|