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

解鎖多模態大語言模型:從原理到實戰,一文全掌握! 原創

發布于 2025-3-13 10:35
瀏覽
0收藏

引言:人工智能領域的新焦點

在人工智能飛速發展的大環境下,近年來備受矚目的一個領域便是多模態大語言模型(MLLMs)。這些具有變革性的工具不僅能夠處理和生成文本,還能處理圖像、音頻和視頻等其他形式的數據。通過借助機器學習和深度學習算法的強大力量,多模態大語言模型能夠捕捉人類在多種模態下交流的細微差別,為自然語言處理、計算機視覺和多媒體分析等領域的應用開辟了新的可能性。

隨著我們不斷拓展多模態大語言模型的能力邊界,研究這些模型在結合視覺和聽覺信息后生成新穎文本內容的潛力變得愈發重要。在一個由人工智能驅動的 “多模態世界” 中,系統能夠無縫整合多種形式的數據以創造新的意義和價值,這已不再是科幻小說中的情節。

事實上,正如近期的研究和應用所展示的那樣,多模態大語言模型在生成連貫、特定于上下文且富有細微差別的文本方面已經展現出了卓越的能力。例如,一個在圖像和字幕數據集上訓練的多模態模型,能夠生成與新圖像語義準確且在風格上與原始字幕一致的新穎描述。

作為 “讓我們……” 系列的一部分,我們旨在通過進行一項實驗,進一步探索多模態大語言模型的潛力,該實驗旨在突破結合視覺和語言信息時的可能性極限。本研究有兩個具體目標:一是掌握多模態大語言模型的基礎知識;二是通過實驗來展示多模態大語言模型的能力。

多模態大語言模型(MLLM)

多模態大語言模型(MLLM)是一種人工智能(AI)模型,它可以處理和生成文本,以及其他形式的數據,比如:

  1. 圖像:多模態大語言模型能夠理解圖像的內容,包括其中的物體、場景和動作。
  2. 音頻:它可以分析音頻記錄,包括語音、音樂和各種聲音。
  3. 視頻:能夠處理視頻內容,涵蓋視覺和聽覺信息。

換句話說,多模態大語言模型是一種在多樣化的數據類型上進行訓練的大語言模型,這使得它能夠理解和生成與這些不同模態(或形式)的數據相關的文本。

多模態大語言模型旨在處理多模態數據的復雜性,這可能包括:

  1. 語義:理解多種語言中單詞、短語和句子的含義。
  2. 句法:分析語言的結構,包括語法和句子結構。
  3. 視覺:識別圖像和視頻中的物體、場景和動作。
  4. 聽覺:分析語音、音樂和聲音。

解鎖多模態大語言模型:從原理到實戰,一文全掌握!-AI.x社區

多模態大語言模型(MLLMs)基于幾個關鍵組件構建:

  1. 模態編碼器:這個組件將圖像、音頻和視頻等輸入數據轉換為特征表示。例如ViT、CLIP和HuBERT等。
  2. 輸入投影器:該組件將編碼器的特征與大語言模型的文本輸入連接起來。方法包括線性、多層感知器(MLP)和交叉注意力。
  3. 大語言模型(LLMs):在多模態大語言模型中會使用像GPT、LLaMA和Flan-T5這樣的大語言模型架構。
  4. 輸出投影器:此組件將語言模型的特征映射到圖像、視頻或音頻等數據類型的特征。例如MLP和Tiny Transformer。
  5. 模態生成器:該組件使用特征表示生成所需的數據。例如用于圖像的Stable Diffusion、用于視頻的Zeroscope和用于音頻的AudioLDM。

解鎖多模態大語言模型:從原理到實戰,一文全掌握!-AI.x社區

自GPT-4發布以來,由于其多模態示例,對多模態語言模型(MLLMs)的研究激增。

多模態大語言模型的優點包括:

  1. 更好地理解人類交流:通過處理多種形式的數據,多模態大語言模型可以更好地理解人類在不同模態下的交流方式。
  2. 增強的多模態生成能力:多模態大語言模型可以生成更細致入微且特定于上下文的文本,同時考慮到場景或情況的視覺和聽覺方面。
  3. 更好地表示語言:多模態大語言模型能夠捕捉現實世界場景中語言使用的復雜性,在這些場景中通常存在多種形式的數據。

解鎖多模態大語言模型:從原理到實戰,一文全掌握!-AI.x社區

總之,多模態大語言模型是一種強大的人工智能工具,它可以處理、生成和理解文本以及其他形式的數據,如圖像、音頻和視頻。

代碼實現

BLIP-2模型架構將問題和圖像作為輸入進行處理,其輸出是基于問題和圖像上下文的答案。BLIP-2由以下組件組成:

  1. 圖像編碼器:使用CLIP ViT(視覺變換器)從輸入圖像中提取視覺特征。
  2. 輸入投影器:Q-Former負責將問題和圖像特征投影為適合大語言模型的統一表示。
  3. 大語言模型(LLMs):我們使用Flan-T5/OPT作為其語言模型核心,它根據問題和圖像的組合上下文生成最終答案。

BLIP-2是一種高效且有效的視覺與語言預訓練策略,它利用凍結的預訓練模型和輕量級的查詢變換器,以顯著更少的可訓練參數實現了領先的性能。這種方法使模型在各種任務中表現出色,包括零樣本VQAv2以及帶有自然語言指令的圖像到文本生成。

在接下來的部分,我們將使用transformers庫在VQA數據集上訓練BLIP-2模型。VQA數據集包含14,550個樣本,每個樣本由一個輸入(圖像 + 問題)和一個輸出(答案)組成。

環境設置

我們從指定位置下載VQA數據集以及必要的庫。

# 下載并解壓數據集
!gdown 1--CmXocqkrcPR-bbSDztnxBM9dBC8uUJ 
!unzip /content/IconDomainVQAData.zip

# 安裝必要的庫
!pip install -q peft transformers bitsandbytes datasets

然后,我們調用在實驗過程中會用到的庫。

import os, json
from PIL import Image

from tqdm import tqdm

import torch
from torch.utils.data import Dataset, DataLoader
from torch import optim

from peft import LoraConfig, get_peft_model

from transformers import BlipProcessor, BlipForQuestionAnswering

from datasets import load_dataset, DatasetDict

實驗設置

在這一步,我們準備數據集,構建模型,并制定訓練策略,以確保模型在視覺問答任務中表現最佳。

現在,將數據集加載到數據集設置中:

ds = load_dataset("json", data_files=f"{data_path}/train.jsonl")
ds

輸出結果為:

DatasetDict({
    train: Dataset({
        features: ['question', 'answer', 'ques_type', 'grade', 'label', 'pid', 'unit', 'hint'],
        num_rows: 14551
    })
})

由于我們已經擁有了數據集,接下來開始構建在訓練過程中起著至關重要作用的Dataset對象。

# 構建Dataset
class VQADataset(Dataset):

    def __init__(self, dataset, processor, data_path):
        self.dataset = dataset
        self.processor = processor
        self.data_path = data_path

    def __len__(self):
        return len(self.dataset)

    def __getitem__(self, idx):

        question = self.dataset[idx]['question']
        answer = self.dataset[idx]['answer']
        image_id = self.dataset[idx]['pid']
        image_path = os.path.join(self.data_path, f"train_fill_in_blank/train_fill_in_blank/{image_id}/image.png")
        image = Image.open(image_path).convert("RGB")
        text = question

        encoding = self.processor(image, text, padding="max_length", truncatinotallow=True, return_tensors="pt")
        labels = self.processor.tokenizer.encode(answer, max_length=8, pad_to_max_length=True, return_tensors="pt")
        encoding['labels'] = labels
        for k, v in encoding.items():
            encoding[k] = v.squeeze()

        return encoding

由于我們在VQADataset對象中有了處理器,接下來加載處理所需的內容。我們使用Salesforce/blip-vqa-base模型,并對模型進行一些量化處理。

model_id = "Salesforce/blip-vqa-base"
processor = BlipProcessor.from_pretrained(model_id)
model = BlipForQuestionAnswering.from_pretrained(model_id)

lora_config = LoraConfig(
                    r=16,
                    lora_alpha=32,
                    lora_dropout=0.05,
                    bias="none",
                    target_modules=["query", "key"]
                    )

model = get_peft_model(model, lora_config )
device = torch.device("cuda"if torch.cuda.is_available() else"cpu")
model.to(device)
model.print_trainable_parameters()

輸出結果為:

trainable params: 2,359,296 || all params: 387,031,868 || trainable%: 0.6096

我們創建DataLoader。首先,為訓練數據集和驗證數據集創建Dataset對象。

train_dataset = VQADataset(dataset=ds["train"],
                           processor=processor,
                           data_path=data_path)
val_dataset = VQADataset(dataset=ds["train"],
                           processor=processor,
                           data_path=data_path)

然后,進行創建DataLoader所需的操作。

batch_size=8
train_dataloader = DataLoader(train_dataset,
                              batch_size=batch_size,
                              shuffle=True,
                              pin_memory=True)
val_dataloader = DataLoader(val_dataset,
                            batch_size=batch_size,
                            shuffle=False,
                            pin_memory=True)

此時我們可以開始訓練過程。

# ======== 設置部分========
# 
optimizer = optim.AdamW(model.parameters(),
                        lr=4e-5)
scheduler = optim.lr_scheduler.ExponentialLR(optimizer,
                                             gamma=0.9,
                                             last_epoch=-1,
                                             verbose=True)
n_epochs = 1
min_val_loss = float("inf")
scaler = torch.cuda.amp.GradScaler()

# ======== 訓練部分========
# 
for epoch in range(n_epochs):

    # 訓練設置
    train_loss = []
    model.train()
    for idx, batch in zip(tqdm(range(len(train_dataloader)),
                               desc=f"Training Batch {epoch+1}"), train_dataloader):
        input_ids = batch.pop("input_ids").to(device)
        pixel_values = batch.pop("pixel_values").to(device)
        attention_masked = batch.pop('attention_mask').to(device)
        labels = batch.pop('labels').to(device)

        with torch.amp.autocast(device_type='cuda', dtype=torch.float16):
            outputs = model(input_ids=input_ids,
                            pixel_values=pixel_values,
                            labels=labels)

        loss = outputs.loss
        train_loss.append(loss.item())

        ## 反向傳播
        optimizer.zero_grad()
        scaler.scale(loss).backward()
        scaler.step(optimizer)
        scaler.update()

    # 驗證設置
    val_loss = []
    model.eval()
    for idx, batch in zip(tqdm(range(len(val_dataloader)),
                               desc=f"Validating Batch {epoch+1}"), val_dataloader):
        input_ids = batch.pop("input_ids").to(device)
        pixel_values = batch.pop("pixel_values").to(device)
        attention_masked = batch.pop('attention_mask').to(device)
        labels = batch.pop('labels').to(device)

        with torch.amp.autocast(device_type='cuda', dtype=torch.float16):
            outputs = model(input_ids=input_ids,
                            pixel_values=pixel_values,
                            attention_mask=attention_masked,
                            labels=labels)

        loss = outputs.loss
        val_loss.append(loss.item())

        avg_train_loss = sum(train_loss)/len(train_loss)
        avg_val_loss = sum(val_loss)/len(val_loss)
        lr_per_epoch = optimizer.param_groups[0]["lr"]
    print(f"Epoch: {epoch + 1} - Training Loss: {avg_train_loss} - Eval Loss: {avg_val_loss} - LR: {lr_per_epoch}")

    scheduler.step()

    if avg_val_loss < min_val_loss:
        model.save_pretrained('./save_model', from_pt=True)
        print ("Saved model to ./save_model")
        min_eval_loss = avg_val_loss
processor.save_pretrained ("./save_model", from_pt=True )

最后,我們可以通過以下步驟測試模型的能力:

調用剛剛訓練好的模型

retrain_model_dir = './save_model'
processor = BlipProcessor.from_pretrained(retrain_model_dir)
model = BlipForQuestionAnswering.from_pretrained(retrain_model_dir).to(device)

選擇一個樣本進行測試

test_data_dir = f"{data_path}/test_data/test_data"
samples = os.listdir(test_data_dir)
sample_path = os.path.join(test_data_dir, samples[0])
json_path = os.path.join(sample_path, "data.json")

with open(json_path, "r") as json_file:
    data = json.load(json_file)
    question = data["question"]
    image_id = data["id"]

"""
question
"""

"""
image_path = os.path.join(test_data_dir, f"{image_id}", "image.png")
image = Image.open(image_path).convert("RGB")
image
"""

使用檢索到的樣本向模型提問答案

encoding = processor(image,
                     question,
                     return_tensors="pt").to(device, torch.float16)

outputs = model.generate(**encoding)

generated_text = processor.decode(outputs[0], skip_special_tokens=True)

generated_text

結論

我們探索了多模態大語言模型(MLLMs)這個充滿魅力的世界,深入研究了它們的基本原理以及在各種應用中,尤其是在視覺問答領域所蘊含的令人興奮的潛力。此外,我們看到了這些模型如何經過訓練來理解和推理文本和視覺信息,使它們能夠以令人印象深刻的準確性回答與圖像和視頻相關的問題。

隨著我們不斷前進,多模態大語言模型的研究和開發將繼續推動人工智能領域的可能性邊界。我們可以期待看到更復雜的模型,這些模型能夠處理需要深入理解我們周圍世界的復雜任務。


本文轉載自公眾號Halo咯咯    作者:基咯咯

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

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
97人妻精品一区二区三区软件| www.国产福利| 国产主播福利在线| 蜜桃一区二区三区在线| 精品国产一区二区三区久久久狼| 蜜桃福利午夜精品一区| 91色在线看| 国产精品午夜电影| 国产成人精品免费视频大全最热| 日韩欧美中文字幕一区二区| 国产欧美一区| 91麻豆精品国产自产在线 | 精品久久一区| 日韩一区二区三区免费看| 男人日女人bb视频| www在线免费观看视频| 91麻豆国产在线观看| 91欧美激情另类亚洲| 4438国产精品一区二区| 欧美日韩精品| xvideos成人免费中文版| 中文乱码人妻一区二区三区视频| 久久精品 人人爱| 欧美日韩另类字幕中文| 996这里只有精品| 成年女人的天堂在线| 91丝袜美腿高跟国产极品老师 | 女人喷潮完整视频| 怡红院av在线| 亚洲婷婷国产精品电影人久久| 久久香蕉综合色| www.亚洲天堂.com| 国精产品一区一区三区mba桃花| 日本高清久久天堂| 日韩 国产 在线| 国内揄拍国内精品久久| 精品国产一区久久久| 国产毛片欧美毛片久久久| 日韩一级电影| 亚洲精品99久久久久| 欧美日韩理论片| 人人精品久久| 欧美日本韩国一区| 天堂一区在线观看| 成人精品国产| 日韩欧美亚洲一二三区| 国产成人精品视频免费看| 欧美日韩国产观看视频| 亚洲电影在线播放| 国产妇女馒头高清泬20p多| 日韩经典av| 亚洲第一激情av| 国产 日韩 亚洲 欧美| 黄污视频在线观看| 激情成人在线视频| 缅甸午夜性猛交xxxx| 丁香高清在线观看完整电影视频| 亚洲中国最大av网站| 老司机午夜免费福利视频| av在线导航| 亚洲综合色自拍一区| 男人天堂手机在线视频| segui88久久综合| 精品国产乱码久久久久久婷婷| 97视频在线免费| 日本黄色免费在线| 欧美性猛交xxxxx水多| 国产一区视频免费观看| 电影一区二区| 欧美精品视频www在线观看| 在线观看日本www| avtt综合网| 亚洲美女在线看| 福利视频第一页| 欧美在线国产| 91av中文字幕| 中文av免费观看| 国产一区不卡视频| 国内一区在线| caoporn国产精品免费视频| 亚洲少妇中出一区| 你真棒插曲来救救我在线观看| 欧美日韩国产观看视频| 欧美日韩精品高清| 亚洲精品成人无码毛片| 亚洲制服欧美另类| 久久激情五月丁香伊人| 国产成人啪精品午夜在线观看| 国产亚洲精品bv在线观看| 国产精品成人va在线观看| 91黄色在线视频| av不卡一区二区三区| 亚洲成人自拍| av最新在线| 欧美日韩一级片在线观看| 少妇伦子伦精品无吗| 国产精品一区高清| 欧美国产乱视频| 国产性猛交╳xxx乱大交| 老司机精品视频一区二区三区| 99视频在线播放| 国产高清免费av在线| 亚洲另类色综合网站| 免费在线观看毛片网站| 亚洲五码在线| 中文字幕成人精品久久不卡 | 亚洲综合五月| 欧洲亚洲在线视频| 精品黑人一区二区三区在线观看| 久久亚洲影视婷婷| 99久久久精品视频| 久久不卡日韩美女| 亚洲三级 欧美三级| 久久久精品人妻一区二区三区四 | 国产精品一区av| 欧洲av在线播放| 亚洲欧洲成人自拍| 妓院一钑片免看黄大片| 国产成人一二片| 另类美女黄大片| 一级黄色片在线观看| 91在线视频网址| www.日本在线视频| 国产精品3区| 中文字幕免费精品一区高清| 日韩欧美激情视频| 成人在线综合网| 五月天激情图片| 欧洲美女精品免费观看视频| 亚洲欧美日本另类| 国语对白永久免费| 91亚洲精华国产精华精华液| 六月婷婷激情综合| 欧美激情三级| 九九精品视频在线| 精品国产黄色片| 亚洲人成网站在线| 午夜视频在线观| 91精品啪在线观看国产18| 国产精品免费福利| av播放在线| 欧美视频精品在线观看| 老熟妇一区二区| 日韩成人伦理电影在线观看| 久久伊人一区二区| 日本电影欧美片| 亚洲天堂男人天堂女人天堂| 中国一级特黄毛片| 久久久精品人体av艺术| 国产乱子夫妻xx黑人xyx真爽| 女一区二区三区| 97热精品视频官网| 欧美色综合一区二区三区| 狠狠色狠狠色综合日日五| 青青草成人免费视频| 亚洲综合精品四区| 日韩高清av| 麻豆久久久久| 麻豆国产精品va在线观看不卡| 国产精品嫩草影院桃色| 一级精品视频在线观看宜春院| 黄页网站在线看| 极品日韩av| 精品一区久久久| **在线精品| 色爱av美腿丝袜综合粉嫩av| 一级黄色小视频| 一区二区三区国产精品| 99精品一区二区三区无码吞精| 在线一区欧美| 日韩尤物视频| 激情综合五月| 91精品国产777在线观看| 久久av少妇| 51精品秘密在线观看| 九九热视频精品| 久久久精品2019中文字幕之3| 一区二区三区韩国| 国模 一区 二区 三区| 久久精品国产精品国产精品污 | 日本福利一区二区| 99热在线观看精品| 波多野结衣中文字幕一区| 18岁视频在线观看| 91精品国产视频| 裸体丰满少妇做受久久99精品| 免费污视频在线一区| 久久香蕉国产线看观看网| 色呦呦中文字幕| 欧美日本一道本在线视频| 日本在线观看视频网站| 国产精品免费人成网站| 最新版天堂资源在线| 日韩主播视频在线| 青青草国产免费| 成久久久网站| 国内精品视频免费| 国产精品视频一区二区三区综合| 51ⅴ精品国产91久久久久久| 中文字幕在线视频区| 亚洲激情视频网站| 国产99视频在线| 欧美视频中文一区二区三区在线观看| 欧美精品乱码视频一二专区| 国产亚洲精品7777| 国产人成视频在线观看| 久久福利资源站| 国产1区2区在线| 在线日韩av| 黑人巨大国产9丨视频| 久久99视频| 国产伦精品一区二区三毛| 欧美xxxx性| 国产精品h片在线播放| av手机免费在线观看| 久久影院资源网| av网站在线免费观看| 日韩精品免费在线播放| 超碰人人人人人人| 欧美日韩色综合| 波多野结衣高清视频| 精品久久久久久电影| 久草视频免费在线播放| 国产精品色哟哟网站| 中文字幕 自拍| 久久综合久久综合亚洲| 中文字幕一区二区三区乱码不卡| 国产一区视频在线看| 一本岛在线视频| 亚洲免费网站| 少妇av一区二区三区无码| 国产精品va| 波多野结衣 作品| 亚洲精品中文字幕乱码| 一区二区精品视频| 久久神马影院| 亚洲精品一区二| 欧洲乱码伦视频免费| 日本在线观看不卡| 成人aaaa| 中文字幕免费在线不卡| 日韩欧美精品| 亚洲精品久久久久久一区二区| 国产日产一区| 日本欧美精品久久久| 国产不卡av一区二区| 欧美日韩精品综合| 国产91久久精品一区二区| 欧美亚洲国产免费| 精品日韩在线| 亚洲一区二区在线观| 欧美aaaa视频| 中国黄色录像片| 午夜欧美精品| 91视频最新入口| 久久青草久久| 日本中文字幕二区| 韩国成人精品a∨在线观看| 992kp免费看片| 懂色av噜噜一区二区三区av| 欧洲熟妇的性久久久久久| a亚洲天堂av| 国产精品一二三区在线观看| 亚洲国产精品ⅴa在线观看| 国产在视频线精品视频| 亚洲免费在线视频一区 二区| 欧美xxxx黑人xyx性爽| 亚洲高清一区二区三区| 最新中文字幕一区| 欧美日韩国产一级| 亚洲卡一卡二卡三| 精品一区二区三区四区在线| 第一页在线观看| 欧美精品中文字幕一区| 波多野在线观看| 国产精品69精品一区二区三区| 日韩色性视频| 精品免费视频123区| 精品一级毛片| 福利在线一区二区| 久久久久久婷| 99精品视频免费版的特色功能| www.成人在线| 一本在线免费视频| 亚洲电影一级黄| 一区二区三区免费在线视频| 欧美v日韩v国产v| 国产一级免费在线观看| 欧美成人中文字幕| 欧美人体一区二区三区| 亚洲一区二区三区xxx视频| 欧美理论电影在线精品| 日本特级黄色大片| 亚洲免费婷婷| 少妇献身老头系列| 国产精品久久久久久久岛一牛影视| 欧美三根一起进三p| 欧美在线观看视频一区二区| 亚洲高清视频在线播放| 中文字幕日韩精品有码视频| 人妖欧美1区| 国产专区欧美专区| 亚州精品视频| 国产av熟女一区二区三区 | 欧美xxxx黑人| 国产欧美一区二区三区沐欲| 欧美日韩精品亚洲精品| 欧洲色大大久久| 天天插天天干天天操| 久久综合伊人77777蜜臀| 亚洲第一二三四区| 精品国产一区二区三区四区精华| 偷拍欧美精品| 一区二区三区韩国| 国产三级精品三级在线专区| 久久99久久久| 91精品国产欧美一区二区18| 免费在线黄色电影| 97香蕉久久超级碰碰高清版| 99精品美女视频在线观看热舞| 欧美日韩无遮挡| aa级大片欧美三级| 日本人妻一区二区三区| 亚洲精品视频一区| 国产麻豆免费视频| 视频直播国产精品| 91精品美女| 日韩高清av电影| 日韩黄色免费网站| 阿v天堂2014| 色素色在线综合| 久久久久久久影视| 日本欧美一二三区| 亚洲国产合集| 国产女女做受ⅹxx高潮| 久久久亚洲高清| 国产精品男女视频| 亚洲免费高清视频| 桃花岛tv亚洲品质| 日产国产精品精品a∨| 日韩av一区二区在线影视| 欧洲美一区二区三区亚洲| 色噜噜久久综合| 高清av在线| 国产色综合天天综合网 | 久久韩国免费视频| 国产精品久久免费视频| 国产树林野战在线播放| 国产精品1024| 免费毛片一区二区三区| 日韩高清有码在线| 吞精囗交69激情欧美| 欧美精品一区在线发布| 日韩不卡一二三区| 日日操免费视频| 欧美一区二区三区男人的天堂| 黄色网页在线免费观看| 99视频免费观看蜜桃视频| 激情综合亚洲| 人妻aⅴ无码一区二区三区| 欧美专区在线观看一区| 麻豆视频在线| 成人欧美一区二区三区视频xxx| 极品尤物久久久av免费看| 日韩中文字幕电影| 欧美日本国产视频| 日本精品600av| 蜜桃麻豆91| 看电视剧不卡顿的网站| 青青草激情视频| 日韩高清av在线| 国产精品99精品一区二区三区∴| 中文字幕久精品免| 99久久精品免费看| 欧美日韩 一区二区三区| 另类天堂视频在线观看| 欧美人体视频| 羞羞的视频在线| 洋洋成人永久网站入口| 三级av在线| 亚洲最大福利视频网站| 亚洲一区日韩在线| 色偷偷www8888| 亚洲精品国产suv| 久久婷婷五月综合色丁香| 国产91沈先生在线播放| 久久久99精品久久| 精品人妻一区二区三区换脸明星| 91av视频导航| 综合激情一区| 日韩中文字幕有码| 欧美变态tickling挠脚心| 少妇一区视频| 妞干网视频在线观看| 日本一区二区免费在线 | 99久久国产综合精品色伊| 中文字幕视频在线播放| 97视频免费在线观看| 影音先锋成人在线电影| 精品无码一区二区三区|