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

快速學(xué)習(xí)一個(gè)算法,Vision Transformer

開(kāi)發(fā) 前端
為了保留圖像塊的位置信息,ViT 在嵌入向量中加入位置編碼,這是 Transformer 架構(gòu)中的一個(gè)關(guān)鍵組成部分。

Vision Transformer(ViT)是一種基于自注意力機(jī)制的神經(jīng)網(wǎng)絡(luò)架構(gòu),主要用于處理圖像數(shù)據(jù)。

它是由谷歌研究人員在 2020 年提出的,標(biāo)志著「將自然語(yǔ)言處理(NLP)中廣泛使用的 Transformer 模型成功應(yīng)用于計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)重要進(jìn)展。」


基本原理和架構(gòu)

Vision Transformer 的核心思想是將圖像分解為一系列的小塊(稱(chēng)為 patches),這些小塊在輸入網(wǎng)絡(luò)之前被展平并映射到高維空間。這與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)不同,后者通常會(huì)使用卷積層來(lái)處理整個(gè)圖像并提取局部特征。

圖片圖片

1.圖像分塊

首先,ViT 將輸入圖像切割成固定大小的小塊(例如,16x16像素的塊)。每個(gè)塊被視為一個(gè) “token”,與 NLP 中的單詞類(lèi)似。

2.嵌入層

這些圖像塊(patches)被展平并通過(guò)一個(gè)線(xiàn)性層轉(zhuǎn)換成一系列的嵌入向量。

此外,還會(huì)添加一個(gè)可學(xué)習(xí)的 “class” 嵌入,用于聚合全局信息。

圖片圖片

3.位置編碼

為了保留圖像塊的位置信息,ViT 在嵌入向量中加入位置編碼,這是 Transformer 架構(gòu)中的一個(gè)關(guān)鍵組成部分。

4.Transformer 編碼器

經(jīng)過(guò)嵌入的圖像塊(現(xiàn)在作為序列的一部分)輸入到標(biāo)準(zhǔn)的 Transformer編碼器中。

編碼器使用多頭自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)來(lái)處理序列,允許模型捕獲塊之間的復(fù)雜關(guān)系。

5.分類(lèi)頭

對(duì)于分類(lèi)任務(wù),Transformer 的輸出(特別是 [CLS] token 的輸出)會(huì)傳遞到一個(gè)前饋網(wǎng)絡(luò)(即分類(lèi)頭),該網(wǎng)絡(luò)輸出最終的類(lèi)別預(yù)測(cè)。

優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn)

  • 強(qiáng)大的全局信息處理能力
    通過(guò)自注意力機(jī)制,ViT 可以在圖像的任何部分之間建立直接的聯(lián)系,有效捕捉全局依賴(lài)關(guān)系。
  • 高度靈活性
    ViT 模型可以很容易地調(diào)整到不同大小的輸入,且模型架構(gòu)可擴(kuò)展性強(qiáng)。
  • 更適合大規(guī)模數(shù)據(jù)集
    ViT 在大規(guī)模數(shù)據(jù)集上表現(xiàn)通常優(yōu)于傳統(tǒng) CNN,可以學(xué)習(xí)更復(fù)雜的視覺(jué)模式。

缺點(diǎn)

  • 需要更多的訓(xùn)練數(shù)據(jù)
    ViT 依賴(lài)大量數(shù)據(jù)來(lái)訓(xùn)練,以防止過(guò)擬合,對(duì)于數(shù)據(jù)較少的情況可能不如 CNN 有效。
  • 計(jì)算成本高
    由于需要計(jì)算長(zhǎng)距離的依賴(lài)關(guān)系,ViT 在計(jì)算和內(nèi)存需求上通常比CNN要高。

代碼實(shí)現(xiàn)

下面,我們一起來(lái)看一下如何使用 VIT 來(lái)預(yù)測(cè)一張圖片的類(lèi)別

1.圖像分塊

import os
import copy
import math
import typing
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
mountains = np.load('mountains.npy')
H = mountains.shape[0]
W = mountains.shape[1]
print('Mountain at Dusk is H =', H, 'and W =', W, 'pixels.')
P = 20
N = int((H*W)/(P**2))
print('There will be', N, 'patches, each', P, 'by', str(P)+'.')
fig = plt.figure(figsize=(10,6))
plt.imshow(mountains, cmap='Purples_r')
plt.hlines(np.arange(P, H, P)-0.5, -0.5, W-0.5, color='w')
plt.vlines(np.arange(P, W, P)-0.5, -0.5, H-0.5, color='w')
plt.xticks(np.arange(-0.5, W+1, 10), labels=np.arange(0, W+1, 10))
plt.yticks(np.arange(-0.5, H+1, 10), labels=np.arange(0, H+1, 10))
x_text = np.tile(np.arange(9.5, W, P), 3)
y_text = np.repeat(np.arange(9.5, H, P), 5)
for i in range(1, N+1):
    plt.text(x_text[i-1], y_text[i-1], str(i), color='w', fnotallow='xx-large', ha='center')
plt.text(x_text[2], y_text[2], str(3), color='k', fnotallow='xx-large', ha='center');

圖片圖片

通過(guò)展平這些色塊,我們可以看到生成的 token。我們以色塊 12 為例,因?yàn)樗姆N不同的色調(diào)。

print('Each patch will make a token of length', str(P**2)+'.')

patch12 = mountains[40:60, 20:40]
token12 = patch12.reshape(1, P**2)
fig = plt.figure(figsize=(10,1))
plt.imshow(token12, aspect=10, cmap='Purples_r')
plt.clim([0,1])
plt.xticks(np.arange(-0.5, 401, 50), labels=np.arange(0, 401, 50))
plt.yticks([])

圖片圖片

2.嵌入層

從圖像中提取 token 后,通常使用線(xiàn)性投影來(lái)更改 token 的長(zhǎng)度。

class Patch_Tokenization(nn.Module):
    def __init__(self,
                img_size: tuple[int, int, int]=(1, 1, 60, 100),
                patch_size: int=50,
                token_len: int=768):

        super().__init__()
        self.img_size = img_size
        C, H, W = self.img_size
        self.patch_size = patch_size
        self.token_len = token_len
        assert H % self.patch_size == 0, 'Height of image must be evenly divisible by patch size.'
        assert W % self.patch_size == 0, 'Width of image must be evenly divisible by patch size.'
        self.num_tokens = (H / self.patch_size) * (W / self.patch_size)

        ## Defining Layers
        self.split = nn.Unfold(kernel_size=self.patch_size, stride=self.patch_size, padding=0)
        self.project = nn.Linear((self.patch_size**2)*C, token_len)

    def forward(self, x):
        x = self.split(x).transpose(1,0)
        x = self.project(x)
        return x

請(qǐng)注意,這兩個(gè) assert 語(yǔ)句確保圖像尺寸可以被塊大小整除。實(shí)際分割成塊的操作是使用 torch.nn.Unfold 層實(shí)現(xiàn)的。

x = torch.from_numpy(mountains).unsqueeze(0).unsqueeze(0).to(torch.float32)
token_len = 768
print('Input dimensions are\n\tbatchsize:', x.shape[0], '\n\tnumber of input channels:', x.shape[1], '\n\timage size:', (x.shape[2], x.shape[3]))

# Define the Module
patch_tokens = Patch_Tokenization(img_size=(x.shape[1], x.shape[2], x.shape[3]),
                                    patch_size = P,
                                    token_len = token_len)

x = patch_tokens.split(x).transpose(2,1)
print('After patch tokenization, dimensions are\n\tbatchsize:', x.shape[0], '\n\tnumber of tokens:', x.shape[1], '\n\ttoken length:', x.shape[2])

x = patch_tokens.project(x)
print('After projection, dimensions are\n\tbatchsize:', x.shape[0], '\n\tnumber of tokens:', x.shape[1], '\n\ttoken length:', x.shape[2])

圖片圖片

從上圖可以看到,經(jīng)過(guò)線(xiàn)性投影層后,token 的維度變成了 768 維。

3.位置編碼

接下來(lái)將一個(gè)空白 token(稱(chēng)為預(yù)測(cè)標(biāo)記)添加到圖像 token 之前。「此 token 將在編碼器的輸出中用于進(jìn)行預(yù)測(cè)。」

它從空白(相當(dāng)于零)開(kāi)始,以便它可以從其他圖像 token 中獲取信息。

pred_token = torch.zeros(1, 1, x.shape[2]).expand(x.shape[0], -1, -1)
x = torch.cat((pred_token, x), dim=1)

然后,我們?yōu)?token 添加一個(gè)位置嵌入。

位置嵌入允許 transformer 理解圖像標(biāo)記的順序。

def get_sinusoid_encoding(num_tokens, token_len):

    def get_position_angle_vec(i):
        return [i / np.power(10000, 2 * (j // 2) / token_len) for j in range(token_len)]

    sinusoid_table = np.array([get_position_angle_vec(i) for i in range(num_tokens)])
    sinusoid_table[:, 0::2] = np.sin(sinusoid_table[:, 0::2])
    sinusoid_table[:, 1::2] = np.cos(sinusoid_table[:, 1::2]) 

    return torch.FloatTensor(sinusoid_table).unsqueeze(0)



PE = get_sinusoid_encoding(x.shape[1]+1, x.shape[2])
print('Position embedding dimensions are\n\tnumber of tokens:', PE.shape[1], '\n\ttoken length:', PE.shape[2])

x = x + PE
print('Dimensions with Position Embedding are\n\tbatchsize:', x.shape[0], '\n\tnumber of tokens:', x.shape[1], '\n\ttoken length:', x.shape[2])

4.編碼器

編碼器是模型實(shí)際從圖像 token 中學(xué)習(xí)的地方。

編碼器主要由注意力模塊和神經(jīng)網(wǎng)絡(luò)模塊組成。

NoneFloat = typing.Union[None, float]
class Attention(nn.Module):
    def __init__(self, 
                dim: int,
                chan: int,
                num_heads: int=1,
                qkv_bias: bool=False, qk_scale: Nnotallow=None):

        super().__init__()

        
        self.num_heads = num_heads
        self.chan = chan
        self.head_dim = self.chan // self.num_heads
        self.scale = qk_scale or self.head_dim ** -0.5

        self.qkv = nn.Linear(dim, chan * 3, bias=qkv_bias)
        self.proj = nn.Linear(chan, chan)

    def forward(self, x):
        if self.chan % self.num_heads != 0:
            raise ValueError('"Chan" must be evenly divisible by "num_heads".')
        B, N, C = x.shape
        qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4)
        
        q, k, v = qkv[0], qkv[1], qkv[2]

        ## Calculate Attention
        attn = (q * self.scale) @ k.transpose(-2, -1)
        attn = attn.softmax(dim=-1)
      
        x = (attn @ v).transpose(1, 2).reshape(B, N, self.chan)
        x = self.proj(x)

        ## Skip Connection Layer
        v = v.transpose(1, 2).reshape(B, N, self.chan)
        x = v + x     
        return x

class NeuralNet(nn.Module):
    def __init__(self,
       in_chan: int,
       hidden_chan: Nnotallow=None,
       out_chan: Nnotallow=None,
       act_layer = nn.GELU):

        super().__init__()

        ## Define Number of Channels
        hidden_chan = hidden_chan or in_chan
        out_chan = out_chan or in_chan

        ## Define Layers
        self.fc1 = nn.Linear(in_chan, hidden_chan)
        self.act = act_layer()
        self.fc2 = nn.Linear(hidden_chan, out_chan)

    def forward(self, x):
        x = self.fc1(x)
        x = self.act(x)
        x = self.fc2(x)
        return x

class Encoding(nn.Module):
    def __init__(self,
       dim: int,
       num_heads: int=1,
       hidden_chan_mul: float=4.,
       qkv_bias: bool=False,
       qk_scale: Nnotallow=None,
       act_layer=nn.GELU, 
       norm_layer=nn.LayerNorm):

        super().__init__()

        ## Define Layers
        self.norm1 = norm_layer(dim)
        self.attn = Attention(dim=dim,
                            chan=dim,
                            num_heads=num_heads,
                            qkv_bias=qkv_bias,
                            qk_scale=qk_scale)
        self.norm2 = norm_layer(dim)
        self.neuralnet = NeuralNet(in_chan=dim,
                                hidden_chan=int(dim*hidden_chan_mul),
                                out_chan=dim,
                                act_layer=act_layer)

    def forward(self, x):
        x = x + self.attn(self.norm1(x))
        x = x + self.neuralnet(self.norm2(x))
        return x

現(xiàn)在,我們將通過(guò)一個(gè)注意力模塊。

E = Encoding(dim=x.shape[2], num_heads=4, hidden_chan_mul= 1.5 , qkv_bias= False , qk_scale= None , act_layer=nn.GELU, norm_layer=nn.LayerNorm) 
y = E.norm1(x)
print('After norm, dimensions are\n\tbatchsize:', y.shape[0], '\n\tnumber of tokens:', y.shape[1], '\n\ttoken size:', y.shape[2])
y = E.attn(y)
print('After attention, dimensions are\n\tbatchsize:', y.shape[0], '\n\tnumber of tokens:', y.shape[1], '\n\ttoken size:', y.shape[2])
y = y + x
print('After split connection, dimensions are\n\tbatchsize:', y.shape[0], '\n\tnumber of tokens:', y.shape[1], '\n\ttoken size:', y.shape[2])

接下來(lái),我們經(jīng)過(guò)一個(gè)神經(jīng)網(wǎng)絡(luò)模塊。

z = E.norm2(y)
print('After norm, dimensions are\n\tbatchsize:', z.shape[0], '\n\tnumber of tokens:', z.shape[1], '\n\ttoken size:', z.shape[2])
z = E.neuralnet(z)
print('After neural net, dimensions are\n\tbatchsize:', z.shape[0], '\n\tnumber of tokens:', z.shape[1], '\n\ttoken size:', z.shape[2])
z = z + y
print('After split connection, dimensions are\n\tbatchsize:', z.shape[0], '\n\tnumber of tokens:', z.shape[1], '\n\ttoken size:', z.shape[2])

圖片圖片

「這就是單個(gè)編碼器的全部?jī)?nèi)容!由于最終尺寸與初始尺寸相同,因此模型可以輕松地將 token 傳遞到多個(gè)編碼器。」

5.分類(lèi)頭

經(jīng)過(guò)編碼器后,模型要做的最后一件事就是進(jìn)行預(yù)測(cè)。

norm = nn.LayerNorm(token_len)
z = norm(z)
pred_token = z[:, 0]
head = nn.Linear(pred_token.shape[-1], 1)
pred = head(pred_token)
print('Length of prediction:', (pred.shape[0], pred.shape[1]))
print('Prediction:', float(pred))


責(zé)任編輯:武曉燕 來(lái)源: 程序員學(xué)長(zhǎng)
相關(guān)推薦

2024-07-12 08:38:05

2024-08-02 10:28:13

算法NLP模型

2024-08-12 00:00:05

集成學(xué)習(xí)典型算法代碼

2024-07-30 08:08:49

2024-08-08 12:33:55

算法

2024-09-09 23:04:04

2024-08-22 08:21:10

算法神經(jīng)網(wǎng)絡(luò)參數(shù)

2024-09-24 07:28:10

2024-08-21 08:21:45

CNN算法神經(jīng)網(wǎng)絡(luò)

2024-06-03 08:09:39

2024-12-19 00:16:43

2024-06-06 09:44:33

2024-07-19 08:21:24

2024-06-19 09:47:21

2024-08-29 09:18:55

2024-08-22 08:24:51

算法CNN深度學(xué)習(xí)

2024-12-04 10:33:17

2024-11-11 00:00:02

卷積神經(jīng)網(wǎng)絡(luò)算法

2024-06-12 10:18:33

2018-06-19 16:04:27

Dubbo應(yīng)用Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品视频麻豆| 久久九九电影| 亚洲成人网在线| 国产a级一级片| 成年人视频在线观看免费| 美女视频免费一区| 欧美精品制服第一页| 中国一级特黄录像播放| 天天综合网站| 亚洲美女屁股眼交3| 看高清中日韩色视频| 在线观看国产黄| 一区二区亚洲精品| 国产一区二区三区欧美| 性活交片大全免费看| 日韩a**中文字幕| 亚洲综合一二区| 亚洲精品一区二区三区av| 成 人 黄 色 片 在线播放| 久久久久国产精品一区二区| 久久精品精品电影网| 国产草草浮力影院| 欧美黄色a视频| 国产91亚洲精品| 日本一区二区精品视频| 在线观看免费视频一区| 在线日韩中文| 中文字幕在线看视频国产欧美在线看完整| 国产成人精品日本亚洲| 中文字幕在线观看2018| 亚洲人成网www| 欧美α欧美αv大片| 蜜臀av免费观看| 三级在线观看视频| 一区二区三区视频在线看| 色综合视频二区偷拍在线| 好吊色一区二区| 精品一区二区三区在线播放 | 欧美久色视频| 中文字幕在线成人| 国产精品密蕾丝袜| 欧美亚视频在线中文字幕免费| 91精品国产色综合久久久蜜香臀| 亚洲黄色av网址| 日韩欧美看国产| 精品国产成人av| 国产一二三在线视频| 1024在线播放| 亚洲女同一区二区| 在线精品亚洲一区二区| 888av在线| 国产欧美日韩综合精品一区二区 | 日韩在线高清| 中文字幕九色91在线| 精品无码人妻一区| 香蕉久久精品日日躁夜夜躁| 亚洲电影第1页| 亚洲av成人精品一区二区三区| 日韩精品免费视频一区二区三区| 欧美丰满嫩嫩电影| 成年人网站av| 精品伊人久久| 欧美成人女星排行榜| 色综合久久久无码中文字幕波多| 欧美黄色一级| 亚洲高清在线观看| 欧美深性狂猛ⅹxxx深喉| 欧美理伦片在线播放| 国产丝袜一区二区| 亚洲成人黄色av| 日本久久精品| 久久国产天堂福利天堂| 欧美日韩成人免费观看| 亚洲精品系列| 国产91色在线| 亚洲中文字幕在线一区| 国产乱码精品一区二区三区av| 99porn视频在线| 五月天婷婷在线观看| 久久久久久久综合日本| 亚洲不卡一卡2卡三卡4卡5卡精品| 撸视在线观看免费视频| 国产精品国产精品国产专区不蜜| 特级黄色录像片| av中文在线资源| 色视频成人在线观看免| www.久久91| 免费精品一区| 精品一区电影国产| 999精品久久久| 国产一区清纯| 国产成人精品久久久| 国产精品久久久久久无人区| 国产成人精品亚洲午夜麻豆| 久久精品国产美女| 亚洲成人影院麻豆| 亚洲成人免费看| 五月婷婷激情久久| 亚洲视频国产| 一区二区三区日韩在线| 欧美日韩精品在线观看视频| 久久xxxx精品视频| 114国产精品久久免费观看| 天堂在线一二区| 亚洲欧洲精品一区二区三区| 国产精品无码人妻一区二区在线| 国产一区二区精品调教| 精品久久一二三区| 欧美aaa级片| 99精品热6080yy久久| 国产日本欧美在线观看| 欧美日韩国产亚洲沙发| 亚洲欧美激情一区二区| 老司机午夜av| 国产成人福利av| 精品国产一区二区三区四区在线观看 | 欧美精品电影在线| 在线免费观看av片| 91蜜桃传媒精品久久久一区二区| 在线观看亚洲视频啊啊啊啊| 在线视频超级| 精品久久99ma| 日韩福利小视频| 免费在线看成人av| 久久久久综合一区二区三区| 亚洲按摩av| 欧美日韩国产综合视频在线观看 | 三区四区不卡| 555www成人网| 蜜臀av在线观看| 亚洲精品免费播放| 天堂在线一区二区三区| 欧美精品一二| 琪琪亚洲精品午夜在线| 日韩一区二区三区在线观看视频| 亚洲特级片在线| wwww.国产| 狠狠色丁香婷婷综合影院| 国外成人性视频| 黄频网站在线观看| 一区二区三区四区视频精品免费 | 蝌蚪视频在线播放| 精品色蜜蜜精品视频在线观看| 亚洲成人福利视频| 欧美在线网站| 51午夜精品| 91精品久久| 欧美一级理论片| 日韩精品123区| 蜜臀av一区二区在线免费观看| 欧美日韩一区二区视频在线| 性感女国产在线| 亚洲精品国产综合久久| 国产又粗又爽视频| 久久久av毛片精品| 国产精品乱码久久久久| 日韩www.| 91精品国产综合久久香蕉| 嫩草在线视频| 日韩美女在线视频| 国产一级在线观看视频| 不卡的av网站| 农村妇女精品一二区| 国产a久久精品一区二区三区| 日韩av成人在线| 在线免费看黄网站| 在线播放中文字幕一区| 欧美日韩在线视频免费| 成人国产电影网| a√天堂在线观看| 成人一二三区| 亚洲综合成人婷婷小说| 波多野结依一区| 国产视频久久久久久久| 日本一区二区三区久久| 亚洲欧美偷拍三级| 极品白嫩的小少妇| 久久午夜精品| 在线播放 亚洲| 超碰成人福利| 国产成人aa精品一区在线播放| 春暖花开成人亚洲区| 欧美一区二区在线免费播放| 免费一级特黄特色大片| 久久九九久久九九| 尤物网站在线看| 日韩视频一区二区三区在线播放免费观看| 久久草.com| 欧美成人一二区| 久久久免费观看视频| 国产玉足榨精视频在线观看| 91精品久久久久久久91蜜桃| 日本熟妇成熟毛茸茸| 国产日韩欧美麻豆| 国产又粗又猛又爽又黄| 亚洲三级毛片| 一区二区三区四区视频在线观看| 一区中文字幕电影| 国产精品91久久久| 手机在线免费观看av| 亚洲图片欧美日产| 性一交一乱一伧老太| 色妞www精品视频| 国产一级在线免费观看| 国产精品入口麻豆九色| 精品无码人妻少妇久久久久久| 日本最新不卡在线| 欧美视频在线观看视频| 日韩久久精品| 免费在线成人av电影| 伊人精品久久| 成人激情在线播放| 校园春色亚洲色图| 性欧美xxxx交| 丝袜中文在线| 久久视频这里只有精品| 福利视频在线播放| 日韩高清人体午夜| www.天堂在线| 欧美高清精品3d| 羞羞色院91蜜桃| 欧美日韩亚洲一区二区三区| 玖玖爱免费视频| 最新高清无码专区| 亚洲自拍偷拍图| 91麻豆精东视频| 在线精品视频播放| 狠狠色丁香九九婷婷综合五月 | 久久国产精品露脸对白| 亚洲五月天综合| 国产欧美日韩一级| 99在线免费视频观看| 欧美在线免费| 中文字幕av导航| 色综合天天综合网中文字幕| 日韩免费三级| 国产91久久精品一区二区| 精品视频第一区| 国产丝袜一区| 国产伦精品一区二区三毛| 欧美黄视频在线观看| 96pao国产成视频永久免费| 四虎精品一区二区免费| 国产精品流白浆视频| 欧美不卡高清一区二区三区| 日韩av成人在线观看| 亚洲欧美一区二区三区| 国产91露脸中文字幕在线| 亚洲天堂一区二区| 国产成人精品在线视频| 电影久久久久久| 国产一区视频在线播放| 日韩av黄色| 成人中文字幕+乱码+中文字幕| 久久亚洲人体| 亚洲精品免费在线视频| 一区二区亚洲视频| 国偷自产av一区二区三区小尤奈| 日韩在线视频观看免费| 日韩一区二区三区三四区视频在线观看| 夜夜嗨av禁果av粉嫩avhd| 欧美日韩精品一区二区三区| 一本大道伊人av久久综合| 欧美巨大另类极品videosbest| 国产又爽又黄又嫩又猛又粗| 91精品欧美久久久久久动漫| 精品国产va久久久久久久| 精品久久人人做人人爰| 亚洲人妻一区二区| 亚洲图片在区色| 麻豆av在线导航| 久久91精品国产| 国产理论在线| 国产精品96久久久久久| av日韩久久| 国产欧美日韩综合精品二区| 亚洲精品动态| 影音先锋在线亚洲| 伊人影院久久| 已婚少妇美妙人妻系列| 狠狠色狠狠色综合系列| 韩国三级hd两男一女| 国产三区在线成人av| 老湿机69福利| 狠狠做深爱婷婷久久综合一区| 中文字幕理论片| 日韩视频在线观看一区二区| 日韩私人影院| 久久久www成人免费精品| 国产盗摄一区二区| 国产精品av在线播放| 欧美午夜在线播放| 欧美日韩在线观看一区| 久久久久久影院| 成熟了的熟妇毛茸茸| 精品一区在线看| 亚洲av网址在线| 亚洲天堂2014| 精品久久久久久久久久久久久久久久久久 | 亚洲日本免费电影| 精品免费国产| 91精品国产视频| 青青草原av在线播放| 国产乱子伦视频一区二区三区 | 日本韩国欧美国产| 精品人妻一区二区三区三区四区 | 免费人成年激情视频在线观看| 欧美午夜片在线免费观看| 中文字幕第三页| 日韩av有码在线| 国产成人无吗| 国产精品久久久久久亚洲影视 | 欧美一级特黄视频| 欧美一区日韩一区| 91社区在线观看播放| 国产69久久精品成人看| 日韩精品一区二区三区中文字幕| 日产精品高清视频免费| 妖精视频成人观看www| 波多野结衣在线免费观看| 国产欧美日韩综合精品一区二区| 欧美一二三区视频| 欧美大胆人体bbbb| 黄色网页在线观看| 国产精品视频播放| 国产精品手机在线播放| 大陆极品少妇内射aaaaa| 国产成人在线看| 精品国产大片大片大片| 在线视频一区二区三区| 性感美女福利视频| 国语自产精品视频在线看| 免费观看亚洲天堂| 久久av秘一区二区三区| 秋霞成人午夜伦在线观看| 少妇按摩一区二区三区| 激情av一区二区| 日韩一区二区三区不卡| 久久欧美在线电影| 成人福利一区| 老司机激情视频| 国产精品一二三| 九九视频免费在线观看| 日韩欧美成人激情| 人妖欧美1区| 国产欧美一区二区三区另类精品| 欧美搞黄网站| 国产裸体视频网站| 亚洲综合色自拍一区| 亚洲av无码专区在线| 欧美片一区二区三区| 中文字幕区一区二区三| 国产乱子伦精品无码专区| 国产高清久久久久| 久久国产免费观看| 亚洲国产精品久久精品怡红院 | 色综合亚洲欧洲| 青草久久伊人| 国产精品99久久久久久人| 国产精品欧美三级在线观看| 亚洲成人av免费看| 亚洲欧洲美洲综合色网| 国产av无码专区亚洲a∨毛片| 精品自拍视频在线观看| 99re8这里有精品热视频8在线| 日韩国产成人无码av毛片| av网站一区二区三区| 久久久久女人精品毛片九一| 亚洲欧美国产一区二区三区| 成人国产精品一区二区免费麻豆| 中文字幕一区二区三区有限公司 | 国产不卡高清在线观看视频| 九九在线观看视频| 亚洲码在线观看| 国产亚洲欧美日韩精品一区二区三区 | 中文在线播放一区二区| 中文写幕一区二区三区免费观成熟| 亚洲午夜精品网| 国产九九在线| 91久久精品www人人做人人爽| 亚洲精品1区2区| 久操视频在线观看免费| 777久久久精品| sm捆绑调教国产免费网站在线观看 | 亚洲欧美日韩久久| 日本精品999| 国产精品视频xxx| 禁久久精品乱码| www.99热| 精品国产乱码久久久久久牛牛| 超碰一区二区| 男人的天堂成人| 91麻豆国产精品久久| 亚洲综合精品在线| 97国产精品免费视频| 久久国产综合| 欧美夫妇交换xxx| 欧美老女人在线| 桃色av一区二区| 黄色一级大片免费|