亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

零基礎用PyTorch做食物圖片分類:從數(shù)據(jù)到模型全流程實戰(zhàn)

零基礎用PyTorch做食物圖片分類:從數(shù)據(jù)到模型全流程實戰(zhàn) 最開始接觸 PyTorch 時我第一個完整跑通的項目就是食物圖片分類。那時候我連tensor的形狀都經(jīng)常搞混nn.Module怎么繼承也是邊查邊寫但食物分類這個任務給了我很大的正反饋圖片直觀、類別接近生活、模型效果一眼就能看出來而且數(shù)據(jù)集、預訓練模型、參考資料都相對好找。如果你也是零基礎想入門 PyTorch我的建議很直接——別去啃復雜的檢測或分割先從食物圖片分類這種“短平快”的分類任務切入把數(shù)據(jù)、模型、訓練、評估這條鏈路完整走一遍比看一百篇教程都有用。這篇文章我會按我自己實際做項目的順序從數(shù)據(jù)準備、模型搭建到訓練調(diào)參、評估排查完整講一遍。代碼不是玩具都是能直接跑的級別同時會解釋每個關(guān)鍵選擇背后的原因以及我踩過的坑。適合剛看完 Python 語法、對深度學習有一點概念但還沒獨立做過項目的讀者。你會發(fā)現(xiàn)很多看似復雜的流程其實只需要幾十行代碼。1. 項目概述與整體思路1.1 為什么首推食物圖片分類作為入門項目圖像分類是計算機視覺最基礎的任務也是入門深度學習最自然的起點。食物圖片分類這個方向恰好把“任務難度”和“學習成本”放在了一個很舒服的位置你不需要去理解目標框、分割掩碼這些復雜概念只需要讓模型判斷一張圖屬于哪一類食物。我選它的另一個人理由是結(jié)果可感知。你做貓狗分類模型錯了你甚至覺得正常但食物分類錯了你能立刻發(fā)現(xiàn)它把“宮保雞丁”認成了“辣子雞丁”這種錯誤會讓你愿意去分析原因。而且食物類別的視覺差異往往很細微比如不同做法的炸雞、不同種類的面食這天然要求模型學習更細粒度的特征對理解features到底在學什么很有幫助。從工程角度看食物分類的數(shù)據(jù)獲取成本也低。公開數(shù)據(jù)集中既有幾十萬張的大規(guī)模食物數(shù)據(jù)集也有單類別幾千張的小型子集新手完全可以用幾個類的子集練手十幾分鐘就能下載完。配合 PyTorch 生態(tài)里的預訓練模型幾十行代碼就能達到一個不錯的基線這種快速反饋對建立信心特別重要。1.2 零基礎需要準備的工具與環(huán)境在開始寫代碼之前先把環(huán)境梳理清楚。你不需要一開始就配齊深度學習專用的 GPU 服務器一臺普通電腦也能跑只是訓練慢一點。我個人的建議是有 NVIDIA 顯卡最好顯存 4GB 以上就夠訓練 ResNet18 這種規(guī)模的模型沒有顯卡也不用慌先拿 CPU 跑一個小數(shù)據(jù)集把流程走通后面再上 GPU。依賴方面核心是 PyTorch 和 torchvision。建議用虛擬環(huán)境避免重裝環(huán)境時搞亂已有的包。安裝完以后順手驗證一下python -c import torch; print(torch.__version__, torch.cuda.is_available())如果輸出True說明 CUDA 可用如果輸出False也沒關(guān)系代碼里我會用device torch.device(cuda if torch.cuda.is_available() else cpu)自動切換。除此以外還需要matplotlib用于可視化numpy用于數(shù)值處理tqdm顯示進度條這幾個用 pip 一下就好。新手容易忽略的一件事是數(shù)據(jù)格式。PyTorch 的torchvision提供了很多圖像處理工具但底層讀取圖片依賴 PIL 或 OpenCV。裝好pillow就行不需要額外裝 OpenCV除非你要做一些特殊預處理。1.3 整體流程與關(guān)鍵決策一個標準的圖像分類項目流程其實非常固定準備數(shù)據(jù)下載或收集圖片按類別組織目錄結(jié)構(gòu)。預處理縮放、裁剪、歸一化讓模型輸入更規(guī)范。構(gòu)建數(shù)據(jù)加載器把海量圖片分成一個個 batch訓練時逐批送入模型。定義模型選一個預訓練模型把最后一層換成自己的分類層。定義損失函數(shù)和優(yōu)化器分類任務一般用交叉熵損失。訓練循環(huán)前向傳播、計算損失、反向傳播、更新參數(shù)循環(huán)多個 epoch。評估在驗證集上算準確率、混淆矩陣用可視化發(fā)現(xiàn)模型缺陷。推理加載保存好的模型對單張圖片做預測。這套流程幾乎所有 CV 任務都適用所以只要跑通一次后面遷移到其他項目會快很多。這里有個關(guān)鍵決策用自定義的小型 CNN還是用遷移學習加載預訓練模型我的答案是如果你是想學習原理兩者都該懂但目標是“零基礎跑通第一個項目”直接用預訓練模型是最省力也最穩(wěn)妥的方案。原因很簡單深度學習模型不是越大越好也不是從零訓練的模型效果一定好。對于個人項目、小規(guī)模數(shù)據(jù)集預訓練模型提供了在大型數(shù)據(jù)集上已經(jīng)學好的通用特征我們只需要微調(diào)最后一層或者全部參數(shù)就能在很短的時間內(nèi)獲得不錯的效果。等跑通之后再回頭寫一個簡單的 CNN理解卷積、池化這些概念效果會好很多。2. 數(shù)據(jù)準備與預處理決定模型上限的隱形功臣2.1 數(shù)據(jù)集獲取與目錄規(guī)劃做食物分類最常見的選擇是使用公開的食物數(shù)據(jù)集規(guī)模大的有幾十萬張圖覆蓋多種菜系。但零基礎階段我不建議一上來就搞大的類別多、圖片多訓練時間長排查問題也麻煩。我當時的做法是先抽取 10 個類每類幾百張圖一共幾千張用來驗證思路。跑通之后再逐步擴大到完整類別。無論用什么數(shù)據(jù)集目錄規(guī)劃會直接影響后續(xù)代碼的簡潔程度。推薦按下面的結(jié)構(gòu)組織data/ ├── train/ │ ├── burger/ │ │ ├── 001.jpg │ │ └── ... │ ├── pizza/ │ └── ... └── val/ ├── burger/ │ ├── 101.jpg │ └── ... ├── pizza/ └── ...這樣用torchvision.datasets.ImageFolder可以直接讀取類名自動從文件夾名里解析順序按字母排序。千萬別把圖片和標簽放在 Excel 里再手動讀那樣增加一層不必要的復雜度。下載完數(shù)據(jù)后我強烈建議先隨機抽查一下圖片內(nèi)容確認數(shù)據(jù)和類名是否對得上。食物數(shù)據(jù)集的公共資源也可能存在少量標注錯誤尤其在類間相似度高的時候。這一步只需要打印幾張圖看看成本很低但能避免后面訓了半天發(fā)現(xiàn)標簽是亂的。2.2 數(shù)據(jù)增強到底該做哪些先記住一個核心原則訓練集要“折騰”驗證集要“規(guī)矩”。訓練集的數(shù)據(jù)增強是用來模擬現(xiàn)實中千變?nèi)f化的拍攝條件的。我們拍照時食物可能正放、斜放、大小不一、光線不同如果模型只在干凈的圖片上訓練到了真實場景就會很脆弱。常用的增強手段包括隨機縮放裁剪RandomResizedCrop相當于讓模型看不同比例、不同位置的局部內(nèi)容。隨機水平翻轉(zhuǎn)RandomHorizontalFlip讓模型學會鏡像對稱的食物。隨機旋轉(zhuǎn)RandomRotation應對拍攝角度變化。顏色擾動ColorJitter調(diào)整亮度、對比度、飽和度模擬不同光線環(huán)境。不可濫用。如果任務本身對方向敏感比如識別文字就不要做隨意翻轉(zhuǎn)旋轉(zhuǎn)。食物分類這類任務方向不會改變類別本質(zhì)做這些增強是安全的。驗證集不需要增強但需要統(tǒng)一尺寸和歸一化。因為驗證集是對模型真實水平的客觀評估增強帶來的隨機性會影響評估的穩(wěn)定性和可復現(xiàn)性。驗證集的預處理通常是Resize到較大的尺寸再做CenterCrop剪到模型輸入尺寸。這樣能保證圖片內(nèi)容不因裁剪丟失太多。歸一化是新手最容易忽略的一步。預訓練模型在 ImageNet 上訓練時輸入圖片的像素分布有特定均值和標準差。我們用預訓練模型做遷移學習輸入也應該盡量服從同樣分布否則預訓練特征的優(yōu)勢就大打折扣。標準值就是那組均值[0.485, 0.456, 0.406]標準差[0.229, 0.224, 0.225]不用自己算記住就能用。from torchvision import transforms train_transforms transforms.Compose([ transforms.Resize(256), transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.RandomRotation(15), transforms.ColorJitter(brightness0.2, contrast0.2, saturation0.2), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) val_transforms transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ])這里的Resize(256)是為了保證長邊縮放到 256然后RandomResizedCrop(224)或CenterCrop(224)裁出模型輸入尺寸。PyTorch 預訓練模型的默認輸入是 224×224這個尺寸在計算成本和效果之間比較平衡。2.3 數(shù)據(jù)加載器的配置細節(jié)數(shù)據(jù)加載器決定了訓練時如何把數(shù)據(jù)集一小批一小批地喂給模型。這里有幾個概念新手一定要理清batch_size是每批多少張圖epoch是整個訓練集過完一遍iteration是處理一個batch的過程。一次訓練通常由許多iteration組成所有iteration共同組成一個epoch。DataLoader的配置看似簡單但幾個參數(shù)能直接影響訓練速度。from torch.utils.data import DataLoader train_dataset ImageFolder(rootdata/train, transformtrain_transforms) val_dataset ImageFolder(rootdata/val, transformval_transforms) train_loader DataLoader(train_dataset, batch_size32, shuffleTrue, num_workers4, pin_memoryTrue) val_loader DataLoader(val_dataset, batch_size32, shuffleFalse, num_workers4, pin_memoryTrue)shuffleTrue只在訓練集使用。每次 epoch 前打亂數(shù)據(jù)順序避免模型學到數(shù)據(jù)排列中的偶然規(guī)律。比如文件夾里先全是第一類再全是第二類如果不打亂模型可能在連續(xù)的 batch 里只看到單一類別梯度更新方向會來回震蕩收斂變慢。驗證集不需要打亂因為評估結(jié)果和順序無關(guān)。num_workers是數(shù)據(jù)加載使用多少個并行進程。設為 0 的話數(shù)據(jù)加載在主進程中運行簡單但慢設為 4 或 8 通常能顯著提高吞吐量。不過 Windows 下進程并行需要把訓練代碼包在if __name__ __main__:里否則可能報與多進程相關(guān)的錯誤。我第一次跑的時候就卡在這里改了入口后才順利。pin_memoryTrue對 GPU 訓練有幫助。它讓數(shù)據(jù)保存在鎖頁內(nèi)存中GPU 拷貝數(shù)據(jù)更快。CPU 上訓練時設不設都行影響不大。3. 模型搭建不是所有代碼都要自己寫3.1 從一個迷你 CNN 到遷移學習我見過很多教程一上來就貼一個完整的 CNN然后說“這就是模型”。但對零基礎的人來說那一堆nn.Conv2d、nn.BatchNorm2d、nn.ReLU、nn.MaxPool2d名詞很容易勸退。我的建議是先動手跑再回頭拆細節(jié)。如果你堅持想先看一個最簡單的 CNN 長什么樣下面是迷你版import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 16, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(16, 32, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2), ) self.classifier nn.Linear(64 * 28 * 28, num_classes) def forward(self, x): x self.features(x) x x.view(x.size(0), -1) return self.classifier(x)這個網(wǎng)絡輸入 224×224 的彩色圖經(jīng)過三個池化層后空間尺寸變成 28×28通道數(shù)變成 64最后展平接全連接層。它能工作但在少量數(shù)據(jù)下效果一般而且訓練收斂速度遠不如預訓練模型。所以我更推薦用 PyTorch 里現(xiàn)成的預訓練模型這也是大多數(shù)實際項目的做法import torchvision.models as models model models.resnet18(weightsmodels.ResNet18_Weights.DEFAULT)ResNet18屬于殘差網(wǎng)絡核心思想是在層與層之間增加“短路連接”讓梯度更容易從深層回傳到淺層。它是在 ImageNet 上預訓練過的已經(jīng)學會了很多通用的視覺特征比如邊緣、紋理、形狀。我們要做的是在這個基礎上適應新的分類任務。遷移學習的本質(zhì)就是把別人在超大數(shù)據(jù)集上花很長時間練出來的“通用視覺能力”拿過來然后在我們自己的小數(shù)據(jù)集上微調(diào)。這就好比你會開車換一輛車只需要適應一下方向盤靈敏度而不是從學踩油門開始。3.2 替換分類頭與層結(jié)構(gòu)預訓練模型原本的分類層是按 ImageNet 的 1000 個類別設計的最后是一個nn.Linear(512, 1000)ResNet18 是 512 維特征。我們的食物分類類別可能是 10 類、40 類所以必須把最后一層替換掉。num_classes 10 in_features model.fc.in_features model.fc nn.Linear(in_features, num_classes)model.fc在 ResNet 里是最后一個全連接層in_features是它輸入的維度。你不需要關(guān)心它前面經(jīng)過了什么樣的卷積層只需要知道特征維度是多少然后接一個大小匹配的分類頭就行。接下來還需要選擇訓練策略。這里有兩個選項只微調(diào)最后一層把前面的卷積層參數(shù)全部凍結(jié)requires_gradFalse只在新的fc層上訓練。優(yōu)點是訓練很快占顯存少缺點是模型只調(diào)整了分類層前面通用的特征可能不完全適配食物這種細粒度任務。全部微調(diào)所有層的參數(shù)都參與更新模型能更充分地適應新數(shù)據(jù)。數(shù)據(jù)量不太少時效果通常更好。缺點是訓練時間更長容易過擬合新手需要配合數(shù)據(jù)增強和早停。我的實際經(jīng)驗是如果數(shù)據(jù)集只有幾千張圖類間差異不是特別大先試“只微調(diào)最后一層”把基線跑出來如果準確率不滿意再解凍更多層做全量微調(diào)。對于零基礎入門我更推薦直接全量微調(diào)因為食物分類的細粒度特征確實需要底層特征的參與而且全量微調(diào)在 ResNet18 這種小模型上的訓練開銷完全可以接受。3.3 損失函數(shù)和優(yōu)化器選擇分類任務的默認選擇是nn.CrossEntropyLoss()。這個函數(shù)在 PyTorch 里做了兩件事先對模型輸出做 softmax再計算交叉熵損失。所以你的模型最后一層不要提前做 softmax直接輸出原始 logits 就行。計算損失時傳入模型的預測 logits 和真實標簽即可。CrossEntropyLoss有幾個好處數(shù)值上比手動 softmax 加 NLL 更穩(wěn)定而且它對類別不平衡有一定容忍度。對于食物分類這種類別相對均衡的任務基礎版本就夠了。優(yōu)化器的選擇同樣有講究。我最初圖省事用了torch.optim.Adam(model.parameters(), lr0.001)因為 Adam 自適應學習率不太需要精細調(diào)節(jié)。Adam 在實際項目中確實省心尤其對新手不容易把學習率設得太離譜導致訓練發(fā)散。如果你想更接近論文風格可以試試帶動量的 SGDoptimizer torch.optim.SGD(model.parameters(), lr0.01, momentum0.9)SGD 往往在充分調(diào)參后效果更好但學習率、動量的組合需要經(jīng)驗。作為入門先上 Adam 是對的。學習率調(diào)度方面我建議加一個簡單的StepLR或CosineAnnealingLR。訓練初期較大的學習率讓模型快速下降后期逐漸降低學習率讓損失在最小值附近收斂得更穩(wěn)。代碼長這樣scheduler torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max15)這里的T_max一般設為總的 epoch 數(shù)學習率會從初始值按余弦曲線降到接近 0。還有一個容易忽略的點如果使用了凍結(jié)部分層的策略model.parameters()會包含所有參數(shù)包括凍結(jié)的。凍結(jié)層的requires_gradFalse之后傳給優(yōu)化器時即使包含它梯度也是None不會更新但為了干凈通常直接傳入所有參數(shù)也沒問題。更細致的人可以只傳需要更新的參數(shù)列表但對這個小項目來說沒有太大區(qū)別。4. 訓練循環(huán)與調(diào)參實戰(zhàn)4.1 標準訓練循環(huán)的寫法訓練循環(huán)是 PyTorch 項目里最核心、最模式的代碼。一旦你理解了這段循環(huán)以后所有模型都能套用。先明確每個 epoch 需要做的事把訓練集所有圖片分成多個 batch逐個 batch 讓模型預測計算損失反向傳播更新權(quán)重完成整個訓練集后在驗證集上計算當前模型的準確率判斷是否比之前更好。from tqdm import tqdm import torch def train_one_epoch(model, train_loader, criterion, optimizer, device): model.train() running_loss 0.0 correct 0 total 0 for images, labels in tqdm(train_loader): images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * images.size(0) preds outputs.argmax(dim1) correct (preds labels).sum().item() total labels.size(0) epoch_loss running_loss / total epoch_acc correct / total return epoch_loss, epoch_acc有幾個細節(jié)新手必須理解model.train()和model.eval()不是擺設。像 BatchNorm、Dropout 這些層在訓練和推理時行為不一樣。訓練時 BN 會根據(jù)當前 batch 統(tǒng)計均值方差Dropout 會隨機丟棄神經(jīng)元推理時要用固定的統(tǒng)計量和不丟棄。忘記切換會在驗證階段得到很詭異的結(jié)果。optimizer.zero_grad()一定要在每個 batch 前調(diào)用。PyTorch 的梯度是累積的如果不手動清零上一個 batch 的梯度會疊加到當前 batch 上導致更新方向混亂。outputs.argmax(dim1)是取每一行最大值對應的索引也就是預測類別。preds labels返回布爾向量sum()得到該 batch 中預測正確的數(shù)量。loss.item()用于從 loss 張量中取出 Python 浮點數(shù)。注意必須在loss.backward()之前或者之后調(diào)用都可以但只用于記錄不能影響梯度計算。4.2 驗證與保存最優(yōu)模型驗證集的作用是模擬模型在沒見過數(shù)據(jù)上的表現(xiàn)。每個 epoch 后我們把模型切到eval()模式下跑一遍驗證集torch.no_grad() def validate(model, val_loader, criterion, device): model.eval() running_loss 0.0 correct 0 total 0 for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) loss criterion(outputs, labels) running_loss loss.item() * images.size(0) preds outputs.argmax(dim1) correct (preds labels).sum().item() total labels.size(0) return running_loss / total, correct / totaltorch.no_grad()是驗證的關(guān)鍵。它告訴 PyTorch 不需要記錄梯度因為驗證階段只做前向傳播不需要反向傳播。這樣能省顯存、加快速度也避免誤調(diào)用.backward()導致梯度累積。訓練過程中我習慣保存“驗證集準確率最高”的模型而不是最后一個 epoch 的模型。原因是最后一個 epoch 不一定是最好的有時候已經(jīng)過擬合了。best_acc 0.0 for epoch in range(num_epochs): train_loss, train_acc train_one_epoch(model, train_loader, criterion, optimizer, device) val_loss, val_acc validate(model, val_loader, criterion, device) scheduler.step() print(fEpoch {epoch1}/{num_epochs} | fTrain Loss: {train_loss:.4f} | Train Acc: {train_acc:.4f} | fVal Loss: {val_loss:.4f} | Val Acc: {val_acc:.4f}) if val_acc best_acc: best_acc val_acc torch.save({ epoch: epoch, model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), best_acc: best_acc, }, best_model.pth) print(fBest model saved, val_acc{best_acc:.4f})保存時用字典包起來是個好習慣。只保存model.state_dict()也夠用但帶上 epoch、優(yōu)化器狀態(tài)等信息以后想接著訓練或者看信息就方便了。4.3 關(guān)鍵超參數(shù)和訓練技巧超參數(shù)不靠背靠試和觀察。我第一次訓練時就是踩了不少坑下面是一些比較實用的經(jīng)驗先用幾十張圖跑一個 batch 或幾個 step確保前向、反向、更新的代碼沒有 bug。我習慣在正式訓練前取一個 batch 數(shù)據(jù)過一遍比如loss能正常下降再從完整數(shù)據(jù)開始。這樣能省掉大量反復試錯的等待時間。學習率用1e-3起步比較穩(wěn)。如果發(fā)現(xiàn) loss 震蕩劇烈就把學習率降為原來的十分之一再試。如果 loss 下降非常慢可能是學習率太小適當調(diào)大。固定隨機種子能讓結(jié)果可復現(xiàn)。在數(shù)據(jù)加載和模型初始化前調(diào)用torch.manual_seed(42)如果用了 GPU 再調(diào)用torch.cuda.manual_seed_all(42)。雖然不能做到嚴格百分之百復現(xiàn)但能減少很多奇怪的不確定性。監(jiān)控驗證集準確率而不是訓練集準確率。訓練集準確率 90% 但驗證集只有 60%說明過擬合了這時候不是繼續(xù)訓練而是找辦法正則化。訓練輪數(shù)不要貪多。使用預訓練模型加數(shù)據(jù)增強10~20 個 epoch 通常就能看到收斂。小數(shù)據(jù)集下跑 50 個 epoch 往往是浪費時間還會增加過擬合風險。如果顯卡有amp自動混合精度可以嘗試開啟scaler torch.cuda.amp.GradScaler() with torch.autocast(device_typecuda): outputs model(images) loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()混合精度訓練能減少顯存占用同時訓練速度提升不少。對新手來說不是必須但用起來也不難可以等流程跑通后再加。5. 模型評估與結(jié)果可視化5.1 準確率不夠還要看混淆矩陣訓練結(jié)束后我們通常先看一個總體準確率。但準確率只能告訴你“模型有多好”不能告訴你“模型在哪里不好”。比如模型把“炸雞”識別成“薯條”和把“壽司”識別成“刺身”這兩類錯誤的含義完全不同?;煜仃嚹芊浅V庇^地展示類別之間的互相混淆。它的每一行代表真實類別每一列代表預測類別對角線上的數(shù)字越大越好非對角線上的點代表錯誤。from sklearn.metrics import confusion_matrix import numpy as np all_preds [] all_labels [] model.eval() with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) preds outputs.argmax(dim1).cpu().numpy() all_preds.extend(preds) all_labels.extend(labels.cpu().numpy()) cm confusion_matrix(all_labels, all_preds)畫熱力圖時可以按類別數(shù)量調(diào)整圖片大小類別多就用大一點畫布。如果看到某兩類互相混在一起比如“炸雞”和“炸魚”混淆嚴重說明它們在紋理或顏色上確實接近這時候可以考慮加強數(shù)據(jù)增強中的顏色擾動或者收集更多這類樣本。5.2 從錯誤樣本找出模型短板只看指標永遠不夠把預測錯誤的圖片真正打開看一眼你會迅速理解模型的困境。我寫了一個小的可視化邏輯遍歷驗證集找出preds ! labels的圖片把原圖、真實標簽、預測標簽、預測概率畫在一張圖上。這部分代碼量不大但對判斷問題特別有效??戳隋e誤樣本后常見的發(fā)現(xiàn)有以下幾類數(shù)據(jù)標注錯誤圖片里明明不是那個菜標簽是錯的。這種問題只能靠人工修正。圖片過于相似比如不同菜系的“紅燒肉”外觀很像。這種情況模型表現(xiàn)不佳是可以理解的需要更細的類別定義或更多樣本。圖像質(zhì)量差過暗、過糊、被遮擋?,F(xiàn)實中拍照經(jīng)常這樣可以考慮在訓練集加更強的數(shù)據(jù)增強甚至用模糊增強模擬噪點。錯誤樣本分析不是什么高深技術(shù)但它能幫你建立直覺模型到底是在學食物本身還是在學背景顏色、盤子形狀。這個直覺對以后做任何視覺任務都有幫助。5.3 用訓練好的模型預測單張圖模型訓練好了最終目的是給一張新圖片預測類別。加載模型的方式checkpoint torch.load(best_model.pth, map_locationdevice) model.load_state_dict(checkpoint[model_state_dict]) model.to(device) model.eval()單張圖片的預處理必須和驗證集保持一致尤其是Resize、CenterCrop、Normalize這三個步驟。很多人直接在讀圖后縮放到 224×224 就喂給模型結(jié)果發(fā)現(xiàn)準確率驟降就是因為沒有做CenterCrop和Normalize。from PIL import Image def predict_image(image_path, model, class_names, device): image Image.open(image_path).convert(RGB) tensor val_transforms(image).unsqueeze(0).to(device) model.eval() with torch.no_grad(): outputs model(tensor) probs torch.softmax(outputs, dim1) top_prob, top_idx probs.max(dim1) return class_names[top_idx.item()], top_prob.item()softmax把 logits 轉(zhuǎn)成概率max(dim1)取最大值對應的類別。說實話這里直接argmax也能得到類別但用softmax能額外看到概率值方便判斷模型是確信還是猶豫。如果概率低于 0.5說明模型信心不足這時候要么模型對該類沒見過足夠多樣本要么圖片與訓練集分布差異太大。實用一點的做法是設置一個閾值低于閾值就返回“無法確定”這在真實業(yè)務場景里很有價值。6. 常見問題與排查技巧實錄6.1 訓練 loss 一直不下降最讓人沮喪的情況就是訓練了好幾輪loss一直在初始值附近波動幾乎沒有下降。這時候不要盲目調(diào)學習率按順序排查以下問題首先檢查數(shù)據(jù)是否真的被正確讀取了。打印一個 batch 的形狀和標簽范圍。圖片是 3 通道大小和模型輸入匹配標簽從 0 到 num_classes-1沒有越界。如果標簽不是從 0 開始的連續(xù)整數(shù)CrossEntropyLoss會對不上。其次檢查歸一化是否忘寫了。如果圖片沒做Normalize像素值在 0~255 之間預訓練模型的輸入分布被破壞可能讓 loss 不收斂。然后檢查學習率是否過大或過小。過大時 loss 會跳來跳去甚至變成 NaN過小時 loss 緩慢但一直不降。以 Adam 為例1e-3是個不錯的起點如果不降可以試1e-4或3e-4。最后建議做一次“小樣本過擬合測試”只取 20 張訓練圖片不放增強強制讓它擬合。如果小樣本上 loss 能降到接近 0說明模型和訓練流程沒問題問題出在數(shù)據(jù)量或數(shù)據(jù)分布上如果小樣本也降不下去問題大概率在輸入處理或代碼邏輯。6.2 GPU 顯存不夠很多人的顯卡顯存只有 4GB 或 6GB訓練一個 ResNet18 雖然夠用但如果 batch_size 設置得太大會立刻報CUDA out of memory。解決策略按優(yōu)先級排序降低batch_size。從 32 降到 16 或 8顯存占用成比例下降。代價是每個 epoch 的迭代次數(shù)變多訓練時間變長一點。降低輸入尺寸。ResNet18 雖然默認是 224但用 192 或 160 也能運行。不過輸入越小信息損失越大準確率可能輕微下降不推薦新手一開始就改。驗證和預測時用torch.no_grad()。如果忘了加驗證集也會建計算圖顯存占用會明顯上升。開啟混合精度AMP。在 4.3 小節(jié)提到的autocast和GradScaler能減少約一半顯存占用而且速度通常更快。如果嘗試以上方法后仍然不夠還有一個辦法是換更小的模型。ResNet18已經(jīng)算小的了可以考慮ResNet18之外更輕量的MobileNetV3或EfficientNet-B0。這些模型專門為移動端設計參數(shù)量更少訓練更快適合資源有限時使用。6.3 訓練準確率很高但驗證集很低這是典型的過擬合信號。訓練準確率 95% 以上但驗證集只有 70%說明模型沒有學到泛化的規(guī)律而是記住了訓練集中的細節(jié)或者噪聲。過擬合的應對手段有很多我按實用程度排序增加數(shù)據(jù)增強。訓練集已有的增強如果不夠“狠”可以加RandomRotation的角度、ColorJitter的幅度甚至加RandomAffine。要讓模型在更多變體中學習不變特征。使用正則化。在CrossEntropyLoss中沒有自帶正則你可以給優(yōu)化器加weight_decay。Adam 的weight_decay一般設1e-4或1e-5能有效抑制大權(quán)重。減少模型容量。如果你已經(jīng)用了很大的預訓練模型考慮換更小的模型或者只微調(diào)最后兩層。參數(shù)量越少越不容易記住噪聲。早停。觀察驗證集準確率一旦連續(xù)幾個 epoch 沒有提高就停止訓練恢復之前保存的最佳模型。檢查驗證集是否“臟”。如果你把訓練集里的一部分圖片也混進了驗證集模型在驗證集上表現(xiàn)好就是假象。目錄劃分時一定保證類別文件不重疊。還有一個被很多人忽略的問題數(shù)據(jù)增強只有在訓練集上做驗證集不要做。如果為了“公平”給驗證集也加了隨機翻轉(zhuǎn)驗證集每次評估結(jié)果都會有波動而且這種波動并不代表模型的真實能力。6.4 可視化中的中文字體亂碼折騰到畫混淆矩陣和錯誤樣本時你大概率會遇到中文字體顯示成方框的情況。這是因為 matplotlib 默認字體不支持中文。最省事的辦法是在繪制圖之前設置字體import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] plt.rcParams[axes.unicode_minus] False但前提是系統(tǒng)里已經(jīng)裝了對應字體。如果沒有不少人的做法是把所有類別標簽映射成英文拼音或者英文翻譯畫圖時顯示英文。這樣其實更省心因為在命令行和大多數(shù)圖表環(huán)境中英文的兼容性最穩(wěn)定。如果你是在演示項目標簽直接顯示中文當然更友好那就按上面的配置調(diào)字體。6.5 一些容易忽略但很實用的小細節(jié)最后分享幾個我在實際項目中反復用到、但教程里很少強調(diào)的小細節(jié)。模型和數(shù)據(jù)的設備一定要統(tǒng)一。最常見的報錯就是“Expected all tensors to be on the same device”通常是因為模型在了 GPU數(shù)據(jù)還在 CPU。解決辦法就是訓練循環(huán)里把每個 batch 的images和labels都.to(device)模型在定義后也.to(device)。計算準確率時outputs.argmax(dim1)出來的結(jié)果和labels的類型要能直接比較。如果labels也是 LongTensor直接用就行如果不放心可以.long()統(tǒng)一一下。對新手來說盡量別在一開始就追求復雜的分布式訓練或混合精度那些花活。先把 CPU/GPU 訓練跑穩(wěn)再逐步嘗試優(yōu)化。我在最初做食物分類時連tqdm都不用每次訓練只能干等著后來加了進度條那種隨時能看到進度的感覺對保持耐心幫助很大。還有一個小技巧訓練時每多少個 step 打印一次 batch 損失不要等一個 epoch 結(jié)束才看。因為 epoch 結(jié)束往往要好幾分鐘中途看了才能及時發(fā)現(xiàn)問題。我習慣在每 50 或 100 個 iteration 的時候打印一次當前 loss這樣能更早發(fā)現(xiàn)學習率是否合適。如果你已經(jīng)跑通了上面的流程恭喜你你已經(jīng)具備了做一個圖像分類項目的基礎能力。接下來可以往兩個方向走一是增加類別數(shù)把模型換成 ResNet50 或 EfficientNet探索更多預訓練模型的效果二是把訓練代碼整理成可復用的模板加入命令行參數(shù)、日志系統(tǒng)、更多評估指標讓它成為一個真正屬于自己的項目框架。食物圖片分類雖然小但模型訓練的整套思路在里面是完整的。把它吃透后面再接觸目標檢測、圖像分割這些復雜任務時你會發(fā)現(xiàn)自己不是從零開始了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美色图人妻| 久操操| 欧美国产一区二区三区麻豆传媒| 9999免费精彩视频| 日韩免费大片一级播放| 亚洲无码精品AV久久久| 成人天天爽| 熟女人妻av在线资源,黄色的资源| 中文一区二区三区影院| 欧美日韩小说| 亚洲日韩东京热一区| 五月丁香色综合| 欧美三级中文字幕hd| 蜜臀久久99精品久久久| 欧美丝袜亚洲| 操逼无毒无码免费视频| 黄资源| 久久久999网站| 久久久国产亚洲精品系列| 亚欧高清| 日韩欧美中文| 日韩性爱视频在线免费观看| 69精品| 久区视频| 国产精品乱码久久久久久久久| 神马久久啊啊| 日本啊啊啊啊啊视频| 久热久| 综合网色| 男人天堂2012| 九九九九九九九精品视频| 日本特黄f c2| 97视频在线观看播放与子乱对白在线…… | 99rre在线精品99re8| 欧美色66| 五月天加勒比啪| 亚洲AV无码久久精品蜜桃小说| 在现视频女上位好爽| 色99视频| 中文字幕日韩综合| 久久久久久大| 夜夜嗨绯色| 牛牛久久国产精品视频一二三| 2001天天操| 色色色色色色色色色色色色色色综合| 久久久婷| 日本裸体久久色噜噜| 九九九九九九九精品视频| 五月色网| 人人色人人射人人妻| 天美麻豆精品视频99| 国产精品人妻无码久久久老鸭窝| 日本媚薬中文字幕在线| 黄色无码高清黄色无码网站| 超碰欧美| 高清无码 国产精品| www.av在线视频| 免费人成在线观看网站品爱网| 一级性爱视频免费在线| 极品美女福利在线观看| 亚洲中文字幕97久久精品少妇| 日日操天天操| 色性荡荡荡荡视频| 91成人无码| 国产一区二区三区高清视频| 国产精品一区二区三区,亚洲综合| 97综合在线| 欧美天天拍| 黑丝少妇麻豆| 久草毛片| 亚洲一卡二卡在线免费| 成人免费在线网站| 亚洲熟妇无码一区二区三区| 精品无码一区二区人妻久久蜜桃| 美欧色综合| 国产精品日日摸夜夜添骚逼| 日本成人A片网站| 男人的天堂一区三区| 91久久久久免| 久久久一二三四区| 370p日韩欧美亚洲精品| 久久伊人五月天| 在线观看十八禁| 国产美女口爆吞精| 欧美少妇色图| 91高清无码下载| 色女女女导航| 久久精品国产97欧美精品亚洲 | 午夜舔阴达高潮视频免费看| 啪啪AV导航| 密桃99999| 熟女网站最新| 97在线视频观看| 东北丰满熟女国产一区| 91天美传媒在线| 欧美中文综合| 啪啪综合网| 日日AV加勒比| 欧洲性爱无码区| 8050午夜少妇无码| 综合久久99亚洲人妻中文在线| 日韩一级二级三级| 人人手机欧洲亚洲国产人妻| 青娱乐休闲视频在线观看| 亚洲AV无码国产成人| 偷拍亚洲高清图片| 思思热国产高清| 婷婷伊人綜合中文字幕| 亚洲青青草| 天天操天天射天天日| 91色艳| 天天色综合影视网| 97在线精品| 精品人妻视频一区二区在线播放 | 无码男人天堂| 日韩亚洲中文有码视频| 玖玖爱一区在线| 84YTCOM性无码| av中文在线| 少妇久久久久| 97精品在线| 欧美十八禁导航成人| 欧美三级一级| 都市久久精品激情亚洲| 十八禁黄色成人网站观看| 婷婷色综合欧美日韩| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 一本久道久久综合狠狠爱| 欧美一品道| 最近2019中文字幕国语免费版| 99热精品青草在线| 人妻一区二区三区视频| 色天使大香蕉| 日韩成人大片在线观看| 欧美综色欧| 另类天堂| 婷婷色综合欧美日韩| 色婷婷在线视频精品导航| 日韩超碰97| 久久久久久性爱片| 精品亚洲一区在线观看| 日韩精品人妻中文字幕不卡乱码| 三级三久久线久久99久目本WW| 超碰这里有精品| 五月丁香啪啪| 欧美性爱18观看| 超碰在线974| 日韩 国产 欧美自拍| 韩国女主播青草在线| 高清一区AV无码| 天天爱综合网| 国色天香av| 黄色片A级一区二区三区| 金典av| 91日本在线观看| 97视频免费| 四虎AV无码| 操迟操逼在巾线Fre看| 日本天天干天天日一区| 激情自拍 校园春色| 色吧 综合| 男人的亚洲天堂| 亚洲AV免费在线| 性综合网| 超碰导航97| 中文字幕片| 日本色色的视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲αv一区二区三区| 好爽要喷了| 人人喜人人妻| 日本网色| 久久av成人无码免费| 少妇天堂| 精彩久久中文| 在线视频一区二区传媒| 亚洲国产综合久久久性感熟妇| 岛国黄| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 欧美天天干| 97chaopengongkai| 91熟女.com| 天天综合影院91| 狠狠综合网| 日韩Va亚洲va欧美Ⅴa久久| 96久久久久久久| 有码色中文字幕在线观看| 色哟哟的毛片| 色色热| 福利伊人玖玖国产| 日韩欧美俄罗斯A片| 操一操摸一摸| 久久黄人人爽视频| 久肏视频字幕| 久久男人| 91精品操美女| 亚洲性综合11| 好湿好紧视频| 日本不卡五区| 射综合网| 97超碰人妻| 九t超碰| 九九九九一级| 国产又长又大又粗的视频| 久久欧洲| 午夜福利一区二区三区四区五区色婷婷| 久久精品毛片免费不卡| 激情抓乳插进去啪啪啪日韩 | 激情五月综合| 色色色色综合网| 亚洲操逼视频网站| 五月丁香影视| 日韩乱码Av| 国产九月婷婷| 亚洲图片欧美91N| 婷婷六月天| 91美女丝袜诱惑视频| 淫妻综合网| 无码色| 亚洲。日韩。欧美| 黄网站黄视频网站进入口| 熟妇艹鸡八| 蜜臀AV成人精品蜜臀AV久久| 精品无码一二三四区| 综合网欧| 亚洲九九爱| 大香蕉日亚洲日本亚大 | 国产成人无码网站在线视频| 99日精品欧美国产| 超碰97在线 欧美 国产| 白 大 人妻 区 在线| 亚洲精品一卡二卡三卡福利视频网站| 中文字幕伊人| 久久东京热久久| 秋霞网无码| heyZO天然素人无码AⅤ专区| 国产精品蜜乳AV| 五月激情综合网| 亚洲中文字幕乱码无码一区二区| 久久久不卡区一区二区三区久久久| 久久、1234| 97欧美久久久久久久| 久久亚洲日韩熟女精品| 17c嫩草51久久91嫩草| 老熟女搡BBBB搡BBBB视频| 国产亚州高清国产拍精| 少妇一线天久久久久久| 欧美性爱一区二区三区四区| 一区二区视频在看| 久久久久久一日韩字幕无码| 久jiu久神马影院| 色情亚洲日本成人| 欧综合网| 日韩激情中文字幕有码| 91总综合网| 视频二区美腿制服人妻欧美| 天天谢天天干| 欧美第一页性| 久热这里| 日本视频一区二区三区| 欧洲射精91| 无码精品啪啪啪一区二区三区三州| 99热这里都是精品| 国产操操日韩三级黄| 久操高青| 日韩精品亚洲一二三| 欧美性爱日韩高清| 五月天婷婷综合| 夜夜嗷嗷一区二区| 国产熟妇 码视频户外直播| 欧美很很操视频| 欧美激情片一区二区| 九九九成人| 一类无码操逼视频| 2019AV天堂| 天天久久| 三级片网站在线播放| 色九九九九| 五月天亚洲色图| 国产一区二区av综合| 91在线色| 欧美亚洲国产91在线| 人妻啊啊人妻啊| chaopen97久久| 精品国产一区二区三区四区在线看| 天天操狠狠日夜夜干超碰撸com视频在线观看| 亚洲男人天堂2019| 熟女人妻一区二区三区免费看| 日韩欧美午夜视频在线| 国产精品丝袜久久亚洲不卡| 日日操免费视频| 操狠狠| 色噜噜狠狠色综无码久久合欧美| 六月丁香婷| 97综合激情| 青娱乐日韩无码| 青青草好吊| 久草视频在线视频在线视频在线观看| 少妇69中文| A级片日韩欧美国产欧美视频精选观看 | 婷婷五月天基地| 亚洲,欧美,综合网| 夜夜操2028| 天天综合网日韩| 97精品一二区| 青草草免费网站av| 国产日韩人人| 亚洲综合中文字幕有码| 人妻 欧美亚洲| 国产第25页在线观看| 99草精| 九九热免费视频| 亚洲国产97| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 97频视在线| www.91理论| 福利五区| 久久久一级| 成人精品在线免费视频| 色综合99999| 国产自产一区视频在线| 97色欧洲| AND人妻系列| 手机在线中文字幕国产| 久久精品无码熟妇一区二区三区视频导航 | 丝袜AV一二三区| 韩国三级色呦呦| 色色99| 黄片aaaaa一区| 夜夜春夜夜操| 男人天堂久久日韩| 我爱大香蕉| 精品在线蜜臀| 亚洲精品久久一区二区三区蜜桃臀| 粉嫩不卡一区二区性爱| 人人摸人人入| 国产免费内射视频| 欧美激情超碰777| 无码av永久免费专区网站| 婷婷丁香人妻| 熟妇国产免费一区| 久久手机好看网站| 亚洲成人福利电影免费| 久操免费在线| 欧美一品道| 大香蕉 222| 国产大学生高潮在线播放| 国产强奸乱伦欧美| 91欧美网| 欧洲综合色| 日韩美女高潮喷水视频| 精品久久久久久亚洲| 日韩性爱1级片视频| 久久久精精精| 男人的天堂日韩| 蜜桃臀 后入 一区 二区 三区 在线| 91人妻精华帖| 欧美岛国精品在线观看| JuliaAnn丝袜熟女系列| 久久 久久国内精品亚洲| 欧美图片偷拍| 欧美成人性爱视频大全| 无码免费精品高清| 老司机天天操| 激情五月天插| 欧美精品精品一区二区| 天天影视亚洲| 超碰97综合网| 亚洲色图综合网| 欧美综合加勒比在线| 99在线观看| 女同性恋久久| 欧亚乱色熟女一区二区| 吖在线不卡一区二区国产剧情| 91观看 国产白丝| 久久精品91| 小明看看网址| 91欧美丨精品丨入口| 欧中日成人免费影视| 98色网| 色综合五月天| 韩国一区二区精品亚洲| 亚洲日产专区| 欧美少妇大量自拍视频在线观看| 日本一级一级一级一级| 色婷婷影院| 91丨九色丨东北熟女| 亚洲欧洲国产综合av| 亚洲小电影免费涩涩成人在线高清| 精品九九九| 澳门黄片一香蕉视频| WWW.操逼.COM| 成人无遮挡毛片免费看| 日韩性爱再线视频| www.天天干| 亚洲五月婷| 六月丁香久久| 素人美腿视频网站| 四虎884a| 国产9熟妇视频网站| 大香蕉日韩欧美| 亚洲天堂电影网99999| 99热精品在线观看| 美女91网站| a片在线播放| 国产亚洲性生活视频播放| 欧美成人A√在线一区二区| 亚洲字幕一区二区| av天堂手机版追回| 日本有码久久| 青青操在线亚洲视频观看欧美在线| 久久久久亚洲一区女同性恋中文字幕| 97国产精品在线观看| 大香蕉淫人| 欧美组图日韩亚洲中文字幕| 九九热久久99精品re| 国产一区二区三区导航| 免费看毛片操穴| 国产精品91ai| 91天美免费| 国产黄色影片在线观看| 蜜乳av首页| 人妻精品综合中文字幕在线 | 青青三级视频| 亚洲一区二区三区在线激情| 日本国产欧美高清在线| 日本精品网站在线中文| 国产综合久久久麻桃个| 欧美操逼熟女| 嗯嗯嗯好爽| 欧美视频第二页| 日韩国产九九精品一区二区三区毛片| 97天天综合| 国产精品亚洲无码| 免费看毛片操穴| 色制服丝袜夫妻av一区| 快灬快灬 一下爽蜜桃在线观看| 日韩av在线精品观看| 人人摸人人添人人操| 污啪啪啪视频| 五月天欧美色图| 中文字幕一区二区视频在线观看| 成人免费在线网站| 综合网久久| 狠狠躁伊人中文字幕| 高潮毛片无遮挡高清免费| 久久大香蕉| 黄久在线| 欧美日产国产在线成人第一区| 久久婷婷热| 久操影视| 狠狠色噜噜狠狠狠狠狠色综合久久| 99re视频在线观看这里只有精品| 亚州图片第一页| 日韩免费高清大片在线| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 日韩熟女乱伦中出| 国产欧美日韩女同性恋ww喷水精品| 香蕉免费一区二区三区不读 | 成年男人的天堂| 婷婷爽人人婷婷爽视频| 麻豆天美国美国产AV| 夜夜嗨一区| 久久精品中文字幕无码l| 色九月综合| 天堂v无码免费视频| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 又黄又粗又硬又长又大| 久久久久亚洲熟妇熟女| 人妻在线臀日韩| 思思热国产高清| 老鸭窝亚洲毛片| 国产精品96| 熟女日韩| 乱伦一区二区三区‘| 国产污视频麻豆传媒一区二区| 伊人骚琪琪亚洲天堂网站| 天天日天天爽| 水多多映视AV| 少妇人妻精品| 国产精品干干干| 亚洲熟女乱色一区二区三区久久久| 日韩中文字幕视频| 国产青视频| 日韩亚洲中文有码视频| 老司机免费视频在线91| 国产精品一区二区密臀| 人人色97| 摸奶性爱视频网站在线免费播放| 综合婷婷| 久久久久亚洲| 白丝AV网站| 这里只有精品视频在线观看麻豆| 大香蕉琪琪日本女优不卡| 搞中出久久| 超碰视97中文| 天天色播| 97色色色| 啊啊啊要高潮了| 无码av永久免费专区网站| 亚洲精品不卡一二三区| 嫖老熟女A片一二三区| 毛片99-全集电影手机免费观看完整-B029AV | 亚洲高清色综合| 翘臀vidoes| 一级@啪啪视频| 久久视频少妇美女| 69精品少妇一区二区三区蜜桃| 一本色道久久综合精品婷婷| 中文字幕丝袜美腿| 3d成人精品一区二区| 欧美同性恋 的搜索结果 - 91n| 夂久色| 测评在线观看AV| 精品精品精品| 蜜乳AV一区| 嗯嗯啊啊啊好爽| 日本97久久久精品| 91精品丝袜久久久久久| 黑人精品一区二区在线播放| 一区二区亚州激情久婷婷欧美| 亚洲,欧美,春色,另类| 男女性无套 免费九一| 很很很很操| 欧美日日网| 国产高清无码一区三区二区| 后入国产| 欧美色图片色哟哟| 精品视频97| 婷婷六月色开| 国产69精品久久久久99尤物| yiqicaoav| 亚洲天堂美臀在线| 东北夫妻性偷拍| 中文字幕狠狠玩| 爱妃国产亚洲视频中文字幕| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 国产成人欧美精品在线| 亚洲在钱| 日韩午夜国产| 夜夜爽妓女| 色婷婷电影| 在线观看高清AV| 国产精品ww久久| 欧日韩一二三f区| 久久婷婷亚洲欧| 91丝袜美女| 色色五月婷婷| 亚洲宅男天堂| 人妻av在线| 乳欲人妻办公室奶水| 翔田千里爆乳巨臀无码| 女人综合网| 91n.欧美| 夜夜骑日日| 人人摸人人舔一区二区| 国产av热热色| 日韩欧美被操黄免费观看| 欧美午夜精品久久久久久超碰| 久久久九九网站| 91社操逼| 亚洲第一黄色av网站| 国产成人无码啪| 看免费的黄片| 性色av大全| 色黄污美女啪啪啪免费网站| 中国一级αV| 亚洲性爱成人| 青青青国产手线观看视频2| 久久国产乱子伦精品免费女,网站| 天天色综合影视网| 欧美色91| 美欧色综合| 思思热国产高清| 精品无码秘 人妻一区二区| 日韩成年人性爱视频| 欧美天天综合网| 97综合网| 18禁中文字幕| 人妻人人做人人澡人人爽欧美一区| 中日亚韩免费视频| 欧美自拍偷拍免费观看| 午夜男人一级A片7777| 天天爽天天爽| 成人精品电影| 校园春色中文字幕AV| 久久久999国产精品| 大香蕉中文网| AA级电影三区| 美国aaaaa一级黄片| AV无码久久久精品| 久操九九九九| 性色av一区二区| 久久精品操| 久久久久九九九九| 五十路六十路七十路熟婆| 亚洲精品影视老司机| 色噜噜人妻丝袜a∨先锋影 | 97国产综合欧美| 日日夜夜免费| 91精品女厕偷拍视频| 亚洲四虎熟女精品| 精品久久久久瑟瑟| 色香欲天天天天综合色| 激情小说亚洲色图| 探花在线免费观看视频国产一区| 日韩成人综合网| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 女人高潮抽搐喷水视频网站| 嗯嗯嗯好爽| 超碰在97| 99re免费| 久久久久国产无av| 欧美97在线观看| 免费视频观看60秒| 国产精品一区二区校花| 色色色热| 极品一区二区三区免费| 人妻一区二区三区四区视频 | 亚洲天堂自拍| 四虎影视永久在线观看精品免费网站| 中文乱码字字幕在线第5页| 国语国产操逼伊人AV网| 97干色天堂| 少妇色欲综合网2| 一级片在线观看高清无码| 97超碰国产精品| 少妇99| 不卡中文字幕aⅴ在线| 天天肏夜夜肏| 啊啊啊啊好疼视频| 国产精品视频麻豆入口| 久久久久久性爱片| 亚州一区二区| 亚洲天堂热| 久久久久久中文| 无码免费在线观看黄色片| 国产超碰在线| 少妇激情一区二区三区视频| 日本午夜操逼| 精人妻无码一区二区三区伊人直播| 亚洲色图欧美| 九九Av| 干B网| 亚洲国产无码精品首页久久久| 精品人妻一区春色| 国内毛片热久久思思热| 六月丁香网| 91美女在线| 综合五月婷婷| 嗯嗯啊啊啊好爽| 91久久久久久久| 欧洲综合色| 色色五月婷| 国产2.3.4区| 婷婷天堂站| 一二区在线观看视频| 国产欧美日韩在线不卡第一页| 中文字幕AV片| 亚洲欧美在线观看2021 | 日本天天干天天操一区| 婷婷五月花| 综合亚洲欧美| 久久,精品一二三| 天天看天天日天天操| 女人的久久久| 国产福利电影| 日本黄色天堂| 欧美在线播放aaaa| 密臀在线一区尤物| 国产蜜臀精品一区免费尤物| 噜噜噜噜天天狠狠| 97人肏| 日本在线观看网址| 欧美 亚洲 综合 制服 另类| 亚洲最新a在线观看| 好湿好紧视频| 日韩三级久久久| 国产狂喷潮在线精品| 婷婷15月天青娱乐| 操屄不卡视频| 国产91精品在线免费| 亚洲综合码| 日逼国产| 欧美综合第一页| 加勒比AV网| 丰满的三级少妇欧美久久久| 欧美国产精品久久九九| 日韩欧美丝袜诱惑| 不卡啪啪视频| 麻豆国产精品午夜视频| 久久宗合亚洲| 国产日本熟女顶级一区二区三区视频| 成人AV超碰免费在线| 欧美小说区视频区| 麻豆精品久久久久久久| 爽极品影院| 九九热国产| 操B久久| 婷婷综合久久| 亚洲无码太久| 国产综合久久久麻桃个| 日韩懂色网| 91av一区二区在线观看| 情色大香蕉| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 97天天爽| 精品美女久久久久| 600国产精品视频| 天美精品一区二区三区四区在线观看| www.色综合| 精品久久无码午夜福利| 日夜伊人网| 亚洲精品久久一区二区三区蜜桃臀| 啊啊啊 在线观看| 色综合久久88色综合久久天天| 69麻豆天美| 97综合激情| 91激情综合| 中 文字幕一区二区三四 五 区日 日 骚| 色欲三区| 搡老女人911熟妇老熟女| 熟女露脸激情自拍视频| 久久久久久波多野吉衣高潮| 日本大片日本一区二区免费高清| www.99中文字幕| 国产精品第一区第一页| 中文字幕AV中出| 九一国产精品| 欧美黄色图片| 啪啪91| 九九黄色网| 精品人人插人人操| av黄图片在线观看| 国产欧洲精品亚洲午夜拍精品| juliaann丝袜大战黑鬼| 欧美人妻精品| 狠狠躁AV| 不卡在线一区,精品一区二区三区中| 日本精品高清一二区一本到| 欧美精品23| 亚洲精品一二牛牛| 96久久久久| 蜜桃传媒视频第一区入口在线看| 亚洲熟久久| 图色综合网| 精品国产一区二区久久| www.久久爱| av九九| 久久草在线综合视频| 欧美性爱www免费版| 精品无码欧美三级| 天美av在线| 超碰97日韩| 人人澡人人澡人人| 97欧美色| 97chaopenrihan| 精品人妻一区二区蜜桃视频| 五毛骚逼极品美女怕怕| 亚洲天堂电影网| 熟女AV一区| 91欧美综合在线| 久久久111| caopeng97| 久久久久久久久久久久久久久乱码 | 99999精品视频| 91亚洲黑人| 午夜呻吟欧美| 欧美狠狠弄| 人妻少妇色综合| 伊人伊人LD| 久久久av爱| 欧洲精品人妻| 欧美熟女丝袜| 97鸡把在线视频| 不卡在线观看视频| 国产精品免费1区2区视频| 五月丁香六月综合缴清无码 | 精品国产网站| 91在线免费观看处女| 亚洲诱惑| 97在线播放 | 东北女人性交| 绯色一区二区三区不卡少妇| 久久透逼视频| 午夜福利成人免费视频| 99精品热| 国产乱弄免费在线视频。| 蜜臀久久99精品| 校园春色美腿丝袜| 2020中文字幕在线观看| 熟妇xxxxx性春色| 大香网站| 大香蕉伊人久久| 久久理论字幕视频| 麻豆九九九| 日本在线伊人啪啪| 韩三级a视频在线观看| 97操碰| 啊啊啊啊操死我了| 夜夜嗨视频| 岛国视频免费在线观看| 大香蕉综合| 欧美综合狠| 99久久精品无码一区二区毛片免费| 亚洲少妇综合在线播放| 天堂资源欧美| 亚洲丝袜二区在线| 国产精品无码av在线 | 99久久99久久免费精品蜜臀| 国产精品干干干| 麻豆蜜桃视频在线观看| 亚洲熟妇综合久久久久久| 日本性感人妻91| 午夜大香蕉| 亚洲欧美视| 亚洲性爱电影| 一区二区三区四区姦女| 亚洲资源吧| 成人免费福利在线观看| 亚洲精品色| 精…码一二三区| 国产女性无套 免费观看| 97精品综合久久网| 免费岛国一级片| 欧美日韩99精品麻豆传媒| 日本97久久| 日本色色色色色视频| 国产无遮挡| 日韩成人高清一区二区| 亚洲精品99| 91N综合网| 国产精品亚洲一区二区三区四区| 综合激情一一91| 中文字幕日韩精品久久| 很黄很污的免费网站| 精品视频久久| 丁香六月天| 噜噜噜噜天天狠狠| www.久久久久| 国产丁香精品露脸视频| 天天躁日日躁XXXXYY| 欧美少妇高潮久久91| 日逼逼免费看| 秋霞午夜视频一区二区| 午夜无遮挡男女啪啪视频| 99爱久久视频频| 大香蕉免费3| 女同性恋一区二区三区精品视频| 亚洲 欧美 精品专区 极品| 国产人妻精品久久久一区二区三区| 亚洲天天操| 97九色人妻| 97操| oumeisetu综合| 国产精品日日摸夜夜添骚逼| 亚洲欧美激情另类色图| www国产精品| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 热热色国产一二区AV| 乱伦1色页| 91熟女少妇| 色五月激情综合网| 91亚州| 人人爽夜夜操| 郑州宾馆老熟女露脸啪啪| 天操天操夜操夜月月年年操操| 熟妇操花| 日本布卡一区二三区| 青青国产精品在线| PMv在线观看| 欧美与日韩97| 91人妻Pr| 日韩精品资源专区二区| 日本蜜桃| 久9视频| 天天久久| h色99999| 亚洲激情网| 大香蕉乱级| 传媒免费一区二区三区| 女人爽到高潮潮喷18禁网站 | 五月丁香成人网| 高潮精品| 啊啊啊轻点在线观看| 熟妇熟女视频一区二区三区| 国产综合色精品在线观看| 人妻熟妇久草在线| 五月婷婷激情网| 97在线观看播放视频| 一二区在线观看视频| 色月天AV导航| 破苞ⅩXXX性无码动漫无码| 中文字幕99999| 是还免费视频1727我| 奸色色 男人天堂 天天射| 91精品微拍福利| 一区二区影视| 日本人妻天堂网站在线播放| 亚洲一区二区麻豆影院| 国产中出内射一区二区| 亚洲在钱| 台湾大香蕉99热| 天天躁日日躁AAAXX| 国产一区二区在线播放量| 欧美97se| 色在线69堂| 久久天天摸| 99热婷婷| www.91理论| 涩综合导航| 亚洲在线a| 日韩中文字幕宗合在线| 欧美在线伊人色| 青青操轻轻| 亚洲人妻中文在线视频| 干少妇视频| 91视频女生| 色欧洲97| 天天操狠狠日夜夜干超碰撸com视频在线观看| 2018天天日天天日| 精久久久| 嗯嗯啊啊视频一区二区三区| 91在线美女| 99re在线观看| 久久久中文| 乱伦图av| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 搡老女人老妇女AAA一VU麻豆| 一中国女人毛片水真多| 国产精品另类| 日韩精品 欧美激情| 在线五区| 福利五区| 97视频一区| 亚洲影视第一页| 一区超碰一区| 亚州图片第一页| 夜夜做夜夜爽精品视频| av天天在线| 久久久久国产| 久久久中文版| 色超碰综合| 青木玲在线不卡| 日韩天天本| 青青操视频在线| 久久夜精品一区二区三区| 久偷拍欧美日韩三区| 东北老女人的激情视频| 日韩人妻精品中文字幕| 日韩精品三级片长长久久| 日韩9999| 物业黑人 AV一区| 60秒免费视频| 亚洲综合在线91| 人妻熟女一区二区三区视频| 国产美女自拍视频| 玖玖爱影院| 超碰在线欧美性爱激情| 人人摸.人人色| 久热在线精品免费观看| 成人午夜小视频手机在线看| 久久九九视频九九视频| 欧美特大黄一级片片免费| www色日本| 国内精品999| 超碰人妻中文在线| 亚av顶级裸体一区二区三区四区五区 | 亚洲av无码国产精品字幕| 91精品国产91久久福利| 欧美天天干| www国产天美久久久| 久久激情网| 99这里有精品| 98超碰日本| 天天综合-91入口| 婷婷av在线中文字幕| 国产精品蜜乳AV| 九九99久久| 成人在线视频一区| 欧洲小说色图视频另类| 91N综合网| www.久久制服糖| 国产色呦呦| 97伊人网| 色婷婷国产精品一区在线观看| 日韩99精品视频综合区| 欧美婷婷五月天| 国产黄a三级三级三级av在线看| 欧美在线55555| 97精品网站| 亚洲国产一级黄色视频| 日本一区二区三区四区免费观看| 久操操| 丰满精品人妻少妇久久字幕| 97在线欧| 国内精品a| 超碰人人色| 东北操逼| 国产精品久久久久久高清无码免费看| 中文字幕aⅴ在线视频| 久久国色天香香蕉| 乱码人妻一区二区三区| 国产精品不卡av免费在线观看| 国产在线视视频有精品| 日韩紧密久久| 国产精品成人午夜福利| 亚洲三区视频| 亚洲天堂另类小说男人| 97在线免费视频观看| 久久九七| 精品一区二区三区蜜桃臀www| 精品久久久亚洲AV成人网站| 欧美 综合| 色亚洲欧美| 午夜福利免费精品视频| 97干com| 中文字幕免费在线观看| 日韩亚洲中文有码视频| 91肏屄网| 啊啊啊无码| 精品伊人久久久大香线蕉小说| 超碰97最新人妻| 午夜男女爽爽大片免费观看| 亚洲综合成人网| 精品人妻一区二区三区蜜桃视频| 四虎影视国产精品| 美国日韩黄色片| 人妻少妇久久中文| 欧美的性爱网站免费| 欧美亚洲第1页| 91久久久亚洲| 91N欧美| 熟女人妻一区二区三区| 中字乱伦AV| 欧美亚洲特P| 99热这里只有精| www.人人摸在线视频| 婷婷五月天久久久| 欧美啪啪啪91| 国产树林里野战在线看| 欧美在线|亚洲| 日韩 欧美 视频 在线 一区| 亚洲视频二区| 欧美日韩精品一区二区三区高清| 操人妻逼91| 草草影院日本第一页| 91在线色综合| 极品色| 九九英色视频| www.亚洲成人一区| 亚洲诱惑| 欧美麻豆成人同性GⅤ在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 国产一区二区三区免费视频在性观看 | 五月综合色| 蜜臀AV一区二区三区| 亚洲欧洲偷拍一区| 囯产精品久久久久久久久久二区三区| 欧美久久九九| 91伊人久| 青青草字幕AV| 亚洲中文一区二区三区视频| 超碰久超碰久| 日韩AV电影网站| 国产成久久综合片| 久久久久性熟视频| 亚洲无无码αⅴ每日更新| 久久99草| 日本操BAV| 亚洲丝袜综合| 人妻在线大香蕉| 台湾成人无码AV| 精品人妻久久久| 歐美一級亂黃99在綫精品| 2018天天日天天日| 蜜桃臀一区二区aV| av天堂精品久久| 久久久无码精品人妻二区| 一区二区三区网站日日骚| 人人操人人舒服| 中文字幕无码不卡啪啪| 白嫩嫩一区| 草莓精品视频在线免费观看| 熟妇一区,二区,三区。| 丰满翘臀美女影院视频| 国产精品亚洲一级av第二区| 欧美,日韩,中文,另类| 亚洲综合888| 天天干人人干天天日97| 美女啊啊啊啊啊| 九九热精彩视频| 99久久久99久久91熟女| 国产又黄又粗的视频| 91网站18在线| 亚洲激情久久| 天堂а√在线最新版在线| 97日韩欧美亚洲| www.高清无码诱惑一区.com | 91大学精品激情戏| 影音先锋新男人| 黑人综合网| 中日992视频| 天天日日本| 九九综合| 欧美激情另类一区二区| 亚洲欧美在线丝袜| 色臀aV| 一二三区在线| 91操人| 国产一区二区三区白丝| 亚洲天天精品| 日韩ab网| 成人AV素股で擦久久| 国产又黄又爽又刺激久久久久久| 亚洲美女精品九九视频| 久久噜噜噜精品国产亚洲综合| 久久久久久久一级黄色打同平台| 国产无码一二三区| 草草影院最新网址| 欧美色宗合| 精品69网| 91n处女在线观看| 啊啊啊好湿久久| 人人妻人人操人人乐| 这里只有精品视频在线| 人人操人人爽人人操人人| 97视频免费播放| 玖玖爱视频网站| 探花在线免费观看视频国产一区| 中国探花熟女| 国产成人亚洲精品无码古代早漏男| 日本在线观看网址| 易易A毛视频| 97资源站国产精品| 亚洲色天堂九9| 欧洲精品一二三在线| 99re这里| 九一综合网| 久久av色| 久久偷拍人| 欧美韩国你懂得在线| 牛牛aV| 乱伦日本色图AⅤ| 日本欧美亚洲高清在线看| 夜夜爽夜夜操| 99re超碰| 日韩免费a级毛片无码a∨| 国产午夜精品理论片a大结局| 日产精品久久久一区二区| 国产精品呦一区二区三区| 中文字幕人成乱码熟女香港| 亚洲男人天堂网| 国产精品福利资源在线尤物| 黄片视频观看| 日韩性爱一级片| 精品无码久久久久久国产浪潮| 久久精品国产99精品亚洲蜜...| 欧美区亚洲区偷拍区| 久思思热视频在线观看|