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

【TVM 教程】開發環境中加入 microTVM 原創

發布于 2025-5-26 11:41
瀏覽
0收藏

Apache TVM是一個深度的深度學習編譯框架,適用于 CPU、GPU 和各種機器學習加速芯片。更多 TVM 中文文檔可訪問 →https://tvm.hyper.ai/
作者:Mohamad Katanbaf

本教程描述了將使用 microTVM 編譯的模型集成到自定義開發環境所需的步驟。在本教程中,我們使用?STM32CubeIDE?作為目標集成開發環境(IDE),但我們不依賴于此 IDE 的任何特定功能,將 microTVM 集成到其他 IDE 中的步驟類似。在這里,我們還使用了 MLPerf Tiny 的 Visual Wake Word(VWW)模型和 nucleo_l4r5zi 開發板,但相同的步驟也適用于任何其他模型或目標微控制器單元(MCU)。如果您希望在 vww 模型上使用另一個目標 MCU,我們建議選擇具有約 512 KB 和約 256 KB 閃存和 RAM 的 Cortex-M4 或 Cortex-M7 設備。

以下是本教程中要執行的步驟的簡要概述。

  1. 首先,我們導入模型,使用 TVM 進行編譯,并生成包含模型生成代碼以及所有所需 TVM 依賴項的?Model Library Format(MLF)tar 文件。
  2. 我們還將兩個二進制格式的樣本圖像(一個人和一個非人樣本)添加到 .tar 文件中,以用于評估模型。
  3. 接下來,我們使用 stmCubeMX 生成在 stmCube IDE 中項目的初始化代碼。
  4. 然后,我們將我們的 MLF 文件和所需的 CMSIS 庫包含到項目中并進行構建。
  5. 最后,我們燒寫設備并在我們的樣本圖像上評估模型性能。

讓我們開始吧。

安裝 microTVM Python 依賴項

TVM 不包含用于 Python 串行通信的包,因此在使用 microTVM 之前,我們必須安裝一個。我們還需要 TFLite 以加載模型,以及 Pillow 以準備樣本圖像。

pip install pyserial==3.5 tflite==2.1 Pillow==9.0 typing_extensions

導入 Python 依賴項

如果要在本地運行此腳本,請查看?TVM 在線文檔,了解安裝 TVM 的說明。

import os
import numpy as np
import pathlib
import json
from PIL import Image
import tarfile

import tvm
from tvm import relay
from tvm.relay.backend import Executor, Runtime
from tvm.contrib.download import download_testdata
from tvm.micro import export_model_library_format
from tvm.relay.op.contrib import cmsisnn
from tvm.micro.testing.utils import create_header_file

導入 TFLite 模型

首先,下載并導入 Visual Wake Word TFLite 模型。該模型接受一個 96x96x3 的 RGB 圖像,并確定圖像中是否存在人物。此模型最初來自?MLPerf Tiny 倉庫。為了測試該模型,我們使用?COCO 2014 Train images?中的兩個樣本。

MODEL_URL = "https://github.com/mlcommons/tiny/raw/bceb91c5ad2e2deb295547d81505721d3a87d578/benchmark/training/visual_wake_words/trained_models/vww_96_int8.tflite"
MODEL_NAME = "vww_96_int8.tflite"
MODEL_PATH = download_testdata(MODEL_URL, MODEL_NAME, module="model")

tflite_model_buf = open(MODEL_PATH, "rb").read()
try:
    import tflite

    tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)
except AttributeError:
    import tflite.Model

    tflite_model = tflite.Model.Model.GetRootAsModel(tflite_model_buf, 0)

input_shape = (1, 96, 96, 3)
INPUT_NAME = "input_1_int8"
relay_mod, params = relay.frontend.from_tflite(
    tflite_model, shape_dict={INPUT_NAME: input_shape}, dtype_dict={INPUT_NAME: "int8"}
)

生成模型庫格式文件

首先,我們定義目標、運行時和執行器。然后,我們為目標設備編譯模型,最后導出生成的代碼和所有必需的依賴項到單個文件中。

# 我們可以使用 TVM 的本地調度或依賴于 CMSIS-NN 內核,使用 TVM 的 Bring-Your-Own-Code (BYOC) 能力。
USE_CMSIS_NN = True

# USMP (Unified Static Memory Planning) 對所有張量進行綜合內存規劃,以實現最佳內存利用。
DISABLE_USMP = False

# 使用 C 運行時(crt)
RUNTIME = Runtime("crt")

# 我們通過將板名稱傳遞給 `tvm.target.target.micro` 來定義目標。
# 如果您的板型未包含在支持的模型中,您可以定義目標,如下所示:
# TARGET = tvm.target.Target("c -keys=arm_cpu,cpu -mcpu=cortex-m4")
TARGET = tvm.target.target.micro("stm32l4r5zi")

# 使用 AOT 執行器而不是圖形或虛擬機執行器。使用未打包的 API 和 C 調用風格。
EXECUTOR = tvm.relay.backend.Executor(
    "aot", {"unpacked-api": True, "interface-api": "c", "workspace-byte-alignment": 8}
)

# 現在,我們設置編譯配置并為目標編譯模型:
config = {"tir.disable_vectorize": True}
if USE_CMSIS_NN:
    config["relay.ext.cmsisnn.options"] = {"mcpu": TARGET.mcpu}
if DISABLE_USMP:
    config["tir.usmp.enable"] = False

with tvm.transform.PassContext(opt_level=3, config=config):
    if USE_CMSIS_NN:
        # 當我們使用 CMSIS-NN 時,TVM 在 relay 圖中搜索可以轉移到 CMSIS-NN 內核的模式。
        relay_mod = cmsisnn.partition_for_cmsisnn(relay_mod, params, mcpu=TARGET.mcpu)
    lowered = tvm.relay.build(
        relay_mod, target=TARGET, params=params, runtime=RUNTIME, executor=EXECUTOR
    )
parameter_size = len(tvm.runtime.save_param_dict(lowered.get_params()))
print(f"Model parameter size: {parameter_size}")

# 我們需要選擇一個目錄來保存我們的文件。
# 如果在 Google Colab 上運行,我們將保存所有內容在 ``/root/tutorial`` 中(也就是 ``~/tutorial``),
# 但是如果在本地運行,您可能希望將其存儲在其他位置。

BUILD_DIR = pathlib.Path("/root/tutorial")

BUILD_DIR.mkdir(exist_ok=True)

# 現在,我們將模型導出為一個 tar 文件:
TAR_PATH = pathlib.Path(BUILD_DIR) / "model.tar"
export_model_library_format(lowered, TAR_PATH)

輸出:

Model parameter size: 32

PosixPath('/workspace/gallery/how_to/work_with_microtvm/tutorial/model.tar')

將樣本圖像添加到 MLF 文件中?

最后,我們下載兩個樣本圖像(一個人圖像和一個非人圖像),將它們轉換為二進制格式,并存儲在兩個頭文件中。

with tarfile.open(TAR_PATH, mode="a") as tar_file:
    SAMPLES_DIR = "samples"
    SAMPLE_PERSON_URL = (
        "https://github.com/tlc-pack/web-data/raw/main/testdata/microTVM/data/vww_sample_person.jpg"
    )
    SAMPLE_NOT_PERSON_URL = "https://github.com/tlc-pack/web-data/raw/main/testdata/microTVM/data/vww_sample_not_person.jpg"

    SAMPLE_PERSON_PATH = download_testdata(SAMPLE_PERSON_URL, "person.jpg", module=SAMPLES_DIR)
    img = Image.open(SAMPLE_PERSON_PATH)
    create_header_file("sample_person", np.asarray(img), SAMPLES_DIR, tar_file)

    SAMPLE_NOT_PERSON_PATH = download_testdata(
        SAMPLE_NOT_PERSON_URL, "not_person.jpg", module=SAMPLES_DIR
    )
    img = Image.open(SAMPLE_NOT_PERSON_PATH)
    create_header_file("sample_not_person", np.asarray(img), SAMPLES_DIR, tar_file)

在這一點上,您已經具備將編譯后的模型導入到您的 IDE 并進行評估所需的一切。在 MLF 文件(model.tar)中,您應該找到以下文件層次結構:

/root
├── codegen
├── parameters
├── runtime
├── samples
├── src
├── templates
├── metadata.json
  • codegen 文件夾:包含了由 TVM 為您的模型生成的 C 代碼。
  • runtime 文件夾:包含了目標需要編譯生成的 C 代碼所需的所有 TVM 依賴項。
  • samples 文件夾:包含了用于評估模型的兩個生成的樣本文件。
  • src 文件夾:包含了描述模型的 relay 模塊。
  • templates 文件夾:包含了兩個模板文件,根據您的平臺可能需要進行編輯。
  • metadata.json 文件:包含有關模型、其層次和內存需求的信息。

生成在您的 IDE 中的項目?

下一步是為目標設備創建一個項目。我們使用 STM32CubeIDE,您可以在此處下載。在本教程中,我們使用的是版本 1.11.0。安裝 STM32CubeIDE 后,請按照以下步驟創建項目:

  1. 選擇 File -> New -> STM32Project。目標選擇窗口將出現。

  2. 轉到 “Board Selector” 選項卡,在 “Commercial Part Number” 文本框中鍵入板名稱 “nucleo-l4r5zi”。從右側顯示的板列表中選擇板,并單擊 “Next”。

  3. 輸入項目名稱(例如 microtvm_vww_demo)。我們使用默認選項(目標語言:C,二進制類型:可執行文件,項目類型:STM32Cube)。單擊 “Finish”。

  4. 一個文本框將出現,詢問是否要 “以默認模式初始化所有外設?”。點擊 “Yes”。這將生成項目并打開設備配置工具,您可以使用 GUI 設置外設。默認情況下啟用了 USB、USART3 和 LPUART1,以及一些 GPIO。

  5. 我們將使用 LPUART1 將數據發送到主機 PC。從連接部分中選擇 LPUART1,并將 “Baud Rate” 設置為 115200,將 “Word Length” 設置為 8。保存更改并點擊 “Yes” 以重新生成初始化代碼。這應該會重新生成代碼并打開您的 main.c 文件。您還可以從左側的 Project Explorer 面板中找到 main.c,在 microtvm_vww_demo -> Core -> Src 下。

  6. 為了進行健全性檢查,請復制下面的代碼并將其粘貼到主函數的無線循環(即 While(1) )部分。

    • 注意:確保您的代碼寫在由 USER CODE BEGIN<…> 和 USER CODE END<…> 包圍的部分內。如果重新生成初始化代碼,被包圍之外的代碼將被擦除。
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_UART_Transmit(&hlpuart1, "Hello World.\r\n", 14, 100);
HAL_Delay(1000);
  1. 從菜單欄中選擇 Project -> Build(或右鍵單擊項目名稱并選擇 Build)。這將構建項目并生成 .elf 文件。選擇 Run -> Run 以將二進制文件下載到您的 MCU。如果打開了“Edit Configuration”窗口,請直接點擊 “OK”。
  2. 在主機機器上打開終端控制臺。在 Mac 上,您可以簡單地使用 “screen <usb_device> 115200” 命令,例如 “screen tty.usbmodemXXXX 115200” 。板上的 LED 應該會閃爍,終端控制臺上每秒應該會打印出字符串 “Hello World.”。按 “Control-a k” 退出 screen。

將模型導入生成的項目?

要將編譯后的模型集成到生成的項目中,請按照以下步驟操作:

  1. 解壓 tar 文件并將其包含在項目中

    • 打開項目屬性(右鍵單擊項目名稱并選擇 “Properties” 或從菜單欄選擇 Project -> Properties)。
    • 選擇 C/C++ General -> Paths and Symbols。選擇 Source Location 選項卡。
    • 如果您將模型解壓縮在項目文件夾內,請點擊 “Add Folder” 并選擇 “model” 文件夾(在它出現之前,您可能需要右鍵單擊項目名稱并選擇 “Refresh”)。
    • 如果您在其他地方解壓縮了模型文件,請點擊 “Link Folder” 按鈕,在出現的窗口中選中 “Link to folder in the file system” 復選框,點擊 “Browse” 并選擇模型文件夾。
  2. 如果在編譯模型時使用了 CMSIS-NN,您還需要在項目中包含 CMSIS-NN 源文件。

    • 從?CMSIS-NN 存儲庫下載或克隆文件,并按照上述步驟將 CMSIS-NN 文件夾包含在項目中。
  3. 打開項目屬性。在 C/C++ Build -> Settings 中:通過點擊 “+” 按鈕,選擇 “Workspace” ,并導航到以下各個文件夾。將以下文件夾添加到 MCU GCC Compiler 的 Include Paths 列表中(如果是 C++ 項目還需添加到 MCU G++ Compiler 中):

    • model/runtime/include
    • model/codegen/host/include
    • model/samples
    • CMSIS-NN/Include
  4. 從 model/templates 復制 crt_config.h.template 到 Core/Inc 文件夾,并將其重命名為 crt_config.h。

  5. 從 model/templates 復制 platform.c.template 到 Core/Src 文件夾,并將其重命名為 platform.c。

    • 此文件包含您可能需要根據平臺編輯的內存管理函數。
    • 在 platform.c 中定義 “TVM_WORKSPACE_SIZE_BYTES” 的值。如果使用 USMP,則只需要比較小的值(例如 1024 字節)即可。
    • 如果不使用 USMP,請查看 metadata.json 中的 “workspace_size_bytes” 字段以估算所需內存。
  6. 從構建中排除以下文件夾(右鍵單擊文件夾名稱,選擇 Resource Configuration → Exclude from build)。檢查 Debug 和 Release 配置。

    • CMSIS_NN/Tests
  7. 從?CMSIS Version 5 存儲庫下載 CMSIS 驅動程序。

    • 在項目目錄中,刪除 Drivers/CMSIS/Include 文件夾(這是 CMSIS 驅動程序的舊版本),并將您從下載的版本中復制的 CMSIS/Core/Include 粘貼到相同位置。
  8. 編輯 main.c 文件:

  • 包含下列頭文件
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "tvmgen_default.h"
#include "sample_person.h"
#include "sample_not_person.h"
  • 在 main 函數的無限循環前復制下面這段代碼。該代碼設置模型的輸入和輸出
TVMPlatformInitialize();
signed char output[2];
struct tvmgen_default_inputs inputs = {
.input_1_int8 = (void*)&sample_person,
};
struct tvmgen_default_outputs outputs = {
.Identity_int8 = (void*)&output,
};
char msg[] = "Evaluating VWW model using microTVM:\r\n";
HAL_UART_Transmit(&hlpuart1, msg, strlen(msg), 100);
uint8_t sample = 0;
uint32_t timer_val;
char buf[50];
uint16_t buf_len;
  • 將以下代碼復制到無限循環中。該代碼將在圖片上運行推斷并在控制臺打印結果。
if (sample == 0)
    inputs.input_1_int8 = (void*)&sample_person;
else
    inputs.input_1_int8 = (void*)&sample_not_person;

timer_val = HAL_GetTick();
tvmgen_default_run(&inputs, &outputs);
timer_val = HAL_GetTick() - timer_val;
if (output[0] > output[1])
    buf_len = sprintf(buf, "Person not detected, inference time = %lu ms\r\n", timer_val);
else
    buf_len = sprintf(buf, "Person detected, inference time = %lu ms\r\n", timer_val);
HAL_UART_Transmit(&hlpuart1, buf, buf_len, 100);

sample++;
if (sample == 2)
    sample = 0;
  • 在 main 中定義 TVMLogf 函數,接受 TVM 運行時在控制臺的報錯
void TVMLogf(const char* msg, ...) {
  char buffer[128];
  int size;
  va_list args;
  va_start(args, msg);
  size = TVMPlatformFormatMessage(buffer, 128, msg, args);
  va_end(args);
  HAL_UART_Transmit(&hlpuart1, buffer, size, 100);
}

  1. 在項目屬性中,找到 C/C++ Build -> Settings, MCU GCC Compiler -> Optimization,設置 Optimization 為 Optimize more (-O2)。

評估模型?

現在,選擇菜單欄中的 Run -> Run 來刷寫 MCU 并運行項目。您應該看到 LED 在閃爍,并且控制臺上在打印推理結果。

下載 Python 源代碼:micro_custom_ide.py

下載 Jupyter notebook:micro_custom_ide.ipynb

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
2017亚洲天堂1024| 一区二区视频网| 高清精品视频| 色激情天天射综合网| 亚洲高清在线观看一区| 人妻无码一区二区三区久久99 | 亚洲欧洲激情在线| jizzzz日本| 182在线视频观看| 欧美国产日韩在线观看| 91精品国产91久久久久青草| 日本韩国欧美中文字幕| 国产在线视频资源| 日本不卡高清视频| 欧美激情视频播放| 中文字幕免费高清| 2023国产精华国产精品| 欧美丝袜丝交足nylons图片| 成人精品视频在线播放| 99re在线视频| 不卡av免费在线观看| 国产免费成人av| 国产成人无码精品亚洲| 99视频精品视频高清免费| 亚洲精品二三区| 国产高清av片| 日本欧美一区| 婷婷综合五月天| 99视频精品全部免费看| 成年人视频在线免费观看| 99精品欧美一区| 亚洲综合中文字幕在线| 久操视频在线免费观看| 亚洲三级网站| 色综合久久精品亚洲国产| 亚洲成人黄色av| 西野翔中文久久精品国产| 日韩欧美高清在线| 中文字幕一区久久| 国产极品久久久久久久久波多结野| 天天操天天干天天综合网| 欧美日韩视频免费| 日韩伦理av| 亚洲日本韩国一区| 亚洲一区在线免费| 1pondo在线播放免费| 国产人成亚洲第一网站在线播放| 久久综合色一本| 亚洲欧洲视频在线观看| 99热99精品| 国产综合 伊人色| 熟妇高潮一区二区三区| 成人直播在线观看| 777久久久精品| 午夜免费看毛片| 巨大黑人极品videos精品| 91国偷自产一区二区三区成为亚洲经典| 色综合久久久久无码专区| 草草视频在线观看| 精品久久久久久中文字幕大豆网| 成人在线观看你懂的| 国产乱码精品一区二三赶尸艳谈| 亚洲国产精品久久久久秋霞影院| 精品一二三四五区| 国产精品yjizz视频网| 欧美日韩激情视频| 久久久久久久激情| 欧美xnxx| 91精品婷婷国产综合久久竹菊| 国产大片一区二区三区| av成人资源网| 日韩精品免费在线视频| 免费人成又黄又爽又色| 欧美在线色图| 美女国内精品自产拍在线播放| 成人免费黄色小视频| 黑丝一区二区| 色综合久久综合中文综合网| 国产精品亚洲a| a屁视频一区二区三区四区| 欧美日产在线观看| 欧美老女人bb| 一道在线中文一区二区三区| 国产亚洲精品美女久久久久| 久久爱一区二区| 欧美午夜不卡影院在线观看完整版免费| 欧美激情视频一区二区三区不卡| 国产精品999在线观看| 日本亚洲免费观看| 91视频免费在线观看| 三级视频在线| 亚洲欧洲美洲综合色网| 国产3p露脸普通话对白| 992tv国产精品成人影院| 日韩欧美国产系列| 国产欧美一区二区三区在线观看视频| 91av精品| 日韩av快播网址| 国产日韩欧美视频在线观看| 97久久精品人人澡人人爽| 亚洲欧美日韩在线综合 | 国产精品一级视频| 北条麻妃国产九九精品视频| 亚洲高清视频一区| а√天堂中文资源在线bt| 欧美日韩视频在线第一区 | 久久久久久成人| 91丨九色丨海角社区| 国产成人免费xxxxxxxx| 日韩三级电影网站| 国精一区二区三区| 欧美久久免费观看| 欧美bbbbb性bbbbb视频| 欧美 日韩 国产精品免费观看| 人体精品一二三区| 亚洲精品成人电影| 亚洲欧洲成人精品av97| 日韩av资源在线| 国产精品白丝av嫩草影院| 日韩中文在线中文网三级| 最新中文字幕一区| 国产成人精品一区二| 在线免费观看成人网| 天天免费亚洲黑人免费| 亚洲国产精品va在线观看黑人| 手机精品视频在线| 伊人久久大香线蕉综合网蜜芽| 欧美大片大片在线播放| 国产又粗又猛视频| 久久精品一二三| 久久久噜噜噜www成人网| 亚洲综合网站| 久久国产天堂福利天堂| 97精品人妻一区二区三区| 国产午夜精品一区二区 | 欧美激情一区二区视频| 毛片基地黄久久久久久天堂| 欧洲亚洲一区二区三区四区五区| 僵尸再翻生在线观看| 亚洲成人网在线| 国产性70yerg老太| 国产aⅴ精品一区二区三区色成熟| 正在播放一区二区三区| 国产精品久久久久久妇女| 亚洲人a成www在线影院| www毛片com| 久久免费高清| 美女亚洲精品| 亚洲欧洲高清| 亚洲欧美国产精品专区久久| 日韩免费视频网站| 91亚洲精品久久久蜜桃| 成人毛片视频网站| 亚洲人成网www| 日本伊人精品一区二区三区介绍| 天堂a中文在线| 精品久久久国产| 青青草视频成人| 亚洲欧美卡通另类91av| 欧美日韩精品免费观看| 欧美性xxx| 中文字幕日韩在线视频| 一级片一区二区三区| 中文字幕在线一区二区三区| 国产高清av片| 99在线热播精品免费99热| 久久综合九九| 久久精品 人人爱| 久久人体大胆视频| 亚洲精品久久久久久动漫器材一区| 亚洲一级在线观看| 中文字幕一区二区三区人妻| 日本成人超碰在线观看| 一区二区三区四区欧美| 日韩一级淫片| 欧美在线视频在线播放完整版免费观看 | 日本欧美加勒比视频| 91香蕉视频网址| 中文字幕久久精品一区二区 | 国产一级片91| 奇米777国产一区国产二区| 国产成人精品日本亚洲| 好吊日视频在线观看| 亚洲精品一区二区三区四区高清 | 另类小说欧美激情| 日b视频免费观看| 亚洲色图丝袜| 91老司机精品视频| 国产精品xx| 久久久999精品视频| 丰满人妻一区二区三区免费视频| 欧美视频第一页| 日韩成人短视频| av资源站一区| 欧美特黄aaa| 国产一区二区三区的电影| 亚洲资源在线网| 另类在线视频| 92福利视频午夜1000合集在线观看 | 国产毛片一区二区三区va在线 | 欧洲在线一区| 91久久久久久久| 欧美片第一页| 久久免费国产视频| 三区四区电影在线观看| 日韩电影在线观看永久视频免费网站| 一级做a爰片久久毛片16| 亚洲成人自拍偷拍| 欧美人禽zoz0强交| 99这里都是精品| 午夜性福利视频| 久久99蜜桃精品| 国产美女三级视频| 亚洲福利电影| 欧美交换配乱吟粗大25p| 精品理论电影在线| 99视频免费观看| 日韩第二十一页| 国产成人精品网站| 九色porny自拍视频在线播放| 久久精品国产69国产精品亚洲| 国家队第一季免费高清在线观看| 亚洲国产精品yw在线观看| 国产又粗又猛视频免费| 欧美视频一区在线| 久久久久在线视频| 丁香五六月婷婷久久激情| 久草视频在线资源站| 亚洲人成小说网站色在线| 亚洲色图日韩精品| 国产日韩欧美精品一区| 成人免费网站黄| 99久久777色| 日韩av手机在线播放| 懂色av一区二区三区免费观看| 国产精品午夜视频| 中国丰满人妻videoshd| 久久久男人天堂| 欧美激情国内偷拍| gogogogo高清视频在线| 久久久极品av| 毛片在线播放a| 日韩亚洲精品电影| 男人天堂久久久| 精品国产一区二区在线| 免费在线观看av片| 久久激情视频免费观看| 欧美jizzhd69巨大| 久久久国产91| 免费高清一区二区三区| 啄木系列成人av电影| 美女主播视频一区| 中文字幕亚洲影视| 日韩一区二区三区高清| 日本不卡电影| 一区二区精品免费视频| 99久久综合狠狠综合久久aⅴ| 一区二区三区四区欧美日韩| 亚洲美女视频| 91久久精品国产| 欧美视频二区欧美影视| 2019国产精品视频| 99久久香蕉| 久久国产欧美精品| 国产欧美日韩视频在线| 日韩欧美视频一区二区| 欧美mv日韩| 日韩成人手机在线| 一区二区国产在线观看| 国产精彩免费视频| 国产综合成人久久大片91| 少妇欧美激情一区二区三区| 大桥未久av一区二区三区中文| 天天插天天射天天干| 国产日韩欧美亚洲| 老妇女50岁三级| 欧美日韩精品在线播放| 中文字幕 亚洲视频| 欧美一区二区三区免费大片| 免费观看成年人视频| 亚洲欧美国产制服动漫| 尤物视频在线免费观看| 欧美日韩高清在线观看| 亚洲最大网站| 91久久国产精品| 久久夜色电影| 日产精品高清视频免费| 欧美日本一区二区视频在线观看 | 亚洲第一级黄色片| 国产在线三区| 欧美剧在线观看| av综合电影网站| 亚洲永久免费观看| 亚洲自拍电影| 男女h黄动漫啪啪无遮挡软件| 99视频精品| 特级西西444www| 久久综合色之久久综合| 免费成人美女女在线观看| 亚洲电影第三页| 中文字幕人成人乱码亚洲电影| 日韩精品一区国产麻豆| a中文在线播放| 韩国19禁主播vip福利视频| 99久久精品一区二区成人| 国产精品果冻传媒潘| 久久久影院免费| 国模吧无码一区二区三区| 国产成人免费视频网站| 欧美午夜激情影院| 欧美日韩免费区域视频在线观看| 国产又大又长又粗| 亚洲人成电影在线| free性欧美| 亚洲资源在线看| 四季av一区二区凹凸精品| 浮妇高潮喷白浆视频| 国产成人小视频| 天天爽天天爽天天爽| 日韩欧美aⅴ综合网站发布| 亚洲国产www| 久青草国产97香蕉在线视频| 99久久婷婷国产综合精品首页| 久久伊人资源站| 1024日韩| 国产ts在线观看| 亚洲欧美一区二区三区久本道91 | 国产成人福利片| 黄色a级片在线观看| 日本韩国欧美国产| 日本成人一区二区三区| 午夜免费久久久久| 粉嫩的18在线观看极品精品| 日本三级中文字幕在线观看| 久久99精品国产麻豆不卡| 精品黑人一区二区三区观看时间| 综合久久国产九一剧情麻豆| 中文字幕在线观看欧美| 国产亚洲美女久久| 国产成人精品123区免费视频| 久久久久高清| 亚洲综合99| 91成年人网站| 在线中文字幕不卡| 国产一区二区三区福利| 欧美一级电影久久| 亚洲人成网站77777在线观看| 日韩在线一级片| 久久美女高清视频 | 制服丝袜在线91| av中文字幕在线观看| 亚洲一区二区三区成人在线视频精品 | 日韩成人在线免费视频| 欧美成人一区二区三区片免费| 免费毛片在线播放免费| 制服丝袜中文字幕亚洲| 在线你懂的视频| 成人国产1314www色视频| 国产精品mm| 三级电影在线看| 在线观看91精品国产入口| 日本亚洲精品| 99久久精品久久久久久ai换脸| 亚洲手机视频| 久久人人爽人人人人片| 日本韩国一区二区三区视频| 香港伦理在线| 91在线免费看片| 亚洲日本激情| 日韩免费成人av| 日韩一区二区三区四区| 超碰在线最新网址| 欧美福利一区二区三区| 老司机免费视频一区二区三区| 欧美手机在线观看| 亚洲的天堂在线中文字幕| 写真福利精品福利在线观看| 一区二区三区四区五区精品| 国产精品一区二区在线观看网站 | 在线观看91视频| а√天堂资源地址在线下载| 国产一区二区中文字幕免费看| 日日夜夜免费精品| jizz亚洲少妇| 精品中文字幕久久久久久| 国产成人精品一区二区三区免费| 国内自拍中文字幕| 久久久国产精品午夜一区ai换脸| 亚洲视频在线观看免费视频| 国模精品系列视频| 成人在线免费观看91| 中文字幕人妻一区| 欧洲色大大久久| 不卡av免费观看| 亚洲在线不卡| 日韩av片免费观看| 色诱视频网站一区| 日本h片在线观看| 偷拍视频一区二区| 99在线热播精品免费|