久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

PyTorch圖像分類實(shí)戰(zhàn):從數(shù)據(jù)預(yù)處理到模型部署的完整指南

PyTorch圖像分類實(shí)戰(zhàn):從數(shù)據(jù)預(yù)處理到模型部署的完整指南 1. 搭建開發(fā)環(huán)境與準(zhǔn)備數(shù)據(jù)集1.1 先想清楚框架選型為什么我這次用 PyTorch圖像分類是深度學(xué)習(xí)里最典型、也最適合上手的任務(wù)類型。你在網(wǎng)上隨便一搜這類項(xiàng)目遍地都是但絕大多數(shù)教程要么停留在理論層面要么代碼貼了滿屏卻跑不通。這次我拿模擬項(xiàng)目X的實(shí)戰(zhàn)過程來做演示從環(huán)境搭建一直帶到模型推理把每個(gè)環(huán)節(jié)里的為什么講清楚??蚣苓x型上PyTorch 和 TensorFlow 各自都有龐大的用戶群我這次選 PyTorch 不是因?yàn)樗?TensorFlow 高級而是因?yàn)樵趫D像分類這個(gè)場景里PyTorch 的動(dòng)態(tài)計(jì)算圖太適合初學(xué)者做調(diào)試。你在訓(xùn)練過程中想打印某一層的輸出、想臨時(shí)改一下網(wǎng)絡(luò)結(jié)構(gòu)都不用重構(gòu)整個(gè)計(jì)算圖。加上 torchvision 里直接集成了 CIFAR-10、ImageNet 這類經(jīng)典數(shù)據(jù)集的下載接口也有預(yù)訓(xùn)練模型權(quán)重做遷移學(xué)習(xí)非常順手。TensorFlow 當(dāng)然也能做但 Keras 高層 API 封裝太嚴(yán)很多內(nèi)部機(jī)制被隱藏掉了對想深入理解訓(xùn)練過程的人來說不如 PyTorch 直觀。我這里強(qiáng)調(diào)一下版本問題。PyTorch 的 API 在不同版本之間偶有變動(dòng)比如舊版本的torchvision.transforms里某些函數(shù)在新版本已經(jīng)改了位置。我這次用的是 2.x 版本理論上 1.12 以上都兼容但如果你裝的是很老的版本遇到 API 不存在或者參數(shù)對不上的報(bào)錯(cuò)不要懷疑是自己的代碼寫錯(cuò)了先查一下版本。習(xí)慣上我會(huì)用pip show torch確認(rèn)當(dāng)前版本。1.2 安裝依賴最小可運(yùn)行環(huán)境裝環(huán)境不需要裝一堆亂七八糟的包最小集合就四個(gè)torch、torchvision、numpy、matplotlib。分類任務(wù)里 matplotlib 不是必須的但后期看損失曲線、可視化預(yù)測結(jié)果時(shí)沒有它就很痛苦。pip install torch torchvision numpy matplotlib如果你有 NVIDIA 顯卡建議裝 CUDA 版本的 PyTorch。安裝前先用命令nvidia-smi看一下支持的 CUDA 版本然后去 PyTorch 官網(wǎng)選對應(yīng)的安裝命令。沒有顯卡也不用擔(dān)心CPU 版本能跑只是訓(xùn)練慢一些。我最初跑項(xiàng)目時(shí)就是純 CPU 機(jī)器CIFAR-10 一個(gè) epoch 要接近兩分鐘雖然慢但對理解訓(xùn)練流程完全夠用。真實(shí)項(xiàng)目里我見過不少人花大量時(shí)間折騰 GPU 環(huán)境其實(shí)一個(gè)簡單的分類任務(wù)CPU 也完全能撐到模型收斂頂多多等一會(huì)兒。裝完之后寫三行代碼驗(yàn)證是否安裝成功import torch import torchvision print(torch.__version__) print(torch.cuda.is_available())如果打印出版本號環(huán)境就算就緒。cuda.is_available()返回 False 不代表失敗只是說明當(dāng)前機(jī)器沒有可用的 GPU。1.3 數(shù)據(jù)集準(zhǔn)備自己整理一個(gè)貓狗分類數(shù)據(jù)目錄很多人一上來就直接調(diào)用torchvision.datasets.CIFAR10這當(dāng)然是最省事的方式。但我建議真正的實(shí)戰(zhàn)項(xiàng)目還是自己整理一份圖片數(shù)據(jù)集因?yàn)楣ぷ骼镉龅降慕^大多數(shù)情況都是你自己的圖片需要手動(dòng)把數(shù)據(jù)組織成模型能吃的格式。我這次用的是某公開數(shù)據(jù)集里的貓狗圖片大概 25000 張。目錄結(jié)構(gòu)如下data/ train/ cat/ cat_0001.jpg cat_0002.jpg dog/ dog_0001.jpg val/ cat/ cat_0001.jpg dog/ dog_0001.jpg這個(gè)結(jié)構(gòu)看似簡單但它是 torchvision 的ImageFolder直接支持的格式。ImageFolder會(huì)自動(dòng)把每個(gè)子目錄當(dāng)作一個(gè)類別目錄名會(huì)變成標(biāo)簽的索引。所以你的目錄命名一定要起對標(biāo)簽名就是最終的分類類別。數(shù)據(jù)劃分的比例上我習(xí)慣按 8:2 拆訓(xùn)練集和驗(yàn)證集。這里有個(gè)經(jīng)驗(yàn)驗(yàn)證集的圖片不要從訓(xùn)練集里復(fù)制應(yīng)該從原始數(shù)據(jù)里獨(dú)立抽樣保證驗(yàn)證集和訓(xùn)練集的圖片沒有任何重疊。如果訓(xùn)練集和驗(yàn)證集有相同圖片驗(yàn)證集的準(zhǔn)確率就會(huì)虛高看起來 99% 的模型上線后可能連 80% 都不到。dataset torchvision.datasets.ImageFolder( root./data, transformtransform ) train_size int(0.8 * len(dataset)) val_size len(dataset) - train_size train_dataset, val_dataset torch.utils.data.random_split( dataset, [train_size, val_size] )這段代碼中random_split是隨機(jī)劃分的但它打亂的是索引而不是圖片本身所以圖片不會(huì)重復(fù)出現(xiàn)在兩個(gè)集合中。如果你需要更精細(xì)的控制比如確保每類圖片在訓(xùn)練集和驗(yàn)證集中的比例都接近 8:2就需要用分層采樣的方式。不過對于大多數(shù)分類任務(wù)整體 8:2 的比例已經(jīng)足夠了。2. 數(shù)據(jù)預(yù)處理與數(shù)據(jù)增強(qiáng)2.1 歸一化為什么要用固定的均值和方差圖像分類的第一步是數(shù)據(jù)預(yù)處理這個(gè)環(huán)節(jié)看起來不起眼但對最終準(zhǔn)確率的影響非常大。預(yù)處理里最關(guān)鍵的一步是歸一化。一個(gè)常見的誤區(qū)是以為歸一化就是把像素值從 [0, 255] 縮放到 [0, 1]。沒錯(cuò)這個(gè)過程是縮放但真正專業(yè)的做法是用每個(gè)通道的均值和標(biāo)準(zhǔn)差做標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化公式是x_norm (x - mean) / std為什么不能只做簡單的 [0,1] 縮放因?yàn)樽匀粓D像的 RGB 三個(gè)通道的像素分布并不是均勻的。比如在貓狗照片里綠色通道的均值通常低于紅色通道直接用 [0,1] 縮放會(huì)讓網(wǎng)絡(luò)在初始階段對不同通道的響應(yīng)不夠均衡。使用固定均值和標(biāo)準(zhǔn)差后每個(gè)通道的像素分布都被拉成標(biāo)準(zhǔn)正態(tài)分布輸入數(shù)據(jù)的尺度趨于一致網(wǎng)絡(luò)收斂速度會(huì)明顯加快。torchvision 里對在 ImageNet 上預(yù)訓(xùn)練的模型標(biāo)準(zhǔn)做法是transform_normalize torchvision.transforms.Normalize( mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] )這三個(gè)均值和標(biāo)準(zhǔn)差是從 ImageNet 數(shù)據(jù)集統(tǒng)計(jì)出來的。如果你用的是 torchvision 提供的預(yù)訓(xùn)練權(quán)重那就必須用這一組數(shù)值否則遷移學(xué)習(xí)的效果會(huì)大打折扣。如果你是自己從零訓(xùn)練模型理論上可以自己統(tǒng)計(jì)數(shù)據(jù)集的均值和方差但絕大多數(shù)人直接用 ImageNet 的那組數(shù)值也能取得不錯(cuò)的效果。2.2 transforms.Compose 中的順序陷阱transforms.Compose是 torchvision 提供的串聯(lián)預(yù)處理操作的工具。我把訓(xùn)練集和驗(yàn)證集分別定義成兩套不同的預(yù)處理流程。訓(xùn)練集完整配置train_transform torchvision.transforms.Compose([ torchvision.transforms.RandomResizedCrop(224), torchvision.transforms.RandomHorizontalFlip(), torchvision.transforms.ColorJitter( brightness0.2, contrast0.2, saturation0.2 ), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] ) ])驗(yàn)證集配置val_transform torchvision.transforms.Compose([ torchvision.transforms.Resize(256), torchvision.transforms.CenterCrop(224), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] ) ])這里有個(gè)很關(guān)鍵但容易被忽略的點(diǎn)驗(yàn)證集不能做隨機(jī)增強(qiáng)操作。有人圖省事直接給驗(yàn)證集也套了RandomHorizontalFlip導(dǎo)致每次驗(yàn)證的結(jié)果都不一樣評估指標(biāo)不穩(wěn)定最終模型的好壞完全沒法判斷。RandomResizedCrop也一樣它是隨機(jī)裁剪你每次跑驗(yàn)證時(shí)輸入模型的圖片內(nèi)容都不同驗(yàn)證集就失去了穩(wěn)定衡量模型能力的意義。另一個(gè)需要注意的點(diǎn)是ToTensor()必須放在Normalize()之前。ToTensor會(huì)把 PIL Image 或 numpy 數(shù)組轉(zhuǎn)成 0-1 之間的浮點(diǎn)數(shù)張量Normalize才能在這個(gè)基礎(chǔ)上做標(biāo)準(zhǔn)化。順序反了會(huì)直接報(bào)錯(cuò)。2.3 Dataset 與 DataLoader 的參數(shù)細(xì)節(jié)DataLoader是 PyTorch 里負(fù)責(zé)批量喂數(shù)據(jù)的工具。它的參數(shù)里batch_size的選擇會(huì)直接影響訓(xùn)練效果和顯存占用shuffle只在訓(xùn)練集上設(shè)為 Truenum_workers控制子進(jìn)程數(shù)量。以我這次的貓狗分類為例我用的是 64 的 batch size。這個(gè)數(shù)值不是拍腦袋定的取決于顯存大小和單張圖片的尺寸。輸入圖片是 224×224ResNet18 在 12GB 顯存下可以跑到 128但 64 更穩(wěn)妥。batch size 太小比如 8 或 16梯度更新頻率高訓(xùn)練過程會(huì)很震蕩模型不容易收斂batch size 太大比如 256 或 512每個(gè) epoch 的步數(shù)少模型的泛化能力可能變?nèi)酢?4 是個(gè)在多數(shù)任務(wù)上都不太會(huì)翻車的中間值。num_workers的值我最常用的是 4。如果你的機(jī)器性能一般也可以設(shè) 2甚至 0表示用主進(jìn)程直接加載。設(shè)成 8 不一定更快因?yàn)檫M(jìn)程調(diào)度本身也有開銷而且 Windows 環(huán)境下如果把num_workers設(shè)成非 0 值在 Jupyter 里跑經(jīng)常會(huì)遇到重復(fù)導(dǎo)入的問題。train_loader torch.utils.data.DataLoader( train_dataset, batch_size64, shuffleTrue, num_workers4, pin_memoryTrue ) val_loader torch.utils.data.DataLoader( val_dataset, batch_size64, shuffleFalse, num_workers4, pin_memoryTrue )pin_memoryTrue是給 GPU 訓(xùn)練提速用的它讓數(shù)據(jù)存儲(chǔ)在鎖頁內(nèi)存里從 CPU 復(fù)制到 GPU 的傳速更快。如果使用 CPU 訓(xùn)練這個(gè)參數(shù)沒什么意義。這里還有一個(gè)隱藏細(xì)節(jié)驗(yàn)證集的shuffleFalse很重要。除了保證驗(yàn)證結(jié)果穩(wěn)定之外后續(xù)分析錯(cuò)誤樣本時(shí)你還需要知道模型預(yù)測錯(cuò)的是哪些圖、原標(biāo)簽是什么。如果驗(yàn)證集被打亂了你很難把預(yù)測結(jié)果和原始圖片對應(yīng)起來做可視化分析。3. 搭建模型并跑通訓(xùn)練流程3.1 從零訓(xùn)練還是用預(yù)訓(xùn)練模型搭建模型的思路分兩條路從零訓(xùn)練一個(gè) CNN或者用 ImageNet 上預(yù)訓(xùn)練好的模型做遷移學(xué)習(xí)。對新人來說我建議兩條路都走一遍先搭一個(gè)小 CNN 走通全流程再用 ResNet18 做遷移學(xué)習(xí)對比兩者的差距。一個(gè)最簡單的 CNN 結(jié)構(gòu)是這樣import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes2): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 32, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2, 2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2, 2), nn.Conv2d(64, 128, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2, 2), ) self.classifier nn.Sequential( nn.Flatten(), nn.Linear(128 * 28 * 28, 256), nn.ReLU(inplaceTrue), nn.Dropout(0.5), nn.Linear(256, num_classes) ) def forward(self, x): return self.classifier(self.features(x))這個(gè)結(jié)構(gòu)里卷積層負(fù)責(zé)提取圖像特征全連接層負(fù)責(zé)把特征映射到類別。第一次跑的時(shí)候你會(huì)把大量時(shí)間花在調(diào)參上最終準(zhǔn)確率可能只有 70%-80%。這很正常從零訓(xùn)練需要大量數(shù)據(jù)和算力你的數(shù)據(jù)量和算力都不足以撐起一個(gè)非常有表達(dá)能力的網(wǎng)絡(luò)。用預(yù)訓(xùn)練模型做遷移學(xué)習(xí)才是效率最高的方案。torchvision 里有很多現(xiàn)成的模型如 ResNet18、ResNet50、MobileNetV3、EfficientNet 等。ResNet18 算是輕量與效果平衡的最佳選擇。核心操作是替換最后一層全連接層讓輸出維度等于你的類別數(shù)import torchvision.models as models model models.resnet18(pretrainedTrue) num_features model.fc.in_features model.fc nn.Linear(num_features, 2)這里的關(guān)鍵是pretrainedTrue它會(huì)把在 ImageNet1000 類上訓(xùn)練好的權(quán)重加載進(jìn)來。ImageNet 覆蓋了貓、狗等多個(gè)類別的通用特征所以預(yù)訓(xùn)練模型已經(jīng)有很強(qiáng)的特征提取能力你只需要讓它適應(yīng)貓狗二分類。通常準(zhǔn)確率能輕松到 95% 以上。3.2 訓(xùn)練的核心配置損失函數(shù)、優(yōu)化器與學(xué)習(xí)率圖像分類常用的損失函數(shù)是交叉熵?fù)p失CrossEntropyLoss。你不需要在前向傳播里單獨(dú)加 Softmax 激活函數(shù)nn.CrossEntropyLoss內(nèi)部已經(jīng)融合了 Softmax 和損失計(jì)算。使用的時(shí)候就一行criterion nn.CrossEntropyLoss()這里有個(gè)細(xì)節(jié)模型輸出的是類別數(shù)維度的 logits不是概率損失函數(shù)內(nèi)部會(huì)對它做 Softmax 變換所以不要在最后一層再接額外的 Softmax。如果你在模型末尾加了 Softmax訓(xùn)練時(shí)就會(huì)發(fā)現(xiàn)損失值很奇怪、收斂極慢因?yàn)樘荻仍?Softmax 那里被壓縮了。優(yōu)化器我用過最多的組合是 Adam 和帶動(dòng)量的 SGD。對新手我推薦先試 Adam因?yàn)樗鼘W(xué)習(xí)率不那么敏感。踩過坑的經(jīng)驗(yàn)是Adam 的默認(rèn)學(xué)習(xí)率 0.001 在大多數(shù)分類任務(wù)上都能跑出不錯(cuò)的效果而 SGD 需要配合學(xué)習(xí)率調(diào)度才能發(fā)揮威力。optimizer torch.optim.Adam( model.parameters(), lr1e-3, weight_decay1e-4 )weight_decay是 L2 正則化項(xiàng)它防止模型過擬合。如果訓(xùn)練集不大幾千張圖我建議加上。常用值是 1e-4 或 5e-4。如果要用 SGD歷史代碼里最常見的組合是optimizer torch.optim.SGD( model.parameters(), lr1e-2, momentum0.9, weight_decay1e-4 )SGD 的收斂精度通常比 Adam 高一些但對學(xué)習(xí)率的要求更苛刻。我的建議是先把 Adam 跑通、拿到一個(gè)不錯(cuò)的基線再換 SGD 試試能不能進(jìn)一步提升。不要一開始就兩邊調(diào)參否則工作量直接翻倍。另外學(xué)習(xí)率調(diào)度器建議從一開始就加上。最常見的兩個(gè)是StepLR和ReduceLROnPlateau。前者是每隔固定 epoch 數(shù)對學(xué)習(xí)率做衰減后者是當(dāng)驗(yàn)證損失不再下降時(shí)自動(dòng)調(diào)低學(xué)習(xí)率。我更常用ReduceLROnPlateau因?yàn)樗淖赃m應(yīng)程度更高。scheduler torch.optim.lr_scheduler.ReduceLROnPlateau( optimizer, modemin, factor0.1, patience3 )含義是連續(xù) 3 個(gè) epoch 驗(yàn)證損失不下降就把學(xué)習(xí)率乘以 0.1。這樣你不用手動(dòng)盯學(xué)習(xí)率模型基本能自己找到合適的區(qū)間。3.3 訓(xùn)練循環(huán)train/eval 模式切換是硬性要求訓(xùn)練循環(huán)的框架可以固定成下面這個(gè)模式。這里有一個(gè)特別容易踩的坑訓(xùn)練時(shí)模型要切換成訓(xùn)練模式驗(yàn)證時(shí)一定要切換成評估模式。for epoch in range(20): model.train() train_loss 0.0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() train_loss loss.item() # 驗(yàn)證階段 model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() val_acc 100 * correct / total print(fEpoch {epoch1}, Loss: {train_loss/len(train_loader):.4f}, Val Acc: {val_acc:.2f}%) scheduler.step(val_loss)先解釋model.train()和model.eval()這兩個(gè)模式切換。它們的關(guān)鍵影響在于模型的 Dropout 和 BatchNorm 層行為完全不同。train()模式下 Dropout 會(huì)隨機(jī)丟棄一部分神經(jīng)元BatchNorm 會(huì)使用當(dāng)前 batch 的統(tǒng)計(jì)量eval()模式下 Dropout 被關(guān)閉BatchNorm 使用訓(xùn)練階段累計(jì)的全局統(tǒng)計(jì)量。如果你驗(yàn)證時(shí)忘記切換成eval()驗(yàn)證集的準(zhǔn)確率會(huì)忽高忽低甚至出現(xiàn)嚴(yán)重偏差。這個(gè)問題我在初學(xué)階段至少踩過三次每次都會(huì)浪費(fèi)大量時(shí)間去排查為什么驗(yàn)證集效果差。optimizer.zero_grad()必須放在每輪迭代前面。PyTorch 默認(rèn)會(huì)累加梯度如果不清零上一 batch 的梯度會(huì)疊加到當(dāng)前 batch 上導(dǎo)致參數(shù)更新方向完全錯(cuò)誤。有人問既然默認(rèn)累加是不是也有好處確實(shí)在個(gè)別特殊場景里有人故意不清零梯度的寫法但圖像分類任務(wù)不要這么干。驗(yàn)證階段用torch.no_grad()包住迭代循環(huán)意思是這一階段不需要計(jì)算梯度。這樣做能顯著減少內(nèi)存占用和計(jì)算量。如果你不小心漏了這一步你的顯存會(huì)在跑驗(yàn)證時(shí)暴漲甚至直接 OOMOut Of Memory。有些人遇到 OOM 以為是 batch size 太大實(shí)際原因是沒有關(guān)閉梯度計(jì)算。訓(xùn)練循環(huán)里我習(xí)慣每輪都打印訓(xùn)練損失和驗(yàn)證準(zhǔn)確率。損失值的走勢能直接反映訓(xùn)練狀態(tài)如果訓(xùn)練損失持續(xù)下降但驗(yàn)證準(zhǔn)確率不再上升甚至下降說明模型開始過擬合可以考慮更早?;蛘呒訌?qiáng)數(shù)據(jù)增強(qiáng)。3.4 訓(xùn)練過程中怎么判斷模型狀態(tài)盯著終端的輸出不要只是看一眼準(zhǔn)確率數(shù)字就完了。幾個(gè)常見的狀態(tài)信號訓(xùn)練損失穩(wěn)步下降驗(yàn)證準(zhǔn)確率也在同步上升這是最健康的狀態(tài)。你什么都不用動(dòng)讓它繼續(xù)跑。訓(xùn)練損失下降很快驗(yàn)證準(zhǔn)確率卻停滯不前甚至下降。這是典型的過擬合信號。解決辦法有三條增強(qiáng)數(shù)據(jù)增強(qiáng)的強(qiáng)度比如加RandomRotation或RandomAffine加大weight_decay提前停掉訓(xùn)練。訓(xùn)練損失在某個(gè)數(shù)值附近震蕩不下降。這可能是學(xué)習(xí)率太大或者輸入數(shù)據(jù)的預(yù)處理有問題比如圖片噪聲過大、歸一化的順序錯(cuò)了??梢栽囍褜W(xué)習(xí)率調(diào)低一個(gè)數(shù)量級再看看。訓(xùn)練損失一開始就非常低比如降到 0.001 以下且驗(yàn)證準(zhǔn)確率很高這看起來很好但也要警惕。如果訓(xùn)練集和驗(yàn)證集分布不一致這種情況可能是模型學(xué)到了某些捷徑比如依賴圖片的背景、水印等非語義特征。做一次錯(cuò)誤可視化分析就能發(fā)現(xiàn)這個(gè)問題。在這個(gè)階段我通常還會(huì)順手看一下模型預(yù)測的置信度分布。用torch.softmax(outputs, dim1)得到概率值再看看最高概率的平均值。如果模型對所有樣本都給出接近 1.0 的置信度很可能模型過擬合了如果置信度普遍在 0.5-0.7 之間徘徊說明模型的區(qū)分能力還不強(qiáng)。4. 評估模型與預(yù)測新圖片4.1 準(zhǔn)確率不夠補(bǔ)充更多指標(biāo)很多人訓(xùn)練完模型只看準(zhǔn)確率。單看一個(gè)指標(biāo)很容易被誤導(dǎo)特別是當(dāng)你面對一個(gè)類別不平衡的數(shù)據(jù)集時(shí)。比如 95% 的圖片都是狗模型只需要全部預(yù)測成狗就能拿到 95% 的準(zhǔn)確率但這顯然不是一個(gè)好模型。所以除了準(zhǔn)確率我還建議算一下精確率Precision、召回率Recall和 F1-score。這幾個(gè)指標(biāo)在sklearn里有現(xiàn)成實(shí)現(xiàn)from sklearn.metrics import classification_report y_true [] y_pred [] model.eval() with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) y_true.extend(labels.cpu().numpy()) y_pred.extend(predicted.cpu().numpy()) print(classification_report(y_true, y_pred, target_names[cat, dog]))拿到的報(bào)告會(huì)顯示每一類的精確率和召回率。簡單解釋一下精確率表示模型預(yù)測為貓的樣本中有多少確實(shí)是貓召回率表示所有真正的貓中有多大比例被模型正確找了出來。F1-score 是這兩者的調(diào)和平均。我這次跑出來的初始模型貓的召回率明顯低于狗的召回率原因是訓(xùn)練集里狗的圖片比貓多。解決方式有兩個(gè)方向一是給少數(shù)類樣本過采樣或者降低多數(shù)類樣本權(quán)重二是換一個(gè)帶類別權(quán)重的損失函數(shù)。nn.CrossEntropyLoss自帶weight參數(shù)可以傳入一個(gè)權(quán)重向量讓損失值偏向少數(shù)類。class_weights torch.tensor([1.0, 0.8]).to(device) criterion nn.CrossEntropyLoss(weightclass_weights)這樣一來模型對貓的誤判成本更高訓(xùn)練時(shí)它會(huì)更主動(dòng)地去學(xué)習(xí)貓的特征。4.2 混淆矩陣一眼看出模型在哪些類別上容易混淆混淆矩陣是評估分類模型最直觀的表格。在二分類任務(wù)上就是一個(gè) 2×2 的矩陣橫軸是預(yù)測標(biāo)簽縱軸是真實(shí)標(biāo)簽。貓狗分類的混淆矩陣可能長這樣預(yù)測為貓預(yù)測為狗真實(shí)是貓923127真實(shí)是狗45905對著這個(gè)矩陣看你能快速發(fā)現(xiàn)模型把 127 只貓誤判成了狗卻只把 45 只狗誤判成了貓。這說明模型對貓的特征捕捉能力不足。接下來要做的不是盲目調(diào)參而是去查這些被誤判的貓圖看它們是不是本身長得就不典型比如毛發(fā)顏色與狗相近、面部被遮擋、或者拍攝角度傾斜。如果要看更多類別的混淆情況可以用 seaborn 的 heatmap 畫出來但白底黑字打印矩陣就夠了。建議在調(diào)整模型過程中每一次實(shí)驗(yàn)都保存一份混淆矩陣這樣你能看到調(diào)整前后的改善方向而不是只盯著一個(gè)準(zhǔn)確率數(shù)字。4.3 保存模型與加載模型的最佳實(shí)踐訓(xùn)練結(jié)束后保存模型權(quán)重是必須做的事。PyTorch 提供了兩種常見方式# 方式一推薦只保存模型參數(shù) torch.save(model.state_dict(), cat_dog_model.pth) # 方式二保存整個(gè)模型 torch.save(model, cat_dog_model.pth)我強(qiáng)烈建議用方式一。只保存參數(shù)的好處是模型結(jié)構(gòu)變動(dòng)時(shí)權(quán)重文件依然可控而且文件的體積更小、安全性更高。裝載時(shí)你需要先實(shí)例化一個(gè)和訓(xùn)練時(shí)完全一樣的模型結(jié)構(gòu)再把權(quán)重灌進(jìn)去model models.resnet18() num_features model.fc.in_features model.fc nn.Linear(num_features, 2) model.load_state_dict(torch.load(cat_dog_model.pth)) model.eval()如果你訓(xùn)練時(shí)用了 GPU 保存在只有 CPU 的機(jī)器上加載需要在torch.load里加一個(gè)參數(shù)map_locationcpu。不加的話會(huì)遇到警告或直接報(bào)錯(cuò)。加載后還有一個(gè)重要操作model.eval()。如果加載的模型后續(xù)只用于推理這一步一定要加。不切換成 eval 模式推理結(jié)果會(huì)因?yàn)?Dropout 的隨機(jī)性而產(chǎn)生微小波動(dòng)你可能會(huì)看到同一個(gè)樣本在不同時(shí)刻的預(yù)測結(jié)果不一致。4.4 單張圖片推理的完整流程訓(xùn)練完模型之后最終目的是讓模型對新圖片做預(yù)測。單獨(dú)對一張圖片進(jìn)行推理看起來簡單但還是要走完預(yù)處理流程。一個(gè)最典型的錯(cuò)誤是拿原始尺寸的圖片直接丟進(jìn)模型導(dǎo)致維度不匹配的報(bào)錯(cuò)。完整的推理腳本應(yīng)該長這樣from PIL import Image def predict_one_image(image_path, model, class_names, device): model.eval() # 必須使用訓(xùn)練時(shí)驗(yàn)證集的分處理流程尤其是尺寸 transform torchvision.transforms.Compose([ torchvision.transforms.Resize(256), torchvision.transforms.CenterCrop(224), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) img Image.open(image_path).convert(RGB) img_tensor transform(img).unsqueeze(0).to(device) with torch.inference_mode(): outputs model(img_tensor) probabilities torch.softmax(outputs, dim1) conf, pred_idx torch.max(probabilities, dim1) return class_names[pred_idx.item()], conf.item()unsqueeze(0)的作用是增加一個(gè) batch 維度。模型輸入的 shape 是(batch_size, channels, height, width)單張圖沒有 batch 維度所以必須手動(dòng)加。這里用torch.inference_mode()而不是torch.no_grad()是 2.x 版本更推薦的寫法功能上比 no_grad 多了一些推理優(yōu)化例如不對模型參數(shù)做版本跟蹤。二者在結(jié)果上沒有差異但新代碼我統(tǒng)一用inference_mode()。另外一個(gè)需要注意的點(diǎn)是convert(RGB)。如果你的圖片是 RGBA 四通道或者灰度單通道不轉(zhuǎn)換為 RGB 會(huì)在ToTensor()時(shí)產(chǎn)生 4 通道或 1 通道數(shù)據(jù)導(dǎo)致和訓(xùn)練時(shí)的 3 通道輸入不匹配。這個(gè)報(bào)錯(cuò)信息只會(huì)在運(yùn)行到模型輸入階段才會(huì)出現(xiàn)處理起來雖然簡單但沒經(jīng)驗(yàn)的人容易卡在這。5. 常見報(bào)錯(cuò)與排查技巧5.1 維度不匹配最常見的入門勸退官不管你用什么模型做圖像分類維度不匹配的報(bào)錯(cuò)幾乎一定會(huì)遇到。最常見的幾種輸入通道數(shù)不對。報(bào)錯(cuò)文本大概是Expected input batch_size X to match target size Y或者 Given groups1, weight of size [32, 3, 3, 3], expected input[1, 4, 224, 224] to have 3 channels。意思就是模型期望 3 通道輸入但你給了 4 通道。查一下你的Dataset返回的張量很可能是沒有做convert(RGB)導(dǎo)致圖片是 RGBA 格式。全連接層的輸入維度不對。這個(gè)報(bào)錯(cuò)在自定義 CNN 里非常普遍。全連接層nn.Linear需要預(yù)先指定輸入長度但這個(gè)長度取決于前面卷積層輸出特征圖的大小。224×224 的輸入經(jīng)過三次 MaxPool2d(2,2) 之后邊長會(huì)變成 224 ÷ 8 28通道數(shù)是 128所以特征會(huì)展平成128 * 28 * 28。如果你把輸入圖片尺寸改成 64×64 但忘了改全連接層的輸入維度就會(huì)報(bào)錯(cuò)。最簡單的解決辦法在前面加一行打印看features(x).shape的結(jié)果是多少。標(biāo)簽維度是 1D 但輸出是 2D。CrossEntropyLoss接受的標(biāo)簽形狀是一維的索引張量不是 one-hot 編碼。如果你手工做了 one-hot就是自己給自己找麻煩。5.2 損失值變成 NaN 的排查思路訓(xùn)練過程中 loss 突然變成 NaN這種情況我第一次遇到時(shí)真的懵了好一陣。排查順序我是固定的第一步檢查輸入數(shù)據(jù)是否有 NaN。圖片像素經(jīng)過歸一化后都是有限數(shù)值一般不會(huì)有 NaN但如果做了某些特殊的數(shù)據(jù)增強(qiáng)操作比如把像素值除以了一個(gè)錯(cuò)誤的值可能出現(xiàn)問題。在訓(xùn)練循環(huán)里打印一下images.min()和images.max()快速確認(rèn)范圍。第二步檢查標(biāo)簽是否有問題。標(biāo)簽的值必須小于類別數(shù)。如果你有 3 類但標(biāo)簽里有數(shù)字 4CrossEntropyLoss就會(huì)算出一個(gè)異常數(shù)值反向傳播后梯度爆炸loss 直接變成 NaN。排查方式就是對labels做一次unique統(tǒng)計(jì)。第三步檢查學(xué)習(xí)率是否過大。學(xué)習(xí)率太大參數(shù)更新步長過大可能在損失函數(shù)的陡峭區(qū)域直接跨過最小值點(diǎn)造成梯度爆炸。把學(xué)習(xí)率調(diào)小一個(gè)數(shù)量級從 1e-3 降到 1e-4再跑一遍。如果不再出現(xiàn) NaN問題就在學(xué)習(xí)率上。第四步也是更隱蔽的一種情況模型某層的數(shù)值范圍在訓(xùn)練后期變得過大。可以在損失函數(shù)前后分別打印輸出的均值。輸出值超過 1e3 往往會(huì)導(dǎo)致 Softmax 在求指數(shù)時(shí)溢出。如果實(shí)在找不到原因還有一個(gè)暴力排查手段把loss.backward()替換成torch.autograd.detect_anomaly()包住整個(gè)訓(xùn)練循環(huán)PyTorch 會(huì)在梯度出現(xiàn)異常的第一時(shí)間給出具體是哪一層參數(shù)出了問題的提示。注意這個(gè)方法非常消耗性能只在排查模式下使用。5.3 訓(xùn)練集精度高但驗(yàn)證集精度低的應(yīng)對清單這是最常見的一種訓(xùn)練現(xiàn)象也是一個(gè)需要區(qū)分情況的場景。如果你的訓(xùn)練準(zhǔn)確率已經(jīng)到 98%但驗(yàn)證準(zhǔn)確率只有 80%說明模型過擬合了也就是模型把訓(xùn)練集里的一些特殊細(xì)節(jié)記住了而沒有學(xué)到通用的分類特征。我的排查順序是先檢查驗(yàn)證集的數(shù)據(jù)預(yù)處理流程。確認(rèn)是否誤用了隨機(jī)強(qiáng)化操作。這是最容易導(dǎo)致驗(yàn)證集偏低的原因。然后檢查模型的 Dropout 層。如果模型結(jié)構(gòu)里 Dropout 率設(shè)得過高比如 0.9訓(xùn)練階段模型被迫用極少的信息做分類驗(yàn)證時(shí)會(huì)處于完全不同的行為模式。通常 Dropout 0.5 已經(jīng)足夠。接下來檢查數(shù)據(jù)增強(qiáng)是否過于激進(jìn)。如果訓(xùn)練集圖片被旋轉(zhuǎn)到一個(gè)離譜的角度或者裁剪得只剩一小部分模型學(xué)到的特征可能無法遷移到正常的驗(yàn)證圖片上。把數(shù)據(jù)增強(qiáng)強(qiáng)度降低一些比如RandomResizedCrop的scale參數(shù)從(0.08, 1.0)改成(0.5, 1.0)。最后也是最容易被忽略的一個(gè)訓(xùn)練集和驗(yàn)證集之間是否存在數(shù)據(jù)泄漏。比如你從整個(gè)數(shù)據(jù)集劃分時(shí)沒有打亂或者驗(yàn)證集里的圖片和訓(xùn)練集中有重復(fù)。這種情況表面上是過擬合實(shí)際上是評估方式不科學(xué)。5.4 訓(xùn)練非常慢調(diào)優(yōu)方向在 GPU 不夠的情況下訓(xùn)練慢是一件很折磨人的事。有幾個(gè)方向可以嘗試按重要程度排序。第一是檢查當(dāng)前是否真的在用 GPU 訓(xùn)練。如果代碼里寫了images.to(device)但 device 沒有正確設(shè)置成 cuda那模型還是跑在 CPU 上。先打印一下next(model.parameters()).device確認(rèn)。第二是調(diào)小num_workers和pin_memory的組合。num_workers設(shè)得過高不會(huì)讓訓(xùn)練更快反而在數(shù)據(jù)加載上浪費(fèi)大量資源。num_workers2加pin_memoryTrue在大多數(shù)配置下已經(jīng)足夠。第三是開啟混合精度訓(xùn)練。PyTorch 里用torch.cuda.amp可以把浮點(diǎn)運(yùn)算改成半精度速度提升明顯而且顯存占用更少。以下是最小實(shí)現(xiàn)方式scaler torch.cuda.amp.GradScaler() for images, labels in train_loader: with torch.cuda.amp.autocast(): outputs model(images) loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()不過混合精度和ReduceLROnPlateau有一點(diǎn)不兼容要注意scaler 可能會(huì)導(dǎo)致梯度的數(shù)值出現(xiàn)輕微誤差但大多數(shù)分類任務(wù)影響不大。第四是考慮用更輕量的模型。如果數(shù)據(jù)量只有幾千張ResNet50 并不會(huì)比 ResNet18 好多少但訓(xùn)練時(shí)間可能多一倍。換 MobileNetV3 或 EfficientNet-B0 這類輕量模型往往能在更短的時(shí)間里達(dá)到接近的精確率。6. 進(jìn)階優(yōu)化從好的結(jié)果到穩(wěn)定可用的模型6.1 微調(diào)讓預(yù)訓(xùn)練模型更貼合你的數(shù)據(jù)用預(yù)訓(xùn)練模型做遷移學(xué)習(xí)一般有兩種做法。第一種是上面講過的凍結(jié)所有卷積層權(quán)重只訓(xùn)練最后新增的全連接層。第二種是微調(diào)Fine-tuning把預(yù)訓(xùn)練模型作為初始化然后對整個(gè)網(wǎng)絡(luò)的所有層或者靠近分類層的若干層重新訓(xùn)練。微調(diào)的關(guān)鍵在于學(xué)習(xí)率的控制。預(yù)訓(xùn)練模型前面的卷積層已經(jīng)學(xué)到了通用的圖像特征如果學(xué)習(xí)率太大會(huì)把這些特征直接抹掉模型退化成從頭訓(xùn)練。我常用的策略是把模型參數(shù)分成兩組新加的分類頭用較高的學(xué)習(xí)率如 1e-3預(yù)訓(xùn)練的卷積層用較低的學(xué)習(xí)率如 1e-4。optimizer torch.optim.Adam([ {params: model.features.parameters(), lr: 1e-4}, {params: model.classifier.parameters(), lr: 1e-3} ], weight_decay1e-4)微調(diào)還有一個(gè)注意點(diǎn)不要從第一個(gè) epoch 就對所有層做全面更新。我通常的做法是先凍結(jié)所有層只訓(xùn)練分類頭 3 到 5 個(gè) epoch然后解凍最后一個(gè)卷積塊如 ResNet 的 layer4以較低學(xué)習(xí)率繼續(xù)訓(xùn)練全網(wǎng)絡(luò)。這種漸進(jìn)式的解凍方式能避免早期訓(xùn)練不穩(wěn)定。6.2 平滑準(zhǔn)確率波動(dòng)交叉驗(yàn)證與模型集成當(dāng)數(shù)據(jù)量不很大的時(shí)候一次隨機(jī)劃分的訓(xùn)練集和驗(yàn)證集可能會(huì)讓結(jié)果產(chǎn)生較大波動(dòng)。有時(shí)候你只是換了一個(gè)隨機(jī)種子準(zhǔn)確率就從 94% 變成 96%。為了確認(rèn)模型的真實(shí)水平可以做 K 折交叉驗(yàn)證。我常用的是 5 折也就是把數(shù)據(jù)分成 5 份每次取其中 4 份訓(xùn)練、1 份驗(yàn)證重復(fù) 5 次最終準(zhǔn)確率取 5 次結(jié)果的平均值和標(biāo)準(zhǔn)差。這樣能更客觀地評估模型穩(wěn)定性。如果你追求極致的準(zhǔn)確率可以試一下模型集成。訓(xùn)練多個(gè)不同結(jié)構(gòu)的模型比如 ResNet18 MobileNetV3或者同一個(gè)模型用不同的隨機(jī)種子訓(xùn)練多次推理時(shí)對所有模型的預(yù)測結(jié)果做平均投票。這個(gè)策略不一定能讓你的模型在開源榜單上提升多少但在數(shù)據(jù)集量不大、噪聲較多的情況下確實(shí)能平滑掉明顯的波動(dòng)。缺點(diǎn)就是推理耗時(shí)增加部署時(shí)需要權(quán)衡。6.3 導(dǎo)出模型并部署到生產(chǎn)環(huán)境訓(xùn)練完成之后模型還在 PyTorch 的 Python 環(huán)境里要真正在生產(chǎn)環(huán)境用起來還需要做一步轉(zhuǎn)化。最常見的做法是導(dǎo)出為 ONNX 格式。ONNX 是個(gè)開放的模型交換格式可以跑在 ONNX Runtime 上也能轉(zhuǎn)換到 TensorRT 等推理引擎。導(dǎo)出很簡單model.eval() dummy_input torch.randn(1, 3, 224, 224).to(device) torch.onnx.export( model, dummy_input, cat_dog_model.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch_size}, output: {0: batch_size}} )dynamic_axes這個(gè)參數(shù)很重要。加上它之后模型的輸入 batch 維度可以變化部署時(shí)就不限制每次只能預(yù)測一張圖。導(dǎo)出后可以用onnxruntime進(jìn)行驗(yàn)證確保導(dǎo)出的模型和 PyTorch 原始模型輸出一致。實(shí)際部署中ONNX Runtime 的推理速度通常比 PyTorch 原生態(tài)更快尤其是在 CPU 環(huán)境里。而且它不依賴 Python 的神經(jīng)網(wǎng)絡(luò)框架可以用 C 調(diào)用對生產(chǎn)環(huán)境的依賴更干凈。6.4 算力不夠時(shí)的替代方案輕量模型與量化如果你的模型最后要在嵌入式設(shè)備或者低算力環(huán)境里跑ResNet50 這種規(guī)模的網(wǎng)絡(luò)是不現(xiàn)實(shí)的。這時(shí) MobileNetV3、EfficientNet-Lite 這類專為移動(dòng)端設(shè)計(jì)的模型會(huì)更合適。它們在保持不錯(cuò)精確率的同時(shí)把計(jì)算量壓到了很低。除了換小模型量化也是常見的優(yōu)化手段。Quantization 可以把模型的浮點(diǎn)權(quán)重從 FP32 壓縮到 INT8模型體積縮小為原來的四分之一推理速度卻可能提高 2 到 4 倍。PyTorch 本身就提供了量化工具接口最常用的是訓(xùn)練后動(dòng)態(tài)量化import torch quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 ) torch.save(quantized_model.state_dict(), cat_dog_model_quantized.pth)這個(gè)操作在 CPU 上對全連接層的壓縮效果最明顯。但如果模型以卷積層為主動(dòng)態(tài)量化收益有限可以考慮試一下感知訓(xùn)練量化Quantization Aware Training。這條路做完模型體積和推理耗時(shí)都能顯著下降代價(jià)是需要在訓(xùn)練階段就引入量化相關(guān)的計(jì)算。我在實(shí)際項(xiàng)目里的經(jīng)驗(yàn)是如果從頭到尾都要自己維護(hù)一套深度學(xué)習(xí)訓(xùn)練流程最容易出問題的地方其實(shí)不在模型結(jié)構(gòu)而在數(shù)據(jù)加載和預(yù)處理這些邊緣環(huán)節(jié)。這些坑雖然都不大也沒有太高深的理論但每一個(gè)都足以讓你的實(shí)驗(yàn)白白跑上好幾個(gè)小時(shí)最后得到一個(gè)錯(cuò)誤的結(jié)論。把這一整套流程理順之后圖像分類對你的門檻就已經(jīng)被踏平了后續(xù)再往目標(biāo)檢測、圖像分割這類任務(wù)上走也會(huì)順手很多。最后再分享一個(gè)小技巧實(shí)驗(yàn)過程中每一次訓(xùn)練結(jié)果都順手存一份帶時(shí)間戳的權(quán)重文件和對應(yīng)的驗(yàn)證指標(biāo)。很多人訓(xùn)練完就隨手把權(quán)重覆蓋了等到要對比不同方案時(shí)才發(fā)現(xiàn)找不到之前的權(quán)重只能重新訓(xùn)練。做好版本管理你能省下的時(shí)間不是一個(gè)小時(shí)兩個(gè)小時(shí)而是一整天的量。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中亚精品极乱| 亚洲天堂中文字幕无码男同| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久久国99999| 亚洲色综合| 国产三级资源在线观看| 日骚逼视频| 亚洲诱惑| 欧美少妇大量自拍视频在线观看| 日韩性爱电影一区| 日本一区二区三区午夜观看| 亚洲深夜福利| 热热色国产一二区AV| 丰满翘臀美女影院视频| AV电影在线播放| 免费簧片在线观看| 国产成人自拍视频视频| 亚洲视频中文一区| 99久在线精品99re8蜜桃| 久久欧洲| 大香蕉 222| 内射中出日韩在线观看视频| 一区二区三区精品黑丝白丝酒店对鸡| 嫖老熟女A片一二三区| 中文字幕一区电影在线观看| 国模不卡| 亚洲av综合色| 99自拍视频| 91精品无码人妻系列| 热无码中文亚洲H一道本一区二区| 超碰97国产欧美| 噜噜噜亚洲精| 97久久久久| 欧美一区二区三区成人性生活| 精品国产99| 亚洲色图a| 综合 青草 伊久久 影院 综合| 青娱乐 成人娱乐在线| 麻豆天美电影一区二区| 91麻豆天美国产欧美| 啊啊啊好爽快点啊啊啊嗯嗯| 色综合99999| 狠狠爱夜夜干| 67914在线兔费成人视频| 亚洲清纯唯美| 色婷婷日韩精品一区二区三区| 校园春色宗合网| 91老熟女老女人国产老太| 好舒服视频| 新视频sss国产| 粉嫩久久久久| 久久久久极品| 人妻91少妇| 久久超碰网| 91美女视频在线观看| 十八禁啪啪视频| av网站国产主播在线| 91视频精品| 人人摸.人人色| 天天躁日日躁成人字幕aⅴ| 亚洲AV麻豆Aⅴ无码电影一| 精品一区二区国产日韩| 日本三级一区二区 在线| 免费一级毛片在线视频观看| 久无码| 色穴精品| 九9精品| 91精品网站| 又大又大又大又粗爽高潮观看| 国产亚洲色婷婷久久99精品91 - 百度| 中日韩免费看男女操逼大全| 青青久久手机线视频| 91 亚洲 欧美 日韩 国产 综合| 激情五月天色色| 人妻天天爽夜夜爽爽| 国产精品毛片| 五月丁香激情四射| 亚洲精品啪视频| 欧美综合自拍成人自拍第二十页| 美熟女逼导航AV操逼| 久久香蕉国产线看观看亚洲女人 | 大香蕉综合在线| 青青草操逼逼视频| 国产乱子伦一区二区三区免看| 精品免费囯产一区二区三区| a级成人毛片免费视频高清| 麻豆天美电影一区二区| 超碰色综合| 国精精品无码一二三区水多多| 日韩内射视频| 伊人久久AV诱惑悠悠| 亚洲第一黄色av网站| 亚洲综合色网| 亚洲无 码A片在线观看麻豆| 婷婷97| 国产成人精品一区| 在线看的av| 爽爽淫人网| 亚洲色图第四色| 伊人网青青| 水野优香在线观看| 国产麻豆一区二三区| 国产午夜在线观看| 超碰av人人人| 密臀成人视频久久久| 国产精品久久久久久高清无码免费看| 成人夜夜爽| 这里都是精品| 欧美有码亚洲中文字幕一区二区三区四区| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 国产欧洲精品亚洲午夜拍精品| 毛片久久| 伊人久久国产免费观看视频| 亚洲激情片| 综合久久中文字幕综合日韩精品| 中国熟女91| 久久av一级av少妇av高潮 | 久久久四区| 人妻熟女av国产网站| 91欧美另类| 国产精品成人无码a v毛片| 日本精品人妻少妇一区二区| 伊人天天久久动态图| 好吊妞转入那个网| 国产日韩精品suv| 中文字幕加勒比海高清无码免费视频 | 日韩无码操逼片| 国内精品不卡无毒99999| 亚洲动态色图| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 日本欧美中文字幕| 99re这里只有精品3| 综合网欧美| 激情五月天综合网| 婷婷五月天激情四射| www九九热| 91色欧美| 性爱AV天堂| 白天啪啪晚上啪啪视频| av草草在线电影| 五月丁香综合啪啪| 黑人免费福利视频| 中文字幕一品色图| 97九色人妻| 五月丁香黄色网| 久草婷婷| 啪啪一区| 日韩精品中文字幕人妻| 色呦色呦色精品| 伊人色综合网电影| 国产一国产一级毛片古装| 色五月天AV| 在线观看色视频| 亚洲综合嫩| 亚洲熟女国产综合另类| 国产精品视频白浆免费| 69一区二区三区| 欧美色图偷拍另类| 欧美|91色综合| 激情五月综合开心五月| julia国产在线| 蜜臀久久99精品| 第一高清av中文字幕| 热99re69精品8在线播放| 99天天超碰| 最新啪啪视频| 国产综合色精品在线观看| 色五月天AV| 97色婷婷| 天堂8在线新版官网| 精品无码一区二区三区色欲| 这里只有97精品| 有码色中文字幕在线观看| 国产呦精品一区二区三区下载| 高清无码人妻久久久一区二区三区aⅴ| 天天干一区二区| 一级黄色性爱A级片| 婷婷10月天青娱乐| 欧美综色欧| 久久大线蕉一区| 婷婷五月成人| 亚洲黄网在哪免费看| 一区二区三区国产在线播放| 亚洲色婷婷综合久久一区二区三区| 大香蕉天天看妹子| 人人妻人人操人人乐| av无码av无码专区| 亚洲精品第一| 日韩人妻一区二区精品| 夜夜影视四色| 久久亚洲AV无码专区国产精品 | 欧美97日韩| 黄污污污污| 欧亚性爱视频免费看| 日婷婷| w w w.久久精品| 酒色综合网| 天天综合,91入口| 欧洲小说色图视频另类| 欧美亚洲国产日本在线,久久精品国产| 亚洲熟妇丝袜在线观看| 综合日韩激情另类图片| 9/A片| www.99热| 另类天堂| 国产av高清版| 欧美熟妇视频| 宗合情欲网| 天综合中文| 成人AV在线电影| 日本亚洲熟女视频| 开心五月婷婷激情| 五月丁香婷婷色| 午夜一区| 欧亚洲精品有视频| 不卡码视频| 亚熟在线| 蜜桃视频一区二区三区 | 先锋色眉乱伦资源| 成人看片网站| 欧苏综合色综合| 这里只有精品视频| 爆乳免费黄网站| 东北夫妻性偷拍| 丝袜狠狠草尤物人妻av91| 高树玛利亚无码流出| 99国产精品久久久久久久成人热 | 成人小说视频在线精品欧美| 欧美后入式| 九九九精品色乱九九九| 伊人伊人LD| 亚洲有码第一页| 欧美在线视频播放| 91久热| 久久人| 少妇一级婬片免费放一级a性色.| 日本性爱少妇| 欧美大香蕉97| 丰满熟女人妻一区二区三五十一路| 国产丁香精品露脸视频| 日韩精品在线视频,日韩精品……| 日韩在线国产字幕| 2018天天干在线视频| 人人干人人操人人..com| 日韩午夜啪啪视频| 天天天天天天天天综合| 男人的天堂com| 99热| 5278欧美一区二区三区| 亚洲欲色9532548967一区| 国产夜夜艹| 91超碰在线播放| 99少妇| 中文字幕天堂在线| 日本三级日本三级99| 超碰超碰欧美| 亚欧操逼片在线观看 | 91熟女综合| 97伦综合| 日韩av不卡在线观看| 丁香五月天婷婷姐| 中文字幕一区二区无码成人| 久久久久久亚洲中文| 成人欧美一区二区三区黑人一| 97精品国产手机| 天美传媒AV在线| av在线免费一区二区| 艳美熟妇先锋一二三区| 久久人妻一区二区三区高清| 99久久e免费热视| 久久免费中文字幕在线观看| 婷婷人妻激情| 上海一级黄片| 91精品人妻一区二区三区蜜桃臀| 性综合网| 9久热| 老司机福利社视频在线观看| 亚洲色图欧美视频| 亚洲精品国产拍免费91在线| 2024人人操人人摸| 9 1超碰九色| 操逼天美3区| 国产久久一区二区三区野外在线| 精品999999| 去干网最新版| 夜夜夜夜久久久久| 长长久久曰曰夜夜成人网| 大香蕉92| 国产女人成人精品视频| 乱操9999| 色综合久久888| 锕锕好爽 死我在线观看| 久久久久久69国产一区二区| 五毛骚逼极品美女怕怕| 亚洲va有码在线天堂| 西西美女视频网| 国产精品久久妻无码网站| 操我啊啊啊啊啊| 婷婷涩嫩草鲁丝久久午夜精品| www99热| 亚洲精品91| 丁香啪啪| 屁股久久久久久| 人人天天欧洲| 日韩精品资源专区二区| 欧美精品久久96人妻无码| 自怕偷自怕亚洲精品| 亚洲永久永久永久永久一级一级一级精品| 人人妻碰人人免费| 加勒比av中文| 久久久久人妻| 黄片视频观看| 久久人妇| 成人夜夜爽| 天天草天天日| 久久精品视| 簧片免费看视频| 久久久亚洲精品中文字幕人妻| 免费视频a级毛片免费视频| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 国产又黄又爽| 神马午夜久久久| 岛国艾薇凹凸视频天堂| 久久国产精品m码| 亚洲天堂色图| 男人高清无码一区二区| 欧美姓爱综合网| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 五十路人妻在线| 国产又粗又长又爽又色| 91老熟女| 久久精品人妻一区二区三区| 欧美天堂日韩三级国产传媒| 偷看洗澡一二三区美女| 成 人片 黄色大片| 美女91网| 欧美成人国产精品| 不卡九肏| 亚洲欧洲另类| 久草视频在线视频在线视频在线观看| 婷婷色综合欧美日韩| 色爽——AV| 95人妻爽爽人人做人人澡| 最近2018中文字幕在线高清第一页| 中文日韩欧美熟| 欧美九九爱| 夜夜影视四色| 亚洲一区二区三区播放在线| 少妇厨房愉情理伦片bd在线观看| 精品人妻一区二区三区视频在线| 国产91专区| 日本九九久久99播| 成全在线观看免费观看| 七久久久| 欧美性天天影视| 一本色道久久天天射天天干| 殴美性天天| 经典丝袜一区| 91高跟美女在线播放| 婷婷激情四射| 激情综合网五月婷婷| 涩综合导航| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 欧美日韩另类在线| 黄片免费视频2019| 成年无码动漫av片无尽在线| 一本色道人妻久久| 超碰久草| 色哟哟av| 在线看污网站| 正宗无毛一线天嫩逼| 91精品国久久久久久无码| 日本一二区免费| 午夜免费福利视频一区| 丝袜美腿制服人妻二区中文字幕| 欧美精品99久久久**| 东北少妇高潮zzzz| 中文操逼字幕| 久久专区| 26uuu偷拍亚洲欧洲综合| 性猛交| 国产精品视频在线观看| 青青草久草| 亚洲无码日韩电影| 人人妻人人爽| 久久久少妇| 超碰99re| 日本淫乱女一区二区三区视频| 密臀视频三区免费网站| 亚洲国产精品成人久久蜜臀| 亚洲美女av无码| 国产午夜精品在线观看| 老熟妇乱轮| 熟女探花啪啪| 色屁屁影院www国产| 最新av中文字幕高清| 懂色中文一区二区三区| 少妇xx精品| 日韩亚洲Av人人夜夜澡人人爽| 日韩性爱再线视频| 日韩九区| 99.色网| 国产丰满少妇久久久精品影院| 99抽插| 蜜臀无码一区二区| 东京男人天堂| 女人天堂av在线播放| 天天视频黄| 天天色黄色影院天天操| 人人做人人妻人人夜视频| 久久99网站| 厕所偷拍在线| 999九九精品| 成人日本片久久久蜜桃| 亚洲啪啪综合?v一区综合精品区| 萌白酱自拍视频| 综合啪啪| 精品176精品2| 九九草| 成人精品一区二区91毛片不卡| 国产av美女被艹的乱叫| 久久天天性久久伊人| 久久久男人的天堂| 日本不卡二区| AV污污污污| 荡小穴在线观看| 色拍偷亚洲| 69一区二区三区| 久久久一区二区三区三州| 黄片无码在线制服| 久久久久久波多野吉衣高潮| 9丨久久九九九 | 日韩午夜国产| 天天拍夜夜| 中国国产精品一区视频| 91蜜臀熟女| 中文一区二区| 国产日产精品久久快鸭的功能介绍| 大香蕉综合在线| 九九久久国产精品| 91色香| 亚洲一区二区三区AV无码| 天天操天天射青青草| 人妻喷水| 久久一级无码精品毛片6| 亚洲另类久操网| 久久久成人免费av电影| 亚洲伊人a线观看视频| 麻豆久久视频在线地址| 久操免费电影| 欧美黑人精品一区二区| 玖玖爱一区在线| 亚洲AV无码乱码| 国产成人无码网站在线视频| 亚州男人的天堂| 综合久久久久久久久91| 国产欧美伊人| 2019天天干| 国产激情综合五月久久| 在线播放中文字幕| 色一色综合网| 久久久久深夜无码| 婷婷激情五月天小说网| 人妻熟女一区二区| 青青操狠狠撩| 天天日天天干天天摸天天操| 啊视频在线| 骚日日av| 超碰在线91| 欧美精品庄| 五月开心网| 天久久久噜噜噜久久国产精品爽爽 | 亚洲天堂人妻熟妇视频| 97超碰巨乳| 最新岛国大片| 欧美日韩国产人人| 国产真实野战在线视频| 综合情欲网| 中国亚洲呦女专区| 久9九综合在线| 天天舔天天 | 色婷婷丁香五月| 中文字幕免费在线观看| 综合婷婷| 大香蕉免费3| 小明看看网址| 亚洲图片偷拍视频区| 91黄射| 伊人久久88国产女| 日韩欧美性吧婷婷乱伦大香蕉| 91在线限制级| 色久桃花影院在线观看| 久操| 久久国产精品91| 尹人免费观看视频在线| 欧美综合网1| 97精品综合久久| 97超碰久久| 亚洲天堂自拍| 免费一级欧美片片线观看| 中国少妇啪啪视频| 九九九九九用不成了| 国产97视频免费观看| 东京热,男人的天堂| 天天透伊人| 国产亚洲中文不卡二区| 欧美激情精品| 亚洲国产精品久久久男人的天堂| 五月婷色| 亚洲三区视频| 久操免费在线| 色悠久久久av| 欧美日韩国产中文超碰| 久久成人国产| 夜色91| 98超碰日本| 天天欧美欧美亚洲网| 高清国产性猛交xxxx乱大交| 亚洲黄色电影| 国产日韩欧美| 操死我干死我| 九九在线精品| 丁香五月综合| A一区片| 特污精品女优骚货黄色视频在线免费观看| 天天α片| 91肏屄网| 2010男人的天堂| 国模艳艳啪啪一区| 岛国在线国产| 久久久精品| 美女十八禁| 丰满人妻一区| 91nbbbbbb| 精品免费1| 久热伊人| 欧美精品99久久久| 欧美日韩中文亚洲v在线综合| 亚洲熟女乱色一区二区三区| 97九色| 亚洲欧美黄| 四虎在线视频| 亚洲男人天堂2| 国产免费久久精品99re韩国| 国产精品 午夜福利| 久久婷婷国产一区二区色| 91日本在线观看| 亚洲九月丁香| 日韩国产乱子伦App| 囯戸精品高潮呻吟旡码| a片久久久久久久久久久久 | 96久久久精品| 亚洲成人妻日韩在线| 激情图片亚洲色图| 久久25| 91色五月俺来也| 中文字幕乱码人妻一区二区三区,99精品| 男人天堂久久精品| 久久男人的天堂国产| 东京热亚洲一区二区| 丁香六月婷| 九月色婷婷| 天天做天天爽| 啪啪视频mP4| 欧美亚男人的天堂| 91成人国产综合久久精品蜜月| 爱爱动态试试看6 0秒| 强上我不卡卡| 免费亚洲国产精品久久一区| 国产熟女高潮一区二区三区| 日韩人妻无码不卡网站| 亚洲国产精品成人久久蜜臀| 男女猛烈无遮掩视频免费软件| 黄色香蕉视频网站一区| 中文字幕亚洲永久精品| 蜜乳AV网址| 九九人人操| 麻豆天美国美国产| 亚洲 欧美 另类 日韩 人妻一区| 日韩中文字幕精品一二三事国产精品| 久久99干一本高清| 亚洲少妇在线观看| 久久久久久亚洲Av无码| 91精品人妻电影| 九九色色| 蜜臀AV成人精品蜜臀| 91国产丝袜美女| 日日干日日摸| 99精品国产户外露出| 精品国产人成在线| 色婷婷五月天| 超碰碰激情97+久| 亚春色色| 蜜乳AV.COM| 婷婷丁香五月激情啪啪| 91色鬼| 999久久芭蕾| 亚洲欧美色图| 日韩成人大片一区二区| 97久久超碰国产网站| 欧美日日人人天天| 色屁屁影院www国产| 亚洲AV无码成人精品久久| 精品91摸| 2017天天操天天日| 又粗又长又爽在线观看| 夜夜操2028| 黄色一区三区| 在线中文字幕| 综合影院亚洲| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 少妇超碰在线| 97超碰中文字幕| 人人操人人干xxx| 大香蕉人妻| 97视频www| 超碰成人人人爽人人爽| 超碰av在线| 亚洲欧美国产va在线| 蜜臀无码视频在线观看| 日本欧美成人片AAAA| AV色五月天| 中文字幕美女91| 精品国产乱码久久久久久久久1| 啊啊啊啊啊好舒服视频| 亚洲国产欧美一区二区潘金莲| 亚洲性综合9| 在线二区不卡| 丁香九月激情| 亚洲男人天堂2| 亚洲欧综合另类无码一区| 女人一区| 欧美日韩插逼视频| 亚洲国产一区二区三区在线| 96久久久久| av资源在线观看少妇| 亚洲精品久久一区二区三区蜜桃臀| www.亚洲成人一区| 另类亚洲图色| 国产精品白丝在线播放| 九九久久一区二区三区| av三级电影在线播放| 国产精品青青草| 久久久一区二区三区四区五区| 久热无码| 欧美超碰在线| 日韩人妻少妇中文字幕| 欧美精品宗合| 超碰97在线 欧美 国产| 成人av性爱电影在线观看| 丰满少妇人妻久久久久久| 精品免费一区| 78久久久| 亚洲乱码国产乱码精网站| 97jingpin| 懂色AV蜜臀无码精品APP| 蜜桃臀一区二区三区久久| 久久99人妖视频国产| 91亚洲丝袜熟女| 国产热RE99久久6国产精品首| 综合少妇网| 激情文学网伊人| 国产强奸乱伦无码视频| 91总综合网| 久操网线| 日骚逼视频| 手机不卡视频不卡在线一二三区| 女同女同恋久久级三级| 久久久91福利姬| 欧美日韩999| 欧美天天综合网| 四虎AV影视国产精品亚洲精品| 国产精品无码久久久久2025| 欧美,日韩,中文,另类| 2010男人的天堂| 精品无码一区二区三区| 亚洲中字幕日本一区二区三区| 嗯嗯啊操我| 99ri视频| 亚洲精品久久久久久| 欧洲色色| 中文字幕日韩人妻视频| 久久久久幕乱码| 精品久久久久,69国产成人精| 国产亚洲精品精AV.| 91艹| 99热99re超碰精品| 一类无码操逼视频| 啊啊啊慢点| 久久成年精品| 337p大胆噜噜噜噜噜91Av| 欧美色综合| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲一区二区中文字幕| 亚欧美色| 日韩二区三四区五区六区在线看| 国产欧美美女免费观看视频| 综合免费无码中文| 97色碰| 久久精品男人的天堂| 色妹子A V| 人妻人人做人人澡人人爽欧美一区| 老熟妇91| 91综合天天看| 亚州中文字幕超碰97| 丁香六月婷婷综合| 色官网色综合| 国产精品爆乳懂色蜜乳| 午夜福利合集| 天天综合网~91综合网| 国产白嫩精品久久| 九九Av| 中文字幕亚韩| 国产第12页| 超碰色综合| 99热这里都是精品| 久久精品99| 日韩人妻精品中文字幕| 欧美久久婷| 日本超碰在线国产一区| 国产成人无码高清| 影音先锋视频在线| 成人午夜高潮av猛片| 男人的天堂一区| 亚洲少妇自拍中文字幕懂色| 热的中文 热的有码 热的国产| 亚洲人妻熟妇三十三区| 久久婷婷国产一区二区色| 久久久久久人妻| 亚洲一区中文字幕一区| 日本性爱少妇| 51一区二区三区| 青椒国产97在线熟女| 91午夜无码| 久久精品国产亚洲妲己影视| 欧美片第一页| 国产拍偷精品网站| 亚洲综合网91| 久久久一二三四区| 亚洲AV永久无码精品成人调教| 果冻传媒A片一二三区| 人妻激情在线视频| 亚洲欧美综合网站| 天天天操天天天爱| 伊人久大| 激情在线青青操| 中文 人妻 制服| 欧州91高潮| 伊人天天久久动态图| 国产自制av蜜乳| 无码动漫av中文字幕| 国内毛片热久久思思热| 超碰人人操97碰| 人人操人人操人人操人人操人人操人人人11.CM | 欧美综合亚洲综合| 中文字幕一区二区视频在线观看| 你懂的在线观看区国产| 日本免费一级AAA大片器 | 哈哈操电影AV| 亚州色国| 日韩97超碰| 天天综合-91入口| 黄色成人网久久久久久| 天堂俺去俺来也www久久婷婷| 人妻系列无码专区中文有码| 人妻av在线| 香蕉99秘 精品一区丁香| 婷婷激情一区二区三区俺也去| 夜精品久无码| 中国和日本人色哪个不下载能放| 2019天天干| 18禁中文字幕| AA丁香综合激情| 欧美亚男人的天堂| ...日韩成人一区二区三区字幕| 亚洲综合在线91| 国产在线能看的你懂的| 欧美人妻精品一区二区| 久久99热这里只频精品6学生| 国产久久日韩网站导航| 久热99999| 久久久97| 操屄不卡视频| 人妻插插人妻人| 久久久久久少妇| 日韩大香蕉| 日本视频一区二区三区| www.狠狠干.coom| 97碰碰日本乱偷人妻中文的| 999精品女人| 精品欧美А∨无码黑人大荫蒂| 六月婷婷综合| 天天舔天天日天天射| 丰满人妻-区二区三区免费看| 国产精品成人久久一区二区三区| 婷婷午夜| 久久视频,这里只有精品| 17c嫩草51久久91嫩草| 韩日无码在线观看| 久久超碰97中文字幕| 精品美女少妇一区二区| 2020中文在线一区二区三区| 亚洲美乱| 97鸡把在线视频| 金莲网址| 久久视网78| 亚洲在线欧美| 色综合色综合网| 欧美一级专区免费大片| WWW.操逼.COM| 91美女丝袜诱惑视频| 亚洲色图第四色| www亚洲免费| 青青操97| 91亚洲综合| 99自拍视频| 狠狠躁久久躁| 操B在线观看| 国产精品久久久久久久久久久久久久久 | 精品欧美不卡在线播放| 好吊妞转入那个网| 91痴汉| 久久久久久AⅤ无码免费肉站| 夜精品久无码| 俄罗斯一区二区视频在线观看| juliaann精品熟女一区| 亚洲av青草久久一区二区| 综合熟女| 久久久久久九九九| 七久久久| 亚洲中文字幕在现观看| 久操视频免费在线观看| 亚洲中文字幕在现观看| 亚洲欧洲视频小说在线观看| 麻豆三极片| 女一区二区| 欧美夜夜草视频| 九九十八精品| 免费1级a做爰片观看| 日韩精品99久久久久久中文字幕 | 亚洲熟女乱综合一区二区三区 | 粉嫩小泬久久久一区二区| 激情抓乳插进去啪啪啪日韩| 久久久久元码视频| 青娱乐国产盛宴视频| 风月影院男女十八禁| 亚洲黄网在哪免费看| 久久成人网站| 国产精品老师| 淫淫综合网| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 殴美大黄片| 日日嗷| 色九月| 国产乱伦视频污| 在线黄色污污网站| 亚州AV无码国产精品| 91狠狠狠| 国产四虎在线| 黄片国产精品一区二区| 激情久久日韩精品中文字幕麻豆| 综合网色| 亚洲国产综合图区中文字幕| 偷窥自拍亚洲色图| 一区二区三区免费视频入口| 国产精品不卡一区二区三区| 日本三级韩三级99久久| 粉嫩av在线| 夜夜福利| 一起草AV| 欧美日韩另类在线播放| 久久久久久免费电影| 天天欧美色| 欧美性爱日韩性爱| 好湿好紧视频| 日本裸体久久色噜噜| 亚洲精品影视老司机| 久久精品区| 亚洲三级网址久久最新| 国产AV高清AV无码| 婷婷色色五月天福利| 97se综合| 北条麻妃99精品青青久久| 大香蕉久| 大象AV在线| 精品制服美女中文一区二区三区| 亚洲欧洲视频小说在线观看| 另类小色呦| 日韩精品中文字幕人妻| 夜夜嗨一区| 蜜臀久久在线视频| 超碰人人妻| 综合久久六月久久婷婷| 超碰欧美| 天堂网亚洲区手机版| 夜夜嗷嗷一区二区| 日韩精品 资源| 无色无码| se01国产在线视频| 少妇高潮九九九九| 熟妇高潮二区三区| 丝袜天堂| 日本一二区免费| 97av在线视频| 久久夜黄色无码A级大片| 国产操逼网站亚洲一级黄色| 欧成人在线| 91欧美性| 久草综合视频| 操香逼| 大香蕉在线视频15| 久久久久婷婷| 把腿张开老子CAO烂你| 人人玩人人添人人澡免费| 日少妇视频| 国产欧美另类久久久精品课程| 亚洲精品97中文字幕| 91电影色诱| 日本精品88888888| 亚洲人精品久久久喷水| 亚洲精品男人的天堂| 亚洲AV永久无码一区仙野| 久干9操| 国产精品国产自产高清AV| 性久久久| 国产精品免费1区2区视频| 黄色大片视频在线免费看| 欧美美女视频| 亚洲精品少妇| 天天噜| 日韩欧美加勒比| 99re在线| 亚洲人成网站7777| 搡老熟女免费视频| 亚洲伊人久久综合97| 国产中出内射一区二区| 东京热一区二区中文字幕| 欧美资源| 人妻9117c| 操www| 国产一区二区精品久久99| 国产操操日韩三级黄| 韩国午夜理伦三级好看| 人妻人人做人人澡人人爽欧美一区| 国产亚洲精品美女久久久久久2021| 综合欧美激情网| 性色av网站| 91精品久久久久久综合五月天| 激情五月天丁香| 亚洲一区二区麻豆影院| 97人肏| 亚洲三级网址久久最新| 91老熟女老女人国产老太| 日韩97视频| 我爱操| 另类天堂| 飘花国产午夜精品不卡| AV不卡在线| 91丨九色丨43老版熟女| 欧美九9 9 9| 亚洲精品一区二区三区新线路| 91日日| 熟女91网| 国产精品久久久| 久久中文字幕一区不卡| 黄片无码在线制服| 婷婷五月色| 欧美中文字幕一区| 欧美天天综合站| 91久久国产精品| 精品无码久久久久久久久果冻糖心| 国产又色又粗又黄又爽| 成人免费不卡在线视频| 亚洲色吧网| 亚洲欧美setu| 啊啊啊水好多| 人人做,人人操,人人摸| 日本操BAV| 射丝袜高跟鞋99| 看看日B真人视频| 国产精品美女| 国产精品一级毛片不卡视| 嗯啊不要在线观看嗯啊| 超碰碰激情97+久| 人人操人人操人妻人| 日日干天天干夜夜爽| 粉嫩在线一区二区懂色| 800zy一区二区| 久久久九九| 88xx成人精品视频| 欧美日韩性爱视屏免费看了| 嗯啊不要啊啊在线观看视频| 亚洲激情深爱文学小说网站| 欧美成年人性爱视频免费观看| 女同性恋久久| 欧美国产视频| 91性网| 欧美系列在线一区二区| 青青青国产| 熟妇人妻一二三区免费| 飘花国产午夜精品不卡| 五月天婷婷激情| 综合九九| 极品欧美一区二区三区| 超碰97起碰| 国产2.3.4区| 亚洲天堂AV在线播放| 日本一二区免费| 0755午夜福利视频| 亚洲 国产 精品一区| 欧美激情超碰777| 中国特猛少妇色xxx| 天天日天天干天天整| 丁香婷婷激情五月天无毒不卡 | 免费的黄片有限公司| 色色色综合| 丰满熟女人妻一区二区三五十一路| 亚洲图片激情综合另类| 欧美专利1区2区3区4区5区免费| 日日不卡av| 91超级碰碰碰| 欧美手机在线综合| 3028国产精品| 久久超碰98| 黄片视频,下载| 97色欧州| 国产亚洲日韩欧| 国产久久视频| 婷婷伊人五月| 亚熟在线| 视频一区二区三区精品| 小草精彩毛片| 91综合在线| 久久精品亚洲婷婷| 综合久久少妇中文字幕| 欧美一二在线| 欧美一区二区日韩三区| 91久久久视| 涩综合导航| 黄色不卡视频| 少妇人妻好深太紧了vr91| 欧美青青视频| 老司机深夜影院18未满| 国产精品九九| 免费在线观看国内色片网站网址| 一区二三区四区视频大全套| 亚洲成人性爱在线观看| 成人资源中文字幕在线观看| www九九热| 五十路三区在线| 精品免费1| 国产超碰AV在线精品| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美中字二区| 秋霞久久亚洲精品成人| 欧美第二页午夜| 啊视频在线| 91色拍| 久久久久久久久久久久黄色 | 色眯眯射| 欧美性爱www免费版| 久久宗合97| 1024香蕉视频| 人妻另类 专区 欧美 制服| 91美女在线视频| 国产高清精品福利| 一本色道人妻久久| 久久9 9 9精品| 久久国产免费激情视频| 九色 蝌蚪 熟女自| 少妇一线天久久久久久| 麻豆综合一区av| 91伊人久久在线| www.91色综合| 亚洲天天做日日做天天谢日日| 亚州Av天美传媒| 久久乐| 欧美91视频| 日韩大香蕉AV影片| 人人澡综合涩| 女人爽到高潮潮喷18禁网站| 91老熟女| 成人一级二级| 欧美三级不卡| 丁香五月综合| 日本色色色网站免费看不卡| 超碰久在线天天做| 野狼激情网| 综合操逼| 操国产逼| 五月天久久人妻| 青娱乐大香蕉| 天天做天天爱天天高潮| 91在线超高颜值国产| 亚洲无码一区成人免费午夜| 欧美成人色| 性爱动态120秒| 日韩精品在线观看网站| 97超碰人人模人人拍人人| 亚洲午夜蜜臀| 日本99一区二区| 夜夜操二区| 国产粉嫩出水在线播放| 久久av无码| 97综合国产| 欧美啪啪啪91| h色99999| 四季AV综合网址| 婷婷五月花| 黄色高清无码无码破解免费暗网| 久操操AV电影| 国产成人在线观看网址| 国产91丝袜 在线播放| 久久m| 国产污视频麻豆传媒一区二区| 在线观看色视频| 婷婷导航| 夜嗨影院| 色狠狠 - 百度| 日韩强奸av| 91亚洲电影| 99re28在线观看| AV天黑人| 亚州九九九精品视频| 日本蜜桃| 人妻无码后入| 久久伊人网视频一区二区三区| 99精品视频在线观看| 欧美视频中文字幕区| 久久久无码av精| 干干干天天| 超碰在线观看av不卡| 亚洲av国产av综合av卡| 亚洲一区二区三区在线激情| 精品国产乱码久久| 亚洲欧美情色| 亚洲在饯| 丝袜美腿av女优在线| 在线中文字幕视频| 啊啊啊好舒服视频| 男人久久天堂| 啊啊啊啊啊啊好多水| 九九九九九精品| 亚洲有码视频二区| 少妇久久久久久| 大象AV在线| 日韩成人性日韩成人性爱视频在线免费观看 | 日本操逼无码| 亚洲在线网站| 性色av大全| 国产一区二区三区视频在线看| 欧美1区二区三区公司| 日韩性爱1级片视频| 色综合天天| 日韩欧美午夜视频在线| 欧美日韩国内不卡| 亚洲成av人片色午夜乱码| 大香网伊人久久综合| 亚洲AV小说| 色哟哟-国产专区|