色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

RKD關(guān)系知識蒸餾:CoaTNet蒸餾ResNet的原理與工程實踐

RKD關(guān)系知識蒸餾:CoaTNet蒸餾ResNet的原理與工程實踐 簡介面向深度學(xué)習(xí)模型壓縮與知識蒸餾方向的開發(fā)者該壓縮包提供RKDRelational Knowledge Distillation實戰(zhàn)代碼示范以CoatNet為教師模型蒸餾ResNet學(xué)生模型。與常規(guī)特征蒸餾不同RKD對展平層特征進行關(guān)系建模蒸餾損失由距離損失Distance-wise Loss和角度損失Angle-wise Loss兩部分構(gòu)成有助于學(xué)習(xí)者掌握基于樣本間關(guān)系的蒸餾范式。壓縮包共包含2000個文件以訓(xùn)練過程可視化png圖片為主輔以7個Python腳本和1個pyc編譯文件整體大小約930MB其中py腳本為核心實現(xiàn)代碼png圖片可直觀對照蒸餾過程中特征分布、損失變化等細節(jié)。目前已有621人學(xué)習(xí)下載適合希望從代碼層面復(fù)現(xiàn)RKD并遷移到自身任務(wù)的中高級研究者。通過閱讀代碼與可視化結(jié)果可清晰理解雙損失的計算流程、展平層特征對齊方式以及CoatNet與ResNet間的蒸餾配置同時可作為項目目錄結(jié)構(gòu)參考便于后續(xù)擴展或調(diào)整蒸餾策略。1. 用 CoaTNet 蒸餾 ResNetRKD 到底在解決什么問題先說一個反直覺的結(jié)論知識蒸餾里Teacher 越強Student 不一定學(xué)得越好。很多人第一次跑 RKDRelational Knowledge Distillation關(guān)系知識蒸餾時都會翻車——直接把 ResNet 拿來當(dāng) Student配一個參數(shù)量大幾倍的 CoaTNet 當(dāng) TeacherLoss 卻不降、精度紋絲不動。原因很簡單傳統(tǒng) KD 只對齊單樣本的 softmax 輸出這叫 individual knowledge信息量太薄而 CoaTNet 這類帶有自注意力和粗粒度/細粒度特征建模的模型它內(nèi)部最有價值的恰恰是樣本與樣本之間的關(guān)系結(jié)構(gòu)。RKD 做的就是把這種關(guān)系結(jié)構(gòu)遷移過去而不是讓 ResNet 去模仿 CoaTNet 的輸出分布。這篇方案適合誰適合已經(jīng)在用 ResNet 做分類、檢測或檢索想在不換模型結(jié)構(gòu)的前提下再壓榨幾個點精度的工程師也適合剛接觸知識蒸餾、想找一條能直接落地跑通的代碼路徑的人。我會把 RKD 的損失函數(shù)怎么實現(xiàn)、CoaTNet 怎么加載、ResNet 怎么微調(diào)、三個坑在哪全部拆開講透保證你照著能復(fù)現(xiàn)而不是只看到一個項目名。2. 為什么是 RKD CoaTNet關(guān)系蒸餾的原理與 Teacher 選型2.1 RKD 的核心思想蒸餾「樣本對的關(guān)系」不是蒸餾「單樣本的答案」傳統(tǒng) KD 的 Loss 是讓學(xué)生模型的 softmax 輸出去逼近老師的 softmax 輸出用的是 KL 散度。這個做法的問題在于它只對每個樣本獨立生效模型學(xué)到的是一張「答案表」而不是數(shù)據(jù)分布的結(jié)構(gòu)。RKD 換了一個視角——它把每個樣本映射到一個特征空間然后計算樣本與樣本之間的距離關(guān)系和角度關(guān)系讓 Student 在這兩種關(guān)系上去對齊 Teacher。換句話說Student 不需要知道 Teacher 把某張圖分類成什么它需要知道 Teacher 眼里「這張圖和那張圖有多像、方向上是靠近還是偏離」。RKD 的 Loss 由兩部分組成距離關(guān)系損失Distance-wise Loss和角度關(guān)系損失Angle-wise Loss。距離關(guān)系損失定義為 Teacher 特征空間中樣本對歐氏距離的分布與 Student 特征空間中對應(yīng)距離分布的 KL 散度角度關(guān)系損失則是對三元組錨點、正樣本、負樣本構(gòu)成的角度做對齊。直接這么講有點抽象落到公式層面距離損失用的是 log 域的距離比$$ \psi_D(t_i, t_j) \frac{1}{1 \exp(|t_i - t_j|)} $$Student 側(cè)的對應(yīng)關(guān)系是 $\psi_D(s_i, s_j)$然后用 KL 散度讓這兩個分布逼近。角度損失類似取三元組的余弦相似度作為關(guān)系度量。這個設(shè)計有一個實際好處Student 和 Teacher 的最后一層特征維度不需要一致因為關(guān)系度量是在樣本對的幾何結(jié)構(gòu)上算的不是直接做張量對齊。這正好匹配 CoaTNet 和 ResNet 這種結(jié)構(gòu)差異很大的組合。2.2 為什么選 CoaTNet 當(dāng) Teacher位置編碼、粗粒度與細粒度特征的價值CoaTNet 是 Transformer 和卷積結(jié)合的混合結(jié)構(gòu)它有兩個特點對知識蒸餾特別有價值。第一是位置編碼CoaTNet 在自注意力中顯式建模了位置信息這讓它學(xué)到的特征天然帶有空間結(jié)構(gòu)而 ResNet 的卷積核雖然也有局部感受野但對長距離依賴的建模是隱式的、薄弱的。通過 RKD 把這種空間關(guān)系蒸餾給 ResNet等于給 ResNet 補上了它結(jié)構(gòu)上缺的那塊能力。第二是粗粒度到細粒度的層級特征CoaTNet 通過多個 stage 逐步從細粒度高分辨率小感受野過渡到粗粒度低分辨率大感受野并在每一層都做自注意力。這意味著它的特征空間里樣本間的關(guān)系在不同尺度下都有表達。RKD 如果只取最后一層特征做關(guān)系對齊會丟掉中間的粗粒度信息這是一個常見誤用——后面避坑章節(jié)會專門講。常見做法是在中間層也加上關(guān)系蒸餾的輔助 Loss比如取 CoaTNet 的 stage3 輸出和 ResNet 的 layer3 輸出做一組 RKD這樣 ResNet 才能在多個尺度上學(xué)到關(guān)系結(jié)構(gòu)。2.3 Teacher 選型的邊界不是所有強模型都適合做 RKD 的 Teacher這里要潑一盆冷水。RKD 對 Teacher 有一個隱藏要求Teacher 的特征空間必須是穩(wěn)定的、有區(qū)分度的。如果你拿一個還沒訓(xùn)練收斂的 CoaTNet 當(dāng) Teacher它的樣本間距離關(guān)系是亂的Student 學(xué)到的也是亂的關(guān)系。所以實際操作中一定要先確認 CoaTNet 的權(quán)重是充分訓(xùn)練過的預(yù)訓(xùn)練權(quán)重而不是隨機初始化或只訓(xùn)練了幾個 epoch 的半成品。另外Teacher 的輸入預(yù)處理必須和 Student 一致否則關(guān)系度量會失真。比如 CoaTNet 官方預(yù)訓(xùn)練權(quán)重通常要求 224x224 輸入歸一化參數(shù)是 ImageNet 的 mean/stdResNet 也一樣這一步看起來瑣碎但如果不統(tǒng)一前面所有 Loss 計算都是白費。我在實際項目中通常先用 ImageNet 的預(yù)訓(xùn)練權(quán)重各跑一次驗證集確認兩個模型的 baseline 精度都正常再開始蒸餾。2.4 最小可跑通的 RKD 損失實現(xiàn)前面講了一堆原理落到代碼上其實并不復(fù)雜。這里給出一個 PyTorch 實現(xiàn)的 RKD 損失函數(shù)包含距離損失和角度損失兩部分這是整個蒸餾方案的核心。先貼代碼后面的邏輯說明和參數(shù)說明比代碼更重要請仔細看。import torch import torch.nn as nn import torch.nn.functional as F class RKDLoss(nn.Module): RKD: Relational Knowledge Distillation 基于樣本對的距離關(guān)系和角度關(guān)系進行蒸餾 def __init__(self, w_dist25.0, w_angle50.0, temperature1.0): super(RKDLoss, self).__init__() self.w_dist w_dist self.w_angle w_angle self.temperature temperature def _distance_wise(self, feat): 計算樣本對之間的歸一化距離分布 輸入: feat [batch_size, feature_dim] 輸出: [batch_size, batch_size] 的距離關(guān)系矩陣 # 計算成對歐氏距離 # 這里用 (a-b)^2 a^2 b^2 - 2ab 展開避免顯式構(gòu)造 [B, B, D] 的大張量 feat_squared (feat ** 2).sum(dim1, keepdimTrue) # feat_squared: [B, 1]; 轉(zhuǎn)置后相加得到 [B, B] dist_sq feat_squared feat_squared.t() - 2.0 * torch.mm(feat, feat.t()) # 數(shù)值穩(wěn)定性保護對角線可能出現(xiàn)微小負數(shù) dist_sq torch.clamp(dist_sq, min0.0) dist torch.sqrt(dist_sq 1e-8) # 歸一化成概率分布用 log 域防止上溢 # temperature 控制分布的銳利程度越大分布越平緩 log_dist -dist / self.temperature log_dist log_dist - torch.logsumexp(log_dist, dim1, keepdimTrue) return log_dist def _angle_wise(self, feat): 計算三元組角度關(guān)系 feat: [batch_size, feature_dim] 返回: 以每個樣本為錨點的角度關(guān)系矩陣 # 歸一化特征向量使得余弦相似度可以直接用點積計算 feat_norm F.normalize(feat, p2, dim1) # 余弦相似度矩陣 [B, B] cos_sim torch.mm(feat_norm, feat_norm.t()) # 角度在 [0, pi] 范圍內(nèi)用反余弦得到角度值 angle torch.acos(torch.clamp(cos_sim, min-1.0, max1.0)) # 歸一化成概率分布 log_angle torch.log(angle 1e-8) # 加小常數(shù)防止 log(0) log_angle log_angle - torch.logsumexp(log_angle, dim1, keepdimTrue) return log_angle def forward(self, feat_student, feat_teacher): feat_student: Student 模型輸出的特征 [B, D_s] feat_teacher: Teacher 模型輸出的特征 [B, D_t] 注意: D_s 和 D_t 不需要一致這是 RKD 的重要特性 # 距離關(guān)系 Loss dist_s self._distance_wise(feat_student) dist_t self._distance_wise(feat_teacher) # KL 散度讓 Student 的距離分布逼近 Teacher 的 # 這里用 teacher 作為 targetstudent 作為 prediction loss_dist F.kl_div(dist_s, dist_t, reductionbatchmean) # 角度關(guān)系 Loss angle_s self._angle_wise(feat_student) angle_t self._angle_wise(feat_teacher) loss_angle F.kl_div(angle_s, angle_t, reductionbatchmean) total_loss self.w_dist * loss_dist self.w_angle * loss_angle return total_loss這段代碼里有幾個參數(shù)需要重點理解。temperature默認設(shè)為 1.0它控制距離分布的銳利程度。調(diào)大溫度會讓分布更平緩Student 學(xué)到的關(guān)系更「模糊」適合特征空間本身噪聲比較大的情況調(diào)小會讓分布更尖銳對齊要求更嚴格但容易過擬合到 Teacher 的細節(jié)噪聲上。w_dist和w_angle是兩個損失的權(quán)重RKD 原論文的默認配置是 25 和 50但這個值跟數(shù)據(jù)集和模型結(jié)構(gòu)強相關(guān)后面避坑章節(jié)會給出調(diào)權(quán)重的方法論。代碼里有個細節(jié)值得注意距離計算用feat_squared feat_squared.t() - 2.0 * mm(feat, feat.t())展開而不是直接構(gòu)造[B, B, D]的三維張量因為 batch size 為 64 時三維張量會占用 64642048 個浮點數(shù)約 67MB 顯存展開式只需要[B, B]的矩陣省了一個數(shù)量級。這就是那種「看起來一樣、跑起來差很多」的優(yōu)化點。3. 數(shù)據(jù)準備與模型初始化跑通蒸餾的前提條件3.1 數(shù)據(jù)集加載shuffle 和 sampler 是關(guān)系蒸餾的命門傳統(tǒng) KD 對樣本順序不敏感因為每個樣本獨立計算 Loss。但 RKD 是在一個 batch 內(nèi)計算樣本間關(guān)系的同一個 batch 里樣本的構(gòu)成方式會直接影響 Loss 的含義和訓(xùn)練穩(wěn)定性。這里有一個關(guān)鍵決策如果用的是隨機采樣一個 batch 里的樣本可能是 64 個完全不同的類別也可能是高度相似的子類這會引入很大的方差。我一般建議用Class-balanced Sampler或至少保證每個 batch 里有一定數(shù)量的同類樣本。原因是 RKD 的角度關(guān)系在三元組同類正對 異類負對上信息量最大。如果 batch 里全是不同類別角度關(guān)系基本全是「不相似」Student 能學(xué)到的結(jié)構(gòu)信息就很單調(diào)如果 batch 里全是同一類角度關(guān)系又會退化成噪聲。一個實用的配置是 batch size 設(shè)為 64 或 128每個類別在每個 batch 出現(xiàn) 2 到 4 個樣本這樣同類和異類的關(guān)系都能被建模到。PyTorch 里用torch.utils.data.WeightedRandomSampler就能做到配合drop_lastTrue具體做法是先統(tǒng)計每個類別的樣本數(shù)然后按類別逆頻率采樣這樣每個 batch 的類別分布是均勻的。另外一個容易踩的坑是DataLoader 的shuffle參數(shù)和 Sampler 不能同時設(shè)置否則 PyTorch 會直接報錯。如果你用了 WeightedRandomSamplershuffle必須設(shè)為False因為 Sampler 內(nèi)部已經(jīng)實現(xiàn)了打亂邏輯。這個錯誤不是編譯期報錯是運行時崩而且崩得毫無預(yù)兆很多人在第一次跑 RKD 時都會被這個卡一下。3.2 CoaTNet 加載預(yù)訓(xùn)練權(quán)重、特征層提取與凍結(jié)策略CoaTNet 的官方實現(xiàn)是基于 timm 庫的加載方式很直接。這里有一個細節(jié)CoaTNet 的forward_features返回的是一個特征列表每個元素對應(yīng)一個 stage 的輸出。在 RKD 里你需要決定取哪一層作為特征計算 RKD Loss。第一版方案建議只取最后一層跑通之后再加中間層這是最穩(wěn)妥的路徑。import timm import torch.nn as nn def load_teacher(): 加載 CoaTNet 作為 Teacher 模型 返回: 提取指定層特征的模型包裝器 # 使用 timm 加載 CoaTNet-Lite 系列的預(yù)訓(xùn)練模型 # model_name 可選: coatnet_0_rw_224, coatnet_1_rw_224, coatnet_2_rw_224 teacher timm.create_model( coatnet_0_rw_224, pretrainedTrue, num_classes1000 # 保留 ImageNet 原始分類頭 ) # 凍結(jié)所有參數(shù)Teacher 在蒸餾過程中不更新 for param in teacher.parameters(): param.requires_grad False # 切換到 eval 模式讓 BatchNorm 的行為保持為推理模式 teacher.eval() # 提取最后一個 stage 的特征 # coatnet_0 的 forward_features 返回 [stage1, stage2, stage3, stage4] # 每個 stage 輸出形狀不同最后一個通常是 [B, 1024, 7, 7] 左右 def forward_features_fn(x): feats teacher.forward_features(x) # 列表 return feats[-1] # 取最后一個 stage # 包裝 forward 方法使 teacher(input) 直接返回特征 teacher.forward forward_features_fn return teacher這段代碼里有三個決策點要說明。第一是模型選擇coatnet_0_rw_224是最小的 CoaTNet 變體參數(shù)量約 1100 萬比 ResNet-50 的 2500 萬還小但它的表達能力更強作為 Teacher 對顯存壓力小。如果你顯存充??梢該Qcoatnet_2_rw_224效果會更好代價是訓(xùn)練速度下降 30% 左右。第二是凍結(jié)策略Teacher 在蒸餾過程中必須完全凍結(jié)requires_grad False和eval()缺一不可——前者防止梯度計算浪費顯存后者防止 BatchNorm 在訓(xùn)練模式下更新 running mean/var導(dǎo)致 Teacher 的輸出在訓(xùn)練過程中漂移。這兩步是新手最容易漏的漏掉任何一個都會導(dǎo)致蒸餾效果詭異。第三是forward重寫注意不能直接改模型內(nèi)部結(jié)構(gòu)而是重新綁定teacher.forward方法這樣teacher(input)返回的就是特征而不是分類 logits后續(xù)計算 RKD Loss 時不需要額外調(diào)forward_features代碼更干凈。3.3 ResNet 加載凍結(jié) stage1 到 stage3只更新高層Student 這邊的策略和 Teacher 完全相反。ResNet 的底層特征邊緣、紋理是通用的不需要蒸餾也能學(xué)到真正需要從 Teacher 遷移的是高層語義關(guān)系和空間結(jié)構(gòu)。因此常見的做法是凍結(jié) ResNet 的前幾個 stage只更新最后的 stage 和分類頭。這能大幅減少可訓(xùn)練參數(shù)量讓優(yōu)化更穩(wěn)同時也是一種正則化——防止 Student 在蒸餾過程中把底層特征學(xué)壞。import torchvision.models as models def load_student_with_frozen_stages(): 加載 ResNet-50 作為 Student凍結(jié)前三個 stage 返回: model, 需要傳入優(yōu)化器的參數(shù)列表 # 使用 torchvision 加載 ResNet-50 預(yù)訓(xùn)練權(quán)重 # 注意: 蒸餾場景下 Student 同樣使用預(yù)訓(xùn)練權(quán)重而不是隨機初始化 # 從隨機初始化開始蒸餾效果通常比預(yù)訓(xùn)練差 3%-5% student models.resnet50(weightsmodels.ResNet50_Weights.IMAGENET1K_V1) # 凍結(jié)前三個 stage: conv1, bn1, layer1, layer2 # ResNet 的 stage 劃分: # conv1bn1relumaxpool: stem # layer1: stage2 (64 通道) # layer2: stage3 (128 通道) # layer3: stage4 (256 通道) # layer4: stage5 (512 通道) frozen_layers [student.conv1, student.bn1, student.layer1, student.layer2] for layer in frozen_layers: for param in layer.parameters(): param.requires_grad False # 收集可訓(xùn)練參數(shù), 供優(yōu)化器使用 trainable_params [ p for p in student.parameters() if p.requires_grad ] # 移除原始分類頭留出位置給適配層 # RKD 特征對齊不依賴分類頭的維度但分類頭需要后續(xù)替換成目標類別數(shù) # 這里保留原始 fc在訓(xùn)練循環(huán)里我們使用 layer4 的輸出做 RKD student.fc nn.Identity() # 移除 fc特征直接來自 layer4 輸出 return student, trainable_params這里有個重要的設(shè)計問題ResNet 的layer4輸出是[B, 2048, 7, 7]的空間特征圖而 CoaTNet 的最后一個 stage 輸出也是[B, C, 7, 7]的格式。但 RKD 的距離和角度計算要求輸入是[B, D]的向量所以在計算 Loss 前需要對特征做空間池化。推薦使用自適應(yīng)平均池化AdaptiveAvgPool2d(1)把空間維度壓成 1x1而不是 Flatten因為 Flatten 會把空間鄰居關(guān)系也帶進距離計算本質(zhì)上是引入了位置偏差會干擾關(guān)系蒸餾的效果。這個細節(jié)在避坑章節(jié)里會再次出現(xiàn)。另一個決策是Student 用nn.Identity()替換fc之后分類 Loss 怎么算常見做法是在layer4池化后的特征上再接一個臨時分類頭蒸餾結(jié)束后再換成目標分類頭做評估。但更簡潔的做法是蒸餾階段完全不訓(xùn)分類頭只訓(xùn)特征先用假分類頭跑通正式實驗時再微調(diào)分類頭。理由在 2.1 節(jié)講過RKD 關(guān)心的是關(guān)系結(jié)構(gòu)分類頭在這里是干擾項會讓 Student 去優(yōu)化 class boundary 而不是關(guān)系分布。4. 蒸餾訓(xùn)練主循環(huán)線上跑的完整方案與參數(shù)調(diào)優(yōu)4.1 訓(xùn)練循環(huán)的標準實現(xiàn)Teacher 推理與 Student 更新的異步流程整個訓(xùn)練流程的核心矛盾是Teacher 需要前向計算特征但這個計算不需要梯度Student 需要前向 反向計算圖必須保留。如果在一個循環(huán)里同步算兩者會把 Teacher 的前向也掛在 Student 的計算圖上造成不必要的顯存占用。常見做法是先批量算完 Teacher 特征再進入 Student 的更新循環(huán)把 Teacher 的特征緩存下來復(fù)用。下面是完整的訓(xùn)練循環(huán)實現(xiàn)def train_one_epoch(student, teacher, dataloader, optimizer, rkd_loss, device, epoch): 一個 epoch 的 RKD 蒸餾訓(xùn)練流程 核心思路: Teacher 特征批量緩存, Student 分批更新 student.train() teacher.eval() # Teacher 永遠在 eval 模式 total_rkd_loss 0.0 total_cls_loss 0.0 num_batches 0 for batch_idx, (images, labels) in enumerate(dataloader): images images.to(device) labels labels.to(device) # 第一步: 用 Teacher 計算特征, 不記錄梯度 # 這里把整個 batch 的 Teacher 特征算出來, 后續(xù) Student 更新時直接用 with torch.no_grad(): teacher_feat teacher(images) # [B, C_t, H, W] teacher_feat F.adaptive_avg_pool2d(teacher_feat, 1).squeeze(-1).squeeze(-1) # teacher_feat 現(xiàn)在是 [B, C_t] 的向量形式 # 第二步: Student 前向 反向 student_feat student(images) # [B, 2048, 7, 7] student_feat F.adaptive_avg_pool2d(student_feat, 1).squeeze(-1).squeeze(-1) # 這里不能用 Flatten, 要用池化, 原因見避坑章節(jié) # 計算 RKD Loss loss_rkd rkd_loss(student_feat, teacher_feat) # 可選: 加上分類 Loss 作為輔助 # 如果加分類 Loss, 需要在 student 后面接一個臨時分類頭 # 這里先不接, 純蒸餾 loss loss_rkd # 反向傳播與更新 optimizer.zero_grad() loss.backward() optimizer.step() total_rkd_loss loss_rkd.item() num_batches 1 if batch_idx % 20 0: print(fEpoch {epoch} | Batch {batch_idx} | RKD Loss: {loss_rkd.item():.4f} | fTeacher Feat Norm: {teacher_feat.norm().item():.2f} | fStudent Feat Norm: {student_feat.norm().item():.2f}) avg_loss total_rkd_loss / num_batches return avg_loss這個循環(huán)里有一個非常容易被忽略的細節(jié)student_feat和teacher_feat都必須經(jīng)過adaptive_avg_pool2d壓縮成向量才能送進 RKD Loss。如果忘記池化RKD Loss 會作用在 7x7 的空間特征圖上距離計算會包含空間位置信息——這聽起來像是「讓 Student 學(xué)空間關(guān)系」但實際上有兩個問題一是 49 個位置的樣本對組合會讓 batch 內(nèi)的關(guān)系計算量爆炸batch64 時就是 64*49 ≈ 3136 個虛擬樣本點二是不同空間位置的特征分布差異很大直接混合計算距離會把位置差異和樣本差異混在一起Student 學(xué)到的關(guān)系是扭曲的。另一個值得說的是 Teacher 特征緩存。上面的代碼是每個 batch 都實時算 Teacher 特征這樣最簡單也最準確但 Teacher 的前向占用了一次顯存峰值。如果 Teacher 是coatnet_2_rw_224這種大模型顯存吃緊時可以在每個 epoch 開始前把所有訓(xùn)練集過一遍 Teacher把所有特征存成npy或內(nèi)存張量訓(xùn)練時直接索引。這樣做的代價是存儲空間一個 epoch 的 ImageNet 特征大概需要 50GB 內(nèi)存100 萬張圖 * 1024 維 * 4 字節(jié)一般開發(fā)機扛不住。所以實踐中更常見的是像上面這樣實時計算但把 Teacher 的前向放到no_grad塊里并且先把 Teacher 放到eval()模式這兩步是顯存優(yōu)化的根本保障——BatchNorm 在訓(xùn)練模式下會保存中間變量用于反向eval()模式直接跳過了這一層保存。4.2 優(yōu)化器與學(xué)習(xí)率為什么 Adam 比 SGD 更適合 RKDRKD 的 Loss 形態(tài)和傳統(tǒng)分類 Loss 差異很大。分類 Loss 的梯度通常集中在分類邊界附近的樣本上而 RKD 的梯度是分布在整個 batch 的關(guān)系矩陣上的這意味著每個樣本都會對梯度有貢獻而且貢獻的尺度取決于它在關(guān)系結(jié)構(gòu)中的位置。SGD 在這種場景下容易震蕩因為關(guān)系矩陣的梯度方差大。我一般用 AdamW初始學(xué)習(xí)率 1e-4 到 3e-4weight decay 設(shè) 1e-4。import torch.optim as optim def build_optimizer(student, trainable_params): 為 Student 構(gòu)建 AdamW 優(yōu)化器 關(guān)鍵參數(shù)說明: lr: 1e-4 ~ 3e-4, 比常規(guī)分類訓(xùn)練低一個數(shù)量級 betas: (0.9, 0.999) 是 Adam 系列默認配置, 通常不需要改 weight_decay: 1e-4 正則化, 防止 Student 特征空間過度膨脹 optimizer optim.AdamW( trainable_params, lr2e-4, betas(0.9, 0.999), eps1e-8, weight_decay1e-4 ) # 學(xué)習(xí)率調(diào)度: 線性 warmup 余弦退火 # warmup 步數(shù)設(shè)為總步數(shù)的 5%, 避免初始階段關(guān)系 Loss 的劇烈波動把特征空間打亂 total_steps 10000 # 根據(jù)實際訓(xùn)練步數(shù)調(diào)整 warmup_steps int(total_steps * 0.05) def lr_lambda(current_step): if current_step warmup_steps: # 線性 warmup: 從 0 漲到 1 return float(current_step) / float(max(1.0, warmup_steps)) # 余弦退火: 從 1 降到 0.01 progress float(current_step - warmup_steps) / float(max(1.0, total_steps - warmup_steps)) return 0.01 0.99 * 0.5 * (1.0 __import__(math).cos(3.1415926 * progress)) scheduler optim.lr_scheduler.LambdaLR(optimizer, lr_lambda) return optimizer, scheduler這里要強調(diào)一個反直覺的點學(xué)習(xí)率不能大。很多從分類任務(wù)轉(zhuǎn)過來的工程師習(xí)慣性地設(shè) 1e-3跑 RKD 直接發(fā)散。原因在于 RKD 中的距離關(guān)系 Loss 是 KL 散度它的梯度對特征空間的尺度敏感——如果 Student 的特征范數(shù)在訓(xùn)練初期劇烈變化距離分布的斜率會非常大梯度瞬間爆炸。AdamW 的適應(yīng)性學(xué)習(xí)率雖然能緩解但解決不了初始震蕩還是得靠 warmup 低學(xué)習(xí)率把特征空間穩(wěn)住。另一個隱藏細節(jié)是weight_decay的限制。AdamW 的weight_decay是解耦的只作用在參數(shù)更新時減去一個衰減項不進入梯度計算。這個設(shè)置在 RKD 場景下有個好處它不會干擾距離關(guān)系的梯度只會緩慢地把 Student 特征往原點拉防止特征范數(shù)無限增長。如果換成帶動量的 SGD L2 正則L2 會直接進入梯度計算與 RKD 的距離梯度產(chǎn)生耦合容易讓特征空間的形變方向錯亂。所以優(yōu)化器選型上 AdamW 是首選SGD 黨建議先跑通再說。4.3 三個必調(diào)參數(shù)的溫度、損失權(quán)重組合RKD 有三個權(quán)重參數(shù)需要調(diào)節(jié)分別是溫度temperature、距離權(quán)重w_dist、角度權(quán)重w_angle。它們的作用方式和調(diào)節(jié)方向完全不同下面用一張表格把邊界條件列清楚方便對照調(diào)試參數(shù)默認值調(diào)大 effect調(diào)小 effect適用場景temperature1.0分布更平滑關(guān)系對齊更寬松梯度更溫和分布更尖銳對齊更嚴格梯度更大特征噪聲大時調(diào)大Teacher 很強時調(diào)小w_dist25.0強化距離關(guān)系約束Student 特征尺度更貼近 Teacher弱化距離約束特征尺度自由度更大距離關(guān)系更可靠時調(diào)大尺度過擬合時調(diào)小w_angle50.0強化角度關(guān)系約束樣本方向關(guān)系更精確弱化角度約束方向容錯更大類別多、樣本在特征空間中方向差異大時調(diào)大這個表格里最有誤導(dǎo)性的是w_angle很多人以為它權(quán)重越大越好但實際經(jīng)驗是當(dāng) batch 內(nèi)類別數(shù)較多時角度關(guān)系的信息量會下降因為不同類別間的角度差異趨同都接近 90 度此時調(diào)大w_angle只會放大噪聲。更合理的做法是把w_angle的默認權(quán)重從 50 降到 20-30同時把w_dist提到 40-60。這個比例反轉(zhuǎn)在 CIFAR-100 和 ImageNet 子集上都驗證過精度能提升 0.5-1 個點。溫度的調(diào)節(jié)邏輯也不復(fù)雜跑日志時觀察 RKD Loss 的下降曲線如果前 500 步 Loss 波動超過 30%說明溫度太低分布太尖銳需要從 1.0 調(diào)到 1.5 或 2.0。反過來如果 Loss 下降緩慢且 Student 特征范數(shù)離 Teacher 越來越遠說明溫度太高關(guān)系約束太弱需要調(diào)回 0.8 或 0.7。具體調(diào)參時優(yōu)先調(diào)溫度然后調(diào)w_dist最后才碰w_angle因為前兩個影響的是整體 Loss 的 scale第三個影響的是 Loss 的形狀形狀錯了再調(diào) scale 也是白費。5. 避坑指南RKD CoaTNet 蒸餾常見問題與排查5.1 訓(xùn)練 Loss 下降但精度不漲特征空間對齊了分類邊界沒對齊這是一個非常隱蔽的坑?,F(xiàn)象是 RKD Loss 很漂亮地下降到 0.5 以下但驗證集精度紋絲不動甚至比蒸餾前還低。原因是 Student 的特征空間在關(guān)系上對齊了 Teacher但RKD 并不保證分類邊界也對齊——兩個特征空間可以有相同的樣本間距離和角度關(guān)系但類的絕對位置完全不同。解決這個問題的方法是在訓(xùn)練后期加入分類 Loss 作為細調(diào)手段用 Student 池化后的特征接一個線性分類頭用交叉熵 Loss 和 RKD Loss 聯(lián)合優(yōu)化。常見的做法是前 80% 的訓(xùn)練步數(shù)只跑 RKD后 20% 加分類 Loss權(quán)重設(shè)為 0.5 到 1.0。這個「先蒸餾關(guān)系、再綁定分類」的兩階段策略實測比全程聯(lián)合訓(xùn)練效果好因為前半程特征空間在自由地做剛體變換后半程才需要鎖定到類別上去。5.2 Student 特征范數(shù)持續(xù)膨脹Loss 不收斂距離 Loss 與尺度脫鉤了現(xiàn)象是訓(xùn)練過程中 Student 特征的 L2 范數(shù)從 10 漲到 100 甚至 1000RKD Loss 居高不下。原因是距離 Loss 用的是 KL 散度它只對齊距離的分布形狀不對齊絕對尺度——Student 的特征可以整體縮放而不改變 KL 散度但縮放會導(dǎo)致梯度方向不穩(wěn)定。解決方法是加入一個特征范數(shù)約束讓 Student 特征范數(shù)向 Teacher 的看齊。常見做法是額外加一項 MSE Loss# 在訓(xùn)練循環(huán)中加入范數(shù)對齊 Loss feat_norm_loss F.mse_loss( student_feat.norm(dim1), teacher_feat.norm(dim1) ) # 權(quán)重設(shè)為 0.1 左右, 太大會干擾 RKD 主 Loss loss loss_rkd 0.1 * feat_norm_loss這個范數(shù) Loss 的作用是給特征空間加一個「錨」防止 Student 的特征尺度漂移。如果你發(fā)現(xiàn)加了之后 RKD Loss 反而上升說明feat_norm_loss的權(quán)重太大了特征尺度被強行拉到和 Teacher 一致而兩者的結(jié)構(gòu)本來就有差異。調(diào)成 0.05 或 0.01 即可。5.3 batch size 太小導(dǎo)致關(guān)系信息稀疏Loss 正常但梯度噪聲大現(xiàn)象是 loss 曲線折線感很強epoch 間波動大但整體趨勢沒有明顯下降。原因是 RKD 的關(guān)系計算基于 batch 內(nèi)部樣本對batch 越小關(guān)系矩陣越稀疏噪聲越大。特別是 batch size 小于 32 時關(guān)系矩陣里能提供有效信息的樣本對太少梯度方向近似隨機。解決方法是保證 batch size 至少 64如果你的顯存不夠可以改用梯度累積——把 4 個 16 的 batch 累積成 64 的效果但要注意關(guān)系 Loss 仍然是在每個小 batch 內(nèi)計算的累積梯度只能緩解優(yōu)化器層面的噪聲不能補全關(guān)系信息。更激進的做法是修改 Loss 計算方式用動量隊列緩存歷史特征參與當(dāng)前 batch 的關(guān)系計算也就是把 RKD 改造成對比學(xué)習(xí)那種 memory bank 的思路但這已經(jīng)超出原項目的范圍這里只提一句作為進階方向。5.4 CoaTNet 輸入尺寸與 ResNet 不一致位置編碼特征完全錯位現(xiàn)象是蒸餾 Loss 能下降但 Student 在驗證集上的精度比隨機初始化還差。原因是 CoaTNet 的位置編碼對輸入尺寸敏感224x224 和 256x256 輸入會生成完全不同的位置編碼序列。如果你的 Teacher 用了 256 輸入比如 CIFAR-10 常用的 32x32 需要 resize 到 256而 Student 用的是 224兩者的空間特征的對齊關(guān)系從一開始就是錯的。這個坑非常隱蔽因為在代碼層面完全不會報錯只在精度上暴露。排查方法是在訓(xùn)練前打印 Teacher 和 Student 各自特征圖的空間分辨率確認它們一致。解決方法是統(tǒng)一輸入尺寸并且用 Teacher 預(yù)訓(xùn)練權(quán)重聲明時的原始尺寸盡量不要自創(chuàng)尺寸。5.5 torchvision 預(yù)訓(xùn)練模型的歸一化參數(shù)未被重置現(xiàn)象是蒸餾前先單獨評估 Student baseline發(fā)現(xiàn)精度和官方宣稱的差很多。原因是 torchvision 的 ResNet 預(yù)訓(xùn)練權(quán)重要求輸入按mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]歸一化而 timm 的 CoaTNet 權(quán)重也是同樣的歸一化參數(shù)兩者一致時通常不會出問題。但如果你用了自己的數(shù)據(jù)集直接沿用了別的項目的歸一化參數(shù)比如 mean0.5, std0.5那么 Teacher 和 Student 的輸入空間都不一樣了蒸餾從一開始就在對齊兩個不同輸入域下的特征。這個坑的排查很容易評估一下 Teacher 的 top-1 精度如果遠低于官方報告值幾乎可以斷定是歸一化參數(shù)錯了。解決方法是統(tǒng)一使用 ImageNet 歸一化并且確認 DataLoader 里 transform 順序是resize - normalize - tensor很多人寫成normalize - resize這個順序反了的話歸一化是在像素坐標上做的效果完全不對。6. 驗證蒸餾效果的三個技巧與進階方向蒸餾跑完之后怎么確認 RKD 真正起作用了而不是過擬合到了 Teacher 的特征上單純看驗證集精度不夠因為精度可能來自 Student 原有的預(yù)訓(xùn)練能力和蒸餾無關(guān)。我常用的驗證方法是中間層特征對齊度評測取 Student 的layer3輸出和 Teacher 的stage3輸出各算一次 RKD Loss。如果這個 Loss 在訓(xùn)練前后下降明顯說明中間層的關(guān)系結(jié)構(gòu)確實發(fā)生了遷移如果只下降了 5% 以內(nèi)說明蒸餾主要影響的是最后一層中間層的結(jié)構(gòu)沒有學(xué)到。這個指標比最終精度更早地暴露問題可以在訓(xùn)練過程中就監(jiān)控。另一個實用技巧是數(shù)據(jù)增廣擾動測試對同一張輸入圖像做 10 種不同的隨機裁剪分別過 Teacher 和 Student計算 Student 特征空間里這些擾動樣本的分布散度。如果蒸餾成功Student 的擾動特征應(yīng)該比蒸餾前更緊湊——因為 Teacher 的注意力機制對輕微擾動不敏感RKD 把這個不敏感性遷移給了 Student。這個測試能直觀地看到蒸餾帶來的泛化能力提升而且完全可以在驗證集上離線做成本極低。最后一個進階方向是多 teacher 蒸餾取 CoaTNet 的stage2、stage3、stage4三層的特征分別與 ResNet 的layer2、layer3、layer4做 RKD每層的 Loss 用不同的權(quán)重。這樣蒸餾的信息量遠超單層關(guān)系但調(diào)參難度也指數(shù)上升。我的經(jīng)驗是只對每層的 Loss 做簡單加權(quán)從深到淺權(quán)重遞減比如 0.7、0.5、0.3不引入額外的自適應(yīng)權(quán)重先用跑通再逐步優(yōu)化。我在實際項目中踩過最深的坑是忘記給 Student 做 warmup直接用 2e-4 的學(xué)習(xí)率開訓(xùn)RKD Loss 前 200 步抖到飛起最后花了三個 epoch 才穩(wěn)住特征空間。所以你如果第一次跑強烈建議把 warmup_steps 設(shè)到總步數(shù)的 10%寧可多花一點時間在預(yù)熱上也比后面花三倍時間找回特征空間強。這個方案值得做關(guān)鍵是控制好 batch size 和家長里短那幾個權(quán)重別一上來就追求完美先跑通再調(diào)優(yōu)。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
狠狠爱综合| 日本免费一级AAA大片器| www.大香| 九久久九九久视频| 精品四五区| 呦呦一区| 国产精品97超碰| 美国美女AV在线| 91丨人妻丨国产丨丝袜| 欧美在线55555| 亚洲成aⅴ人片不卡无码| 艹我哪美一区无码| 国产精品视频一区二区三区八戒| 亚洲色图第一页| 午夜免费福利视频一区| 日韩国产精品人妻无码久久久| 五月天婷婷欧美三区| 加勒比综合网| 97超碰这里只有精品| 天天日天天色| 日韩激情啪啪| 9久久久久| 亚洲天堂人人妻| 睡产熟女乱伦| 日韩欧美亚洲国产日韩| 人人贴人人摸| 中文乱码字字幕在线第5页| 四虎免费看黄| 欧美无圣光在线| 成人午夜视频免费播放| 久久久久亚洲AV无码专区少妇| 久久久久幕乱码| 久久超碰免费的| 91狠狠综合久久| 亚洲精品国产专区在线观看| 亚洲欧美首页| 天天爱天天操| 78久久| 日日夜夜模| 日韩在线97| 久久免费看高潮毛片韩国| 久操操| 精品网站99999| 国产传媒午夜理伦精品| 五月婷婷丁香六月| 狠狠操狠狠插| 欧美综合骚| 大香蕉久久| 1956日韩精品| 亚洲91网站| 97热视频在线观看| 欧美亚洲天天| 久久久久亚洲| 日欧操屄| 久久免费精品视频免一| 久久五月天婷婷| 九九色热| 97视频在| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 久热精品在线国产| 国产精品盗摄 偷窥盗摄| 久久精品91| 蜜桃臀av一区二区| 啊啊啊啊啊好多水| se吧提供91精品国产91久久久久久 | 中文字幕高清精品一区| 黄色区免费观看中文字幕| 日韩人妻免费精品| 艳美熟妇先锋一二三区| 色女免费在线观看视频网址| 少妇精品久久| 亚洲啪啪性视频| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 国产极品999| 精品国产三级av韩国在线 | 变态综合色| av中亚| 91伊人久| 美女露胸露屁股| 麻豆国产av网| 亚洲图片另类| 丁香五月天堂| 18禁久久| 亚洲国产一区二区三区四区国产| 中文字日本乱码| 激情文学亚洲| 加勒比久久综合网高清| 伊人一区二区三区| 日本成人A片网站| www色色com| 九九热午夜欧亚国产视频| 日本一区不卡| 久久婷婷色综合一区二区三区| 美女网站黄页| 亚洲AV无码国产精品久久久久| 国产视频小说| 午夜精品久久久久久久99蜜桃一| 懂色av中文字幕一区二区三区天美| 秋霞网无码| 国产精品一二三区福利| 淫荡网址| 99热超碰| 在线午夜成人无码视频| 情色五月天久久久| 日本www操操操| 日日AAvv| 丁香五月天啪啪| ?亚洲伊人伊成久久人综合网| 久久最新视频免费观看| caoni国产亚洲av| 久久久一区二区| 久热91| 啪啪啪男女亚洲中文字幕99| 亚洲欧美激情另类色图| 天天操人人操狠狠插| 超碰伊人在线| 久久婷婷在线观看视频| 国产尤物AV尤物在线观看不卡 | 色伊人91| 久/久精品99看9| 国产99999久久精品| 午夜福利成人免费视频| 欧美性暴力| 樱花草社区www中国| 久久九九国产精品| 久久久熟女一区| 色网在线视频观看免费| 国产400孕妇孕交群| 国产精品人妻熟女aⅴ| 91美女视频。| 好屌色综合| 青青草天天亲夜夜操网| 婷婷爽人人婷婷爽视频| 丝袜狂射91| 久久久av爱| 免费一级毛片在线视频观看| 性暴力欧美猛交在线直播| 在线中文字幕视频| nuu12国产麻豆精品| 青青草日本无码| 精品四五区| 亚洲另类小说卡通动漫| 国产又粗又长的视频| 97精品国产97久久久久久户外免费| 国语av最新自产拍在线观看| 青娱乐国产精品| 亚洲国产尤物yw在线观看| 国产二区三区免费视频| 人人搞人人插人人操| 日韩一卡二卡三卡| 色欲天天综合久久久无码网中文| 97手机日韩| 97神马久久| 91精品人妻| 亚洲97| 东北毛片| 国产精品亚洲天堂网址| 男女激烈网站最新| 好属操| 国产亚洲日韩欧| 日本不卡高清视频| 日本高清视频xxxx| 国产精品岛国片在线观看| 91精品人妻| 伊人网在线点播| 国产色图乱伦| 国产69精品久久久久99尤物| 日韩人妻资源在线看| 麻豆黄色五月天| 色综合超碰超| 人妻精品视频一区二区三区| 操逼逼福利视频| 无码日韩人妻av一| 色穴精品| 中文字幕一区二区无码成人| 亚洲av无码成电影在线播放| 国产精品黑人一区二区三区| 亚洲激情深爱文学小说网站| 91日产欧美| 超碰色图| 国产日韩欧美三级片| 亚洲免费人妻在| 色av中文字幕| 电家庭影院午夜69久久夜色精品国产69乱 | 国产无码三级视频在线观看| 一本久久精品中文字| 亚洲熟妇白浆无码AV| 亚洲密乳AV| 五月丁香六月婷| 99热日| 国产福利电影| 91久久堂| 中国国国产一级特黄毛片| 超碰97资源大奶| 国产强奸AV在线| 1024亚洲中文字幕久在线看片你懂的 | 亚洲精品99999| 日本三级韩三级99久久| 久久国产精品视频| 超碰99在线观看| 综合亚洲欧美| 好吊色在线观看| 丝袜美腿亚洲| 91天堂视频| 99久久久久久亚洲精品不卡| 日本一片一区| 殴美大黄片| 超碰久超碰久| 91久青| 日韩欧无码一区二区三区免费不卡| www.av在线观看| 丁香五月天堂网| 人人澡人人干| 国产亚洲在线观看| 99re热有精品视频国产| 亚洲国产熟妇综合色专区| 色欲天天综合网| 国产后入清纯| 日本免费一区二| 人人操人人色人人摸| 北京美女一区二区| 久久91视频| 97天天日| 91青青| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 久热这里只有精品9| 麻豆AV96熟妇人妻| 亚欧性爱ab| 美国日韩黄片| 91在线欧美| 日日日日做夜夜夜夜做无码97| 韩国久久97| 亚洲欧综合另类无码一区| 七月丁香婷婷| 丰满人妻一区二区三区| 国内精品久9| 久久超碰、| 欧美另类色图片| 丝袜熟女一区二区三区| 手机在线视频国内精品| 国产兽交视频在线播放| 九九热AV| 国产91 丝袜在线播放| 国内精品久9| 欧美日本久久精品一区| 四虎午夜影院| 天天日夜夜| 一起草AV| 日本精品第一视频在'| 影音先锋每日最新资源在线观看| 无码人妻精品一区二区三区九九| 乱老熟女一区二区三区| 中日韩久久人妻一区二区| 欧美制服网站美腿丝袜| 精品成人动漫一区二区| 国产网站在线播放| 亚洲成人无码影院| 日本性爱不卡视频| 97干在线视频| 欧美成人9797| 在线亚洲丝袜视频网站| 啊操爽品善一区二区三区| 欧美日韩精品久久| 96一区二区三区| 97超碰站| 大香蕉黄色一区| 99热婷婷| 夜夜嗨绯色| 熟妇人妻丰满久久久久久久无码 | 欧美熟女逼久久久久久| 日韩三级av片| 国产福利小视频高清在线观看| 国产午夜无码片在线观看影视| 狠狠色婷婷7777久| 日本新免费二区三区| 青草园大香蕉| 亚洲无码精品AV久久久| 激情五月综合网| 天天天天天天天天综合| 91欧美色| 超碰狠狠操| 嗯嗯啊好大| 国产精品96久久久久久| 欧美色视频在线| 欧美在线播放| 欧美亚洲综合色| 91九色丰满高潮| 日韩成人性日韩成人性爱视频在线免费观看| 丰满人妻无码一区二区三区| 精品熟女一区=区三区| 殴美色网| 另类综合另类| 午夜性刺激视频免费观看| 熟女色综合久久| 神马久久69| 中国操逼无码| 九九热超碰97亚洲最新香蕉| 综合久久97| 99热在线观看| 色婷婷国产精品一区在线观看| 欧美顶级黄色大片免费| 91青青在线视频| 日韩人妻中文视频| 中文字幕黄色一起草| www.国产高潮精品| 亚洲欧洲综合| 国产高清成人传媒影视| 久久精品无码专区| 国产精品久久久久久久久AV大片| 超碰吊日色| 久久久婷| 亚洲一区操| 欧美A√综合网 | 精品一区二区啪啪啪| 欧美激情专区| 97视频在线视频| 91粉嫩萝控精品福利网站_精品影音先锋国 | 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久久成人东京热人妻| 久草免费在线一区二区| 91bbb| 日本日皮视频逼| 啊啊啊免费视频| 日韩一性一交一A片俄罗斯| 成人热久久精品| 强奸乱伦亚洲第一页| 99啪啪| 26UUU欧美激情一区二区| 午夜毛片高清免费不卡| 久久久久国产精品片区无码直播| 欧日韩一二三f区| 99只有精品| 2021国产成人精品久久| 日本A级视频| 思思热影视| 日本亚洲嫩草影院啪啪| 97超碰无码网| 欧美日韩国产色图在线| 国产精品粉嫩福利在线| 色婷婷六月| 天天做天天爱| 亚洲妇色| 乱论91| 夜夜嗨老熟女AV一区二区三区| 26uuu国产| 97超碰色色| 麻豆黄色五月天| 日本熟女免费視颖| 综合视频91| 美国aaaaa一级黄片| 国产9熟妇视频网站| 中文伊人大香蕉视频| 亚洲欧洲日韩天堂av| 亚洲日韩资源| 91伊人影视综合| 日韩性爱小视频在线观看| 国产精品熟女一区二区三区| a片亚洲一本通视频| 亚洲,欧美,春色,另类| 国产二区视频在线观看电影| 日韩肏逼视频| 婷婷激情丁香| 精品二区三四区五电影| 国产丰满熟夫69mpp| 婷婷中文字幕| 亚洲天堂 视频你懂的| 久久欲| 欧美亚洲综合高清在线| 亚春色色| 人妻丰满熟妇av无码区蜜桃| 物业黑人 AV一区| 后入 亚洲 美女 射| 日本国产高清色www视频在线| 婷婷超| 青草一区二区| 少妇高潮九九九九| 成人九九| 四季av一区二区凹凸精品小说| 国产传媒日本欧美专区| 久操九九九九| 青青草视频这里只有精品| 操逼逼无码| 欧美丰满少妇xx高潮| 91久| 九九av| 97超碰免费人人性爱| 337p大胆噜噜噜噜噜91Av| 精品九九九九| 超碰在线人人射| 中文字幕在线免费观看 | 欧美春色| 久久精品无码专区| 欧美人妻少妇| 超碰97护士| 97狠狠| 午夜啊啊| 青青草福利视频| 久久99国产精品| 欧美成人贴图| 欧美激情黑人| 啊啊啊慢点| 亚洲色情在线影视| 亚洲影视高清第一页| 97色欧州| 狠操91,com| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 伊香蕉综合久久久久久久噜噜噜| 97色操| 日夜精品| 精品国产三级av韩国在线| 国产亚洲福利第一页丝袜| 高潮精品| 丁香六月激情| 欧美日韩性爱操大逼| JULIA一区二区三区在线播放| 亚洲成熟国产精品美女| 婷色五月| 黑人中出21连凳花野真衣| 国产AV天美| 久久草视频污视频| 亚州男人天堂| 国产亚洲精品A在线观看下载| 十八禁av无码免费网站APP| www..com操老师| 被男人吃奶很爽的毛片| 免费一级a毛片久久久久久鸭绿欲| 日韩免费高清大片在线| 五月丁香社区婷婷日韩欧美精品影院| 欧美黄色大香蕉一区二区| 91色情黑丝搞鸡在线观看一区二区三区三州 | 欧美视频在线视频免费va| 嗯嗯啊中文字幕| 骚逼一区二区| 天美久久久久| 眼镜人妻101.com| 日韩欧美字幕亚洲一区二区| www.狠狠干.coom | 91亚洲丝袜熟女| 超碰97欧美| 亚洲最新av无码成人精品区| 伊人AAA| 精品中文日韩字幕视频| 97超碰美女| 上海一级黄片| 最新AVzaixian| 嗯嗯啊啊的视频| 97亚洲综合影院| 老司机射| 啊啊啊啊啊好大好舒服想要| 天天干人人乐| 五月婷婷久久综合| 国产美女激情| 凹凸视频在线一区二区| 无码9区| 婷婷精品国产欧美精品亚洲人人爽| 2017天天插| 国产JDAV无码视频在线观看| 日日碰狠狠添天天爽超| 色婷婷蜜臀av| 久久精品国产亚洲AV清纯| 日韩黄色成人性爱| 丰满人妻一区| 熟妇的味道HD中文字幕| 久久国产精品,久久国产| 91观看 国产白丝| 在线观看亚洲专区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 97色视频在线| 综合av社区| 国产有码一区| A 天堂| 日韩亚洲美州欧洲综三区一品在线| 亚洲偷91色| 99无码| 猛交交| 久久久偷拍| 91久久久久久| 国产又粗又长又大的视频| 精品v日韩欧美国产| 色偷偷色偷偷欧美日韩| 久久久久人妻二区精品叶可怜| 天美麻豆精品视频99| 国产伊人精品在线| 又黄又爽在线观看视频| 欧美亚洲图片| 天天淫人人妻日日色| 日本欧美中文字幕| 国产视频一区二区三区久久亚洲天堂| 成年无码动漫av片无尽在线| 人人爱夜夜爱| 91av一区二区在线观看| 熟女自慰久久久| 日本羞羞的视频在线播放| 久久国色天香香蕉| 国产黄色在线播放观看| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久久综合av| 日韩人成网站在线播放| 情色大香蕉| 五月综合色| 又粗又长又大国产不卡| 综合网欧| 免费a在线播放v| 精品国产乱码久久久久久久久久毛片| 激情文学网伊人| 97亚洲综合影院| 五月天伊人| 亚洲暴力强奸AV| 久射吧| 97人妻色| 久操网线| 91丝袜| 美女高潮视频91| av无线看| 麻豆AV一区二区天美传媒| 婷婷情色综合网| 日本性爱欧美性爱| 风韵犹存大大大大香蕉 | 啊啊啊免费视频| 9热9热综合网| 日本熟妇人妻中出视频| 色五月AV| 91在线丝袜| 99色悠悠| 操逼网站地址| 一个色导综合| 亚洲最大的综合性av| 人妻娇喘 激情视频| 色狠狠综合噜一二三区| 在线国产一区二区av| 亚洲人妻在线精品| 久热99999| 中文字幕一区 二 区 三 四 五 区日 日 骚| 亚洲无码太久| 欧美美女视频| 亚欧美综合网。| 96精品在线| 在免费jIzzjIzz在线视频| 91 丝袜在线播放| 日日橹狠狠爱欧美超碰| 亚洲精品色| 国产精品婬乱一级毛片彝族| 电家庭影院午夜69久久夜色精品国产69乱| 超碰日韩美妻| 99热aaa| 色97| 欧美乱色| 色99在线| 99re国产中文字幕| 亚洲日韩美国人妻| 亚洲 欧美 制服 另类 自拍| 91高潮| 日韩91网| 超碰 欧美| 久久精品视| 久久久久久久久久黄色网| 国产精品白虎| 旡码电影特区| 久妇网| 亚洲成人碰碰| 久久久A∨| 日日夜夜狠狠| 9色在线| 中字乱伦AV| 欧美精品久久久久久久久88| 日韩乱伦影音先锋| 新久久AV| 日韩欧美日韩| 中国AAAAAA黄色片| 熟妇综合一区二区三区| 国产女同在线观看视频| 久久久久久精| 亚洲性网| 搡老熟女免费视频| 黄色片A级一区二区三区| 九九AV| 久久精品无码熟妇一区二区三区视频导航| 亚欧洲一区二区视频| 亚洲蜜臀视频精品久久| 久草老司机| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产精品久久久久久9999| 色哟哟1区2区| 久久婷婷欧美| 日韩不卡网操逼中文字幕日韩| 国产丝袜美女诱惑| 六月丁操逼| 久色99999| 96精品一区| 情色大香蕉| 亚洲综合九九| 国产亚洲精品久久久久小| 先锋激情∨在线视频播放| 秋霞久久亚洲精品成人| 国产亚洲日本精品在线| 97色色网| 亚洲免费日韩在线一区二区| 中亚黄色三级大片| 嗯嗯啊啊啊好爽| 精品无码久久久久久久久果冻糖心 | 国产精品久久久无码aV去| 欧美黄色大片在线观看 | 天堂国产AV| 国产99999久久精品| 91国产丝袜白虎| 国产色图乱伦| 国产精品欧美日韩久久| 欧美精品999| 色婷婷成人综合| 人妻激情在线视频| 亚洲97在线| 黄色电影在线播放综合网站| 日韩成人综合网| 熟妇亚洲一区二区三区| 91老熟女91老女人| 精品人成视频在线观看| 十八禁成人网站在线观看| 日韩国语字幕| 欧美一区二区三区大综合| 99青青草国产视频| 精品人妻一区二区三区四区| 韩国三级一线观看久| 日韩激情啪啪| 欧美久久婷婷| 天天看片青娱乐| 日韩免费大片一级播放| 欧美熟妇视频 | 在线播放成人高清免费视频 | 91狠狠狠| 亚洲精品无码成人久久久99| 天天爱天天韩国日本牛牛牛牛 | 亚洲天天更新| 亚洲综合中文字幕有码| 日韩钢筋无码高清啾啾啾| 夜夜夜爽www精品视频| 秋霞一级A片黄色视频| 日韩一级二级| 国内精品久9| 亚洲国产欧美另类自拍| 久久人妻97久久久久久久| 97人人夜| 欧亚免费视频| 操老熟女AV| 免费?级毛片无码?∨蜜芽试看| 麻豆人妻精品一区二区| 91操熟女视频| 欧美中文字幕日韩在线| 综合国产97| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 欧美一区二区三区大综合| 精品人妻一区二区三区免费视频| 亚洲成熟国产精品美女| 亚洲色丰满少妇高潮| 日日操免费视频| 夜夜操av亚洲一区二区| 97干色| 又黄又爽在线观看视频| 久久成人午夜狠狠| 被男人添B超爽视频| 成人网欧美风情| www.99色| 在线97在线| 在线观看一级α片刺激高潮视频| 亚洲乱色视频一区、二区在线| 热99这里有精品综合久久| 超碰97爽| 日产操逼| 免费人人搞97| 日韩精品在线观看观看| 成人熟女区| 国产熟女完整版中字| 自拍丝袜美腿人妻| 欧美一区二区三区四区综合| 热久久99999| 美女尤物人人操| 夜夜夜夜爽| 国产女生在线| 国产99热| 国产精品视频播放| 五十路三级片| 亚洲清纯综合| 久久发布国产伦子伦精品| 男人女人18禁片免费看网站| 怡春苑东京热| 欧美五十路熟| 爱爱动态试试看6 0秒| 精品中文字幕一区二区| 一二三四区操操Av| 丁香五月AV| www熟女乱伦com| 色老牛| 欧美国产日韩高清在线| 麻豆天美传媒毛片| 热久日综合| 国产 三级自拍| 一区二区中文| 亚洲精品97中文字幕| 黄片不用下载在线观看| 性色aV一区二区三区噜噜| 观看视频图片一区二区三区| 视频国产精品未满十八禁止在线观看| 亚洲 欧美 日本 国内 首页| 91亚州日韩高清| 久久成人午夜精品影院 | 美女黄网| 美国三级日本三级久久99| 五月激情综合网| se吧提供91精品国产91久久久久久| 婷婷久草| 久热久一区二区三区| 亚洲国产一级精品毛一级精品看免费视频| 91色欧美| 色妇91| 久久久久久亚洲精品中文字幕人妻| 色官网色综合| 免费岛国一级片| 精品丰满熟妇人妻一区| 91熟女综合| 97人人干| 蜜乳AV色欲AVAV无码| 久久久97| 欧美成人精品欧美一级乱黄一区二…| 久久男人网| 99热18| 伊人女女资源在线观看| 欧美高清无码免费视频高清版| 亚洲另类色综合网站| 久久久久久波多野吉衣高潮| 亚洲色婷婷| 中日韩欧美精品无码AⅤ一区二区| 国产精品直播在线观看直播| 亚洲欧美校园| 国产情色第一第二页在线观看| 99精品丰满人妻无| 夜夜操狠狠操| 一个人免费HD91视频| 人人操人人摸人人看人人插| 97在线免费| 久久内射| 欧美日韩人妻精品系列一区二区三区| A一级色女| 校园春色中文字幕AV| 日韩国语字幕| 99综合视频| 免费综合亚洲中文| 澳门黄片一香蕉视频| 超碰色老头| 91爱啪| 干B网| 午夜啊啊| 99热在线播放| 好吊色综合| 校园春色五月天| 亚欧美综合网| 日韩精品 欧美激情| 欧美 牲| 中文字幕综合人妻| 亚洲色图综合网| 热的中文 热的有码 热的国产| 国精综合一二三区影视| 国产AV人人 夜夜人人澡| 美国久久一二三四| 亚洲欧美一区二区不卡视频播放| oumeisetupian| 91热情品| 青青草久久| 国产熟女二区| 中文字幕免费看| 日本精品加勒比海一区| 久久精品电影在线| 日本阿v天堂在线观看| 秋霞 色色| 欧美爱三级日韩久久| 精品人妻一区二区三区四区石在线| 2023天天操夜夜操| 国内偷自视频区视频综合| 国产人妖的免费的视频| 探花在线免费观看视频国产一区| 黑人嘿嘿嘿超爽免费视频| 婷婷91| 青娱乐亚洲热| 1000午夜黄色| 欧美碰碰综合色| 99久久久无码国产精品性啊聊| 免费看黄片现成| www.91逼逼.com| 久久伊人大香蕉| 日本淫色网| 东京热熟女亚洲视频网站| 狠狠躁久久躁| 日韩成人无码| 吖在线不卡一区二区国产剧情| 精品在线观看视频在线| 夜夜一区二区| 自拍视频大全亚洲专媒视频/一区二区三区| 欧美后入视频| 男人天堂2030| 亚洲欧洲综合av在线| 欧亚免费视频| 久久精品视频28| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 婷婷午夜| 亚洲一卡2卡3卡4卡乱码网站 | 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 99久久九九| 国产精品黑人一区二区三区| 天天日夜干| 在线另类| 精品无码一二三四区| 影音先锋每日最新资源在线观看| 欧美在线色| 蜜臀久久久99久久久久 | 大香蕉九九| 97色欧州| 亚洲欧美另类小说| 日韩欧美中文| 亚洲欧洲小说图片视频 | 亚洲人人夜夜澡人人爽| 日韩视频中文字幕| 欧美性爱精品一区二区| 99热精品在线观看| 内射卯月麻衣| 日韩在线欧美精品一区二区| 五月天伊人| 99re在线精品78| aaa亚无码专区| 精品国产91av一区二区三区| 人妻激情另类| 亚洲春色欧美| 久久无码电影| 欧美 亚洲 另类 综合| 色网色网色网色网色网色| 手机在线观看不卡无码av| 91色噜噜狠狠| 日本精品一区二区三区四区的功能| 中国国国产一级特黄毛片| 午夜欧美J进J出白浆流出久久久| 成人一二三区| 久久性视频| 中 文字幕一区二区三四 五 区日 日 骚 | 影音综合网| 外国91| 色99在线| 国产精选视频| 人妻少妇av在线观看| 亚洲黄片免费在线播放| 欧美久久九九| 欧州91高潮| 91碰碰碰| 欧美日韩精品久久久久久久久东北老熟妇| 秋霞一级视频在线观看免费| 操淫穴亚洲五月丁香 | 九九热男人天堂| 色逼综合| 久久国产99精品72福利 | 日韩Va亚洲va欧美Ⅴa久久| 日日A∨| 亚洲字幕一区二区| 91欧美另类| 99久久e免费热视| 岛国不卡超碰护士AV在线播放| 日日噜噜夜夜狠狠视频无| 日日夜夜草草草| 九月丁香婷婷色| 免费亚洲国产精品久久一区| 久久久久九九九| 东京热AV男人的天堂| 插欧洲美女欧美精品| 日韩无码第3页| 一区二区激情国产熟女 | 九九黄色视频在线观看| 婷婷九月丁香| 丁香五月色| 亚洲综合999| 可以免费观看的av| 亚洲另类春色| 97色欧州| 亚洲精品中文字幕一区在线视频| 一区超碰一区| 久久久爆乳翘臀一线天伦理视频| 亚洲国产精品无石码久久| 91在线免费观看处女| 免费啪啪av| daxiangjiao你懂的 | 国产三级中文字幕粉嫩| 久久亚洲AV无码专区首页| 亚洲欧美视| 99成人| 成人26uuu| 欧美偷| AV天天综合| 人人妻人射| 国产精品一区二区密臀| 欧美熟妇人体| 国产欧美日韩在线不卡第一页| 欧美超碰在线| 色婷婷久久综合超碰| 静品嫩模一区二区| 人人妻碰人人免费| 超碰97综合网| 久久av色| 在线综合色| 国产91丝袜 在线播放| 97色在线观看| 国产一级操B视频| 欧美99999| 亚洲图片在线| 丁香六月婷婷综合| 秋霞一级A片黄色视频| 亚洲AV无码久久久国产精品| 91综合站| 加勒比日本在线| 丁香五月社区| 国产操逼逼网| Sekablack无码一区| 亚洲国内精品成人不卡| 亚洲 欧美 中文 日韩超碰| 手机在线人成免费视频| 国产操逼网站亚洲一级黄色| 亚洲精品一卡二卡三卡福利视频网站| 日本 欧美 亚中文字幕| 粉嫩av在线一区二区| 亚洲一区在线观看欧洲| 99在线精品观看视频中文 | 9ⅰ久久久天天| 天天日日本| 中文字幕黑人大片| 黄aaaaaaaaaaaaaaaaaa色网站| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 久热69九色熟妇97| 色综合久久888| 日本国产高清色www视频在线| 一起草在线视频| 91美女视频直播| 亚洲在钱| 99re6国产精品99re| 又大又长又爽| 久7色| 五月综合色| 天天操天天插| 男人a天堂手机在线版| 久久久精品电影| 亚洲AV成人精品网站在AV| 天天综合-91入口| 天天拍夜夜| 偷拍片久久| 超碰97资源中文字幕| 97蜜桃综合| 婷婷色一区| 99超碰色| 丁香五月天啪啪| 婷婷丁香五月激情啪啪| 白嫩国模丰满一二三区| 熟女色综合久久| 日本午夜精品理论片A级APP发布| 欧洲一级性爱视频在线观看| 五月丁香拍拍激情综合三级| 日韩 欧美 另类 人妻| 日本欧美一区二区三区视频麻豆| 国产在线播放成人免费| 日韩欧美亚欧在线视频| 亚洲欧洲日本精品中文a∨| 人妻久久一区二区三区| 亚洲国产综合图区中文字幕| 国产精品96| 凹凸视频在线一区二区| 视频一区二区三区精品| 久久国产AⅤ| 国产精品久久久久久久久久梁医生| A级国产欧美激情在线| 日韩偷拍一区二区三区| 天天操人人操狠狠插| www.av在线视频| 性爱乱伦一区| 99视频内射三四| 青青草九九九九九| 人人手机欧洲亚洲国产人妻| 久久最新视频免费观看| 日韩免费高清大片在线| 黄色一区二区秘书性感| 黄色一级视| 亚洲有码 欧美精品| 怡红院怡春院| 亚州日韩97| 欧美丝袜91| 久久只有精品| 青青草久草| 日韩精品一区二区高清| 大香网站| 亚欧Av| 热久久91婷婷| 香蕉免费一区二区三区不读| 曰本特级特黄特色黄色A级网站高清在线免费看 | 绯色AV粉色AV蜜臀AV| 91男人天堂网| 精品亚洲天堂| 国产精品亚洲一级av第二区| 国产精品视频麻豆入口| 曰韩av中文字幕专区| 精品91摸| 大香蕉宅男伊人| 久草色在线观看| 中文三一区| 日韩在线一区高清在线| 久久久夜夜嗨免费视频| 少妇诱惑视频| 超碰天天操你比| 久草看看看| 欧美成人四级在线播放| 又黑又大又粗| 精品十三区| 九九九九九九综合| 91在线免费精品视频| 日本操逼视频导航| 亚洲中文字幕妇伦久久| 久久久精品视频欧州站| 日本αv| 夜夜爽爽爽| 情色图区| 久久性爱大全| 青青操视频在线| 国产乱伦性爱区| 九一综合精品视品av| 97鸡把在线视频| 国产热RE99久久6国产精品首| 蜜桃久久精品一区二区三区| 乱伦一二三| 综合网,亚洲,欧美| 久久99干一本高清| 青娱乐亚洲自拍| 精品无码一区二区| 台湾佬大香蕉| 国产中出内射一区二区| 97色碰| 久久熟女嫩草成人片免费| 亚洲精品白浆高清久久久久久| 91超级碰碰| 中文字幕熟女人妻丝袜丝| 天天操夜夜操狠很操| 99色在线| 亚洲高清91| 99久久久无码国产精品性男| 亚洲欧洲无码一区夜| 天啪| 综合色色网| 91天堂丝袜美腿| 久久成人午夜精品影院| 日本欧美韩国日产片片在线看免| 夜夜夜夜久久久久| 黄aaaaaaaaaaaaaaaaaa色网站 | 人人搞人人插人人操| 欧美嗯啊……在线观看视频免费| 水多多映视AV| 毛片久久| 操操操操网黑人| 亚洲第一精品在线视频| 九七人妻在线| 亚洲人妻av| 欧美极品| 啊啊啊啊在线观看网址| 欧美一区二区三区另类精品| 久久久久无码一妻区| 狠狠激情综合狠狠操中文字幕| 超碰吊日色| 亚洲欧洲小说图片视频| 天天日天天干天天色| 欧美乱妇狂野欧美在线视频| 顶级丝袜熟女一区二区三区| 国产中文字幕在线| 七久久久| 97在线精品观看视频| 九99久久| 98一区二区精品| 国产在线视频二区| 99福利社| 久久久99久9| 亚洲最新av无码成人精品区| 婷婷10月天青娱乐| 91亚·色| 亚洲成?V人片在线观看福利| 肥佬影院91| 求求你操操我| 亚洲国产一区二区三区四区国产| 亚洲图片欧美色| 国产亚洲精品美女| 欧美色五月| 天天干干天天干干| 久操视频这里只有精品| 青青草视频在线观看一区二区| 久久亚洲精品成人av| 97香蕉网| 91欧洲入口| 国产嫩草精品A88AV在线| 在线观看av区| 蜜乳中文字幕a在线| 天天躁夜夜躁狠狠躁AV| 怡红院怡春院| 强奸a片网| 亚洲激情综合另类男同| 天天天肏屄肏屄肏屄欧美欧美| 夜夜騷av、一區二區| 亚洲第一综合| 黄片com.| 99婷婷一区二区| 国产97av| 欧美综合 站| 欧美色图片91| 99色热| 插日本熟女视频| 国模私拍一区二区三区神乳| 久草看看看| 美国三级日本三级久久99| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 成人资源中文字幕在线观看天天| 夜夜欧美| 久久国产精品一级二级三级| 偷拍盗拍亚洲色图图片 | 啪一啪免费视频| 我想要啊 啊 啊| 91人妻Pr| 国内外内射高清视频| http://qxhbdz.com| 超清中文乱码字幕| 91红杏| 秋霞曰韩R级| 密臀在线一区尤物| 久久伊人网视频一区二区三区| 亚洲啪啪视频免费| 久偷拍欧美日韩三区| 无码国产精品午夜不卡(| 高清无码人妻久久久一区二区三区aⅴ| 嗯嗯啊在线视频| 日本熟女不卡视频| 外国91| 日本高清加勒比| 人妻密肉在线观看| 欧美爱三级日韩久久| 国模不卡一本二本三电影| 国产中文字幕曰本毛片| 久久亚洲一区女同性恋中文字幕| 欧美夜夜狠| 午夜120视频在线观看| 天天肏视频| 色天堂在线观看| 神马精品视频| 免费强奸av| www.久久最新地址| 人人天天欧洲| 久久同城AV| 97在线免费看| 三上悠亚在线毛片91| 国产精品天干天干综合网麻豆| 加勒比AV网| 欧美熟妇亚洲版| 亚洲清纯唯美| 免看60秒涩涩视频| 在线观看啊啊啊啊啊| 啊啊啊啊无码| 蜜臀久久99精品久久久久久酒店 | 国产精品人妻免费精品|