在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于OpenVINO Python API部署RT-DETR模型

英特爾物聯網 ? 來源:英特爾物聯網 ? 2023-10-20 11:15 ? 次閱讀

作者:顏國進英特爾邊緣計算創新大使

RT-DETR 是在 DETR 模型基礎上進行改進的,一種基于 DETR 架構的實時端到端檢測器,它通過使用一系列新的技術和算法,實現了更高效的訓練和推理,我們將在 PythonC++C#三個平臺實現 OpenVINO部署 RT-DETR 模型實現深度學習推理加速,在本文中,我們將首先介紹基于 OpenVINO Python API 部署 RT-DETR 模型。

該項目所使用的全部代碼已經在 GitHub 上開源,并且收藏在 OpenVINO-CSharp-API 項目里,項目所在目錄鏈接為:

1.RT-DETR

飛槳在去年 3 月份推出了高精度通用目標檢測模型 PP-YOLOE ,同年在 PP-YOLOE 的基礎上提出了 PP-YOLOE+。而繼 PP-YOLOE 提出后,MT-YOLOv6、YOLOv7、DAMO-YOLO、RTMDet 等模型先后被提出,一直迭代到今年開年的 YOLOv8。

8264a268-6ea0-11ee-939d-92fbcf53809c.png

YOLO 檢測器有個較大的待改進點是需要 NMS 后處理,其通常難以優化且不夠魯棒,因此檢測器的速度存在延遲。DETR 是一種不需要 NMS 后處理、基于 Transformer 的端到端目標檢測器。百度飛槳正式推出了—— RT-DETR (Real-Time DEtection TRansformer),一種基于 DETR 架構的實時端到端檢測器,其在速度和精度上取得了 SOTA 性能。

8268d0cc-6ea0-11ee-939d-92fbcf53809c.png

RT-DETR 是在 DETR 模型基礎上進行改進的,它通過使用一系列新的技術和算法,實現了更高效的訓練和推理。具體來說,RT-DETR 具有以下優勢:

1、實時性能更佳:RT-DETR 采用了一種新的注意力機制,能夠更好地捕獲物體之間的關系,并減少計算量。此外,RT-DETR 還引入了一種基于時間的注意力機制,能夠更好地處理視頻數據。

2、精度更高:RT-DETR 在保證實時性能的同時,還能夠保持較高的檢測精度。這主要得益于 RT-DETR 引入的一種新的多任務學習機制,能夠更好地利用訓練數據。

3、更易于訓練和調參:RT-DETR 采用了一種新的損失函數,能夠更好地進行訓練和調參。此外,RT-DETR 還引入了一種新的數據增強技術,能夠更好地利用訓練數據。

2. OpenVINO

英特爾發行版 OpenVINO 工具套件基于 oneAPI 而開發,可以加快高性能計算機視覺和深度學習視覺應用開發速度工具套件,適用于從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準確的真實世界結果部署到生產系統中。通過簡化的開發工作流程,OpenVINO 可賦能開發者在現實世界中部署高性能應用程序和算法。

OpenVINO 2023.1 于 2023 年 9 月 18 日發布,該工具包帶來了挖掘生成人工智能全部潛力的新功能。生成人工智能的覆蓋范圍得到了擴展,通過 PyTorch* 等框架增強了體驗,您可以在其中自動導入和轉換模型。大型語言模型(LLM)在運行時性能和內存優化方面得到了提升。聊天機器人、代碼生成等的模型已啟用。OpenVINO 更便攜,性能更高,可以在任何需要的地方運行:在邊緣、云中或本地。

3.環境配置

在該項目中主要包括兩個環境的配置,一個是模型的下載,另一個是模型轉換與部署,為了更好的大家復現該項目,所以提供主要的環境配置:

3.1 模型下載環境

paddlepaddle:2.5.1
imageio:2.31.5
imgaug:0.4.0
onnx=1.13.0
opencv-python=4.5.5.64
paddle2onnx:0.5
paddledet

左滑查看更多

3.2 模型部署環境

Numpy:1.26.0
opencv-python:4.8.1.78
openvino:2023.1.0
openvino-telemetry:2023.2.0 
pillow:10.0.1 
python:3.10.13

左滑查看更多

4. 模型下載與轉換

PaddleDetection提供了預訓練模型以及模型訓練教程,大家可以基于該教程訓練自己的模型。在該項目中我們基于預訓練模型展開部署案例測試,下面我們根據官方教程導出推理模型。

4.1 PaddlePaddle 模型下載

安裝 PaddlePaddle 和 PaddleDetection,其中 PaddlePaddle 要安裝最新版本才可以導出 RT-DETR 模型。安裝完成后,通過命令行下載該模型:

cd PaddleDetection
python tools/export_model.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams trt=True --output_dir=output_inference

左滑查看更多

下表為導出模型輸入輸出節點信息

82b275ec-6ea0-11ee-939d-92fbcf53809c.png

通過該表,我們可以看出,該模型存在三個輸入與兩個輸出,其中輸入“im_shape”與“scale_factor”節點信息主要是該模型集成了部分后處理內容,如果大家對這種多輸入的模型使用不太習慣,在下次文章中,我們將講解如何個導出并部署不含后處理的模型部署流程。

因此該模型中比較關鍵的節點為“image”圖片數據輸入以及“reshape2_95.tmp_0”輸出節點,其中模型輸出的格式為: [clasid, scores, x, y, w, h]。

4.2 IR 模型轉換

接下來我們將模型轉換為 IR 格式,首先將模型轉 ONNX 格式:

paddle2onnx --model_dir=./output_inference/rtdetr_r50vd_6x_coco/ --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 16 --save_file rtdetr_r50vd_6x_coco.onnx

左滑查看更多

由于導出來的模型是動態形狀,未固定 bath_size 信息,所以我們可以通過 OpenVINO 模型優化工具對模型的輸入形狀進行設置,命令如下:

ovc rtdetr_r50vd_6x_coco.onnx –input “ image[1,3,640,640], im_shape[1,2], scale_factor[1,2]”

左滑查看更多

最后我們可以獲取到轉憨厚的模型“ rtdetr_r50vd_6x_coco.xml”

以及“rtdetr_r50vd_6x_coco.bin”文件。

5. Python 代碼實現

5.1模型推理流程實現

在 Python 代碼中我們定義了一個 RT-DETR 模型推理方法:

def rtdert_infer(model_path, image_path, device_name, lable_path, postprocess=True):

左滑查看更多

該方法主要實現了 RT-DETR 模型推理全流程,包括模型讀取與加載、文件的讀取與預處理、模型推理、結果處理以及結果展示。方法輸入為:

model_path:推理模型路徑

image_path:預測圖片路徑

device_name:加速推理設備名稱

lable_path,:識別類別文件

postprocess:模型是否包含后處理,在本文中我們只講解包含后處理的模型,因此默認為 True。

1)加載推理模型

這一步主要實現初始化 Core、讀取本地模型以及將模型編譯到本地,代實現代碼如下述代碼所示:

ie_core = Core()
model = ie_core.read_model(model=model_path)
compiled_model = ie_core.compile_model(model=model, device_name=device_name)

左滑查看更多

2)預處理圖片數據

這一步主要對讀取的本地圖片數據進行處理,在此處我們定義了一個 RtdetrProcess Class 專門用于處理 RT-DETR 模型的輸入輸出數據,代碼實現如下所示:

image = cv.imread(image_path)
rtdetr_process = RtdetrProcess([640,640],lable_path)
im, im_info= rtdetr_process.preprocess(image)

左滑查看更多

3)加載推理數據和模型推理

這一步主要實現模型推理數據的加載以及進行模型推理,由于我們預測的模型是自帶后處理的模型,因此模型輸入有三個,分別是“im_shape”、“scale_factor”和“ image“。

im_shape:表示模型的輸入形狀,此處輸入為[640, 640];

scale_factor:表示圖片的縮放比,為模型輸入/圖像形狀;

image:表示圖像歸一化后的數據矩陣,形狀為[1, 3, 640, 640];

最后將模型輸入字典帶入到編譯好的模型中進行模型推理,獲取推理結果。

inputs = dict()
inputs["image"] = np.array(im).astype('float32')
inputs["scale_factor"] = np.array(im_info['scale_factor']).reshape(1,2).astype('float32')
inputs["im_shape"] = np.array([640.0,640.0]).reshape(1,2).astype('float32')
results = compiled_model(inputs=inputs)

左滑查看更多

4)處理推理結果

上一步中已經獲取到的模型推理結果,最后將模型推理結果帶入到我們定義中的后處理方法中,左后獲取模型預測結果。

re = rtdetr_process.postprocess(results[compiled_model.output(0)])
new_image=rtdetr_process.draw_box(image,re)
cv.imshow("result",new_image)
cv.waitKey(0)

左滑查看更多

5.2 模型數據處理方法實現

1)定義 RtdetrProcess

class RtdetrProcess(object):
def __init__(self, target_size, label_path=None, threshold=0.5, interp=cv.INTER_LINEAR):
  self.im_info = dict()
  self.target_size =target_size
  self.interp = interp
  self.threshold = threshold
  if label_path is None:
    self.labels = []
    self.flabel = False
  else:
    self.labels = self.read_lable(label_path=label_path)
    self.flabel = True

左滑查看更多

2)輸入數據處理方法

def preprocess(self,im):
  assert len(self.target_size) == 2
  assert self.target_size[0] > 0 and self.target_size[1] > 0
  origin_shape = im.shape[:2]
  resize_h, resize_w = self.target_size
  im_scale_y = resize_h / float(origin_shape[0])
  im_scale_x = resize_w / float(origin_shape[1])
  out_im = cv.cvtColor(im,cv.COLOR_BGR2RGB)
  out_im = cv.resize(
    out_im.astype('float32'),
    None,
    None,
    fx=im_scale_x,
    fy=im_scale_y,
    interpolation=self.interp)
  self.im_info['im_shape'] = np.array(im.shape[:2]).astype('float32')
  self.im_info['scale_factor'] = np.array([im_scale_y, im_scale_x]).astype('float32')
  scale = 1.0 / 255.0
  out_im *= scale
  out_im = out_im.transpose((2, 0, 1)).copy()
  return np.expand_dims(out_im.astype('float32'),0), self.im_info

左滑查看更多

3)預測結果數據處理方法

def postprocess(self,scores,bboxs=None):
  results = []
  if bboxs is None:
    scores = np.array(scores).astype('float32')
    for l in scores:
      if(l[1]>=self.threshold):
        re = dict()
        re["clsid"]=int(l[0])
        if(self.flabel):
          re["label"]=self.labels[int(l[0])]
        else:
          re["label"]=int(l[0])
        re["score"]=l[1]
        bbox=[l[2],l[3],l[4],l[5]]
        re["bbox"]=bbox
        results.append(re)
  else:
    scores = np.array(scores).astype('float32')
    bboxs = np.array(bboxs).astype('float32')
    for s,b in zip(scores,bboxs):
      s = self.sigmoid(s)
      if(np.max(np.array(s)>=self.threshold)):
        ids = np.argmax(np.array(s))
        re = dict()
        re["clsid"]=int(ids)
        if(self.flabel):
          re["label"]=self.labels[int(ids)]
        else:
          re["label"]=int(ids)
        re["score"]=s[ids]
        cx=(b[0]*640.0)/self.im_info["scale_factor"][1]
        cy=(b[1]*640.0)/self.im_info["scale_factor"][0]
        w=(b[2]*640.0)/self.im_info["scale_factor"][1]
        h=(b[3]*640.0)/self.im_info["scale_factor"][0]
 
        bbox=[cx-w/2.0,
            cy-h/2.0,
            cx+w/2.0,
            cy+h/2.0]
        re["bbox"]=bbox
        results.append(re)
  return results

左滑查看更多

6. 預測結果展示

最后通過上述代碼,我們最終可以直接實現 RT-DETR 模型的推理部署,RT-DETR 與訓練模型采用的是 COCO 數據集,最終我們可以獲取預測后的圖像結果,如圖所示:

上圖中展示了 RT-DETR 模型預測結果,同時,我們對模型圖里過程中的關鍵信息以及推理結果進行了打印:

[INFO] This is an RT-DETR model deployment case using Python!
[INFO] Model path: E:Model
tdetr_r50vd_6x_coco.onnx
[INFO] Device name: CPU
[INFO] The input path: E:GitSpaceRT-DETR-OpenVINOimage000000570688.jpg
[INFO] class_id:0, label:person, confidence:0.9284, left_top:[215.03,327.88],right_bottom:[259.24,469.64]
[INFO] class_id:0, label:person, confidence:0.9232, left_top:[260.34,343.99],right_bottom:[309.42,461.80]
[INFO] class_id:0, label:person, confidence:0.8929, left_top:[402.26,346.80],right_bottom:[451.54,479.55]
[INFO] class_id:33, label:kite, confidence:0.8382, left_top:[323.52,159.82],right_bottom:[465.93,214.78]
[INFO] class_id:0, label:person, confidence:0.8342, left_top:[294.05,384.59],right_bottom:[354.15,443.96]
[INFO] class_id:0, label:person, confidence:0.8284, left_top:[518.88,360.37],right_bottom:[583.88,480.00]
[INFO] class_id:33, label:kite, confidence:0.8281, left_top:[282.11,217.29],right_bottom:[419.96,267.66]
[INFO] class_id:33, label:kite, confidence:0.8043, left_top:[330.01,64.70],right_bottom:[389.58,86.40]
[INFO] class_id:33, label:kite, confidence:0.8016, left_top:[242.46,124.74],right_bottom:[263.87,135.74]
[INFO] class_id:0, label:person, confidence:0.7972, left_top:[456.74,369.06],right_bottom:[508.27,479.42]
[INFO] class_id:33, label:kite, confidence:0.7970, left_top:[504.63,195.20],right_bottom:[523.44,214.82]
[INFO] class_id:33, label:kite, confidence:0.7681, left_top:[460.08,251.92],right_bottom:[479.02,269.19]
[INFO] class_id:33, label:kite, confidence:0.7601, left_top:[116.23,178.53],right_bottom:[137.02,190.61]
[INFO] class_id:0, label:person, confidence:0.7330, left_top:[154.12,380.38],right_bottom:[210.76,421.32]
[INFO] class_id:0, label:person, confidence:0.6998, left_top:[26.77,340.99],right_bottom:[58.48,425.10]
[INFO] class_id:33, label:kite, confidence:0.6895, left_top:[430.29,29.91],right_bottom:[450.06,44.32]
[INFO] class_id:33, label:kite, confidence:0.6739, left_top:[363.20,120.95],right_bottom:[375.84,130.11]
[INFO] class_id:33, label:kite, confidence:0.6130, left_top:[176.50,236.77],right_bottom:[256.62,258.32]
[INFO] class_id:0, label:person, confidence:0.6001, left_top:[497.35,380.34],right_bottom:[529.73,479.49]
[INFO] class_id:33, label:kite, confidence:0.5956, left_top:[97.84,316.90],right_bottom:[156.75,360.25]
[INFO] class_id:33, label:kite, confidence:0.5730, left_top:[221.56,264.66],right_bottom:[342.60,312.92]
[INFO] class_id:33, label:kite, confidence:0.5555, left_top:[161.12,193.06],right_bottom:[171.45,199.78]
[INFO] class_id:33, label:kite, confidence:0.5332, left_top:[171.17,317.08],right_bottom:[228.08,357.65]
[INFO] class_id:33, label:kite, confidence:0.5322, left_top:[218.97,178.13],right_bottom:[451.95,241.61]

左滑查看更多

7. 總結

在本項目中,我們介紹了 OpenVINO Python API 部署自帶后處理的 RT-DETR 模型的案例,并結合該模型的處理方式封裝完整的代碼案例,實現了在英特爾平臺使用 OpenVINO加速深度學習模型,有助于大家以后落地 RT-DETR 模型在工業上的應用。為了更好地大家落地 RT-DETR 模型,我們不僅開發了在 Python、C++、C#三個平臺上的案例代碼,還結合大家的模型部署習慣對該模型進行了裁剪,實現了去除掉后處理的單輸入模型的部署案例。

在本文中。由于篇幅有限,對于其他編程平臺的實現以及不包含后處理的模型的部署案例,將在后續的文章中推出,請大家關注本平臺后續發布的文章:《基于 OpenVINO C++ API 部署 RT-DETR 模型》以及《基于 OpenVINO C#部署 RT-DETR 模型》。如果大家有興趣,可以先關注本項目代碼倉庫,獲取項目實現源碼。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 英特爾
    +關注

    關注

    61

    文章

    9964

    瀏覽量

    171771
  • 開源
    +關注

    關注

    3

    文章

    3349

    瀏覽量

    42499
  • 模型
    +關注

    關注

    1

    文章

    3243

    瀏覽量

    48840
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84688
  • OpenVINO
    +關注

    關注

    0

    文章

    93

    瀏覽量

    202

原文標題:基于?OpenVINO? Python API?部署?RT-DETR?模型 | 開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和邊界。本文將介紹如何使用 OpenVINO C++ API 部署 FastSAM 模型,以實現快速高效的語義分割。在前文中我們發表了《基于
    的頭像 發表于 11-17 09:53 ?924次閱讀
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b><b class='flag-5'>部署</b>FastSAM<b class='flag-5'>模型</b>

    如何使用Python包裝器正確構建OpenVINO工具套件

    : $ export PYTHONPATH=$PYTHONPATH:/~/openvino/bin/intel64/Release/python_api/python3.8/ $ export
    發表于 08-15 07:13

    使用OpenVINO? 部署PaddleSeg模型庫中的DeepLabV3+模型

    ? ? ? 01 概述 ? ? 本文是OpenVINO 工具套件與百度飛槳PaddlePaddle模型轉換/部署系列的第二部。這篇文章專注于展示如何將百度飛槳PaddelSeg項目
    的頭像 發表于 11-22 14:58 ?9895次閱讀
    使用<b class='flag-5'>OpenVINO</b>? <b class='flag-5'>部署</b>PaddleSeg<b class='flag-5'>模型</b>庫中的DeepLabV3+<b class='flag-5'>模型</b>

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉換YOLOv5預訓練模型的詳細步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優化并部署YOLOv5模型》,本文所使用的Open
    的頭像 發表于 02-15 16:53 ?4668次閱讀

    簡單聊聊目標檢測新范式RT-DETR的骨干:HGNetv2

    當然,人們對RT-DETR之所以產生濃厚的興趣,我覺得大概率還是對YOLO系列審美疲勞了,就算是出到了YOLO10086,我還是只想用YOLOv5和YOLOv7的框架來魔改做業務。。
    的頭像 發表于 04-27 09:42 ?2031次閱讀
    簡單聊聊目標檢測新范式<b class='flag-5'>RT-DETR</b>的骨干:HGNetv2

    介紹RT-DETR兩種風格的onnx格式和推理方式

    RT-DETR是由百度近期推出的DETR-liked目標檢測器,該檢測器由HGNetv2、混合編碼器和帶有輔助預測頭的Transformer編碼器組成
    的頭像 發表于 05-17 17:46 ?3292次閱讀
    介紹<b class='flag-5'>RT-DETR</b>兩種風格的onnx格式和推理方式

    自訓練Pytorch模型使用OpenVINO?優化并部署在AI愛克斯開發板

    本文章將依次介紹如何將 Pytorch 自訓練模型經過一系列變換變成 OpenVINO IR 模型形式,而后使用 OpenVINO Python
    的頭像 發表于 05-26 10:23 ?942次閱讀
    自訓練Pytorch<b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>?優化并<b class='flag-5'>部署</b>在AI愛克斯開發板

    如何將Pytorch自訓練模型變成OpenVINO IR模型形式

    本文章將依次介紹如何將Pytorch自訓練模型經過一系列變換變成OpenVINO IR模型形式,而后使用OpenVINO Python
    的頭像 發表于 06-07 09:31 ?2005次閱讀
    如何將Pytorch自訓練<b class='flag-5'>模型</b>變成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式

    如何使用OpenVINO Python API部署FastSAM模型

    象的位置和邊界。本文將介紹如何使用 OpenVINO Python API 部署 FastSAM 模型,以實現快速高效的語義分割。
    的頭像 發表于 10-27 11:04 ?749次閱讀

    基于OpenVINO C++ API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 開發者實戰》,在該文章中,我們基于 OpenVI
    的頭像 發表于 11-03 14:30 ?849次閱讀
    基于<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b><b class='flag-5'>部署</b><b class='flag-5'>RT-DETR</b><b class='flag-5'>模型</b>

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 開發者實戰》和《基于 OpenVINO
    的頭像 發表于 11-10 16:59 ?758次閱讀
    基于<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b><b class='flag-5'>部署</b><b class='flag-5'>RT-DETR</b><b class='flag-5'>模型</b>

    NNCF壓縮與量化YOLOv8模型OpenVINO部署測試

    OpenVINO2023版本衍生出了一個新支持工具包NNCF(Neural Network Compression Framework – 神經網絡壓縮框架),通過對OpenVINO IR格式模型的壓縮與量化更好的提升
    的頭像 發表于 11-20 10:46 ?1609次閱讀
    NNCF壓縮與量化YOLOv8<b class='flag-5'>模型</b>與<b class='flag-5'>OpenVINO</b><b class='flag-5'>部署</b>測試

    OpenVINO? Java API應用RT-DETR做目標檢測器實戰

    本文將從零開始詳細介紹環境搭建的完整步驟,我們基于英特爾開發套件AIxBoard為硬件基礎實現了Java在Ubuntu 22.04系統上成功使用OpenVINO? Java API,并且成功運行了RT-DETR實現實時端到端目標
    的頭像 發表于 03-18 15:04 ?808次閱讀
    <b class='flag-5'>OpenVINO</b>? Java <b class='flag-5'>API</b>應用<b class='flag-5'>RT-DETR</b>做目標檢測器實戰

    OpenVINO C# API在intel平臺部署YOLOv10目標檢測模型

    模型設計策略,從效率和精度兩個角度對YOLOs的各個組成部分進行了全面優化,大大降低了計算開銷,增強了性能。在本文中,我們將結合OpenVINO C# API使用最新發布的OpenVINO
    的頭像 發表于 06-21 09:23 ?1037次閱讀
    用<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>在intel平臺<b class='flag-5'>部署</b>YOLOv10目標檢測<b class='flag-5'>模型</b>

    使用OpenVINO Model Server在哪吒開發板上部署模型

    OpenVINO Model Server(OVMS)是一個高性能的模型部署系統,使用C++實現,并在Intel架構上的部署進行了優化,使用Open
    的頭像 發表于 11-01 14:19 ?286次閱讀
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒開發板上<b class='flag-5'>部署</b><b class='flag-5'>模型</b>
    主站蜘蛛池模板: 天天综合五月天| 88av视频在线观看| 黄色在线观看网站| 亚洲免费成人在线| 久久久久久久国产视频| 中文字幕日本一区波多野不卡| 日韩精品三级| 精品特级毛片| 伊人yinren6综合网色狠狠| www干| 午夜视频免费在线| 日本亚洲欧美国产日韩ay高清| 97影院理论片在线观看| 天天摸天天操天天干| 色播四房间| 四虎a456tncom| 欧美大片一区二区| 天堂网在线资源| 国产高清在线精品一区| 久久性| 国产又爽又黄又粗又大| 亚洲狠狠综合久久| www天堂在线观看| 中文字幕一二三区| 欧美wwwwww| 九九视频这里只有精品| 欧美亚洲在线| 日韩午夜在线视频不卡片| 午夜在线观看免费| 日本人善交69xxx| 日韩高清毛片| 欧美亚洲韩国国产综合五月天| 在线观看色视频| xxx86日本人| 全是肉的高h短篇列车| 黄色地址| ⅹxxxx68日本老师hd| 免费在线成人| 1024你懂的国产精品| 拍真实国产伦偷精品| 黄色录像日本|