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

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>Yoga AI從單個圖像進行3D姿勢估計

Yoga AI從單個圖像進行3D姿勢估計

2022-10-26 | zip | 1.69 MB | 次下載 | 免費

資料介紹

描述

介紹

雖然 2D 計算機視覺取得了巨大進步,但 3D 計算機視覺仍然是一項艱巨的任務。我們生成大量 2D 數據(圖像、視頻),但 3D 數據集很少見且創建成本高。該項目將探索從單個圖像獲得的 2D 數據獲取 3D 人體姿態信息的不同方法。

poYBAGNYh7WAH_mGAABb-SXmge4287.png
基于單張圖像的 3D 姿態估計
?

這項工作基于兩篇文章:

第一篇文章探索了一種簡單而有效的方法,通過使用相對簡單的 DNN 將 2D 數據“提升”到 3D。本文中提出的模型將進一步稱為“文章模型”或 article.xmodel(來自用于在 VCK5000 卡上進行推理的文件名)。

嘗試了“文章”模型的替代方案,一層上的神經元較少,但層數較多。這種替代模型進一步稱為“殘差”或“res.xmodel”。

這兩個模型是在Human3.6M 數據集上訓練的這包含通過在工作室中使用昂貴的高分辨率相機設置、拍攝專業演員而獲得的 3D 數據。據作者所知,這是唯一可用于 3D 數據的數據集。

第三個模型,稱為 gan (gan.xmodel) 使用了一個新穎的想法:生成對抗網絡僅從 2D 數據生成 3D 數據。該模型由生成器(使用殘差模型)和鑒別器組成。

生成器的工作是獲取 2D 姿勢并為它們生成深度,將它們轉換為 3D 姿勢。鑒別器的工作是采取 2D 姿勢并返回它們是真的還是假的(由生成器生成)。生成器生成的 3D 姿勢被隨機旋轉,轉換回相機的坐標并以 2D 的形式投影回來。然后將它們反饋給鑒別器。主要思想是,如果生成器能夠創建良好的 3D 姿勢估計,那么那些隨機旋轉并投影回 2D 的 3D 姿勢對于鑒別器來說將看起來無法區分。生成器和判別器一起訓練,一個目標是創建“假” 2D 姿勢,而另一個目標是檢測“假”。該模型是根據從 YouTube 上的 35 個有關瑜伽姿勢的視頻中獲得的圖像進行訓練的。GAN 是出了名的難以訓練,判別器和生成器都產生良好結果的狀態是一種轉瞬即逝的狀態,而不是穩定的狀態。

poYBAGNYh7eAYROHAACWeG3_PEQ566.png
GAN
?

入門

  • 按照此處所述安裝 Vitis AI 對于訓練和模型量化,需要構建 GPU Docker,因為它將大大加快該過程。(提示:GPU Docker 構建需要大量 DRAM,如果構建失敗,請考慮啟用 swap
  • 按照此處所述設置 VCK5000-ES1 卡如果您有 VCK5000-PROD 卡,那么最新的 Vitis AI 庫將有一個類似的頁面描述如何操作
  • 運行openpose 演示以驗證所有內容都已正確安裝
  • 克隆Vitis AI 目錄中的Yoga AI存儲庫
  • 啟動 gpu docker 鏡像:
./docker_run.sh xilinx/vitis-ai-gpu:1.4.1.978

修改了 docker_run.sh 文件以添加對 X11 和 USB 網絡攝像頭的支持:

docker_run_params=$(cat <<-END
    -v /dev/shm:/dev/shm \
    -v /opt/xilinx/dsa:/opt/xilinx/dsa \
    -v /opt/xilinx/overlaybins:/opt/xilinx/overlaybins \
    -v /etc/xbutler:/etc/xbutler \
    -e USER=$user -e UID=$uid -e GID=$gid \
    -e VERSION=$VERSION \
    -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/tmp/.Xauthority \
    -v $DOCKER_RUN_DIR:/vitis_ai_home \
    -v $HERE:/workspace \
    -w /workspace \
    --device /dev/video0 \
    --rm \
    --network=host \
    --ipc=host \
    ${DETACHED} \
    ${RUN_MODE} \
    $IMAGE_NAME \
    $DEFAULT_COMMAND
END
)

此處描述了完整的命令列表

2D 姿態估計

這是通過使用此處所述的 Vitis AI 庫完成的

在使用 2D 姿態估計器之前,必須下載模型:

cd /workspace/models/AI-Model-Zoo

sudo mkdir /usr/share/vitis_ai_library/models

tar -xzvf openpose_pruned_0_3-vck5000-DPUCVDX8H-r1.4.1.tar.gz

sudo cp openpose_pruned_0_3 /usr/share/vitis_ai_library/models -r

從 2D 提升到 3D

雖然有很好的 2D 姿態估計器,但 3D 問題仍然懸而未決。主要有兩種方法:

  • 從圖像開始,使用非常大且復雜的 CNN 進行端到端訓練
  • 使用現有的 2D 姿勢估計器并將 2D 結果“提升”為 3D

本項目將使用第二種方法,并嘗試使用兩篇文章中的想法將 2D 結果“提升”為 3D:

第一個是使用簡單的 DNN 來學習如何從 2D 開始估計 3D 位置。這需要大量的 3D 姿勢數據集。(使用了 Human3.6M 數據集)

生成的 DNN 對于在 Human3.6M 數據集中找到的位置表現良好,但對于在那里沒有找到的位置(例如瑜伽位置)表現不佳。另一個缺點是創建 3D 數據集非常昂貴,因此很少有公開可用的。

第二篇文章提出了一個生成對抗網絡,它不需要 3D 數據的基本事實。這使得獲取訓練數據變得非常容易,因為有大量數據(視頻、圖像)可用。缺點是訓練 GAN 更像是一門藝術而不是科學,因為它依賴于校準兩個不穩定的神經網絡

用于回歸 3D 數據的簡單 DNN

在使用 Human3.6M 數據集之前,對數據進行了預處理,然后保存在 .tfrecords 文件中以便于訓練。每個 3D 姿勢數據為:

  • 縮放以使頭部錨點和臀部錨點之間的距離為 1 個單位長度
  • 以臀部錨點為中心
  • 圍繞 z 軸在 0 到 360 度之間隨機旋轉
  • 轉換為相機坐標
  • 在 2D 數據(用作 DNN 的輸入)和將作為 DNN 輸出的第三個“深度”值之間拆分

這是由 prepare_data.py 腳本完成的:

python prepare_data.py

ls -al ./data/Human36M_subject*
-rw-r--r-- 1 andrei andrei 12172996 mar 19 19:52 ./data/Human36M_subject11_joint_3d.tfrecords
-rw-r--r-- 1 andrei andrei 12977646 mar 19 19:47 ./data/Human36M_subject1_joint_3d.tfrecords
-rw-r--r-- 1 andrei andrei 20707511 mar 19 19:48 ./data/Human36M_subject5_joint_3d.tfrecords
-rw-r--r-- 1 andrei andrei 13055394 mar 19 19:49 ./data/Human36M_subject6_joint_3d.tfrecords
-rw-r--r-- 1 andrei andrei 21238789 mar 19 19:50 ./data/Human36M_subject7_joint_3d.tfrecords
-rw-r--r-- 1 andrei andrei 13517702 mar 19 19:51 ./data/Human36M_subject8_joint_3d.tfrecords
-rw-r--r-- 1 andrei andrei 16598153 mar 19 19:51 ./data/Human36M_subject9_joint_3d.tfrecords

提出了三種模型:

  • 文章(article.xmodel)中描述的DNN:
python train-article.py

python -u quantize.py --float_model model/article/article.h5 --quant_model model/article/quant_article.h5 --batchsize 64 --evaluate 2>&1 | tee quantize.log

vai_c_tensorflow2 --model model/article/quant_article.h5 --arch /opt/vitis_ai/compiler/arch/DPUCVDX8H/VCK5000/arch.json --output_dir model/article --net_name article
  • 一個 DNN,每層神經元較少,但層數比文章中描述的層多(res.xmodel):
python train-res.py

python -u quantize.py --float_model model/residual/res.h5 --quant_model model/residual/quant_res.h5 --batchsize 64 --evaluate 2>&1 | tee quantize.log

vai_c_tensorflow2 --model model/residual/quant_res.h5 --arch /opt/vitis_ai/compiler/arch/DPUCVDX8H/VCK5000/arch.json --output_dir model/residual --net_name res
  • 一個 GAN 模型(gan.xmodel)

教程介紹了 TensorFlow2 和 Vitis AI 設計流程。

推理

該項目使用兩個 DNN:

使用 OpenPose 進行推理非常簡單:

auto image = cv::imread("sample_openpose.jpg");
auto det = vitis::ai::OpenPose::create("openpose_pruned_0_3");
auto results = det->run(image);

此 API 負責處理圖像所需的任何預處理(調整大小等)

  • 自定義 DNN 將姿勢從 2D 提升到 3D

代碼有點復雜,使用 VART API:

auto graph = Graph::deserialize(model);
auto subgraph = get_dpu_subgraph(graph.get());
auto runner = Runner::create_runner(subgraph[0],"run");
TensorShape inshapes[1];
TensorShape outshapes[1];
GraphInfo shapes;
shapes.inTensorList = inshapes;
shapes.outTensorList = outshapes;
getTensorShape(runner.get(), &shapes, 1, 1);
auto inTensors = cloneTensorBuffer(runner->get_input_tensors());
auto outTensors = cloneTensorBuffer(runner->get_output_tensors());
int batchSize = inTensors[0]->get_shape().at(0);
int inSize = inshapes[0].size;
int outSize = outshapes[0].size;
auto input_scale = get_input_scale(runner->get_input_tensors()[0]);
auto output_scale = get_output_scale (runner->get_output_tensors()[0]);
int8_t *datain = new int8_t[inSize * batchSize];
int8_t *dataresult = new int8_t[outSize * batchSize];
/* Copy the data in datain buffer. 
Don't forget to scale it by multiplying it with input_scale*/
vector> inputs, outputs;
inputs.push_back(make_unique(datain, inTensors[0].ge()));
outputs.push_back(make_unique(dataresult, outTensors[0].get()));
vector inputsPtr, outputsPtr;
inputsPtr.push_back(inputs[0].get());
outputsPtr.push_back(outputs[0].get());
auto job_id = runner->execute_async(inputsPtr, outputsPtr);
runner->wait(job_id.first, -1);
/* Copy the result from dataresult
Don't forget to scale it by mupliplying with output_scale*/
delete[] datain;
delete[] dataresult;

運行演示

首先必須編譯演示程序和系統設置。啟動 docker gpu 映像后,在 docker 終端中運行以下命令:

cp /tmp/.Xauthority ~/
sudo chown vitis-ai-user:vitis-ai-group ~/.Xauthority
sudo usermod -a -G video $(whoami)
sudo su $(whoami)
cd /workspace/setup/vck5000/
source setup.sh
cd /workspace/models/AI-Model-Zoo
wget https://www.xilinx.com/bin/public/openDownload?filename=openpose_pruned_0_3-vck5000-DPUCVDX8H-r1.4.1.tar.gz -O openpose_pruned_0_3-vck5000-DPUCVDX8H-r1.4.1.tar.gz
sudo mkdir /usr/share/vitis_ai_library/models
tar -xzvf openpose_pruned_0_3-vck5000-DPUCVDX8H-r1.4.1.tar.gz
sudo cp openpose_pruned_0_3 /usr/share/vitis_ai_library/models -r
sudo usermod -a -G video vitis-ai-user
/usr/bin/pip3 install matplotlib
conda activate vitis-ai-tensorflow2
cd /workspace/yoga-ai/
sh build.sh

要使用文章中的模型運行 3D 估計器以獲取單張圖片,請運行以下命令:(如果在冷重啟后第一次運行,則需要大約 30 秒來對卡進行編程

./build/yoga-ai-picture ./model/article/article.xmodel ./data/temp/emily-sea-coiWR0gT8Cw-unsplash.jpg 
generated ./data/temp/emily-sea-coiWR0gT8Cw-unsplash_result.jpg
generated ./data/temp/emily-sea-coiWR0gT8Cw-unsplash_1_plot.jpg

在這張圖片上運行 3D 姿態估計器:

將生成此 2D 姿勢結果:

pYYBAGNYh8WAQfXaAAuwwqxhE3s898.jpg
?

以及以下 3D 結果:

poYBAGNYh8eAPBh8AABS6yzvKtY204.jpg
文章.xmodel
?

更深層次的 DNN(res.xmodel):

./build/yoga-ai-picture ./model/residual/res.xmodel ./data/temp/emily-sea-coiWR0gT8Cw-unsplash.jpg 
generated ./data/temp/emily-sea-coiWR0gT8Cw-unsplash_result.jpg
generated ./data/temp/emily-sea-coiWR0gT8Cw-unsplash_1_plot.jpg
pYYBAGNYh8qACWARAABSfMdsGP4154.jpg
res.x模型
?

對于多個主題:

./build/yoga-ai-picture ./model/article/article.xmodel ./data/temp/i-yunmai-BucQCjOvDyM-unsplash.jpg 
generated ./data/temp/i-yunmai-BucQCjOvDyM-unsplash_result.jpg
generated ./data/temp/i-yunmai-BucQCjOvDyM-unsplash_1_plot.jpg
generated ./data/temp/i-yunmai-BucQCjOvDyM-unsplash_2_plot.jpg
?
?
?
pYYBAGNYh9GADcGvAA3MEM7orcs315.jpg
?
1 / 4 ?由 i yunmai 在 Unsplash 上拍攝
?
./build/yoga-ai-picture ./model/residual/res.xmodel ./data/temp/i-yunmai-BucQCjOvDyM-unsplash.jpg 
generated ./data/temp/i-yunmai-BucQCjOvDyM-unsplash_result.jpg
generated ./data/temp/i-yunmai-BucQCjOvDyM-unsplash_1_plot.jpg
generated ./data/temp/i-yunmai-BucQCjOvDyM-unsplash_2_plot.jpg
?
?
?
poYBAGNYh9SAbUDUAABRRsbqM0E478.jpg
?
1 / 2 ? res.xmodel
?

圖片中有三個主題,但其中只有兩個擁有所有錨點。

實時運行 3D 姿態估計器:

./build/yoga-ai-mt ./model/article/article.xmodel
or
./build/yoga-ai-mt ./model/residual/res.xmodel

這將打開它找到的第一個網絡攝像頭并運行 3D 姿勢估計器

?
?

FPS 受到房間照明的限制,而不是 2D 估計器或 2D 到 3D DNN 的限制,它們非常快,尤其是在批處理時(批處理最多 8 幀)。

不幸的是,我找不到 c++ 原生的 3D 繪圖庫,所以我使用了 python 中的 matplotlib 庫和 c++ 包裝器。它可以創建繪圖的速度約為 2-3 FPS,遠低于相機或姿勢估計器。

GAN 示例

將以 10 FPS 的速率從視頻中提取第一幀:

mkdir -p ./data/video/frames
find ./data/video -maxdepth 1 -name '*.webm' -print0 | xargs -0 -i sh -c 'fullfile="{}"; filename=${fullfile##*/}; name=${filename%%.*}; ffmpeg -i "$fullfile" -r 10/1 ./data/video/frames/"$name"%010d.jpg'

然后 2D 估計器將在每個圖像上運行:

./build/yoga-ai-multiple ./data/video/frames > ./data/video/frames.json

最后,帶有 2D 姿勢的 json 將被預處理(縮放、居中)并保存為 .tfrecords 文件:

python prepare_data_gan.py ./data/video/

訓練:

rm -rf ./logs/
rm -rf ./model/gan/*
python train-gan.py

選擇型號:

tensorboard --logdir logs/ --bind_all

生成器和鑒別器網絡都必須保持平衡,損失函數朝著不同的目標工作。

poYBAGNYh9aARds5AABrybaEzB8071.png
?

理想情況下,生成器和判別器的損失函數都應盡可能接近 1,這意味著判別器很難區分生成的解決方案和真實的解決方案。

Epoch 100 - 12.01 sec, Gen Loss: 1.3215000629425049, Disc Loss: 1.0641013383865356
Epoch 101 - 12.04 sec, Gen Loss: 1.4143874645233154, Disc Loss: 1.0295127630233765
Epoch 102 - 12.00 sec, Gen Loss: 1.3275189399719238, Disc Loss: 1.0719201564788818
Epoch 103 - 12.00 sec, Gen Loss: 1.3471262454986572, Disc Loss: 1.0649248361587524
Epoch 104 - 12.03 sec, Gen Loss: 1.3648614883422852, Disc Loss: 1.0483965873718262
Epoch 105 - 12.00 sec, Gen Loss: 1.387969732284546, Disc Loss: 1.0464917421340942
Epoch 106 - 12.01 sec, Gen Loss: 1.369732141494751, Disc Loss: 1.0375384092330933
Epoch 107 - 12.01 sec, Gen Loss: 1.3962113857269287, Disc Loss: 1.0418665409088135
Epoch 108 - 12.03 sec, Gen Loss: 1.391349196434021, Disc Loss: 1.0387295484542847
Epoch 109 - 12.02 sec, Gen Loss: 1.4321180582046509, Disc Loss: 1.0043883323669434
Epoch 110 - 12.02 sec, Gen Loss: 1.4454706907272339, Disc Loss: 1.0133466720581055

train-gan.py 腳本在每個 epoch 保存生成器網絡,我從 epoch 102 中選擇了網絡:

cp ./model/gan/gan_102.h5 ./model/gan/gan.h5

量化和編譯:

python -u quantize.py --float_model model/gan/gan.h5 --quant_model model/gan/quant_gan.h5 --batchsize 64 --evaluate 2>&1 | tee quantize.log

vai_c_tensorflow2 --model model/gan/quant_gan.h5 --arch /opt/vitis_ai/compiler/arch/DPUCVDX8H/VCK5000/arch.json --output_dir model/gan --net_name gan

結果:

./build/yoga-ai-mt ./model/gan/gan.xmodel
?
?
?
?
pYYBAGNYh8WAQfXaAAuwwqxhE3s898.jpg
?
1 / 2
?
?
?
?
pYYBAGNYh-OATsIKAA-a6-P2QsM985.jpg
?
1 / 3
?

訓練

所有模型都訓練了 200 個 epoch,batch_size 為 64。

article.xmodel 和 res.xmodel 都使用 Human3.6M 數據集。

gan.xmodel 在一個包含 35 個來自 YouTube 的瑜伽視頻的數據庫上進行了訓練。從這些視頻中,使用 ffmpeg 提取了 859812 張圖像,然后使用 build/yoga-ai-multiple 實用程序(運行 2D open_pose)提取了 112210 個姿勢(存在所有錨點)。

更多結果

?
?
?
poYBAGNYh-aAdYxyAAF6SWonk0A381.jpg
?
1 / 4 ? article.xmodel
?
?
?
?
poYBAGNYh-aAdYxyAAF6SWonk0A381.jpg
?
1 / 4 ? res.xmodel
?
?
?
?
poYBAGNYh-aAdYxyAAF6SWonk0A381.jpg
?
1 / 4 ? gan.xmodel
?

源文件

用于預處理數據集的腳本:

https://github.com/andrei-ace/yoga-ai/blob/master/prepare_data.py

https://github.com/andrei-ace/yoga-ai/blob/master/prepare_data_gan.py

https://github.com/andrei-ace/yoga-ai/blob/master/src/yoga-ai-multiple.cpp

用于訓練神經網絡的腳本:

https://github.com/andrei-ace/yoga-ai/blob/master/train-article.py

https://github.com/andrei-ace/yoga-ai/blob/master/train-res.py

https://github.com/andrei-ace/yoga-ai/blob/master/train-gan.py

演示程序:

https://github.com/andrei-ace/yoga-ai/blob/master/src/yoga-ai-picture.cpp

https://github.com/andrei-ace/yoga-ai/blob/master/src/yoga-ai-mt.cpp

結論

在 Human3.6M 數據集中找到的姿勢結果非常好,但對于看不見的姿勢卻不是很準確。該數據集不包含任何瑜伽姿勢,因此準確度有些低。創建更多數據集將大大提高預測的準確性,但最大的問題是它們需要昂貴的設備來生產。

GAN 方法似乎是最有前途的方法,因為它只需要大量存在的 2D 數據。一個簡單的改進是從不同角度拍攝相同的姿勢,使用的 YouTube 視頻大多具有相同的角度。這不需要專業工作室中的任何昂貴設備,可以使用任何消費級相機,并且不需要同步它們,甚至不需要拍攝相同的演員。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1使用單片機實現七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2聯想E46L DAOLL6筆記本電腦圖紙
  4. 1.10 MB   |  2次下載  |  5 積分
  5. 3MATLAB繪圖合集
  6. 27.12 MB   |  2次下載  |  5 積分
  7. 4PR735,使用UCC28060的600W交錯式PFC轉換器
  8. 540.03KB   |  1次下載  |  免費
  9. 5UCC38C42 30W同步降壓轉換器參考設計
  10. 428.07KB   |  1次下載  |  免費
  11. 6DV2004S1/ES1/HS1快速充電開發系統
  12. 2.08MB   |  1次下載  |  免費
  13. 7模態分解合集matlab代碼
  14. 3.03 MB   |  1次下載  |  2 積分
  15. 8美的電磁爐維修手冊大全
  16. 1.56 MB   |  1次下載  |  5 積分

本月

  1. 1使用單片機實現七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2UC3842/3/4/5電源管理芯片中文手冊
  4. 1.75 MB   |  15次下載  |  免費
  5. 3DMT0660數字萬用表產品說明書
  6. 0.70 MB   |  13次下載  |  免費
  7. 4TPS54202H降壓轉換器評估模塊用戶指南
  8. 1.02MB   |  8次下載  |  免費
  9. 5STM32F101x8/STM32F101xB手冊
  10. 1.69 MB   |  8次下載  |  1 積分
  11. 6HY12P65/HY12P66數字萬用表芯片規格書
  12. 0.69 MB   |  6次下載  |  免費
  13. 7華瑞昇CR216芯片數字萬用表規格書附原理圖及校正流程方法
  14. 0.74 MB   |  6次下載  |  3 積分
  15. 8華瑞昇CR215芯片數字萬用表原理圖
  16. 0.21 MB   |  5次下載  |  3 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 亚洲精品自拍区在线观看| 色偷偷偷| 五月天婷婷激情| 日韩毛片大全免费高清| 乱轮黄色小说| 午夜性影院| 欧美性xxxxbbbb| 国产伦子一区二区三区四区| 伊人网综合在线视频| 手机福利视频| 激情五月俺来也| 999影院成 人在线影院| 天天做天天摸| 噜噜色网| 性试验k8经典| 成人免费一区二区三区| 深夜福利欧美| 四虎.com| 国产床戏无遮掩视频播放| 天天操人人射| 免费看啪啪网站| 色香色香欲天天天影视综合网| 国产黄页| 成人国产一区二区| 羞羞爱爱| 狠狠躁夜夜躁人人爽天天段| 天天射天天草| 69xxxxtube日本免费| 亚1州区2区三区4区产品| 豆国产97在线 | 欧洲| 精品免费视在线观看| 日本在线一级| 亚洲第一永久在线观看| 亚洲一区二区精品推荐| 色碰人色碰人视频| bt天堂在线www最新版资源网| 国产伦精品一区二区三区女| 亚洲情a成黄在线观看动| 在厨房乱子伦在线观看| 日韩一级生活片| 天天都色|