精品欧美一区二区三区在线观看 _久久久久国色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)

国产精品区一区二区三含羞草| 亚洲人成小说网站色在线| 国产黄在线看| 激情五月亚洲色图| 少妇久久久久久| 99视频一区| 99国产揄拍国产精品| 清纯唯美一区二区三区| 亚洲精品水蜜桃| 日韩08精品| 国产精品变态另类虐交| 欧洲成人在线观看| 激情综合一区二区三区| 极品美乳网红视频免费在线观看| 99热成人精品热久久66| 精品视频久久久久久| 在线不卡亚洲| 国产黄色三级网站| 日韩精品一二三四区| 菠萝蜜视频国产在线播放| 国产制服91一区二区三区制服| 日韩电影中文 亚洲精品乱码 | 亚洲男女性事视频| 麻豆精品一区二区三区| 欧美黄页免费| 一区二区三区在线免费观看视频| 国产精品久久91| 国产精品亲子伦对白| 精品久久国产一区| 销魂美女一区二区| 一道本在线观看视频| 日韩三区在线观看| 国产日本精品| 99视频在线观看地址| 北条麻妃亚洲一区| 18久久久久久| 91福利国产精品| 日韩免费精品| 极品久久久久久久| 国产精品丝袜高跟| 色综合色狠狠天天综合色| 亚洲一区二区三区免费| 亚洲精品综合在线观看| 欧美亚洲国产一区二区三区| 国产91一区| 三级黄色片网站| 日韩电影中文字幕av| 欧美国产禁国产网站cc| 最新日韩av| 一个人看的www视频在线免费观看| 免费视频网站www| 久久久久久久久久久99| 国产精品美女www爽爽爽视频| 欧美一区二区三区日韩视频| 美女视频网站黄色亚洲| 欧美三级网站| 欧美日韩在线视频播放| 欧美伦理视频在线观看| 欧美做受高潮电影o| 欧美性xxxx极品hd满灌| 欧美特黄a级高清免费大片a级| 国内精品不卡| 国产真人做爰视频免费| 欧美日韩喷水| 免费av在线一区| 久久久成人网| 欧产日产国产精品视频 | 国产精品v欧美精品∨日韩| 国产精品久久三| 91ph在线| 污污的视频免费| 欧美色图天堂网| 郴州新闻综合频道在线直播| 中文在线中文资源| 欧美视频久久久| 久久久全国免费视频| 天堂在线资源视频| 只有这里有精品| 91精品久久久久久久久| 亚洲嫩模很污视频| 欧美日韩一区三区四区| 成人福利电影精品一区二区在线观看| 国产成人精品一区二区三区视频 | 亚洲免费成人网| 樱花草www在线| 欧美大香线蕉线伊人久久| 在线播放日韩欧美| 亚洲在线视频网站| 日本成人在线电影网| 激情亚洲影院在线观看| 国产精品99无码一区二区| 69174成人网| 91精品国产综合久久久久久久久久| 成人av地址| 一级片在线观看视频| 国产视频123区| 在线中文字日产幕| 免费在线观看毛片网站| 在线视频一二三区| 视频一区视频二区视频三区视频四区国产 | www.成人av| 国产一区二区三区在线视频| 色哟哟一区二区| caoporn国产精品| 亚洲一级电影| 欧美一级大片在线视频| 在线观看免费黄色| 一级做a爱片性色毛片| 色天使在线观看| 最新不卡av| 成人午夜在线视频一区| 亚洲成人黄色网| 精品国产免费一区二区三区四区 | **欧美日韩vr在线| 精品免费视频.| 韩国精品一区二区| 大胆人体一区| 又色又爽又黄无遮挡的免费视频| 老牛影视免费一区二区| 欧美v日韩v国产v| 欧美高清精品3d| 欧美在线观看一区| 欧美三级韩国三级日本一级| 日韩欧美视频一区二区三区| 亚洲美女免费在线| 国产精品天干天干在观线| 久久午夜色播影院免费高清| 成人午夜视频网站| 美洲天堂一区二卡三卡四卡视频| 99精品在线观看| 亚洲日本va| 成人mm视频在线观看| 欧美日韩在线资源| 亚洲欧美自拍视频| 亚洲色图第四色| 老司机午夜免费福利| 在线黄色免费观看| 五十路熟女丰满大屁股| 精品在线观看一区二区| 99蜜桃在线观看免费视频网站| 久久亚洲精品一区| 亚洲国产中文字幕| www.亚洲色图| 青娱乐极品盛宴一区二区| 亚洲AV无码精品国产| 天天影院图片亚洲| 偷拍自拍在线视频| 午夜影院免费视频| av在线电影观看| 超碰在线影院| 激情视频在线观看| 97精品国产综合久久久动漫日韩 | 蜜桃欧美视频| 国产精品人人做人人爽| 97国产在线视频| 欧美—级a级欧美特级ar全黄| 中文字幕亚洲一区二区三区五十路| 精品免费视频.| 欧美另类videos死尸| 一本色道亚洲精品aⅴ| 91久久线看在观草草青青| 欧美另类久久久品| 欧美日韩一区二区在线观看| 日韩黄在线观看| 精品国产乱码久久久久久免费| 中文字幕中文字幕中文字幕亚洲无线 | japanese在线播放| 国产一区二区三区四区五区加勒比| 亚洲精品在线网站| 久久女同互慰一区二区三区| 丰满岳乱妇一区二区三区| 欧美一区在线观看视频| 日日夜夜天天综合| 一区二区导航| 男男视频亚洲欧美| 97久久超碰国产精品| 亚洲午夜一区二区三区| 91精品国产综合久久精品 | 日本一区二区三区久久久久久久久不| 国产日产亚洲精品系列| 亚洲综合清纯丝袜自拍| 在线视频你懂得一区二区三区| 欧美日韩不卡一区| 欧美日韩免费高清一区色橹橹| 欧美午夜不卡在线观看免费| 日韩一区二区三区在线| 亚洲精品日韩在线| 久久中文字幕视频| 97成人精品区在线播放| 7777kkkk成人观看| 91精品国产高清久久久久久91裸体 | 国产一二三区在线播放| 国产精品爽黄69| 俺去了亚洲欧美日韩| 亚洲第一综合天堂另类专| 日韩情涩欧美日韩视频| 久久97精品久久久久久久不卡| 日本伊人精品一区二区三区介绍| 国产在线观看不卡| 国产精品劲爆视频| 欧美重口另类videos人妖| 国产成人精品电影久久久| 99久久综合狠狠综合久久止| 精品视频123区在线观看| 中文一区二区视频| 国产精品老女人视频| 国产毛片久久久久久国产毛片| 成人黄色a级片| 五月婷婷丁香花| 麻豆久久久久| 亚洲一区二区三区四区五区午夜| 99精品国产一区二区三区不卡| 欧美影视一区在线| 日本国产一区二区三区| 国产免费一区| 五十路熟女丰满大屁股| 亚洲综合自拍网| 国产精品第一页在线观看| 国产精品乱码久久久| 日本在线天堂| 97久久亚洲| 一区二区三区福利| 国产日韩欧美一区二区三区综合| 91黄色在线观看| 夜夜躁日日躁狠狠久久88av| 91精品国产高清久久久久久91裸体| 91九色国产ts另类人妖| 亚洲女人毛茸茸高潮| 神马久久精品综合| 日韩黄色一区二区| 天天操天天舔天天射| 91丨九色丨丰满| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 欧美 日韩 国产在线观看| 国产亚洲精品久久久久久无几年桃 | 永久av在线| av不卡一区二区| 国产精品18久久久久久久久久久久 | 亚洲av无码一区二区二三区| 国产精品6666| 国产三级在线免费观看| 国产一区二区视频在线看| 亚洲视频精品| 欧美激情一区二区三区不卡| 精品国产麻豆免费人成网站| 成人黄色免费看| 成人一区二区三| 午夜精品一区二区三区视频| 黄色的视频在线观看| 天天天综合网| 青青草国产精品亚洲专区无| 中文字幕不卡的av| 欧美精品电影在线播放| 国产精品成人v| 男女啪啪免费观看| 成人免费看aa片| 国产成人手机在线| 日韩欧美精品电影| 女人丝袜激情亚洲| 成人性生交大片免费看中文| 在线播放中文字幕一区| 国产欧美精品区一区二区三区| 久久国产精品电影| 牛夜精品久久久久久久| 后入内射欧美99二区视频| 亚洲精彩视频| 欧美日韩在线观看一区二区 | 欧美激情综合色综合啪啪| 天天色天天操综合| 精品无码久久久久久久动漫| 欧美成人免费观看视频| 日韩一区精品| 国产精品一卡二卡| 亚洲精品成a人在线观看| 清纯唯美一区二区三区| 欧美第一页在线观看| 久草视频视频在线播放| 奇米影视亚洲| 亚洲国产精品av| 欧美黄网免费在线观看| 日韩a∨精品日韩在线观看| 人妻 日韩精品 中文字幕| 国产亚洲精aa在线看| 91免费精品| 亚洲五码中文字幕| 欧美亚洲第一区| 一级少妇精品久久久久久久| 久久青草伊人| 国产日产一区| 久久九九久精品国产免费直播| 日韩精品中文字幕久久臀| 日韩国产伦理| 免费看啪啪网站| 538任你躁在线精品视频网站| 无码国模国产在线观看| 亚洲一区精品在线| 国产日韩精品推荐| 日韩aaaaaa| 日韩黄色大片网站| 欧美日韩中文字幕精品| 在线一区日本视频| a毛片在线免费观看| 中国女人久久久| 亚洲天堂色网站| 9191在线视频| 精品精品导航| 成人丝袜高跟foot| 欧美激情videoshd| 在线播放第一页| av手机在线观看| 粉嫩在线一区二区三区视频| 久久久久国产精品www| 性色av浪潮av| hd国产人妖ts另类视频| 精品一区二区国语对白| 国产视频精品xxxx| 日韩中文字幕亚洲精品欧美| 亚洲大尺度网站| 欧美午夜在线视频| 亚洲福利小视频| 久久最新免费视频| 欧美欧美欧美| www.爱久久.com| 一个人看的www久久| 日本一二三区视频在线| 欧美在线观看不卡| 黑丝美女一区二区| 欧美无砖专区一中文字| 精品久久久91| 欧美一级视频免费看| 国产原厂视频在线观看| 国产色爱av资源综合区| 国产亚洲情侣一区二区无| 六月丁香色婷婷| 成人av免费网站| 国产精品嫩草在线观看| 国产口爆吞精一区二区| 精品一区二区在线播放| 99精品在线直播| 日韩不卡高清视频| 久久婷婷麻豆| 91精品中文在线| 久久人人爽人人爽人人片av免费| 影音先锋日韩精品| 亚洲男人天天操| 黑人玩弄人妻一区二区三区| 欧美日韩美女| 亚洲成a人片在线不卡一二三区| 亚洲一区三区电影在线观看| 你懂的网站在线| 激情另类小说区图片区视频区| 欧美精品激情在线观看| 波多野吉衣中文字幕| 激情不卡一区二区三区视频在线| 欧美午夜视频一区二区| 中文字幕の友人北条麻妃| 五月天婷婷在线视频| 久久亚洲精精品中文字幕早川悠里 | 欧美videosex性欧美黑吊| 紧缚奴在线一区二区三区| 久久久久久久成人| 国产探花视频在线播放| 免费高清完整在线观看| 韩国毛片一区二区三区| 欧美与黑人午夜性猛交久久久| 日韩女优一区二区| 欧美福利网址| 色婷婷亚洲综合| 国内精品**久久毛片app| av资源网在线观看| 亚洲高清免费视频| 亚洲国产高清av| 亚洲美女15p| 久久人人爽人人| 日韩在线视频第一页| 国产精品久久777777| 在线观看免费的av| 台湾亚洲精品一区二区tv| 97国产精品视频| 无码精品黑人一区二区三区| 18涩涩午夜精品.www| 黄色一级免费大片| 狠狠操综合网| 国产成人亚洲综合91| 亚洲网站免费观看| 国产在线不卡一卡二卡三卡四卡| 岛国一区二区三区高清视频| 国产资源在线观看| 依依成人精品视频| 男人舔女人下面高潮视频| 在线高清欧美| 亚洲精品一区在线观看| 日本一区二区在线观看视频| 国产成人高清精品免费5388| 亚洲欧美日韩国产成人| 国产三级国产精品国产国在线观看| 日韩国产高清在线| 久久综合一区| 色网在线观看| 91精品国产乱码久久蜜臀|