久久在线视频在线_欧美在线一级va免费观看_欧美日韩国产在线一区_亚洲一区二区三区在线观看视频

您當前的位置: 首頁 > 新聞 > 行業

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家

來源:網絡 編輯:云中風 時間:2022-07-29 14:53人閱讀

作者:汪誠愚、劉婷婷

導讀

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖1)

宣物莫大于言,存形莫善于畫。

--【晉】陸機

多模態數據(文本、圖像、聲音)是人類認識、理解和表達世間萬物的重要載體。近年來,多模態數據的爆炸性增長促進了內容互聯網的繁榮,也帶來了大量多模態內容理解和生成的需求。與常見的跨模態理解任務不同,文到圖的生成任務是流行的跨模態生成任務,旨在生成與給定文本對應的圖像。這一文圖生成的任務,極大地釋放了AI的想象力,也激發了人類的創意。典型的模型例如OpenAI開發的DALL-E和DALL-E2。近期,業界也訓練出了更大、更新的文圖生成模型,例如Google提出的Parti和Imagen。

然而,上述模型一般不能用于處理中文的需求,而且上述模型的參數量龐大,很難被開源社區的廣大用戶直接用來Fine-tune和推理。本次,EasyNLP開源框架再次迎來大升級,集成了先進的文圖生成架構Transformer+VQGAN,同時,向開源社區免費開放不同參數量的中文文圖生成模型的Checkpoint,以及相應Fine-tune和推理接口。用戶可以在我們開放的Checkpoint基礎上進行少量領域相關的微調,在不消耗大量計算資源的情況下,就能一鍵進行各種藝術創作。

EasyNLP是阿里云機器學習PAI 團隊基于 PyTorch 開發的易用且豐富的中文NLP算法框架,并且提供了從訓練到部署的一站式 NLP 開發體驗。EasyNLP 提供了簡潔的接口供用戶開發 NLP 模型,包括NLP應用 AppZoo 、預訓練模型 ModelZoo、數據倉庫DataHub等特性。由于跨模態理解和生成需求的不斷增加,EasyNLP也支持各種跨模態模型,特別是中文領域的跨模態模型,推向開源社區。例如,在先前的工作中,EasyNLP已經對中文圖文檢索CLIP模型進行了支持(看這里)。我們希望能夠服務更多的 NLP 和多模態算法開發者和研究者,也希望和社區一起推動 NLP /多模態技術的發展和模型落地。本文簡要介紹文圖生成的技術,以及如何在EasyNLP框架中如何輕松實現文圖生成,帶你秒變藝術家。本文開頭的展示圖片即為我們模型創作的作品。

文圖生成模型簡述

下面以幾個經典的基于Transformer的工作為例,簡單介紹文圖生成模型的技術。DALL-E由OpenAI提出,采取兩階段的方法生成圖像。在第一階段,訓練一個dVAE(discrete variational autoencoder)的模型將256×256的RGB圖片轉化為32×32的image token,這一步驟將圖片進行信息壓縮和離散化,方便進行文本到圖像的生成。第二階段,DALL-E訓練一個自回歸的Transformer模型,將文本輸入轉化為上述1024個image token。

由清華大學等單位提出的CogView模型對上述兩階段文圖生成的過程進行了進一步的優化。在下圖中,CogView采用了sentence piece作為text tokenizer使得輸入文本的空間表達更加豐富,并且在模型的Fine-tune過程中采用了多種技術,例如圖像的超分、風格遷移等。

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖2)

ERNIE-ViLG模型考慮進一步考慮了Transformer模型學習知識的可遷移性,同時學習了從文本生成圖像和從圖像生成文本這兩種任務。其架構圖如下所示:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖3)

隨著文圖生成技術的不斷發展,新的模型和技術不斷涌現。舉例來說,OFA將多種跨模態的生成任務統一在同一個模型架構中。DALL-E 2同樣由OpenAI提出,是DALL-E模型的升級版,考慮了層次化的圖像生成技術,模型利用CLIP encoder作為編碼器,更好地融入了CLIP預訓練的跨模態表征。Google進一步提出了Diffusion Model的架構,能有效生成高清大圖,如下所示:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖4)

在本文中,我們不再對這些細節進行贅述。感興趣的讀者可以進一步查閱參考文獻。

EasyNLP文圖生成模型

由于前述模型的規模往往在數十億、百億參數級別,龐大的模型雖然能生成質量較大的圖片,然后對計算資源和預訓練數據的要求使得這些模型很難在開源社區廣泛應用,尤其在需要面向垂直領域的情況下。在本節中,我們詳細介紹EasyNLP提供的中文文圖生成模型,它在較小參數量的情況下,依然具有良好的文圖生成效果。

模型架構

模型框架圖如下圖所示:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖5)

考慮到Transformer模型復雜度隨序列長度呈二次方增長,文圖生成模型的訓練一般以圖像矢量量化和自回歸訓練兩階段結合的方式進行。

圖像矢量量化是指將圖像進行離散化編碼,如將256×256的RGB圖像進行16倍降采樣,得到16×16的離散化序列,序列中的每個image token對應于codebook中的表示。常見的圖像矢量量化方法包括:VQVAE、VQVAE-2和VQGAN等。我們采用VQGAN在ImageNet上訓練的f16_16384(16倍降采樣,詞表大小為16384)的模型權重來生成圖像的離散化序列。

自回歸訓練是指將文本序列和圖像序列作為輸入,在圖像部分,每個image token僅與文本序列的tokens和其之前的image tokens進行attention計算。我們采用GPT作為backbone,能夠適應不同模型規模的生成任務。在模型預測階段,輸入文本序列,模型以自回歸的方式逐步生成定長的圖像序列,再通過VQGAN decoder重構為圖像。

開源模型參數設置

在EasyNLP中,我們提供兩個版本的中文文圖生成模型,模型參數配置如下表:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖6)

模型實現

在EasyNLP框架中,我們在模型層構建基于minGPT的backbone構建模型,核心部分如下所示:

self.first_stage_model = VQModel(ckpt_path=vqgan_ckpt_path).eval()

self.transformer = GPT(self.config)

VQModel的Encoding階段過程為:

# in easynlp/appzoo/text2image_generation/model.py

@torch.no_grad()

def encode_to_z(self, x):

quant_z, _, info = self.first_stage_model.encode(x)

indices = info[2].view(quant_z.shape[0], -1)

return quant_z, indices

x = inputs['image']

x = x.permute(0, 3, 1, 2).to(memory_format=torch.contiguous_format)

# one step to produce the logits

_, z_indices = self.encode_to_z(x)  # z_indice: torch.Size([batch_size, 256]) 

VQModel的Decoding階段過程為:

# in easynlp/appzoo/text2image_generation/model.py

@torch.no_grad()

def decode_to_img(self, index, zshape):

bhwc = (zshape[0],zshape[2],zshape[3],zshape[1])

quant_z = self.first_stage_model.quantize.get_codebook_entry(

index.reshape(-1), shape=bhwc)

x = self.first_stage_model.decode(quant_z)

return x

# sample為訓練階段的結果生成,與預測階段的generate類似,詳解見下文generate

index_sample = self.sample(z_start_indices, c_indices,

steps=z_indices.shape[1],

...)

x_sample = self.decode_to_img(index_sample, quant_z.shape)

Transformer采用minGPT進行構建,輸入圖像的離散編碼,輸出文本token。前向傳播過程為:

# in easynlp/appzoo/text2image_generation/model.py

def forward(self, inputs):

x = inputs['image']

c = inputs['text']

x = x.permute(0, 3, 1, 2).to(memory_format=torch.contiguous_format)

# one step to produce the logits

_, z_indices = self.encode_to_z(x)  # z_indice: torch.Size([batch_size, 256])

c_indices = c

if self.training and self.pkeep < 1.0:

mask = torch.bernoulli(self.pkeep*torch.ones(z_indices.shape,

device=z_indices.device))

mask = mask.round().to(dtype=torch.int64)

r_indices = torch.randint_like(z_indices, self.transformer.config.vocab_size)

a_indices = mask*z_indices+(1-mask)*r_indices

else:

a_indices = z_indices

cz_indices = torch.cat((c_indices, a_indices), dim=1)

# target includes all sequence elements (no need to handle first one

# differently because we are conditioning)

target = z_indices

# make the prediction

logits, _ = self.transformer(cz_indices[:, :-1])

# cut off conditioning outputs - output i corresponds to p(z_i | z_{<i}, c)

logits = logits[:, c_indices.shape[1]-1:]

return logits, target

在預測階段,輸入為文本token, 輸出為256*256的圖像。首先,將輸入文本預處理為token序列:

# in easynlp/appzoo/text2image_generation/predictor.py

def preprocess(self, in_data):

if not in_data:

raise RuntimeError("Input data should not be None.")

if not isinstance(in_data, list):

in_data = [in_data]

rst = {"idx": [], "input_ids": []}

max_seq_length = -1

for record in in_data:

if "sequence_length" not in record:

break

max_seq_length = max(max_seq_length, record["sequence_length"])

max_seq_length = self.sequence_length if (max_seq_length == -1) else max_seq_length

for record in in_data:

text= record[self.first_sequence]

try:

self.MUTEX.acquire()

text_ids = self.tokenizer.convert_tokens_to_ids(self.tokenizer.tokenize(text))

text_ids = text_ids[: self.text_len]

n_pad = self.text_len - len(text_ids)

text_ids += [self.pad_id] * n_pad

text_ids = np.array(text_ids) + self.img_vocab_size

finally:

self.MUTEX.release()

rst["idx"].append(record["idx"])

rst["input_ids"].append(text_ids)

return rst

逐步生成長度為16*16的圖像離散token序列:

# in easynlp/appzoo/text2image_generation/model.py

def generate(self, inputs, top_k=100, temperature=1.0):

cidx = inputs

sample = True

steps = 256

for k in range(steps):

x_cond = cidx

logits, _ = self.transformer(x_cond)

# pluck the logits at the final step and scale by temperature

logits = logits[:, -1, :] / temperature

# optionally crop probabilities to only the top k options

if top_k is not None:

logits = self.top_k_logits(logits, top_k)

# apply softmax to convert to probabilities

probs = torch.nn.functional.softmax(logits, dim=-1)

# sample from the distribution or take the most likely

if sample:

ix = torch.multinomial(probs, num_samples=1)

else:

_, ix = torch.topk(probs, k=1, dim=-1)

# append to the sequence and continue

cidx = torch.cat((cidx, ix), dim=1)

img_idx = cidx[:, 32:]

return img_idx

最后,我們調用VQModel的Decoding過程將這些圖像離散token序列轉換為圖像。

模型效果

我們在四個中文的公開數據集COCO-CN、MUGE、Flickr8k-CN、Flickr30k-CN上驗證了EasyNLP框架中文圖生成模型的效果。同時,我們對比了這個模型和CogView、DALL-E的效果,如下所示:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖7)

其中,

1)MUGE是天池平臺公布的電商場景的中文大規模多模態評測基準(http://tianchi.aliyun.com/muge)。為了方便計算指標,MUGE我們采用valid數據集的結果,其他數據集采用test數據集的結果。

2)CogView源自https://github.com/THUDM/CogView

3)DALL-E模型沒有公開的官方代碼。已經公開的部分只包含VQVAE的代碼,不包括Transformer部分。我們基于廣受關注的https://github.com/lucidrains/DALLE-pytorch版本的代碼和該版本推薦的checkpoits進行復現,checkpoints為2.09億參數,為OpenAI的DALL-E模型參數量的1/100。(OpenAI版本DALL-E為120億參數,其中CLIP為4億參數)。

經典案例

我們分別在自然風景數據集COCO-CN上Fine-tune了base和large級別的模型,如下展示了模型的效果:

示例1:一只俏皮的狗正跑過草地

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖8)

示例2:一片水域的景色以日落為背景

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖9)

我們也積累了阿里集團的海量電商商品數據,微調得到了面向電商商品的文圖生成模型。效果如下:

示例3:女童套頭毛衣打底衫秋冬針織衫童裝兒童內搭上衣

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖10)

示例4:春夏真皮工作鞋女深色軟皮久站舒適上班面試職業皮鞋

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖11)

除了支持特定領域的應用,文圖生成也極大地輔助了人類的藝術創作。使用訓練得到的模型,我們可以秒變“中國國畫藝術大師”,示例如下所示:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖12)

更多的示例請欣賞:

阿里云EasyNLP中文文圖生成模型帶你秒變藝術家(圖13)

使用教程

欣賞了模型生成的作品之后,如果我們想DIY,訓練自己的文圖生成模型,應該如何進行呢?以下我們簡要介紹在EasyNLP框架對預訓練的文圖生成模型進行Fine-tune和推理。

安裝EasyNLP

用戶可以直接參考鏈接的說明安裝EasyNLP算法框架。

數據準備

首先準備訓練數據與驗證數據,為tsv文件。這一文件包含以制表符\t分隔的兩列,第一列為索引號,第二列為文本,第三列為圖片的base64編碼。用于測試的輸入文件為兩列,僅包含索引號和文本。

為了方便開發者,我們也提供了轉換圖片到base64編碼的示例代碼:

import base64

from io import BytesIO

from PIL import Image

img = Image.open(fn)

img_buffer = BytesIO()

img.save(img_buffer, format=img.format)

byte_data = img_buffer.getvalue()

base64_str = base64.b64encode(byte_data) # bytes

下列文件已經完成預處理,可用于測試:

# train

https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/painter_text2image/MUGE_train_text_imgbase64.tsv

# valid

https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/painter_text2image/MUGE_val_text_imgbase64.tsv

# test

https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/painter_text2image/MUGE_test.text.tsv

模型訓練

我們采用以下命令對模型進行fine-tune:

easynlp \

--mode=train \

--worker_gpu=1 \

--tables=MUGE_val_text_imgbase64.tsv,MUGE_val_text_imgbase64.tsv \

--input_schema=idx:str:1,text:str:1,imgbase64:str:1 \

--first_sequence=text \

--second_sequence=imgbase64 \

--checkpoint_dir=./finetuned_model/ \

--learning_rate=4e-5 \

--epoch_num=1 \

--random_seed=42 \

--logging_steps=100 \

--save_checkpoint_steps=1000 \

--sequence_length=288 \

--micro_batch_size=16 \

--app_name=text2image_generation \

--user_defined_parameters='

pretrain_model_name_or_path=alibaba-pai/pai-painter-large-zh

size=256

text_len=32

img_len=256

img_vocab_size=16384

'

我們提供base和large兩個版本的預訓練模型,pretrain_model_name_or_path

分別為alibaba-pai/pai-painter-base-zh和alibaba-pai/pai-painter-large-zh。

訓練完成后模型被保存到./finetuned_model/。

模型批量推理

模型訓練完畢后,我們可以將其用于圖像生成,其示例如下:

easynlp \

--mode=predict \

--worker_gpu=1 \

--tables=MUGE_test.text.tsv \

--input_schema=idx:str:1,text:str:1 \

--first_sequence=text \

--outputs=./T2I_outputs.tsv \

--output_schema=idx,text,gen_imgbase64 \

--checkpoint_dir=./finetuned_model/ \

--sequence_length=288 \

--micro_batch_size=8 \

--app_name=text2image_generation \

--user_defined_parameters='

size=256

text_len=32

img_len=256

img_vocab_size=16384

'

結果存儲在一個tsv文件中,每行對應輸入中的一個文本,輸出的圖像以base64編碼。

使用Pipeline接口快速體驗文圖生成效果

為了進一步方便開發者使用,我們在EasyNLP框架內也實現了Inference Pipeline功能。用戶可以使用如下命令調用Fine-tune過的電商場景下的文圖生成模型:

# 直接構建pipeline

default_ecommercial_pipeline = pipeline("pai-painter-commercial-base-zh")

# 模型預測

data = ["寬松T恤"]

results = default_ecommercial_pipeline(data)  # results的每一條是生成圖像的base64編碼

# base64轉換為圖像

def base64_to_image(imgbase64_str):

image = Image.open(BytesIO(base64.urlsafe_b64decode(imgbase64_str)))

return image

# 保存以文本命名的圖像

for text, result in zip(data, results):

imgpath = '{}.png'.format(text)

imgbase64_str = result['gen_imgbase64']

image = base64_to_image(imgbase64_str)

image.save(imgpath)

print('text: {}, save generated image: {}'.format(text, imgpath))

除了電商場景,我們還提供了以下場景的模型:

自然風光場景:“pai-painter-scenery-base-zh”中國山水畫場景:“pai-painter-painting-base-zh”

在上面的代碼當中替換“pai-painter-commercial-base-zh”,就可以直接體驗,歡迎試用。

對于用戶Fine-tune的文圖生成模型,我們也開放了自定義模型加載的Pipeline接口:

# 加載模型,構建pipeline

local_model_path = ...

text_to_image_pipeline = pipeline("text2image_generation", local_model_path)

# 模型預測

data = ["xxxx"]

results = text_to_image_pipeline(data)  # results的每一條是生成圖像的base64編碼

未來展望

在這一期的工作中,我們在EasyNLP框架中集成了中文文圖生成功能,同時開放了模型的Checkpoint,方便開源社區用戶在資源有限情況下進行少量領域相關的微調,進行各種藝術創作。在未來,我們計劃在EasyNLP框架中推出更多相關模型,敬請期待。我們也將在EasyNLP框架中集成更多SOTA模型(特別是中文模型),來支持各種NLP和多模態任務。此外,阿里云機器學習PAI團隊也在持續推進中文多模態模型的自研工作,歡迎用戶持續關注我們,也歡迎加入我們的開源社區,共建中文NLP和多模態算法庫!

Github地址:https://github.com/alibaba/EasyNLP

Reference

1.Chengyu Wang, Minghui Qiu, Taolin Zhang, Tingting Liu, Lei Li, Jianing Wang, Ming Wang, Jun Huang, Wei Lin. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. arXiv 

2.Aditya Ramesh, Mikhail Pavlov, Gabriel Goh, Scott Gray, Chelsea Voss, Alec Radford, Mark Chen, Ilya Sutskever. Zero-Shot Text-to-Image Generation. ICML 2021: 8821-8831

3.Ming Ding, Zhuoyi Yang, Wenyi Hong, Wendi Zheng, Chang Zhou, Da Yin, Junyang Lin, Xu Zou, Zhou Shao, Hongxia Yang, Jie Tang. CogView: Mastering Text-to-Image Generation via Transformers. NeurIPS 2021: 19822-19835

4.Han Zhang, Weichong Yin, Yewei Fang, Lanxin Li, Boqiang Duan, Zhihua Wu, Yu Sun, Hao Tian, Hua Wu, Haifeng Wang. ERNIE-ViLG: Unified Generative Pre-training for Bidirectional Vision-Language Generation. arXiv

5.Peng Wang, An Yang, Rui Men, Junyang Lin, Shuai Bai, Zhikang Li, Jianxin Ma, Chang Zhou, Jingren Zhou, Hongxia Yang. Unifying Architectures, Tasks, and Modalities Through a Simple Sequence-to-Sequence Learning Framework. ICML 2022

6.Aditya Ramesh, Prafulla Dhariwal, Alex Nichol, Casey Chu, Mark Chen. Hierarchical Text-Conditional Image Generation with CLIP Latents. arXiv

7.Van Den Oord A, Vinyals O. Neural discrete representation learning. NIPS 2017

8.Esser P, Rombach R, Ommer B. Taming transformers for high-resolution image synthesis. CVPR 2021: 12873-12883.

9.Chitwan Saharia, William Chan, Saurabh Saxena, Lala Li, Jay Whang, Emily Denton, Seyed Kamyar Seyed Ghasemipour, Burcu Karagol Ayan, S. Sara Mahdavi, Rapha Gontijo Lopes, Tim Salimans, Jonathan Ho, David J. Fleet, Mohammad Norouzi: Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. arXiv

10.Jiahui Yu, Yuanzhong Xu, Jing Yu Koh, Thang Luong, Gunjan Baid, Zirui Wang, Vijay Vasudevan, Alexander Ku, Yinfei Yang, Burcu Karagol Ayan, Ben Hutchinson, Wei Han, Zarana Parekh, Xin Li, Han Zhang, Jason Baldridge, Yonghui Wu. Scaling Autoregressive Models for Content-Rich Text-to-Image Generation. arXiv



本站所有文章、數據、圖片均來自互聯網,一切版權均歸源網站或源作者所有。

如果侵犯了你的權益請來信告知我們刪除。郵箱:business@qudong.com

標簽: 阿里 阿里云

相關文章

久久在线视频在线_欧美在线一级va免费观看_欧美日韩国产在线一区_亚洲一区二区三区在线观看视频
久久久久久久久综合| 亚洲欧美美女| 国产精品免费小视频| 国产综合婷婷| 欧美制服丝袜第一页| 亚洲免费激情| 欧美日本在线一区| 亚洲乱码国产乱码精品精天堂| 麻豆九一精品爱看视频在线观看免费 | 香蕉乱码成人久久天堂爱免费| 亚洲风情在线资源站| 久久久久se| 日韩视频免费| 91久久在线播放| 欧美三级电影一区| 欧美一区1区三区3区公司| 欧美一区二区三区免费视频 | 欧美综合国产| 很黄很黄激情成人| 免费成人黄色av| 欧美日韩aaaaa| 亚洲欧美日韩在线不卡| 欧美一区精品| 亚洲二区视频| 亚洲一区二区三区欧美| 狠狠爱www人成狠狠爱综合网| 亚洲第一在线| 国产精品夫妻自拍| 亚洲三级免费观看| 亚洲综合首页| 在线观看国产精品淫| 日韩午夜激情av| 国产日本欧美一区二区三区| 欧美激情亚洲精品| 欧美视频一区在线观看| 欧美成人蜜桃| 国产精品激情电影| 久久精品一二三| 欧美成在线视频| 欧美一区二区三区在线观看视频| 亚洲综合日本| 亚洲精品国产精品国自产观看 | 久久国产精品黑丝| 久久本道综合色狠狠五月| 国产精品一卡二| 久久九九精品| 久久一区激情| 亚洲精品视频在线观看免费| 欧美在线综合| 巨胸喷奶水www久久久免费动漫| 国产精品h在线观看| 亚洲区一区二| 99精品欧美| 亚洲欧美成人在线| 国产乱码精品一区二区三区av| 免费久久99精品国产| 欧美啪啪成人vr| 久久福利资源站| 欧美日韩专区| 亚洲国产高清一区| 国语自产偷拍精品视频偷| 99精品国产在热久久下载| 91久久精品国产91久久| 欧美一区二区黄| 在线视频你懂得一区| 欧美一区二区视频免费观看| 日韩视频在线一区二区| 久久视频在线免费观看| 久久精品视频网| 国产日韩欧美一区二区| 一区二区三区久久| 一本久久青青| 欧美激情视频在线播放 | 欧美日本在线看| 美女网站在线免费欧美精品| 国产精品一区二区久久久| 亚洲国内高清视频| 亚洲高清视频在线观看| 欧美在线免费观看亚洲| 欧美淫片网站| 国产精品一区一区三区| 亚洲已满18点击进入久久| aaa亚洲精品一二三区| 欧美成人一区在线| 久热国产精品视频| 国产精品亚洲аv天堂网| 一区二区精品国产| 亚洲欧美日韩网| 国产精品成人一区二区三区夜夜夜 | 中日韩高清电影网| 欧美日韩国产色综合一二三四| 免费日韩av电影| 亚洲精品欧美| 欧美日韩大片| 亚洲欧美在线免费| 欧美一区二区三区精品电影| 国产一区久久| 久久综合九色综合久99| 亚洲毛片在线看| 亚洲免费在线视频| 国内一区二区三区| 欧美国产亚洲精品久久久8v| 中文网丁香综合网| 久久久久国色av免费观看性色| 91久久国产精品91久久性色| 欧美片在线观看| 亚洲欧美日韩成人| 在线视频国产日韩| 欧美r片在线| 一区二区三区日韩欧美精品| 欧美一区二区精美| 尤妮丝一区二区裸体视频| 久久午夜av| 亚洲人www| 久久精品欧美日韩| 亚洲第一福利在线观看| 欧美成人免费小视频| 亚洲欧美日韩综合aⅴ视频| 久久综合网络一区二区| 99精品国产热久久91蜜凸| 国产精品九九久久久久久久| 久久精品国亚洲| 亚洲精品视频在线观看网站| 欧美亚洲网站| 亚洲精品一区二区三| 国产精品素人视频| 欧美fxxxxxx另类| 亚洲一区二区三区视频| 欧美成人一区二区| 久久国产毛片| 亚洲一区二区av电影| 狠狠色狠狠色综合日日91app| 欧美激情一区在线| 欧美在线电影| 亚洲午夜久久久久久尤物| 欧美成人自拍视频| 欧美一区国产在线| 中国成人黄色视屏| 亚洲第一精品夜夜躁人人爽| 国产精品美女久久久久久久| 欧美成人精品h版在线观看| 亚洲欧美国内爽妇网| av成人动漫| 亚洲国产日韩一区| 狂野欧美激情性xxxx欧美| 性做久久久久久久免费看| 亚洲免费电影在线观看| 在线欧美亚洲| 激情五月***国产精品| 欧美日韩国产精品一区| aa成人免费视频| 亚洲一区二区精品在线| 99视频精品全国免费| 一区二区三区四区精品| 亚洲精选中文字幕| 一区二区三区日韩精品视频| 日韩一级免费观看| 亚洲免费观看视频| 一区二区三区导航| 亚洲免费av观看| 一本到12不卡视频在线dvd| 国产精品99久久99久久久二8| 亚洲精品之草原avav久久| 欧美激情免费在线| 欧美高清免费| 亚洲麻豆一区| 亚洲亚洲精品在线观看| 一区二区三区免费观看| 亚洲综合色丁香婷婷六月图片| 亚洲午夜精品一区二区三区他趣 | 国产精品成人一区二区网站软件| 国产精品久久久91| 国产精品视频久久久| 国产精品videosex极品| 欧美视频观看一区| 国产精品日韩欧美| 国内外成人在线| 亚洲福利av| 夜色激情一区二区| 欧美亚洲午夜视频在线观看| 久久久激情视频| 欧美国产先锋| 欧美大片一区二区| 国产精品99久久99久久久二8| 亚洲一区二区三区在线视频| 欧美一区二区三区喷汁尤物| 久久综合伊人77777蜜臀| 欧美激情久久久久| 欧美视频中文字幕在线| 国产视频一区在线观看一区免费| 好吊视频一区二区三区四区 | 欧美性大战久久久久久久蜜臀| 国产精品成人播放| 国产一区二区精品| 亚洲人www| 久久精品亚洲| 亚洲精选一区| 一区二区三区精品视频在线观看| 午夜精品一区二区三区在线视| 美女国内精品自产拍在线播放|