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

ARTICLE DETAIL

資訊詳情

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

深度學習字符驗證碼識別CNN逐位分類Python實戰(zhàn)

深度學習字符驗證碼識別CNN逐位分類Python實戰(zhàn) 簡介面向深度學習圖像識別初學者、安全方向開發(fā)者及課程設(shè)計學習者的字符型驗證碼識別實踐包圍繞數(shù)字與字符驗證碼的卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)建模、訓練與預(yù)測流程展開可用于入門項目復(fù)現(xiàn)、算法練手和驗證碼識別方案調(diào)研。壓縮包共1210個文件約9.58MB其中978張png、202張jpg及少量bmp、jpeg圖片構(gòu)成驗證碼樣本17個py腳本覆蓋數(shù)據(jù)處理、模型構(gòu)建、訓練預(yù)測等環(huán)節(jié)另含txt說明、rst文檔、zip壓縮包與模型文件等輔助內(nèi)容。已有1542人學習下載具備一定參考熱度。讀者可從中獲得從樣本歸一化、數(shù)據(jù)增強、one-hot編碼到CNN/RNN模型搭建、交叉熵訓練與結(jié)果組合的完整源碼脈絡(luò)并借助示例圖片和腳本理解字符序列識別、過擬合監(jiān)控及多字符輸出思路便于改造成自己的驗證碼識別項目。1. 從一批糊掉的字符圖說起這個基于深度學習的字符識別項目到底能干什么前陣子有人拿著一批自己生成的四位字符圖來找我圖上壓著干擾線和噪點人眼掃過去都得愣一下。他要的不是接個現(xiàn)成接口敷衍過去而是基于深度學習的字符型圖片數(shù)字驗證碼識別——從零訓一個模型出來。這份資源就是那條完整鏈路的 Python 實現(xiàn)數(shù)據(jù)生成、圖像預(yù)處理、網(wǎng)絡(luò)定義、訓練收斂、推理解碼一步不落源碼能直接跑起來。它的適用面比看上去寬。想完整走一遍「圖像輸入到字符串輸出」流程的深度學習新手可以拿它當?shù)谝粋€真正跑通的實戰(zhàn)做 OCR、票據(jù)編號、工牌數(shù)字、集裝箱號這類字符識別落地的開發(fā)者可以把它當成一個能直接改的基線。字符集小、長度固定、單通道灰度圖訓練成本低到一張消費級顯卡幾小時就出結(jié)果這才是它適合入門的核心原因。2. 目錄結(jié)構(gòu)與技術(shù)選型一個字符識別項目該有的骨架先別急著看模型。字符識別這類項目跑不起來的原因九成不在網(wǎng)絡(luò)結(jié)構(gòu)而在目錄沒分好、配置散在各處、訓練和推理各寫一套預(yù)處理。這套源碼的目錄劃分是我比較認可的一種改起來不牽一發(fā)動全身。2.1 六個文件撐起整條鏈路captcha_rec/ ├── config.py # 訓練/推理共用配置超參只在這里改 ├── charset.py # 字符集與索引映射訓練推理共用同一份 ├── data/ │ ├── gen_captcha.py # 自建數(shù)據(jù)集生成器 │ ├── dataset.py # Dataset 與預(yù)處理流水線 │ ├── train.txt # 每行 路徑\t標簽 │ └── val.txt ├── models/ │ └── cnn.py # CNN 主干 逐位分類頭 ├── train.py # 訓練循環(huán)、驗證、保存權(quán)重 ├── predict.py # 單圖/批量推理與解碼 └── utils/ ├── metric.py # 整串準確率、單字符準確率 └── seed.py # 固定隨機種子 └── requirements.txt這個劃分的關(guān)鍵在于三個「單一出口」config.py管參數(shù)、charset.py管字符和索引、dataset.py管預(yù)處理。很多人在自己寫的時候把預(yù)處理寫在訓練腳本里推理時又抄一遍抄錯一個cv2.resize的插值參數(shù)線上準確率立刻掉十幾個點這種血淚經(jīng)驗我在別人的項目里見過不止一次。工程約定上train.txt和val.txt用制表符分隔路徑和標簽不用 CSV因為圖片路徑里偶爾會出現(xiàn)逗號。標簽一律小寫不做大小寫混排——字符集里0和O、1和l這類形近字符如果都保留模型在低分辨率下幾乎必然混淆除非你的業(yè)務(wù)真的需要區(qū)分。charset.py是全篇最容易翻車的地方把它單獨拎出來是值得的# charset.py 訓練和推理都必須 import 這一份禁止在別處重寫 CHARSET 0123456789abcdefghijklmnopqrstuvwxyz # 0 號位固定留給 CTC 的 blank逐位分類時從 1 開始用也不會浪費多少參數(shù) CHAR2IDX {c: i 1 for i, c in enumerate(CHARSET)} IDX2CHAR {i 1: c for i, c in enumerate(CHARSET)} BLANK 0 NUM_CLASSES len(CHARSET) 1 # 36 blankNUM_CLASSES加 1 是為了兼容后面第 6 章要講的 CTC 改造逐位分類時多出來的那一類永遠學不會對結(jié)果沒有影響。參數(shù)說明CHAR2IDX的索引從 1 開始BLANK0是 CTC 的硬性約定改不了。IDX2CHAR必須和CHAR2IDX嚴格互逆我一般寫個斷言assert len(IDX2CHAR) len(CHAR2IDX)擋住手抖。config.py里我把所有數(shù)字集中了# config.py 所有超參的唯一來源 IMG_H, IMG_W 60, 160 # 統(tǒng)一尺寸寬高比 8:3 比較接近 4 位字符的排版 MAX_LEN 4 # 固定長度變長方案見第 6 章 BATCH_SIZE 64 EPOCHS 40 LR 1e-3 WEIGHT_DECAY 1e-4 DEVICE cuda # 沒有顯卡就寫 cpu訓練慢但能跑 TRAIN_LIST data/train.txt VAL_LIST data/val.txt CKPT ckpt/best.pthIMG_H和IMG_W不是隨便定的。4 位字符橫排寬度至少要是單字符寬度的 4 倍還留出間隙60 高度能保住字符的筆畫細節(jié)又不至于讓全連接層參數(shù)爆炸。把IMG_W提到 320 而模型不變Flatten后的維度翻倍全連接層參數(shù)量直接四倍小數(shù)據(jù)集上過擬合會來得非???。2.2 技術(shù)選型為什么先做逐位分類而不是一上來就 CRNN 配 CTC字符識別主流兩條路一條是固定長度逐位分類一條是 CRNN CTC 的序列識別。這個項目選的是前者理由很實在固定長度場景下逐位分類的訓練信號更直接。逐位分類把「識別 4 個字符」拆成 4 個獨立的分類任務(wù)每個位置一個 softmax損失是 4 個交叉熵的均值。梯度回傳路徑短收斂快20 到 30 個 epoch 就能把整串準確率推到很高的水位。CTC 則是把模型輸出當成一條時間序列靠動態(tài)規(guī)劃把所有可能的對齊方式加起來它對齊能力更強、支持變長但訓練早期收斂慢標簽長度和輸入長度不匹配時還會直接給你inf損失。對比項逐位分類本項目CRNN CTC字符長度必須固定任意長度收斂速度快幾十 epoch 見效慢常要上百 epoch實現(xiàn)復(fù)雜度低多一個 view 就行中要處理 input_lengths對字符粘連的魯棒性一般靠位置先驗硬扛較好典型翻車點字符集順序錯亂標簽長度 時間步導致 inf選逐位分類不等于偷懶。字符長度固定的業(yè)務(wù)場景——四位驗證碼、六位工單號、固定位數(shù)的批次號——占了實際需求的大頭用 CTC 屬于殺雞用牛刀還多背一份對齊邏輯的維護成本。真到了變長那天主干網(wǎng)絡(luò)和數(shù)據(jù)集代碼基本不用動只換分類頭和損失函數(shù)第 6 章會給具體的改法。主干網(wǎng)絡(luò)用的是最樸素的四段卷積。這套結(jié)構(gòu)在字符識別上有個隱含優(yōu)勢四段MaxPool把 60×160 壓到 2×10特征圖上橫向還剩 10 個位置剛好夠 4 個字符各自找到自己的感受野又不會因為壓得太狠把相鄰字符糊在一起。換成三段卷積特征圖剩 7×20全連接層參數(shù)量漲到四倍小數(shù)據(jù)集上直接過擬合。2.3 環(huán)境和依賴別在版本上栽跟頭依賴不多但鎖版本這件事別省# requirements.txt torch2.0,3.0 torchvision0.15 opencv-python4.8 numpy1.24 pillow10.0 tqdm4.66opencv-python和opencv-python-headless千萬別同時裝裝重了cv2.imread在無圖形界面的服務(wù)器上會報libGL.so.1找不到。這種錯誤看起來像系統(tǒng)環(huán)境問題實際是依賴裝串了浪費半天時間排查。我一般在服務(wù)器上只裝 headless 版本。charset.py里的字符集順序一旦定下來就不能隨便動。改了字符集順序而不重訓模型輸出的索引全部錯位表現(xiàn)是「訓練時好好的推理出來全是亂碼」這個坑在第 5 章會單獨展開。種子也要固定utils/seed.py里把random、numpy、torch三家的種子一起設(shè)復(fù)現(xiàn)實驗才有意義。3. 數(shù)據(jù)管線從字符圖片到能喂進網(wǎng)絡(luò)的張量模型再漂亮數(shù)據(jù)管線錯了全白搭。這一章拆的是data/gen_captcha.py和data/dataset.py兩個文件前者負責造數(shù)據(jù)后者負責把圖片變成張量。3.1 自建數(shù)據(jù)集字符圖怎么生成、怎么標注沒有現(xiàn)成數(shù)據(jù)集的時候自己生成是最快的路。真實業(yè)務(wù)里的字符圖片通常來自截圖或掃描件但練手階段用 PIL 合成完全夠用關(guān)鍵是干擾要加到「人眼勉強能認」的程度太干凈學不到東西太臟模型直接放棄。# data/gen_captcha.py 生成一張四位字符圖并寫入標注文件 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter def gen_one(text, size(160, 60), font_pathfonts/mono.ttf): img Image.new(RGB, size, (255, 255, 255)) draw ImageDraw.Draw(img) font ImageFont.truetype(font_path, 34) cell size[0] // len(text) for i, ch in enumerate(text): # 每個字符獨立抖動坐標模擬真實場景的排版漂移 x i * cell random.randint(-2, 4) y random.randint(0, 8) color tuple(random.randint(0, 90) for _ in range(3)) draw.text((x, y), ch, fontfont, fillcolor) # 干擾線1~3 條顏色比字符略淺避免完全遮住筆畫 for _ in range(random.randint(1, 3)): x1, y1 random.randint(0, size[0]), random.randint(0, size[1]) x2, y2 random.randint(0, size[0]), random.randint(0, size[1]) draw.line((x1, y1, x2, y2), fill(random.randint(120, 200),) * 3, width1) # 椒鹽噪點密度控制在千分之五左右 for _ in range(int(size[0] * size[1] * 0.005)): draw.point((random.randint(0, size[0] - 1), random.randint(0, size[1] - 1)), fill(random.randint(0, 255),) * 3) return img.filter(ImageFilter.GaussianBlur(radius0.6))參數(shù)說明cell是單個字符分到的橫向格子寬度x的抖動范圍[-2, 4]讓字符略微越界模擬真實排版里的擠壓fill取0~90的深色而不是純黑是因為純黑在二值化之后對比過強模型會過度依賴筆畫粗細這個捷徑特征。噪點密度0.005是我試下來比較平衡的值提到0.02之后整串準確率會掉但單字符準確率還在說明模型開始靠猜。生成完記得寫標注文件路徑和標簽用制表符隔開一次寫一行訓練集和驗證集用不同的隨機種子分開生成——這一步是很多人的翻車點同一個種子生成兩批圖驗證集里混進和訓練集幾乎一模一樣的樣本準確率虛高得嚇人。3.2 預(yù)處理流水線灰度、去噪、歸一化與尺寸統(tǒng)一預(yù)處理的目標只有一個讓訓練和推理走完全相同的代碼路徑。dataset.py里這段是核心# data/dataset.py 預(yù)處理 張量化訓練和推理共用 import cv2 import torch from torch.utils.data import Dataset class CaptchaDataset(Dataset): def __init__(self, list_file, char2idx, img_w160, img_h60): self.items [] with open(list_file, encodingutf-8) as f: for line in f: path, label line.rstrip(\n).split(\t) if len(label) ! 4: # 長度對不上直接丟掉別讓它污染訓練 continue self.items.append((path, label)) self.char2idx char2idx self.img_w, self.img_h img_w, img_h def __len__(self): return len(self.items) def __getitem__(self, idx): path, label self.items[idx] img cv2.imread(path, cv2.IMREAD_GRAYSCALE) # 單通道省顯存也省參數(shù) if img is None: raise FileNotFoundError(path) img cv2.resize(img, (self.img_w, self.img_h), interpolationcv2.INTER_AREA) img cv2.medianBlur(img, 3) # 3x3 中值濾波壓椒鹽噪點 img img.astype(float32) / 255.0 # 歸一到 0~1 img (img - 0.5) / 0.5 # 拉到 -1~1 tensor torch.from_numpy(img).unsqueeze(0) # (1, H, W) target torch.tensor([self.char2idx[c] for c in label], dtypetorch.long) return tensor, target邏輯說明先 resize 再濾波是有講究的先濾波再 resize 會讓噪點在插值時被拉伸成條狀反而更難去掉。INTER_AREA用于縮小是最不容易產(chǎn)生摩爾紋的插值方式換成INTER_LINEAR在 160 寬度下問題不大但換成INTER_CUBIC會引入振鈴邊緣出現(xiàn)假的筆畫。參數(shù)說明medianBlur的核大小必須是奇數(shù)且大于 13 是最小有效值5 會開始吃掉細筆畫。歸一化用(x - 0.5) / 0.5拉到[-1, 1]配合 BatchNorm 收斂更快如果網(wǎng)絡(luò)里全是 ReLU 而沒有 BN用[0, 1]也能跑差別不大但別兩套混用。DataLoader那邊兩個參數(shù)值得調(diào)from torch.utils.data import DataLoader train_loader DataLoader( CaptchaDataset(data/train.txt, CHAR2IDX), batch_size64, shuffleTrue, num_workers4, pin_memoryTrue, drop_lastTrue, # 最后一批不足 batch_size 時丟掉 )drop_lastTrue在 BatchNorm 上很關(guān)鍵。最后一批如果只剩 1 張圖BN 在單個樣本上算方差結(jié)果接近 0反向傳播時對這兩層參數(shù)的影響是災(zāi)難性的表現(xiàn)出來就是「每個 epoch 最后 loss 尖刺一下」。我見過有人為此把學習率砍半其實是數(shù)據(jù)加載的問題。num_workers4在機械硬盤上開太高反而更慢開了pin_memory才真正省下主機到顯存的那段拷貝時間。3.3 數(shù)據(jù)增強的邊界能加什么不能加什么字符識別的增強比自然圖像窄得多??梢约虞p微旋轉(zhuǎn)±3 度、小幅平移±5%、對比度抖動、隨機加噪點。不能加水平翻轉(zhuǎn)字符會變成鏡像、大角度旋轉(zhuǎn)超出手寫體常識、隨機裁剪會切掉字符。import random def augment(img): # 只在訓練集上調(diào)用驗證集和推理一律走原圖 if random.random() 0.3: img cv2.convertScaleAbs(img, alpharandom.uniform(0.8, 1.2), betarandom.randint(-20, 20)) if random.random() 0.2: h, w img.shape[:2] M cv2.getRotationMatrix2D((w / 2, h / 2), random.uniform(-3, 3), 1.0) img cv2.warpAffine(img, M, (w, h), borderValue255) return img增強函數(shù)里最忌諱的是「訓練加了、驗證也加了」。驗證集的唯一職責是反映真實分布一旦對它做隨機變換準確率曲線就失去了參考價值你根本不知道模型是在進步還是在適應(yīng)增強。這條我在自己項目里定成硬規(guī)則augment只在trainTrue的分支里調(diào)用。4. 網(wǎng)絡(luò)與訓練CNN 逐位分類頭的完整實現(xiàn)前面鋪墊的數(shù)據(jù)和結(jié)構(gòu)到這里收口。這一章拆三段代碼網(wǎng)絡(luò)定義、訓練循環(huán)、推理解碼每一段都能直接抄進自己的項目改。4.1 CNN 主干與逐位分類頭網(wǎng)絡(luò)結(jié)構(gòu)上沒有花活四段卷積加兩層全連接重點是最后一層的形狀處理。# models/cnn.py import torch.nn as nn class CaptchaCNN(nn.Module): def __init__(self, num_classes, max_len4): super().__init__() self.max_len max_len self.features nn.Sequential( nn.Conv2d(1, 32, 3, padding1), nn.BatchNorm2d(32), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), # 60x160 - 30x80 nn.Conv2d(32, 64, 3, padding1), nn.BatchNorm2d(64), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), # - 15x40 nn.Conv2d(64, 128, 3, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), # - 7x20 nn.Conv2d(128, 128, 3, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d((3, 2)), # - 2x10 ) self.head nn.Sequential( nn.Flatten(), nn.Linear(128 * 2 * 10, 512), nn.ReLU(inplaceTrue), nn.Dropout(0.3), nn.Linear(512, max_len * num_classes), ) def forward(self, x): x self.features(x) x self.head(x) # 關(guān)鍵一步把一維輸出拆回 (batch, 字符位置, 類別) return x.view(-1, self.max_len, self.num_classes)邏輯說明四次池化把空間維度壓到2×10Flatten后的長度是 2560接 512 維隱層。最后的view是整個設(shè)計的樞紐——如果不拆模型輸出是個 144 維向量沒法逐位算交叉熵拆開之后logits[:, i, :]就是第 i 個字符位置的分類分布損失可以直接逐位相加。參數(shù)說明Dropout(0.3)放在兩層全連接之間字符識別這種小數(shù)據(jù)集上 0.3 到 0.5 都試過0.5 會欠擬合0.3 比較穩(wěn)。最后一個池化用(3, 2)是為了把 7 壓成 2、20 壓成 10非對稱池化在這種寬扁輸入上比強行方形池化更合理。num_classes傳NUM_CLASSES含 blankmax_len傳MAX_LEN兩個都從config.py來。還有一點容易忽略輸入必須是(B, 1, H, W)且 H、W 和訓練時完全一致。動態(tài)尺寸的網(wǎng)絡(luò)不是不能寫但全連接層會立刻鎖死尺寸后面改圖片寬高就得重訓所以一開始統(tǒng)一到 60×160 是省事的做法。4.2 訓練循環(huán)損失、優(yōu)化器和學習率調(diào)度訓練循環(huán)里最值得講的是損失怎么算以及為什么必須做梯度裁剪。# train.py節(jié)選 import torch import torch.nn.functional as F def train_one_epoch(model, loader, optimizer, device): model.train() loss_sum, char_correct, char_total 0.0, 0, 0 for imgs, targets in loader: imgs, targets imgs.to(device), targets.to(device) logits model(imgs) # (B, L, C) # 逐位交叉熵取平均 loss 0.0 for i in range(model.max_len): loss loss F.cross_entropy(logits[:, i, :], targets[:, i]) loss loss / model.max_len optimizer.zero_grad() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm5.0) optimizer.step() loss_sum loss.item() * imgs.size(0) char_correct (logits.argmax(-1) targets).sum().item() char_total targets.numel() return loss_sum / len(loader.dataset), char_correct / char_total邏輯說明F.cross_entropy內(nèi)部已經(jīng)做了log_softmax加負對數(shù)似然不要在它前面再手動過一遍 softmax否則等于算了兩遍梯度會被壓扁到幾乎不動。逐位求和再除以max_len而不是直接相加是為了讓損失量級和單個分類任務(wù)對齊學習率不用跟著字符長度重新調(diào)。參數(shù)說明clip_grad_norm_的max_norm5.0是經(jīng)驗值字符識別里梯度爆炸大多來自 BatchNorm 在小 batch 上的方差抖動裁剪能擋住絕大部分尖刺。訓練循環(huán)外配套調(diào)度器optimizer torch.optim.Adam(model.parameters(), lr1e-3, weight_decay1e-4) scheduler torch.optim.lr_scheduler.ReduceLROnPlateau( optimizer, modemax, factor0.5, patience3 ) # 每個 epoch 結(jié)束用驗證集整串準確率驅(qū)動 scheduler.step(val_acc)patience3表示連續(xù) 3 個 epoch 驗證準確率不漲就把學習率砍半。這個策略比固定步長衰減更適合小數(shù)據(jù)集因為收斂曲線經(jīng)常是階梯式的卡住三個 epoch 之后往往還能再上一個臺階。weight_decay1e-4對 Adam 來說相當于 L2 正則在三千張左右的訓練集上能明顯壓住過擬合。驗證函數(shù)里我只算兩個指標——整串準確率和單字符準確率torch.no_grad() def evaluate(model, loader, device): model.eval() full_ok, full_total 0, 0 char_ok, char_total 0, 0 for imgs, targets in loader: imgs, targets imgs.to(device), targets.to(device) pred model(imgs).argmax(-1) # (B, L) full_ok (pred targets).all(dim1).sum().item() full_total imgs.size(0) char_ok (pred targets).sum().item() char_total targets.numel() return full_ok / full_total, char_ok / char_total關(guān)鍵在all(dim1)只有四個位置全對才算整串正確這個指標才是業(yè)務(wù)真正關(guān)心的。單字符準確率 95% 聽起來漂亮四個字符乘起來只剩 81%整串準確率才是能拿去交付的數(shù)字。兩個指標一起看還能定位問題——單字符高、整串低說明模型在個別位置上系統(tǒng)性混淆通常是對應(yīng)字符樣本不足。4.3 推理解碼把 logits 還原成字符串推理代碼短但坑集中。# predict.py節(jié)選 import cv2 import torch from charset import IDX2CHAR torch.no_grad() def predict_one(model, path, device, img_w160, img_h60): model.eval() img cv2.imread(path, cv2.IMREAD_GRAYSCALE) img cv2.resize(img, (img_w, img_h), interpolationcv2.INTER_AREA) img cv2.medianBlur(img, 3) img img.astype(float32) / 255.0 img (img - 0.5) / 0.5 x torch.from_numpy(img).unsqueeze(0).unsqueeze(0).to(device) # (1,1,H,W) ids model(x).argmax(-1)[0].cpu().tolist() return .join(IDX2CHAR[i] for i in ids)邏輯說明unsqueeze用了兩次第一次補通道維、第二次補 batch 維最后得到(1, 1, 60, 160)和訓練時DataLoader吐出來的形狀完全對齊。model.eval()不能漏它把 BatchNorm 從按 batch 統(tǒng)計切到用滑動平均值漏掉這一行單張推理時 BN 會拿自己這一張圖的方差去歸一化輸出會飄得非常離譜——這個現(xiàn)象很像「模型沒訓好」實際只是忘了切模式。參數(shù)說明img_w、img_h必須和config.py里的IMG_W、IMG_H一致建議直接從 config import 而不是寫默認值寫死默認值是遲早要出事的。IDX2CHAR從charset.py來和訓練時的CHAR2IDX同源這是保證索引不亂的根本。批量推理時把循環(huán)換成DataLoader再把join換成列表推導即可速度能快三到五倍。如果要導出 ONNX 給別的語言用torch.onnx.export的輸入形狀要寫死成(1, 1, 60, 160)動態(tài) batch 雖然支持但很多推理引擎對動態(tài)軸的處理不一致反而增加調(diào)試成本。5. 常見問題排查訓練不收斂、準確率虛高、顯存爆掉的真實踩坑下面五條是這類項目里出現(xiàn)頻率最高的問題每條按現(xiàn)象、原因、解決寫??吹臅r候?qū)φ兆约旱娜罩緞e急著改模型結(jié)構(gòu)。5.1 loss 一路降到 0.1 就卡死驗證整串準確率停在 30% 左右現(xiàn)象訓練損失很漂亮前 10 個 epoch 從 4.0 掉到 0.1之后紋絲不動。驗證集整串準確率在 30% 上下徘徊單字符準確率能到 70%。原因最典型的是學習率太大導致模型掉進一個「只認部分位置」的局部解。四個位置里有三個位置猜得準第四個位置全錯整串準確率就恒定在低位。另一種可能是最后一個位置的樣本分布和前面不同——比如生成數(shù)據(jù)時第四個字符的坐標抖動范圍更小模型學到的特征沒有泛化。解決先把學習率從1e-3降到3e-4重跑看曲線形狀有沒有變化。還是卡就打印每個位置的單獨準確率定位到具體是哪個位置在拖后腿。如果確實是某個位置的問題檢查數(shù)據(jù)生成代碼里那個位置的坐標范圍、顏色范圍是不是和其他位置不一致。我遇到過一次是生成腳本里random.randint(0, 6)寫成了random.randint(0, 60)字符被抖到畫布外模型學不到任何東西。提示逐位打印準確率的代碼只有五行加上去比盲猜快得多。5.2 訓練集 99%驗證集 40%但兩批圖明明是分開生成的現(xiàn)象訓練集準確率一路飆到 99% 以上驗證集卡在 40% 不動損失曲線在兩邊分叉得越來越大。原因數(shù)據(jù)泄漏。最常見的形式是訓練集和驗證集用了同一個隨機種子生成或者生成完之后按文件順序切分導致高度相似的樣本兩邊都有。另一種隱蔽的情況是標簽寫錯——驗證集的標注文件里有一批標簽和實際圖片對不上模型輸出其實是對的評測腳本判它錯。解決先把驗證集里挑 20 張圖人眼看一遍確認標簽沒錯。然后算一下兩批圖的哈希md5重復(fù)的直接揪出來。生成腳本里訓練集和驗證集必須用不同的種子并且切分時按標簽分層抽樣別讓某個字符在驗證集里完全缺席。我一般會在切分后打印兩邊字符頻率的分布做一次比對這一步花不了一分鐘能省下幾小時的懷疑人生。5.3 換了字符集之后模型輸出固定幾個字符怎么訓都一樣現(xiàn)象把字符集從小寫字母擴到大小寫加數(shù)字重新訓練之后模型輸出永遠是0000或者aaaa。原因CHAR2IDX改了但IDX2CHAR沒同步改或者推理腳本里 import 的是另一份舊的映射表。訓練時標簽編碼用的是新表解碼用的是舊表兩邊一錯位輸出看起來就像模型啥也沒學會。解決字符映射表只能存在一個地方訓和推理都從charset.pyimport。加一個自檢函數(shù)訓練啟動時跑一遍from charset import CHARSET, CHAR2IDX, IDX2CHAR assert all(IDX2CHAR[CHAR2IDX[c]] c for c in CHARSET), 字符映射不互逆 assert len(CHARSET) len(set(CHARSET)), 字符集有重復(fù)字符第二行斷言防的是字符集里混進重復(fù)字符比如013456789里漏看了個3映射表的長度和實際類別數(shù)對不上模型最后一層維度會算錯但報錯信息很難指向根因。5.4 把 batch_size 從 64 調(diào)到 8loss 直接變成 NaN現(xiàn)象為了在顯存小的機器上跑把 batch 改小訓練幾百步之后損失變成nan之后再也回不來。原因BatchNorm 在極小 batch 上方差估計極不穩(wěn)定。batch 為 8 時每個通道只有 8 個樣本參與統(tǒng)計方差可能接近 0除下來數(shù)值爆炸反向傳播時梯度變成inf參數(shù)被污染后整個訓練崩掉。解決三條路按優(yōu)先級排。一是保持 batch 不小于 32顯存不夠就降分辨率或者減小通道數(shù)二是把 BatchNorm 換成 GroupNorm它對 batch 大小不敏感代價是收斂稍慢一點三是用梯度累積optimizer.step()每累積 4 個小 batch 調(diào)一次等效于把 batch 放大四倍但 BN 統(tǒng)計仍然是按小 batch 算的所以必須配合方案二才徹底。# 梯度累積 GroupNorm 的組合寫法 loss loss / 4 loss.backward() if step % 4 0: torch.nn.utils.clip_grad_norm_(model.parameters(), 5.0) optimizer.step() optimizer.zero_grad()5.5 訓練時準確率很好換了批圖推理結(jié)果全錯現(xiàn)象驗證集上整串準確率 90%拿幾張新生成的圖去推理輸出幾乎是隨機的。原因推理腳本的預(yù)處理和訓練不一致。常見差異包括訓練用cv2.imread讀灰度推理用 PIL 讀 RGB 再手動轉(zhuǎn)灰度兩個庫的灰度轉(zhuǎn)換系數(shù)不同訓練做了中值濾波推理忘了訓練歸一化到[-1,1]推理只除以 255。這些差異單看都微不足道疊加起來足以讓模型失效。解決把預(yù)處理抽成一個函數(shù)訓練和推理都調(diào)它。參數(shù)從同一個 config 讀別在推理腳本里寫默認值。我習慣在訓練開始前隨手存一張預(yù)處理后的中間結(jié)果到磁盤推理時拿同樣一張圖跑一遍兩張圖逐像素比對差超過 1e-6 就說明路徑不一致。這個檢查不用改任何業(yè)務(wù)代碼兩分鐘能做完。6. 二次開發(fā)換字符集、改變長、上部署的改造路徑真拿這個項目去接需求改動能落到三個地方按改動成本從低到高排。6.1 換字符集與變長輸出的具體改法換字符集是最簡單的一種。只改charset.py的CHARSET字符串和config.py的MAX_LEN然后從頭重訓。別試圖在舊權(quán)重上繼續(xù)訓類別數(shù)一變最后一層全連接的維度就變了加載權(quán)重必然報 shape 不匹配硬改strictFalse會丟掉整個分類頭等于重訓還多了個錯誤來源。字符長度不固定時把逐位分類頭換成 CTC。主干網(wǎng)絡(luò)和數(shù)據(jù)集基本不動改三處import torch.nn as nn # 1) 分類頭輸出時間步而非字符位置把最后的 view 改成 # return x.view(-1, self.num_classes, T) 然后 permute # 2) 損失換成 CTCLossblank 必須是 0 ctc nn.CTCLoss(blank0, zero_infinityTrue) log_probs model(imgs).log_softmax(2).permute(1, 0, 2) # (T, B, C) input_lengths torch.full((B,), T, dtypetorch.long) loss ctc(log_probs, targets_flat, input_lengths, target_lengths) # 3) 解碼走貪心argmax 之后去重、去 blank def greedy_decode(ids): out, prev [], -1 for i in ids: if i ! prev and i ! 0: out.append(IDX2CHAR[i]) prev i return .join(out)參數(shù)說明zero_infinityTrue是必須開的否則當某個樣本的標簽長度超過時間步 T 時損失會返回inf并污染整個 batch 的梯度。T 的大小由特征圖的寬度決定輸入 160 寬經(jīng)過四次池化剩 10 個時間步意味著標簽長度最多 10四位字符綽綽有余但如果要識別十幾位的長串就得減少池化次數(shù)或者加寬輸入。這個約束在寫網(wǎng)絡(luò)結(jié)構(gòu)的時候就要算清楚訓到一半發(fā)現(xiàn) T 不夠只能推倒重來。改造前建議先用小數(shù)據(jù)集跑通整條鏈路確認識別正確再上全量。判斷標準很直接訓練 500 步之后loss應(yīng)該穩(wěn)定下降到 3 以下如果一直在 8 附近晃八成是input_lengths或target_lengths傳錯了單位。6.2 落地前的驗證清單上線前我會過一遍這張表每一項都對應(yīng)過真實的翻車場景。改造點涉及文件驗證方法主要風險換字符集charset.py、config.py訓練前跑互逆斷言新舊映射混用導致亂碼改圖片尺寸config.py、models/cnn.py打印 Flatten 后維度全連接層維度不匹配換 CTCmodels/cnn.py、train.py單 batch 過擬合測試時間步不足導致 inf導出 ONNXpredict.py與 PyTorch 輸出逐元素比對BN 未切 eval 模式加數(shù)據(jù)增強data/dataset.py驗證集不加增強增強污染驗證指標單 batch 過擬合測試是我最常用的手段拿 8 張圖反復(fù)訓 200 步如果損失降不到接近 0說明網(wǎng)絡(luò)容量或者數(shù)據(jù)管線有問題跟超參無關(guān)。這個測試能在十分鐘內(nèi)排掉一大半「訓練不收斂」的偽問題。從那以后我每次動數(shù)據(jù)管線都會先拿 8 張圖做一遍過擬合測試確認這條路走得通再去碰全量訓練。字符識別這行沒有玄學絕大部分「模型學不會」都是數(shù)據(jù)和預(yù)處理在背后捅刀子把這條紀律守住能省下的時間遠超想象。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
操逼视频色| JULIA一区二区三区在线播放| 日本91白丝| 女性91网站| 国产亚洲色婷婷99精品91| 2017人人操,人人摸| 伊人操操| 91在线无码精品秘 软件| 啊啊啊爽爽| 精品无吗久久| 日韩精品视频在线观看一卡二卡| 中文字幕在线免费观看 | 国产怡红院| 女人被男人桶爽视频网站| 伊人在线大香蕉二。| 六月婷婷综合| 日韩免费看黄片| 成人性交免费视频| 天天天操天天天爱| 97久久精品亚洲中六字幕| 97超碰人人模人人拍人人| 99热导航| 亚洲AV成人无码久久精品播放| 天天日天天干少妇日| JULIA一区二区三区在线播放| 蜜臀av中文字幕| 成人免费不卡在线视频| 色黄污美女啪啪啪免费网站| 欧美色九九| 激情五月天校园春色网| 江都AV在线| 女同性恋久久| 91人妻素女| 亚洲欧美日韩偷拍色图| 久久熟女嫩草成人片免费| 综合五月婷婷| 九九九九九九九精品视频| 高清一区AV无码| 熟女精品日韩一区二区三区| 久啪视频| 久久九操在线观看| 成人在线午夜视频一区| 久久熟女久| 夫妻四区五区六区| 日韩国产成人自拍视频| 国产美女销魂在线观看不卡| 中国一区二区亚洲人妻| 中文字幕美女91| 久久久一区二区三区三州| 久久熟女嫩草成人片免费| 好湿好紧好爽 视频| 国产第25页在线观看| 色婷婷六月丁香七月婷婷| 精品9999| 人人澡人人澡人人| 久久夜夜夜| 欧色综合| 美女高潮视频91| 久久国色天香香蕉| 激情文学 国产一二三aV| 色好看av| 夜夜狼人妻| 日韩一区二区熟女| 九热大香蕉| 国产av青草| 激情图片伦理国产一区二区日韩| 97色视频在线| 色偷偷人人玩人人舔人人操人人摸人人爽 | 日日干男人的天堂| 加勒比AV天堂| 久久久无码精品人妻二区| 天天干1区2区在线| 久操国产在线| 欧美人体性爱互联网第一页婷婷日本| 老色鬼成人精品视频下载大在线观看| 狠狠97| av草草在线电影| 人人摸人人干| 五月天欧美色图| 亚洲做性| 一级性爱视频免费观看 | 午夜福利1区2区3区| 精品97久久| 91综合网| 精品亚洲黄色片 国产精品导航一区二区| 91精品久久久| 91九色精品熟女内射| 小泽玛利亚一二三| 97超碰中文字幕| 蜜臀99久| 一区二区三区 日韩欧美| 日本人妻A片成人免费看片| 欧亚性爱视频免费看| 色色婷婷五月天| 夜夜爽爽爽| 神马午夜久久久| 色综合99999| 欧美—性—交—色| 超碰欧美97| 老熟女搡BBBB搡BBBB视频| 国模无码人体一区二区三| 日韩av电影成人在线| 97欧美性爱| 五月丁香六月激情| 校园春色综合香蕉| 九九九热| 日本免费中文一区二区三区四区| 啊啊啊啊好疼视频| 午夜性刺激视频免费观看| 亚洲小电影免费涩涩成人在线高清| 国内偷拍精品一区二区| 综合国产97| 九九热午夜欧亚国产视频| 性91| 欧美99热| 欧美精品久久| 伊人五月天婷婷| 国产97色在线| 91国产丝袜美女| 久久久久久久久久久精| 国产一级高跟丝袜| 日韩三级在线观看mp4| 97亚洲在线| 国产精品国产拍高清AV| 狠狠操夜夜操蜜桃视频三区| 九九久精品| 一区二区三区成人高清视频| 超碰97资源大奶| 超碰97 线线 在现| 曰韩av中文字幕专区| 欧美丝袜美女电影一二三四区| 欧美日韩在线视频网站| 欧美少妇内射| 一级婬片120分钟试看| 东北夫妻性偷拍| 久久专区| 五月激情小说| 啊啊啊好想要| 久久欧美按摩999| 欧美性夜| 中文字幕一区 二区三四五 区日 日骚| 欧美人妻二区三区| 97欧美日韩| 亚洲超碰AV| 欧美久久人妻少妇一区二区| 日韩性爱人人爱人人操| 国产精品3| 欧美性爱18观看| 黑丝91视频| 精品人妻免费观看| 国产视频第2页| 老女人综合网| 成 人 影视 一区 二区 三区 四区| 好爽要喷了| 国内三级自拍小视频在线观看| 亚洲偷91色| 一本一道vs波多野结衣| 人妻熟女av国产网站| 都市激情人妻一区二区青青操视频 | 五月天婷婷成人网| av在线一区二区三区| 啊啊啊啊好疼| 91neishe| 国产黄色视频久久| 男人的天堂久久狠| 色播五月丁香| 黑人精品XXX一区一二区| 男人的天堂激情| 一级毛片电影免费看| 91 国产丝袜在线放观看 | 乱性AV| 69视频福利导航| 手机在线A片| 啊啊啊操死我了| 欧洲天天在线| 日本淫乱女一区二区三区视频| 亚洲乱色视频一区、二区在线| 国产辣妈在线视频福利| 精品中文一区二区| 99操| www成人啪啪18秘 免费| 97亚洲欧美| 欧美激情一区二区| 九九色色| 色色色五月婷婷| 岛国福利在线精品播放| 欧美春色| 大香蕉伊人网WWWn0n| 91成人久久| 日日躁夜夜躁狠狠躁超爽| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 日日夜夜青青草母狗| 日韩操p| 欧美玖玖爱免费玖玖| 五月婷婷色| 人人爱人人乐人人操| 二三四区精品| 玖玖蜜臀资源网| 99热最新| 亚洲欧美国产其他二区| 91P0RNY大屁股人妻| 伊人宅男大香蕉| 1二区9| 国产精品无码av在线 | 国产午夜福利电影免费在线观看| 精品人妻一区二区三区蜜桃视频| 国外91| 日韩在线女优天天干| 日本一级性爱| 激情国产乱伦Av| 伊人天天久久动态图| 色777999综合| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 亚州性9| 尤物视频偷拍免费| 97超碰免费生活| 91精品人妻一区二区三区蜜桃臀| 久久久夜夜嗨免费视频| 欧美v亚洲v日韩v最新在线二区| 欧美性爱第一页久久| 大香蕉伊人75| 久久亚洲一区女同性恋中文字幕| 91痴汉| 亚洲日韩黑丝| 91日日夜夜| 歐美性天天| 特级大荫道BBwBBwBBW| 嗯嗯嗯嗯啊啊啊好紧好大| 亚洲综合小说另类图欧美视频激情小说色五月天| 青椒国产97在线熟女| 国产操逼视频在线观看| 艹少妇网站| 丰满岳乱妇一区二区三区| av天堂电影网| 中日韩久久久免费看| 国产少妇高潮| 狠狠夜色午夜久久综合在线| 亚av顶级裸体一区二区三区四区五区| 97 九色| 成人精品欧洲亚洲| 久久精品无码熟妇一区二区三区视频导航 | 亚洲国产综合久久天堂| 中文字幕高清20页视频| 吉田爱美AV在线| 大香网伊人久久综合| 久久久18| 旡码电影特区| 中文字幕片| 91狠| 粉嫩AV一区夜夜嗨| 欧美色爱综合| 精品人妻一区二区三区在| 免费精品无码一级毛片牛牛影视 | 懂色中文一区二区三区| 久久黄色性爱视频| 91精品大奶人妻| 五月丁香婷婷综合| 欧美高潮在线| 9九九国产| 欧美在线电影| 无遮挡一级毛片视频免费的| 日本三级韩三级99久久| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 久9九综合在线| 亚洲在线网站| www.人人cao| 欧美熟妇精品黑人巨大一二三区| 男人网站婷婷| 久久免费9| 手机看片91人妻| 亚洲国产另类在线中文| 亚洲天堂99| 色哟哟-国产专区| 青青草精品| 色综合 加勒比| 97爱爱爱| 午夜理论片在线观看免费| 亚洲人妻一区二区三区| 国内一区二区三区| 操操逼视频| 婷婷激情五月| 亚洲综合大片| 亚洲AV成人无码一二三久久| 97超碰国产亚洲精品资源| 999 久久久| 啊啊啊啊操死我| 26uuu性物| 成人情色一区二区| 激情文学小说一区二区 | 欧美色宗合| 亚洲国产奇米影视久久| 午夜呻吟欧美| 肏逼视频日本| 精品国产嫩穴视频| 国产午夜精品一区二区三区牛牛| 6080YYY午夜理论片在线观看| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 丁香五月电影| 欧美色图97| 国产成人超碰在线| 天天摸夜夜摸| 国产家庭乱伦表演| 97干日韩| 啊啊啊啊网站| 日本91白丝| 午夜视频久久久| 岛国AB视频| 免费久久9999| 亚洲熟女性高潮久久久| 可以免费观看的AV| 日日骚网站| 亚洲操人| 日本二三四区| 亚洲性爱高潮影院| 狠狠操狠狠操操| 日本三级久| 中文子幕一二三| 日本免费中文字幕在线 | 欧美天天影院| 欧美疯狂做爰xxxx| 久热精品在线| 天天综合色| 人妻人久久精品中文字幕| 亚洲人妻中文高清| 欧美日韩国产色五月综合在线| 国产人伦a片信息免费片| 亚洲中文电影| 亚州操逼图| 夜夜无码| 色综合网1| 另类小说欧美激情校园春色| 色综合色色| 日本韩国五十路六十路七十路老熟女作爱视频网站| 大香蕉520| 久久久精品网| 久久超碰、| 在线a v| 美国三级日本三级久久99| 天天插夜夜操| 亚洲精品久久久久久| www.99色| 成人AV超碰免费在线| 99热 按摩 日韩| 黄网色一区二区三区四区精品| 九九久精品| www久久久| 熟妇综合一区二区三区| 碰人碰碰人人开房人肉| 97久精品| 岛国黄| 亚洲AV色图一区| 男人兔费天堂| 国产精品网址| 色图综合| AV男人天堂网| 嗯~啊~快点 死我视频| 丁香婷婷五月| 在线看污网站| 日日日骚女人精品| 中亚av| 青娱乐欧美激情一区二区| 久久精品无码熟妇一区二区三区视频导航| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 91少妇人妻| 啊啊好多水| 强奸乱伦av电影| 啊啊啊啊啊啊啊啊视频| 色99久草| 性吧在线视频| 亚洲中文日韩欧美大香蕉视频| 欧美 亚洲 第一页 | 一牛影视久久久一区二区三区| 最新亚洲人成网站在线影院| 欧洲亚洲少妇| 密臀在线视频| 少妇天堂| 性欧美999| 在线情色电影 91大| 色蜜AV| 亚洲黄色a级片| 亚洲高清无毛一区二区| 色欲av一区二区三区蜜芽| 天天澡天天爽日日AV| 日本大香蕉综合网红本杳社区| 国产亚热在线久久| 精品女同一区二区三区| 992视频一区| 天天影视综合色| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 张柏芝国产一区在线观看| 熟妇熟女一区二区三区| 国语对白在线播放视频| 午夜福利成人免费视频| 欧美色色色| 色婷婷电影网| 精品美女在线视频| 国产十八禁视频| 午夜综合在线| 97伊人| 色欲久久99国产精品久久久久久| 超碰在线免费一区二区三区| 2024年最新色情网站在线观看| 国产1024在线播放| 亚洲精品乱码线路中文字幕| 精品在线观看视频在线| 婷婷久久五月| 99丝袜福利在线播放| 99re8超碰| 成人一区二区三区四区| 这里只有精品97| 免费国产视频| 亚洲国产欧美另类自拍| 中国亚洲呦女专区| 插入综合网| 久久久18禁| 98超碰日本| 午夜啊啊| 69XX一中文字幕人妻91| 欧美顶级黄色大片免费| 精品女人999| 欧美日本天堂| 干B网| 色屁屁影院www国产| 国产精品69人妻无码久久久| 日日操天天操| 午夜福利在线视频1000| 97在线观看视频| 中国少妇啪啪视频| 色五天伊人| 天天肏夜夜肏| 欧美97日韩精品| 997色在线| 91欧美在线| 熟女色综合久久| 精品丰满人妻一区二区三区免费观| 91国产大片| 90后后入| 思思热久久成人| 97色婷| 色五月天AV| 岛国天天午夜影院传媒网| 美日韩男女操屄视频| 国产精品一区二区 尿失禁| 德国一二三不卡| 日本天堂在线播放| 人人做天天爱| 性色avv| 91亚洲黄色网| 久久综合资源一区二区| 91亚州欧美| 国产sv美女内射| 欧美日韩性爱无码| 中国小夫妻勾搭露脸淫荡对白| 久久久日本电影| 日本操嫩b网| 啊嗯好大视频在线观看| 天天色欧美| www网站黄| 91真人天天在线| 国产精品精品系列在线观看| 另类图片五月| 91色欧美| 亚洲欧洲网站免费观看| 久久精品国产97欧美精品亚洲 | 在线观看亚洲专区| 亚洲男人的天堂在线看| 国产真乱mangent| 另类图片五月| 蜜桃狠狠色伊人亚洲综合网站| 亚洲图片欧美在线视频| 欧亚 另类 久| 成人午夜视频免费播放| 中文字幕黄色一起草| 色婷婷九月天天综合| 伊人久久蜜月| 男女性感激情网站| 日本淫穴在线| 日韩国产乱子伦App| 日韩欧美被操黄免费观看| 日韩精品中文字幕人妻| 天天干天天日天天射黄色大片| 91骚熟女| 免費人妻夜夜爽天天爽爽一区| 91熟女视频| 亚洲一二三精品久久网| 午夜视频久久久久一区| 天天看高清麻豆| 岛国视频一二三区| 大干人妻| 亚洲激情四射| 久久神马| 人妻内射一区二区在线视频| 一区三区啪啪| 性高潮久久久久久久久久久| 国产这里只有精品| 亚欧高清| 精国久久一区二区三区98| 国产黄色av大片网站| 欧美大香蕉同搞| 秋霞一区二区三区四区五区六区七区| 亚洲成熟国产精品美女| 91丝袜视频在线观看| 日韩乱码Av| 成人无码在线视频网站| 天天搞欧美| 亚洲成人碰碰| 性爱Av免费| 91亚.色| 69超碰综合| 美国精品国产精品| 凹凸 69堂 在线播放| 少妇一线天久久久久久| 国产人妖的免费的视频| 欧美色97| 国产丰满熟夫69mpp| 日本午夜福利影院| 国产亚洲99久久精品熟| 国产夫妻性生活视频| 欧洲综合视频| 手机在线观看不卡无码av| 神马久久久久久| 性交一区二区在线播放| 极品五月天噜噜| 草草影院日本第一页| 伊香蕉综合久久久久久久噜噜噜| 日本一片一区| 能看的AV| 久久久亚洲高清不打码| 思思热一热婷婷热一热| 久久久久久中文版| 性爱视频久久| 五月丁香拍拍激情综合三级| 女人天堂av在线播放| 天天热精品| 在线啊啊啊啊| 久久怡红院| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 精品99999久久久久久| 天天干夜夜一操| 亚洲A曰本VA欧美VA视频| 97精品国产97久久久久久| 蜜臀AV一区二区三区| 国产一区麻豆免费观看| 男女打扑克高清网站| 91精品人妻一区二区三区蜜桃臀| 99热在线播放| 乱伦av.com| 中文字幕美女91| 啪啪自拍九九综合| 老熟女综合网| 人妻色情天天操| 动漫av中文| 9超碰免费| 伊人久久青青草| 欧美精品999| 在线视频日韩欧美国产| 亚洲成?V人片在线观看福利| 91精品久久久久五月天精品| 另类小说综合网| 日韩欧无码一区二区三区免费不卡 | 高清不卡国产| 狠狠 91| 清柠毛片| 啊啊啊不要好疼视频| 亚洲九区| 色色色热| 国内91熟女人妻丝袜天天精品视频在线 | 中文字幕高清20页视频 | 91精品人妻一区二区三区蜜桃| 女人天堂网| 少妇精品久久久八区九区| 视频黄站| 亚州黄站| 国产剧情在线| 成人性爱免费播放| 成人精品一区二区91毛片不卡| 伊人久久在线视频观看| 乱伦av.com| 久操不卡视频| 国产玖玖| 国产农村妇女精品1区二区| 操B久久| 日本一天色道久久久精品视频| 欧美少妇性乱| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产呦精品系列在线观看| 男人的天堂 在线一区| AV乱伦国产| 草草影院最新网址| 亚洲av强奸乱伦| 密桃99999| 六月丁操逼| 亚洲人精品午夜不卡| 蜜臀久久99精品久久久久久成人小说 | 亚洲中文字幕妇伦久久| 欧美A√综合网| 久久9免费视频| 亚洲男人天堂2017| 欧美18老人禁| 人人插人人摸人人| 欧美性特| 日韩中文字幕宗合在线| 久久精品—区二区三区内射| 日韩无码三级影院| 99热这里只有精| 成人综合网 欧美| 亚洲男人天堂视频| 亚洲AV成人精品网站在AV| 日韩不卡在线一区二区| 国产后入精品| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产辣妈在线视频福利| av婷婷色网| 麻豆精品三区视频| 东京热双插| www.久久最新地址| 青娱乐 成人娱乐在线| 欧美 综合 亚洲| 久久一区二区三区四区五区| 国产精品香蕉热久久新品| 禁片 高清 在线观看视频网站| 二三四区精品| av天堂电影网| 日韩性爱网址| 熟女网站最新| 日本操逼视频在线| 一区二区激情国产熟女 | 中文字幕国产在线天堂| 99色在线视频| 蜜臀久久99'精品久久久| 国产精品第一区第一页| 激情综合97| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 欧美同性恋 的搜索结果 - 91n| 国产丝袜欧美在线视频| 一区二区三区在线资源| 精品在线78| 日本性爱不卡视频| 中文字幕久久亚州无码| 国产精品露脸在线观看| 操死我干死我| 亚洲欧洲成人在线电影| 午夜精品99久久久久传媒| 中国和日本人色哪个不下载能放| 久久久久国产精品片区无码直播| 欧美综合 站| 日本欧美韩国国产在线| 久久久久久久久久久久黄色 | 日本99视频| 青青草原av| 国产超碰人人操| 超碰社区97| 欧美黄片欧美黄片xxx| 精品人妻一区春色| 女人 A一级| 亚洲精品蜜桃久久久久久久| 国产精品一区二区校花| 偷拍色图| 国产精品久久久久无码AV会牛| 欧美大色交| 人人操人人叉人人插人人| 岛国不卡超碰护士AV在线播放| 琪琪精品免费一区二区三区 | 中文人妻av高清一区| 97免费视频网| 国产一区二区a毛片| 骚人妻少妇视频| 亚洲一级性爱视频免费看| 人妻免费观看| 亚洲蜜桃V妇女| 欧美丝袜亚洲| 91oumei| 国语av狠狠色丁香婷婷综合激情| 色好看av| 精品久久久久av影院| 素人伊尹大香蕉免费下载视频| 亚洲欧美中文日韩视频中国语| 大香蕉人妻久久| 91 手机在线播放 绯色| 亚洲黄片免费在线播放| 天天日天天操VV| 极品色www影院| 精品999一区二区| 有码免费观看| 乱伦图av| 福利视频网站| 成人热久久精品| 爱做久久久久久| 精品少妇999| 九九九九九九视频| 日本色色色| 影音先锋每日最新资源在线观看| 91超碰碰在线| 五月丁香六月激情| 亚洲无码太久| 国产精品伦理| 色色99| 天天插天天操| 国产一区二区成人av在线播放| 夜夜夜夜爽| 亚洲国产精品久久久久久久久久| 18啪啪手机免费性爱| 久久久久久久久9| 国产一区麻豆免费观看| 九九热九九| 少妇一区二区三区高速| 精品亚洲天堂| 试看60秒| 成人日韩中文字幕| 五月丁香| 无码聚合| 亚洲精品一区二区精品| 日逼97| 欧洲精品欧洲精品| 97欧美精品综合| 婷婷亚洲综合| 极品尤物女神在线观看| 中文字幕精品免费一区二区| 国产综合久| 欧美亚洲成人在线一区二区三区| 67914在线精品观看| 毛片电影一区二区三区| 欧美国产欧美在线观看| 乱伦熟女论坛| 久久人| 国产一区二区在线看| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 人妻 欧美亚洲| 欧美日韩亚洲高清不卡一区二区三区| 婷婷视频网| 欧美系列在线一区二区| 中文字幕,人妻,日韩| 视频不卡中文字幕| 猛猛干| 偷拍导航视频网站| 另类图片五月天| 亚洲精品人伦一区二区| 日欧毛片久久| 欧美在线l亚洲| 97免费免费视频网| 欧美狠狠弄| 九九九午夜| 偷拍 精品 另类 四区| Julia在线播放亚洲久久| 国产日韩欧美三级片| 殴美大黄片| 色噜噜人妻丝袜a∨先锋影| 国产精品无码av在线 | av72网| 超碰人妻中文在线| 99热 按摩 日韩| 欧美78| 欧美亚洲涩涩| 色欧洲97| 人妻天天爽夜夜爽2| 综合天天。| 后入福利| 男人天堂新| 精品久| 国产 日韩 欧美一区| 高清无码久操视频| 岛国在线免费视频| 欧美日韩国产高清在线一二三区 | 午夜啪| 国产隔壁老王影院在线| 精品国产一区二区三区香蕉欧美| 亚洲一区二区三区播放在线| 无色无码| 美日韩成人| 超碰爽人妻熟女Av| 男人网站婷婷| 日韩欧美~中文字| 78精品| 成人五级久久| 色综合久久88色综合久久天天| 蜜乳av首页| av优播| 综合天天网| 丰满少妇精品一区二区| 天天综合网~91| 色色五月婷| 农村妇女一级二级三级视频| 亚洲妇色| 狠狠爱夜夜干| 白嫩少妇| 国产精品欧美日韩久久| 国产毛片精品一区二区色欲黄A片| 亚洲欧美九九| 天天操人人操骚逼网站| 舔人妻中文免费视频| 亚洲天天更新| 天天色天天干天天射| 激情五月天丁香| 91偷拍欧美亚洲| 欧美后入式| 亚洲在线网站| www..com操老师| 午夜天堂精品久久久久91| 久久精品国产99国产精品亚洲| 午夜操操操| 成人无遮挡毛片免费看| 91久久99久久91熟女精品| 久超超碰| 女优大全 - 91n| 夜间福利片1000无码| 日韩欧美麻豆大片| 少妇高潮九九九九九九九| 国产亚洲性生活视频播放| 性爱综合网| 一区二区三区色综合| 97在线观看| 日韩精品一区二区三区色欲| 国产美女激情| 一级乱伦网站| 99热啪啪| 免费国产| 99国产精品视频尤物| 婷婷五月天激情网| 欧美日本不卡| 日本色色视频网站| 少妇99成人麻豆| 久久久78| 少妇干B| 涩涩久久精品| 性爱综合一区二区| 无码欧美有限公司| 日韩啪啪视频| 午夜男人一级A片7777| 无码人妻精品一区二区三区九九| 国产综合色精品在线观看| 97色色网| 91精品人妻一区二区三区蜜臀| 午夜福利成人免费视频| 伊人久久亚洲色欲综合网站 | 女人高潮大叫一级毛片| AV色五月天| 欧美天天干| 人妻爽爽啪视频| 国产精品亚洲色婷婷久久久| 久久综合日韩亚洲欧美| 女人天堂av在线播放| 久久香蕉国产传媒一区剧情天美| 78m成人视线| 激情综合五月| 亚洲欧美在线丝袜| 丁香六月婷婷| 人妻丝袜一区二区三区在线| 爱射综合| 亚洲熟女人妻中文字幕一区二区| 久操大香蕉| 97人人夜| 欧美九9 9 9| 男人精品区| 亚洲色图久久精品蜜| 超碰97久久| 亚洲aw毛茸茸在线| 五月婷婷丁香六月丁香| 久久久久久久久久久久久久久久9| 日本成人A片网站| 青青伊人加勒比海| 亚洲综合一区二区| 91老司机视频| 97色插| 26uuu欧美日韩| 五月天欧美色图| 热九九精品| 精品人妻一区二区三区四区不卡在| 97精彩视频网站| 大香蕉乱级| 久久偷偷色综合蜜桃| 亚洲欧洲网站免费观看| 亚洲欧美黄| SS久久| 久久久夜夜嗨免费视频| 骚女天天综合网| 国产熟妇一区二区| 国产日本久久免费精品| 久久久四区| 青青草手机在线免费观看| 强奸乱伦αv片| 色香天天| 久久久久久9999| 女人 A一级| 亚洲色交| 亚洲Av噜噜一区二区三区妖精| 日韩不卡av一二三| 看日韩黄片| 91老熟女91老女人| yirendaxiangjiashipin| 中文字幕交换人妻| 夜夜欧美| 欧美日动态视频| 欧美激情综合色综合啪啪五月| 日韩av免费一级电影| 骚妻少妇精品性色无码四色A V| 超碰日本97美女人妻人人玩人人爱| 一级毛片久久久久久久女人18| 天堂亚洲精品| 亚洲综合影片| 九九av| 国产综合网站在线播放| 久热一区二区| 精品久操| 东京热av男人的天堂| 精品人妻伦一二三区久久| 久操凹凸视频| 久久精品国产精品一区| 插插综合网天天影视网| 久久久久亚洲精品| 看看小穴| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 精品九九国产无码| 啊啊啊网站| 欧美日韩人妻精品一区二区三区| 1204av韩国| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 日本3级一区二区免费| 国产黄色影片在线观看| 91亚洲网| 啊啊啊好大好深| 美女91av| 欧美 牲| 亚洲国产剧情少妇激情| 五月丁香网站| 人看人人摸人人操| 神马久久久久久伦理片| 国产无码久久高清| 九七超碰| 欧美翘臀视频网站一区二区三区| 伊人96在线| 国产一区二区三区久久精品太古里| 久久久久久久久久久97| 国产久久一区二区午夜| 色五月婷婷久久| 大伊香蕉在线视频免费| 黄色欧美性爱视频| 性开放中文AV高清无码免费看| 婷婷在线视频在线观看| 美国日韩黄片| 欧美性爽xyxOOOO| 欧美综合天天| 欧美亚洲高清| 久久久999| 操碰97| 成年无码动漫av片无尽在线| 91无遮挡| 性夜影院爽黄A爽免费动漫| www.av家庭乱伦| 日韩日本欧美在线观看| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 亚洲国产综合久久久性感熟妇| 综合日本女人伊人| 99爱久久视频频| 日本精品人妻少妇一区二区| 泰国AV在线观看| 色妹子A V| 国产13区| 国产精品视频播放| 日韩欧美天天爽爽爽天天爽爽| 国产女人9999| 久草电影网| 天天综合青苹果| 国产女大学生AV| 内射老妇BBWX0C0CK| 亚洲 欧美 偷拍 唯美| 国模无码一区二区三区在线| 亚洲中文一区二区三区视频| 超碰在线成人| 久久色人体| 大香蕉在线视频重口味毛片在线| 日韩少妇无吗| 97在线日韩中文字幕| 老熟女91视频| 另类图片欧美激情综合| 国产精品一级特黄aaa大片在线观看| 久久精品高清AV| 色播五月婷婷| 人人综合| 视频在线观看青青99国产| 久久女人| 99久国产精品午夜性色福利| 26uuu国产免费观看| 天堂岛av| 自拍视频大全亚洲专媒视频/一区二区三区 | 国产色综合亚洲色综合吹潮| 国产亚洲精品玖玖玖在线观看| 97碰在线视频| 91色噜噜狠狠| 国产精品大屁股999| 91老熟女| 国产 热久久久久国产精品| 国产精品大香蕉| 99啪啪| 亚洲高潮影院| 无码外流操逼视频| 婷婷五月综合激情| 国产精品久久久久久久久久久久久久久久久久 | 97欧美日韩综合| 人人操我人人干| 亚洲色诱惑| 国产五码丝袜屁眼| 欧美激情 亚洲色图| 国产强奸91| 亚洲欧美大香蕉| 欧洲精品区| 亚洲人妻中文在线视频| 中文字幕 国产区| 日本999精品视频| 干B网| 国产三区免费在线观看| 日本不卡码黄色| 亚洲精品熟妇1区2区3区。| 情趣丝袜无码操逼视频| 午夜大香蕉| 欧美精品久久| 美日韩男女操屄视频| 五月婷婷综合网| 呦女网站| 国产黄色在线播放观看| 精品妇女一区二区三区| 国产精品色约约| 天天插夜夜操| 99999久久久久9国产精品| 久久精品区| 国产福利影视| 97bbn| www.久久制服糖| 九九九九88| 麻豆成人AV| 久久99亚洲精品久久99果| 久操影视| 午夜福利激情在线视频| 色月天AV导航| 欧美色图片| 国产少妇与亚洲av| 999精品乱码| 丁香五月激情啪啪| 97色欧洲| 在线国产探花| 欧日韩一二三f区| 国产精品久久伊人| 97精选久久| 欧美性爱中文字幕无线码| se,,,亚洲欧美| 色欲av一区二区三区蜜芽| 爱爱动态试试看6 0秒| 日本一区二区亚洲综合| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚洲宅男天堂| 九九九九AV| 亚洲少妇色| 精品午夜福利| 欧美黄页在线| 日韩一级二级三级免费看完整版| 女优免费一区二区永久| 精品九九九九九九| 亚洲av夫妻操穴网| 91香蕉国产尤物视频| 欧美久久草熟女| 国产亚洲色婷婷久久99精品91 - 百度| 91狠狠综合久久久久久| 久久综合九色综合欧洲98| 激情露脸爱| 先锋激情∨在线视频播放| 亚洲性少妇| 国产一区二区视频在线播放| 欧美丝袜亚洲| 97天天摸天天碰| 国产精品直播在线观看直播| 亚洲大色堂| 日韩av在线免费网站| 亚洲资源一区| 亚洲天堂性爱| 日韩在线一区高清在线| 少妇人妻激情四射| 久久99精品视频| 东北女人操逼| 日日夜夜青青草母狗| 成人免费福利在线观看| sewuyueav| 亚洲棕合电彰| 中文一区在线视频| 东京热综合久久一区二区| 国产精品经典一卡久久久| 亚洲天堂AV在线播放| 精品国产乱码久久久久久久久久毛片| 超碰79人人乐| 欧美日日操| 欧美综合色,www| 97色欧州| AV综合中文字幕干| 日本成熟少妇A∨网站| 亚洲鸥美色图| 亚码激情| 久久亚洲AV无码专区国产精品| 96国产精品| 韩国女主播青草在线| 岛国精品视频在线观看| 久久久久中出| 一起草在线视频| 精品无码久久久久| 熟妇熟女视频一区二区三区| 精品国产乱码| 91bbbbbb| 成熟熟女国产精品一区二区| 六月激情网| 可能人人看人人摸| 天天爽天天操啊啊啊| 97视频www| 91蜜臀熟女| 思思性爱| 国产在线能看的你懂的| 五月天久久人妻| 青青草色插素人| 高清不卡视频| 色综合色色| 国产AV久久野战精品| 欧美影院一区二区三区| 亚洲九九视频| 天堂射| 久久一留热品黄| wwwss在线观看| 天天色综亚洲91污| 一区二区三区亚洲| 亚洲天堂男人天堂| 国产97av| 久久久久人| 99黄页网站| 亚洲棕合电彰| 激情四射婷婷四五月天| 大香蕉人妻| 亚洲综合中文字幕有码| 亚洲国产ⅴ高清在线观看| 中文久久| 91性感在线| 97日韩欧美亚洲| 91网站18+| 麻豆国产成人精品| 成人日本精品九区| 99热综合在线| 长长久久免费视频| 亚洲综合五月天| 国内三级自拍小视频在线观看 | 国产成人网址| 人妻99p| 国产精品久久久鸭无码的功能| 看一级特黄a大一片| 青椒国产97在线熟女| 日韩精品一区二区日韩| 伦激情人妻另类人妻| 国产精品国产亚洲区艳妇糸列| 97久久超碰| 亚洲男人电影天堂| 欧美性爱第1 页| 神马久久午夜| 粉嫩av在线| 成人小说另类在线| 老子午夜伦不卡影院| 91午夜无码| 性开放中文AV高清无码免费看|