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

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
日韩 国产 一区| 日本公妇乱淫免费视频一区三区| 久久99久久98精品免观看软件| 欧美挤奶吃奶水xxxxx| 懂色aⅴ精品一区二区三区蜜月| 欧美精品一区在线| 国产区精品在线| 性色一区二区| 欧美成人精品在线视频| 国内精品久久99人妻无码| 人人精品久久| 懂色av中文一区二区三区天美| 午夜精品短视频| 成人午夜视频一区二区播放| 日韩极品在线观看| 欧美激情第三页| 日本精品久久久久中文| 国产图片一区| 欧美一级高清片| 在线观看高清免费视频| gogo高清在线播放免费| 中文字幕一区二区在线播放| 欧美xxxx黑人又粗又长密月| www.亚洲黄色| 精品一区二区三区免费播放| 欧美亚洲免费电影| 欧美成人综合色| 欧美激情理论| 一区二区三区日韩在线| 日本黄色动态图| 视频国产精品| 制服丝袜在线91| 浓精h攵女乱爱av| 国模套图日韩精品一区二区| 亚洲国产日韩精品| 欧美a级黄色大片| 日本黄色片在线观看| 久久影视一区二区| 久久久久久久久久久久久9999| 午夜精品久久久久久久爽| 精品一区二区三区免费观看| 国产精品国产自产拍高清av水多 | 午夜日韩av| 日韩一中文字幕| 欧美福利第一页| 免费av一区二区三区四区| 亚洲第一偷拍网| 国产性猛交96| 好吊妞国产欧美日韩免费观看网站 | 日本免费成人| 欧美乱妇23p| 五月天视频在线观看| 日韩高清成人| 欧美伊人久久久久久午夜久久久久| 日本免费黄视频| 亚洲最新无码中文字幕久久| 欧美视频在线免费| 日韩免费毛片视频| 色天使综合视频| 在线观看欧美日本| 天天看片天天操| 久久久久九九精品影院| 精品三级av在线| 漂亮人妻被黑人久久精品| 秋霞在线一区| 国产亚洲精品美女久久久| 亚洲综合第一区| 香蕉综合视频| 欧美高清视频在线播放| 圆产精品久久久久久久久久久| 亚洲免费黄色| 国产精品国语对白| 国产精品毛片一区视频播 | 91资源在线播放| 色综合色综合| 久久91亚洲人成电影网站| 久久亚洲精品大全| 香蕉成人久久| 国产欧美中文字幕| 黄频网站在线观看| 欧美国产一区在线| 无码日本精品xxxxxxxxx| 美女高潮视频在线看| 欧亚洲嫩模精品一区三区| 91 视频免费观看| 久久男人av| 中文字幕亚洲无线码a| 91porn在线视频| 久久精品欧洲| 999久久久| 国产一级免费在线观看| 亚洲欧美日韩国产成人精品影院| 缅甸午夜性猛交xxxx| 国产一区一一区高清不卡| 欧美一区二区三区免费在线看| 中文字幕人妻一区| 日韩理论片av| 91精品国产色综合久久不卡98口| 国产乱码77777777| 成人免费毛片高清视频| 亚洲狠狠婷婷综合久久久| 97影院秋霞午夜在线观看| 狠狠做深爱婷婷久久综合一区| 国产精品区在线| 色吊丝一区二区| 久久夜色精品国产| 久久久精品毛片| 成人免费av网站| 中文字幕一区二区三区精彩视频| 手机在线观看av| 日韩午夜小视频| 中文天堂资源在线| 亚洲欧美视频| 国产精品久久久久久免费观看 | 亚洲不卡免费视频| 中文字幕av一区二区三区| 精品少妇在线视频| 91麻豆精品一二三区在线| 国产一区二区av| 国偷自拍第113页| 国产福利精品导航| 亚洲一卡二卡| 色天使综合视频| 亚洲女人天堂av| 国产一级做a爱免费视频| 国产综合色精品一区二区三区| 日韩少妇中文字幕| 亚洲最大网站| 精品香蕉一区二区三区| 国产一级片播放| 国产久卡久卡久卡久卡视频精品| 亚洲免费精品视频| 国产麻豆一区| 中文字幕一区电影| 在线观看黄色国产| 国产精品视频你懂的| 免费看国产黄色片| 精品99久久| 国产成人拍精品视频午夜网站| 亚洲aⅴ在线观看| 欧美日韩午夜剧场| 伊人网伊人影院| 米奇777在线欧美播放| 欧美成人在线免费观看| 国模套图日韩精品一区二区| 亚洲欧美中文日韩在线| 亚洲中文字幕无码爆乳av| 久久久av毛片精品| 男女视频一区二区三区| 欧美禁忌电影网| 国产精品久久久久久久一区探花 | 偷拍视屏一区| 人人爽久久涩噜噜噜网站| 亚洲人在线观看视频| 狠狠躁夜夜躁久久躁别揉| www.超碰97| 久久精品观看| 亚洲视频导航| 国产一区一区| 欧美激情久久久久| 十八禁一区二区三区| 欧美日韩一区二区在线播放| 国产熟妇搡bbbb搡bbbb| 日韩中文字幕不卡| 正在播放精油久久| 爱高潮www亚洲精品| 国产69久久精品成人| 国产69久久| 欧美精品在线一区二区| 激情五月婷婷在线| 91网站视频在线观看| 国产视频手机在线播放| 综合激情视频| 久久精品日韩精品| 国产激情久久| 久久久久久美女| 黄视频在线观看免费| 欧美日本国产一区| 久久精品视频日本| 国产欧美一区二区精品仙草咪| 色播五月激情五月| 亚洲国内欧美| 亚洲精品永久www嫩草| 欧美电影在线观看一区| 欧美在线视频免费播放| yourporn在线观看中文站| 日韩精品一区二区三区蜜臀 | 美国三级日本三级久久99| 91看片淫黄大片91| 亚洲va久久久噜噜噜久久| 国产精品天天狠天天看| 99热99re6国产在线播放| 中文在线不卡视频| 色欲久久久天天天综合网 | 999久久久精品视频| 在线综合欧美| 青青草原网站在线观看| 自拍视频一区| 痴汉一区二区三区| 成人h在线观看| 国内精品久久久久影院优| av资源网站在线观看| 亚洲精品456在线播放狼人| 亚洲专区第一页| 精品日韩美女的视频高清| 久久精品一区二区三区四区五区| 久久午夜电影网| 一区二区三区四区影院| 久久精品国产精品亚洲红杏| 116极品美女午夜一级| 国产一区清纯| 日本免费在线视频观看| 经典一区二区| 久久国产精品-国产精品| 无人区乱码一区二区三区| 国产日韩欧美视频| 日本在线精品| 欧美在线视频一区| 97天天综合网| 欧美激情亚洲激情| 黄色动漫在线| 色午夜这里只有精品| 男人久久精品| 日韩精品久久久久久福利| 亚洲高清精品视频| 欧美一级日韩一级| 97精品人妻一区二区三区| 日本道精品一区二区三区| 欧美亚洲天堂网| 亚洲电影一区二区| 国产精品成人aaaa在线| 亚洲制服丝袜av| 久久久精品视频免费观看| 亚洲色图视频网| 亚洲一二三四五六区| 欧美极品少妇xxxxⅹ高跟鞋| 久久久久亚洲av无码a片| 久久综合久久久久88| 变态另类丨国产精品| 成人18精品视频| 美女搡bbb又爽又猛又黄www| 成人性色生活片| 99久久久无码国产精品性波多| 国产精品一区二区91| 免费观看黄网站| 国产东北露脸精品视频| 性折磨bdsm欧美激情另类| 国产精品一品二品| 国产免费无码一区二区| 国产成人av资源| 亚洲精品乱码久久| 2024国产精品视频| 中文字幕在线看高清电影| 久久精品视频在线免费观看| av女人的天堂| 自拍偷拍国产精品| 久久久久久久久久99| 亚洲电影第三页| 亚洲国产av一区二区三区| 欧美亚洲国产bt| 国产三级漂亮女教师| 欧美草草影院在线视频| 日本福利在线观看| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 国产69精品久久久久9| 不卡视频观看| 国产成人精品一区| 欧美韩国日本| 国产精品一区二| 精品日韩免费| 18视频在线观看娇喘| 在线不卡视频| 99999精品视频| 蜜桃91丨九色丨蝌蚪91桃色| 精品人妻一区二区三| 97精品电影院| 999精品久久久| 亚洲国产成人高清精品| 国产精品xxxxxx| 日韩精品一区二区三区四区 | mm1313亚洲国产精品无码试看| 美女诱惑一区二区| 奇米777第四色| 国产精品欧美极品| 精品一区在线视频| 欧美亚洲一区二区三区四区| av中文在线观看| 国产性色av一区二区| √天堂8在线网| 日本精品性网站在线观看| 国产视频一区二区在线播放| 精品国产一区二区三区麻豆免费观看完整版 | 日韩高清不卡| 成人av免费在线看| 青青一区二区三区| 日韩av三级在线| 韩国理伦片一区二区三区在线播放| 又黄又爽的网站| 中文字幕日本乱码精品影院| 欧美一区二区激情视频| 欧美一级欧美三级| 久热av在线| 久久久伊人欧美| 日韩欧国产精品一区综合无码| 精品乱码一区| 午夜激情一区| 天天干天天爽天天射| 99精品热视频| 久久久久久蜜桃| 欧美老女人在线| 国产香蕉视频在线看| 久久久久久久久国产精品| 国产伊人久久| 天天综合色天天综合色hd| 亚洲精品影院在线观看| 人妻精品久久久久中文字幕69| 欧美国产乱子伦| 天堂中文在线网| 亚洲精品一区二区三区四区高清| 国产视频在线播放| 91精品国产综合久久久久久蜜臀 | 高潮毛片又色又爽免费 | yellow91字幕网在线| 国产精品女人久久久久久| 自拍亚洲一区| 欧美深夜福利视频| 成人精品视频一区二区三区尤物| 欧美在线视频第一页| 在线播放亚洲一区| 欧美尤物美女在线| 国产精品亚洲美女av网站| 精品日韩毛片| 日本中文字幕高清| 国产婷婷色一区二区三区| av一级在线观看| 亚洲人成在线播放| 久久人体大尺度| 欧美婷婷久久| 日韩精品一级二级| 最新中文字幕av| 精品视频1区2区| 日本黄色片在线观看| 91精品在线播放| 影音先锋日韩精品| 亚洲国产欧美日韩在线| 亚洲综合另类小说| 天天摸天天干天天操| 38少妇精品导航| 国产欧美一区二区三区精品观看| 中文字幕无码精品亚洲35| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲激情视频一区| 日韩av影视综合网| 神马电影网我不卡| 亚洲欧美日本国产有色| 久久精品国产精品青草| 欧美爱爱小视频| 日韩av最新在线| 日韩天堂在线| 国产av不卡一区二区| 国产精品亚洲成人| 日韩欧美亚洲国产| 国产丝袜视频一区| 福利一区二区| 日韩一区二区高清视频| 99精品久久只有精品| 天堂免费在线视频| 久久在线精品视频| 极品国产人妖chinesets亚洲人妖| 欧美老熟妇喷水| 中文字幕在线视频一区| 亚洲免费成人在线| 国产成人精品视频在线观看| 国产大片一区| 国产又黄又粗又猛又爽的视频| 日本高清视频一区二区| 麻豆网在线观看| 久久精品日产第一区二区三区乱码 | 欧洲精品久久一区二区| 日本精品va在线观看| 欧美3p视频| 亚洲蜜桃精久久久久久久久久久久| 色噜噜久久综合| 中文国产字幕在线观看| 久久亚洲高清| 国产久卡久卡久卡久卡视频精品| 精品国产乱码一区二区| 精品国产依人香蕉在线精品| 免费福利视频一区| 男人添女人下面免费视频| 亚洲午夜在线电影| 秋霞午夜在线观看| 女女同性女同一区二区三区91| 激情av综合网| 久久精品视频5| 欧美国产精品人人做人人爱| 日韩成人激情| 国产中文字幕一区二区| 欧美一级二级在线观看| 国产精品美女午夜爽爽|