日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

深度學習字符驗證碼識別CNN逐位分類Python實戰(zhàn) 簡介面向深度學習圖像識別初學者、安全方向開發(fā)者及課程設計學習者的字符型驗證碼識別實踐包圍繞數字與字符驗證碼的卷積神經網絡、循環(huán)神經網絡建模、訓練與預測流程展開可用于入門項目復現(xiàn)、算法練手和驗證碼識別方案調研。壓縮包共1210個文件約9.58MB其中978張png、202張jpg及少量bmp、jpeg圖片構成驗證碼樣本17個py腳本覆蓋數據處理、模型構建、訓練預測等環(huán)節(jié)另含txt說明、rst文檔、zip壓縮包與模型文件等輔助內容。已有1542人學習下載具備一定參考熱度。讀者可從中獲得從樣本歸一化、數據增強、one-hot編碼到CNN/RNN模型搭建、交叉熵訓練與結果組合的完整源碼脈絡并借助示例圖片和腳本理解字符序列識別、過擬合監(jiān)控及多字符輸出思路便于改造成自己的驗證碼識別項目。1. 從一批糊掉的字符圖說起這個基于深度學習的字符識別項目到底能干什么前陣子有人拿著一批自己生成的四位字符圖來找我圖上壓著干擾線和噪點人眼掃過去都得愣一下。他要的不是接個現(xiàn)成接口敷衍過去而是基于深度學習的字符型圖片數字驗證碼識別——從零訓一個模型出來。這份資源就是那條完整鏈路的 Python 實現(xiàn)數據生成、圖像預處理、網絡定義、訓練收斂、推理解碼一步不落源碼能直接跑起來。它的適用面比看上去寬。想完整走一遍「圖像輸入到字符串輸出」流程的深度學習新手可以拿它當第一個真正跑通的實戰(zhàn)做 OCR、票據編號、工牌數字、集裝箱號這類字符識別落地的開發(fā)者可以把它當成一個能直接改的基線。字符集小、長度固定、單通道灰度圖訓練成本低到一張消費級顯卡幾小時就出結果這才是它適合入門的核心原因。2. 目錄結構與技術選型一個字符識別項目該有的骨架先別急著看模型。字符識別這類項目跑不起來的原因九成不在網絡結構而在目錄沒分好、配置散在各處、訓練和推理各寫一套預處理。這套源碼的目錄劃分是我比較認可的一種改起來不牽一發(fā)動全身。2.1 六個文件撐起整條鏈路captcha_rec/ ├── config.py # 訓練/推理共用配置超參只在這里改 ├── charset.py # 字符集與索引映射訓練推理共用同一份 ├── data/ │ ├── gen_captcha.py # 自建數據集生成器 │ ├── dataset.py # Dataset 與預處理流水線 │ ├── train.txt # 每行 路徑\t標簽 │ └── val.txt ├── models/ │ └── cnn.py # CNN 主干 逐位分類頭 ├── train.py # 訓練循環(huán)、驗證、保存權重 ├── predict.py # 單圖/批量推理與解碼 └── utils/ ├── metric.py # 整串準確率、單字符準確率 └── seed.py # 固定隨機種子 └── requirements.txt這個劃分的關鍵在于三個「單一出口」config.py管參數、charset.py管字符和索引、dataset.py管預處理。很多人在自己寫的時候把預處理寫在訓練腳本里推理時又抄一遍抄錯一個cv2.resize的插值參數線上準確率立刻掉十幾個點這種血淚經驗我在別人的項目里見過不止一次。工程約定上train.txt和val.txt用制表符分隔路徑和標簽不用 CSV因為圖片路徑里偶爾會出現(xiàn)逗號。標簽一律小寫不做大小寫混排——字符集里0和O、1和l這類形近字符如果都保留模型在低分辨率下幾乎必然混淆除非你的業(yè)務真的需要區(qū)分。charset.py是全篇最容易翻車的地方把它單獨拎出來是值得的# charset.py 訓練和推理都必須 import 這一份禁止在別處重寫 CHARSET 0123456789abcdefghijklmnopqrstuvwxyz # 0 號位固定留給 CTC 的 blank逐位分類時從 1 開始用也不會浪費多少參數 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 改造逐位分類時多出來的那一類永遠學不會對結果沒有影響。參數說明CHAR2IDX的索引從 1 開始BLANK0是 CTC 的硬性約定改不了。IDX2CHAR必須和CHAR2IDX嚴格互逆我一般寫個斷言assert len(IDX2CHAR) len(CHAR2IDX)擋住手抖。config.py里我把所有數字集中了# 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é)又不至于讓全連接層參數爆炸。把IMG_W提到 320 而模型不變Flatten后的維度翻倍全連接層參數量直接四倍小數據集上過擬合會來得非常快。2.2 技術選型為什么先做逐位分類而不是一上來就 CRNN 配 CTC字符識別主流兩條路一條是固定長度逐位分類一條是 CRNN CTC 的序列識別。這個項目選的是前者理由很實在固定長度場景下逐位分類的訓練信號更直接。逐位分類把「識別 4 個字符」拆成 4 個獨立的分類任務每個位置一個 softmax損失是 4 個交叉熵的均值。梯度回傳路徑短收斂快20 到 30 個 epoch 就能把整串準確率推到很高的水位。CTC 則是把模型輸出當成一條時間序列靠動態(tài)規(guī)劃把所有可能的對齊方式加起來它對齊能力更強、支持變長但訓練早期收斂慢標簽長度和輸入長度不匹配時還會直接給你inf損失。對比項逐位分類本項目CRNN CTC字符長度必須固定任意長度收斂速度快幾十 epoch 見效慢常要上百 epoch實現(xiàn)復雜度低多一個 view 就行中要處理 input_lengths對字符粘連的魯棒性一般靠位置先驗硬扛較好典型翻車點字符集順序錯亂標簽長度 時間步導致 inf選逐位分類不等于偷懶。字符長度固定的業(yè)務場景——四位驗證碼、六位工單號、固定位數的批次號——占了實際需求的大頭用 CTC 屬于殺雞用牛刀還多背一份對齊邏輯的維護成本。真到了變長那天主干網絡和數據集代碼基本不用動只換分類頭和損失函數第 6 章會給具體的改法。主干網絡用的是最樸素的四段卷積。這套結構在字符識別上有個隱含優(yōu)勢四段MaxPool把 60×160 壓到 2×10特征圖上橫向還剩 10 個位置剛好夠 4 個字符各自找到自己的感受野又不會因為壓得太狠把相鄰字符糊在一起。換成三段卷積特征圖剩 7×20全連接層參數量漲到四倍小數據集上直接過擬合。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在無圖形界面的服務器上會報libGL.so.1找不到。這種錯誤看起來像系統(tǒng)環(huán)境問題實際是依賴裝串了浪費半天時間排查。我一般在服務器上只裝 headless 版本。charset.py里的字符集順序一旦定下來就不能隨便動。改了字符集順序而不重訓模型輸出的索引全部錯位表現(xiàn)是「訓練時好好的推理出來全是亂碼」這個坑在第 5 章會單獨展開。種子也要固定utils/seed.py里把random、numpy、torch三家的種子一起設復現(xiàn)實驗才有意義。3. 數據管線從字符圖片到能喂進網絡的張量模型再漂亮數據管線錯了全白搭。這一章拆的是data/gen_captcha.py和data/dataset.py兩個文件前者負責造數據后者負責把圖片變成張量。3.1 自建數據集字符圖怎么生成、怎么標注沒有現(xiàn)成數據集的時候自己生成是最快的路。真實業(yè)務里的字符圖片通常來自截圖或掃描件但練手階段用 PIL 合成完全夠用關鍵是干擾要加到「人眼勉強能認」的程度太干凈學不到東西太臟模型直接放棄。# 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))參數說明cell是單個字符分到的橫向格子寬度x的抖動范圍[-2, 4]讓字符略微越界模擬真實排版里的擠壓fill取0~90的深色而不是純黑是因為純黑在二值化之后對比過強模型會過度依賴筆畫粗細這個捷徑特征。噪點密度0.005是我試下來比較平衡的值提到0.02之后整串準確率會掉但單字符準確率還在說明模型開始靠猜。生成完記得寫標注文件路徑和標簽用制表符隔開一次寫一行訓練集和驗證集用不同的隨機種子分開生成——這一步是很多人的翻車點同一個種子生成兩批圖驗證集里混進和訓練集幾乎一模一樣的樣本準確率虛高得嚇人。3.2 預處理流水線灰度、去噪、歸一化與尺寸統(tǒng)一預處理的目標只有一個讓訓練和推理走完全相同的代碼路徑。dataset.py里這段是核心# data/dataset.py 預處理 張量化訓練和推理共用 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) # 單通道省顯存也省參數 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用于縮小是最不容易產生摩爾紋的插值方式換成INTER_LINEAR在 160 寬度下問題不大但換成INTER_CUBIC會引入振鈴邊緣出現(xiàn)假的筆畫。參數說明medianBlur的核大小必須是奇數且大于 13 是最小有效值5 會開始吃掉細筆畫。歸一化用(x - 0.5) / 0.5拉到[-1, 1]配合 BatchNorm 收斂更快如果網絡里全是 ReLU 而沒有 BN用[0, 1]也能跑差別不大但別兩套混用。DataLoader那邊兩個參數值得調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 上很關鍵。最后一批如果只剩 1 張圖BN 在單個樣本上算方差結果接近 0反向傳播時對這兩層參數的影響是災難性的表現(xiàn)出來就是「每個 epoch 最后 loss 尖刺一下」。我見過有人為此把學習率砍半其實是數據加載的問題。num_workers4在機械硬盤上開太高反而更慢開了pin_memory才真正省下主機到顯存的那段拷貝時間。3.3 數據增強的邊界能加什么不能加什么字符識別的增強比自然圖像窄得多??梢约虞p微旋轉±3 度、小幅平移±5%、對比度抖動、隨機加噪點。不能加水平翻轉字符會變成鏡像、大角度旋轉超出手寫體常識、隨機裁剪會切掉字符。import random def augment(img): # 只在訓練集上調用驗證集和推理一律走原圖 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增強函數里最忌諱的是「訓練加了、驗證也加了」。驗證集的唯一職責是反映真實分布一旦對它做隨機變換準確率曲線就失去了參考價值你根本不知道模型是在進步還是在適應增強。這條我在自己項目里定成硬規(guī)則augment只在trainTrue的分支里調用。4. 網絡與訓練CNN 逐位分類頭的完整實現(xiàn)前面鋪墊的數據和結構到這里收口。這一章拆三段代碼網絡定義、訓練循環(huán)、推理解碼每一段都能直接抄進自己的項目改。4.1 CNN 主干與逐位分類頭網絡結構上沒有花活四段卷積加兩層全連接重點是最后一層的形狀處理。# 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) # 關鍵一步把一維輸出拆回 (batch, 字符位置, 類別) return x.view(-1, self.max_len, self.num_classes)邏輯說明四次池化把空間維度壓到2×10Flatten后的長度是 2560接 512 維隱層。最后的view是整個設計的樞紐——如果不拆模型輸出是個 144 維向量沒法逐位算交叉熵拆開之后logits[:, i, :]就是第 i 個字符位置的分類分布損失可以直接逐位相加。參數說明Dropout(0.3)放在兩層全連接之間字符識別這種小數據集上 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)尺寸的網絡不是不能寫但全連接層會立刻鎖死尺寸后面改圖片寬高就得重訓所以一開始統(tǒng)一到 60×160 是省事的做法。4.2 訓練循環(huán)損失、優(yōu)化器和學習率調度訓練循環(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內部已經做了log_softmax加負對數似然不要在它前面再手動過一遍 softmax否則等于算了兩遍梯度會被壓扁到幾乎不動。逐位求和再除以max_len而不是直接相加是為了讓損失量級和單個分類任務對齊學習率不用跟著字符長度重新調。參數說明clip_grad_norm_的max_norm5.0是經驗值字符識別里梯度爆炸大多來自 BatchNorm 在小 batch 上的方差抖動裁剪能擋住絕大部分尖刺。訓練循環(huán)外配套調度器optimizer torch.optim.Adam(model.parameters(), lr1e-3, weight_decay1e-4) scheduler torch.optim.lr_scheduler.ReduceLROnPlateau( optimizer, modemax, factor0.5, patience3 ) # 每個 epoch 結束用驗證集整串準確率驅動 scheduler.step(val_acc)patience3表示連續(xù) 3 個 epoch 驗證準確率不漲就把學習率砍半。這個策略比固定步長衰減更適合小數據集因為收斂曲線經常是階梯式的卡住三個 epoch 之后往往還能再上一個臺階。weight_decay1e-4對 Adam 來說相當于 L2 正則在三千張左右的訓練集上能明顯壓住過擬合。驗證函數里我只算兩個指標——整串準確率和單字符準確率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關鍵在all(dim1)只有四個位置全對才算整串正確這個指標才是業(yè)務真正關心的。單字符準確率 95% 聽起來漂亮四個字符乘起來只剩 81%整串準確率才是能拿去交付的數字。兩個指標一起看還能定位問題——單字符高、整串低說明模型在個別位置上系統(tǒ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)象很像「模型沒訓好」實際只是忘了切模式。參數說明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)軸的處理不一致反而增加調試成本。5. 常見問題排查訓練不收斂、準確率虛高、顯存爆掉的真實踩坑下面五條是這類項目里出現(xiàn)頻率最高的問題每條按現(xiàn)象、原因、解決寫??吹臅r候對照自己的日志別急著改模型結構。5.1 loss 一路降到 0.1 就卡死驗證整串準確率停在 30% 左右現(xiàn)象訓練損失很漂亮前 10 個 epoch 從 4.0 掉到 0.1之后紋絲不動。驗證集整串準確率在 30% 上下徘徊單字符準確率能到 70%。原因最典型的是學習率太大導致模型掉進一個「只認部分位置」的局部解。四個位置里有三個位置猜得準第四個位置全錯整串準確率就恒定在低位。另一種可能是最后一個位置的樣本分布和前面不同——比如生成數據時第四個字符的坐標抖動范圍更小模型學到的特征沒有泛化。解決先把學習率從1e-3降到3e-4重跑看曲線形狀有沒有變化。還是卡就打印每個位置的單獨準確率定位到具體是哪個位置在拖后腿。如果確實是某個位置的問題檢查數據生成代碼里那個位置的坐標范圍、顏色范圍是不是和其他位置不一致。我遇到過一次是生成腳本里random.randint(0, 6)寫成了random.randint(0, 60)字符被抖到畫布外模型學不到任何東西。提示逐位打印準確率的代碼只有五行加上去比盲猜快得多。5.2 訓練集 99%驗證集 40%但兩批圖明明是分開生成的現(xiàn)象訓練集準確率一路飆到 99% 以上驗證集卡在 40% 不動損失曲線在兩邊分叉得越來越大。原因數據泄漏。最常見的形式是訓練集和驗證集用了同一個隨機種子生成或者生成完之后按文件順序切分導致高度相似的樣本兩邊都有。另一種隱蔽的情況是標簽寫錯——驗證集的標注文件里有一批標簽和實際圖片對不上模型輸出其實是對的評測腳本判它錯。解決先把驗證集里挑 20 張圖人眼看一遍確認標簽沒錯。然后算一下兩批圖的哈希md5重復的直接揪出來。生成腳本里訓練集和驗證集必須用不同的種子并且切分時按標簽分層抽樣別讓某個字符在驗證集里完全缺席。我一般會在切分后打印兩邊字符頻率的分布做一次比對這一步花不了一分鐘能省下幾小時的懷疑人生。5.3 換了字符集之后模型輸出固定幾個字符怎么訓都一樣現(xiàn)象把字符集從小寫字母擴到大小寫加數字重新訓練之后模型輸出永遠是0000或者aaaa。原因CHAR2IDX改了但IDX2CHAR沒同步改或者推理腳本里 import 的是另一份舊的映射表。訓練時標簽編碼用的是新表解碼用的是舊表兩邊一錯位輸出看起來就像模型啥也沒學會。解決字符映射表只能存在一個地方訓和推理都從charset.pyimport。加一個自檢函數訓練啟動時跑一遍from charset import CHARSET, CHAR2IDX, IDX2CHAR assert all(IDX2CHAR[CHAR2IDX[c]] c for c in CHARSET), 字符映射不互逆 assert len(CHARSET) len(set(CHARSET)), 字符集有重復字符第二行斷言防的是字符集里混進重復字符比如013456789里漏看了個3映射表的長度和實際類別數對不上模型最后一層維度會算錯但報錯信息很難指向根因。5.4 把 batch_size 從 64 調到 8loss 直接變成 NaN現(xiàn)象為了在顯存小的機器上跑把 batch 改小訓練幾百步之后損失變成nan之后再也回不來。原因BatchNorm 在極小 batch 上方差估計極不穩(wěn)定。batch 為 8 時每個通道只有 8 個樣本參與統(tǒng)計方差可能接近 0除下來數值爆炸反向傳播時梯度變成inf參數被污染后整個訓練崩掉。解決三條路按優(yōu)先級排。一是保持 batch 不小于 32顯存不夠就降分辨率或者減小通道數二是把 BatchNorm 換成 GroupNorm它對 batch 大小不敏感代價是收斂稍慢一點三是用梯度累積optimizer.step()每累積 4 個小 batch 調一次等效于把 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 訓練時準確率很好換了批圖推理結果全錯現(xiàn)象驗證集上整串準確率 90%拿幾張新生成的圖去推理輸出幾乎是隨機的。原因推理腳本的預處理和訓練不一致。常見差異包括訓練用cv2.imread讀灰度推理用 PIL 讀 RGB 再手動轉灰度兩個庫的灰度轉換系數不同訓練做了中值濾波推理忘了訓練歸一化到[-1,1]推理只除以 255。這些差異單看都微不足道疊加起來足以讓模型失效。解決把預處理抽成一個函數訓練和推理都調它。參數從同一個 config 讀別在推理腳本里寫默認值。我習慣在訓練開始前隨手存一張預處理后的中間結果到磁盤推理時拿同樣一張圖跑一遍兩張圖逐像素比對差超過 1e-6 就說明路徑不一致。這個檢查不用改任何業(yè)務代碼兩分鐘能做完。6. 二次開發(fā)換字符集、改變長、上部署的改造路徑真拿這個項目去接需求改動能落到三個地方按改動成本從低到高排。6.1 換字符集與變長輸出的具體改法換字符集是最簡單的一種。只改charset.py的CHARSET字符串和config.py的MAX_LEN然后從頭重訓。別試圖在舊權重上繼續(xù)訓類別數一變最后一層全連接的維度就變了加載權重必然報 shape 不匹配硬改strictFalse會丟掉整個分類頭等于重訓還多了個錯誤來源。字符長度不固定時把逐位分類頭換成 CTC。主干網絡和數據集基本不動改三處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)參數說明zero_infinityTrue是必須開的否則當某個樣本的標簽長度超過時間步 T 時損失會返回inf并污染整個 batch 的梯度。T 的大小由特征圖的寬度決定輸入 160 寬經過四次池化剩 10 個時間步意味著標簽長度最多 10四位字符綽綽有余但如果要識別十幾位的長串就得減少池化次數或者加寬輸入。這個約束在寫網絡結構的時候就要算清楚訓到一半發(fā)現(xiàn) T 不夠只能推倒重來。改造前建議先用小數據集跑通整條鏈路確認識別正確再上全量。判斷標準很直接訓練 500 步之后loss應該穩(wěn)定下降到 3 以下如果一直在 8 附近晃八成是input_lengths或target_lengths傳錯了單位。6.2 落地前的驗證清單上線前我會過一遍這張表每一項都對應過真實的翻車場景。改造點涉及文件驗證方法主要風險換字符集charset.py、config.py訓練前跑互逆斷言新舊映射混用導致亂碼改圖片尺寸config.py、models/cnn.py打印 Flatten 后維度全連接層維度不匹配換 CTCmodels/cnn.py、train.py單 batch 過擬合測試時間步不足導致 inf導出 ONNXpredict.py與 PyTorch 輸出逐元素比對BN 未切 eval 模式加數據增強data/dataset.py驗證集不加增強增強污染驗證指標單 batch 過擬合測試是我最常用的手段拿 8 張圖反復訓 200 步如果損失降不到接近 0說明網絡容量或者數據管線有問題跟超參無關。這個測試能在十分鐘內排掉一大半「訓練不收斂」的偽問題。從那以后我每次動數據管線都會先拿 8 張圖做一遍過擬合測試確認這條路走得通再去碰全量訓練。字符識別這行沒有玄學絕大部分「模型學不會」都是數據和預處理在背后捅刀子把這條紀律守住能省下的時間遠超想象。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产一区二区在线播放| 欧美极品女人的天堂| 黄色小视频日本txt| 欧美 日韩 国产传媒| 又大又大又大又粗爽高潮观看| 97亚洲性爱| 久久久久久亚洲中文| 久久久久久波多野吉衣高潮| 国产曰批免费观看久久久| 精品久久久不卡一区二区| 在线人人人人人人精品超| 国产中文字幕在线观看| 久9久| 黑人狂躁日本妞一区二区三区| 躁躁躁日日躁2020| 97精品视频网站| 综合久久中文字幕综合日韩精品| 很很操在线| 乱伦图一区| 麻豆色约约| 中文字幕少妇色 | 亚洲中文字幕精品一区| 亚洲欧美色图片| 天堂精品小草| 五月婷婷六月丁香| 国产精品免费日韩| 岛国激情视频软件| 97超碰欧美中文字幕| 欧洲色综合| 少妇高潮喷水无套久久久久久| 黄色AV影视| 欧美黄色大片在线观看 | 三级三级三级日本99| 啪啪性爱免费视频| 欧美熟妇色| 丁香婷婷激情五月天无毒不卡 | 91AV天美在线视频| 97亚洲性爱| 精品视频123区小说区| 色情成人五月天| 国产精品99久久久www| 综合伊人激情| 思思热一热婷婷热一热| 美女高潮国产高清| 日本精品加勒比海一区| 五月天加勒比啪| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧日韩不卡视.频| 亚洲有薄码区日本系列中文字幕| 亚洲夜色在线| 九九久久久久久爱| 少妇色综合| 91欧美网| 日韩偷拍一区二区三区| 国际精品久久久| 欧美日综合| 色阁阁AV综合网| 99国内熟女露脸视频| 久九9精品| 久久婷婷色综合一区二区三区| 国产精品麻豆成人AV艾秋| 五月天婷婷色| 清纯唯美综合亚洲| 淫荡少妇免费| 六月天婷婷| 91女神在线视频| 人人澡综合涩| 欧美日韩亚洲少妇寂寞影院正在播放 | 日亚韩精品视频二区三| 二男一女成人A片| aV中文麻| 超碰色97| 懂色AV中文| 鸥美插入视频| 99热这里是精品| 精品一区二区综合熟妇| 欧美性爱另类综合| 亚洲吊色| 91视频女生| 亚洲精品自拍| 91一区二区| 91老熟女老女人国产老太| 亚洲自拍欧美国产首页网曝| 午夜传煤十二区精品| 20cm女自慰在线日韩欧美| 国产三级中文有码在线视频| 超碰色中文| 亚洲黄日韩无码专区| 亚洲丝袜99| 亚洲av噜噜噜噜噜噜| 午夜福利一区二区影院| 26uuu性| 日本在线不卡123| 国产AV人人夜夜澡人人爽麻豆| 中文三一区| 性爱免费视频成人| 大香蕉99热| 天美91| 婷婷五月综合在线| 美性中文综合网| 欧美双插| 久久精品中文字幕无码l| 伊人成人情色综合| 国产女大学生AV| 欧美一区二区亚洲天堂| 欧美线天码中字| 成人乱人伦一区二区| 久99久视频| 熟女熟妇伦久久影院毛片一区二区| 精品无av| www.av在线观看| 91丝袜美腿片| 国产操操日韩三级黄| 欧美日韩免费专区在线| 香蕉国产97| 国产视频一区二区三区在线免费观看 | 97热视频在线观看| 熟妇的味道HD中文字幕| 10000部十八禁看电影| 青青草中文字幕| 玖色AV| 精品999一区二区| 狠狠干婷婷| 国内精品不卡无毒99999| 激情五月天中文字幕色| 97亚洲一区| 欧美不卡五十路| 久久成年精品| aaaa黄片| 欧美日韩中文亚洲v在线综合| 97色欧洲| 日韩电影在线观看网址| 午夜啊啊啊| 天天艹天天日| 欧洲色综合| 人妻嗯啊啊在线播放| 亚洲熟女综合一区二区| 免费看污网站| 26uuu国产免费观看| 亚洲高清欧美总合| 91亚洲不卡一区| 国产v片在线免费观看| 熟女网站最新| 黄污污污污| TS人妖另类精品视频系列| 一区麻豆 高清中文字幕| 天天草夜夜草高潮片| 中文字幕超碰CAO| 亚洲人妻中文高清| 欧美少妇色图| 欧美性视频二区三区| 五月婷婷久久综合| 九月丁香婷婷色| 蜜区区视频79| 日韩欧美中文字| 九九性视频| 亚洲阿v天堂在线| 国产精品久久久久久久久久久久久久久久久久| 国产第25页在线观看| 欲色综合| 亚洲欧美成人在线| 国产精品黄色三级av| 99精品无码| 97干在线看| 国产亚洲欧美每日在线| 91老司机视频| 日本不卡一区二区三区| 亚洲一区二区三区久久 亚洲一区二区| 97人人夜夜精品视频| 久久綜合很很很| 国产一区在线免费播放| 亚洲国产欧美一区二区潘金莲| 亚洲美女精品九九视频| 婷婷人妻激情| 超碰碰小说97| 天堂在线一区二区| 色蜜AV| 欧美v亚洲v日韩v最新在线二区 | 亚洲无码 国产无码| 丝袜亚洲91| 强奸少妇AV导航网| 殴美牲| 首页中文字幕中文字幕免费| 欧美色婷婷| 亚洲91在线播放影院| 中文字幕欧美丝袜07资源| 亚洲五月婷婷| 大屁股xxxxx| 国产精品久久久无码AV网站| 免费观看网黄| 免费的黄片有限公司| 97爱爱| 国产农村妇女毛片精品久久| 少妇精品久久久八区九区| 国产av热热色| 3p国产色噜噜一区| 国产福利夜| 99久久e免费热视| 极品美女福利在线观看| 欧洲亚洲人妻无码中字久久三区四区| 骚货| 国产传媒一区日韩| 素颜老阿姨乱情色| 日本黄页视频在线观看| 91国产丝袜美女| 欧美天堂超碰97| 四虎AV影视国产精品亚洲精品| 九九热五区| 99r九九| 操少妇很爽av| 爱干爱射网啊啊啊| 欧美综合777| 男人天堂无码| 東南亚性呦成人伦理资源在线视频| 久久 久久国内精品亚洲 | 亚洲 欧美综合| 亚洲日韩精品一区二区| 91欧美大片| 最新亚洲黄色免费电影| 亚洲熟女乱综合一区二区三区| 青春草A| 2019午夜福利视频| 天天色综合影视网| 91一区二区三区蜜桃| 99久在线精品99re8蜜桃| 干b网| 欧美激情精品| 欧美性爱91| 国产无马视频| 超碰人妻天天干| 国产亚州精品美女久久久免费| 亚洲性爱无码乱伦av| 乱伦一区二区三区‘| 一级久久久久久久久久久 | 欧美 日韩第一性色| 综合网亚洲1| 久久久性爱| 东北少妇高潮zzzz| 日本人人操人人操| 黄页大片在线观看| 久久久久久久久久久久久久9999| 久久亚洲天天做| 综合激情一一91| 久区视频| 99精品欧美一区二区三区桃色| 国内自拍 日韩激情 99| 99久久99九九99九九九| 黄片免费视频2019| 一二区在线观看视频| 欧美综合亚洲综合| 国产精品自拍xxxx| 精品一区二区三区蜜桃臀赵总| 禁止观看美女黄| 97超碰总站| 麻豆成人影音在线| 久久久久国产一区二| 婷婷三区| 肥佬影院91| 亚欧免费| 久视频在线观看| 亚洲超碰综合网| 国产v亚洲v日韩v欧美v片另类 | 99精品视频在线观看| 国产妇女精品视频青青草| 男同专区一区二区三区在线| 国产激情av女片自拍| 欧美色图亚洲色图成人在在线| 欧美女同在线| 入口操逼网站| 日本新免费二区三区| 国产综合久久久麻桃个| 91粉芽高清在线一区二区| 射丝袜大香蕉| 操国产逼| 日本三级中国三级99人妇网站| 久久久久久久久久久久久久久久9 亚洲成人妻日韩在线 | 亚洲男人综合网| 91色综合激情| 亚州免费啪啪视频| 久久久18禁| 99操| 亚洲最新Av| 国产熟女| 无遮挡h肉动漫在线观看| 2018天天日天天日| 啊啊啊慢点| 秋霞久久亚洲精品成人| silk lablo在线观看一区二区| 国产深夜福利| 青青草密桃在线播放| 欧美色干| 日本久久久久久久久| 青草精品视频一日本久久久久网站| 国产亚洲精品美女久久久m| 歐美性天天| 91精品微拍福利| 一区二区三区日韩欧美| 超清福利精品视频在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 美腿丝袜高跟网免费视频免费视频| 婷婷五月天激情四射| 五月天婷婷久久| 国产搭汕a级片| 色情五月丁香| 丝袜综合网| 九九九九久久久| 精品视频一区二区| 欧美999999| 黄色一区二区秘书性感| 日韩91网| 神马福利久草| 婷婷影院入口| 97天天日| 青青草女人天天干| 精品v1区| 9999免费精彩视频| 日本乱人伦片中文三区| 久久久久久中文版| 九九黄色网| 亚洲麻豆av一区二区| 丝袜喷水在线| 色噜噜人妻丝袜a∨先锋影| 狠久久| 亚洲日韩肥臀视频在线观看| 岛国免费黄色网址| 久久老熟女| 蜜桃视频精品一区二区三区| 强奸a片网| 亚州综合网| 久久久久亚洲精品| 人人扣人人操| 国产精品自在线发布| 激情婷婷黑人91| 色呦呦、国产精品| 视频分类 国内精品| 黄色无码高清黄色无码网站| 青青草一本道福利视频| 色综合加勒比四四季| 乱伦图av| 欧美激情一区| 欧美色道啊| 综合亚洲情色| 超碰日本97美女人妻人人玩人人爱| 亚洲国产一区二区日韩专区| 中国农村熟妇毛片视频| 亚洲高清少妇| 国产后入清纯| 91丨国产丨白浆秘 洗澡动漫| 精品无码一区二区三区色欲| 一区二区影视| 欧美日韩中国x| 国产精品久久久久绯色| 免费A片三p视频| 99色热| 97天天弄| 黄网站黄视频网站进入口| 九九aV| www九九热| 国产h片在线观看视频| 欧美精品97| 欧美淫乱视频| 福利天天都操| 97在线播放| 亚洲中文字幕乱码无码一区二区 | 免费看久久久性性| 国产熟妇 码视频户外直播| av一区二区三区四区五区久草臀| 97欧美色综合| 国产精品999aaa| 一级@啪啪视频| 亚洲不雅视频1区二区| 久久久国产精品亚洲精品| 中出20p| 日本熟女中文字幕一区| 一二三四视频中文字幕在线看| 亚洲一二三四区| 久久久精选| 加勒比综合a∨| 粉嫩久久久久| 夜夜草我| AV丝袜少妇| 嗯阿好爽好紧| 国产25页| 粉嫩久久久久| 国产视频小说| 国产av色网| 欧美日韩另类在线播放| 加勒比综合a∨| 97丝袜亚洲在线播放| 综合91网| 偷拍新久久| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 欧美天天综合网| 清纯唯美亚洲综合| 天天干天天操天天干天天操 | 国产精品欧美日韩久久| 91狠狠综合网| 亚洲男人天堂2| 按摩中文字幕| 96久久久久久久| 成人性交午夜免费片| 啪啪啪综合| 亚洲高清自拍| 国产人妖的免费的视频| 日韩av在线免费网站| 1769精品一区二区三区| 色综合一区二区三巨| 欧美se亚洲| 97精品中文字幕| 96一区二区三区| 日韩兔费看黄片| 性在久久久久久| 国产三级电影免费观看| 极品五月天噜噜| 国产乱码精品久久久久久 | 囯产精品久久久久久久久久二区三区| 91国产操逼视频| 欧美亚洲| 亚洲熟女国产综合另类| 亚欧洲一区二区视频| 欧美色九九| 日韩三A大片在线观看| 一区二区三区欧美激情| 亚洲免费97免费| 啊啊在线| 3028国产精品| 久久深夜无码| 91中文字幕| 欧美老妇曰批的视频| 亚洲人成网www| 九九九九一级| 国产最火爆久久国产网站网站| 黄色av片三级三级三级免费看| 超碰97精品在线| 乱操9999| 岛国视频一二三区| 精品久久久中文字幕不| 天堂av最新电影网| 乱伦a片视频| 国产精品女同| 91亚洲电影| 激情五月天丁香社区| 婷婷香网站| 老司机福利青青草| 高清无码网址| 日本 情色 1区| 国产精品女久久久久av爽| 超碰国产情侣自拍网| 国产精品一区在线播放| 欧洲一级性爱视频在线观看| 久久国产对白激情浪潮 | 日韩另类色图| 久久97精品久久久久久久不卡| 亚洲精品啪视频| 神马久久久久久久久久久久| 一级乱伦网站| 久久国产精品一级二级三级| 青青草一区二区高清无码视频 | 欧美激色| 91成人久久| 91欧美美女日韩国产婷婷| 亚洲色宗合| 五月婷视频| 9精品久久久久| 欧美一区二区亚洲天堂| 五月天AV资源| 色丁香久久| 中文字幕一区二区无码成人| 97人人草| 99在线精品视频| 五月天婷婷综合网| 夜色综合| 五十路二区在线| 小日子操bb在线看| 日韩高清一二三| 成人免费不卡在线视频| 91麻豆天美国产欧美高潮| 蜜乳AV色欲AVAV无码| AV久日| 欧美日韩国内不卡| 日韩精品一区二区人人人| 九九综合色| 久久加勒比| 乱理日韩中文| 精品伊人久久久大香线蕉小说| 91精品国| 国产精品天美传媒| 国产福利电影| 九九免费影片| 婷婷成人五月天| 欧美色人| 九九九九免费高| 国产成人无码久久精品| 人妻一区二区三区熟女| 久久久婷婷| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 久久精品国产97欧美精品亚洲 | 龙兴卡官方查询| 精品一二三区久久AAA片| 99热一区二区三区四区| 综合亚洲情色| 亚洲精品乱码久久久久久蜜桃麻豆 | 人妻无一区二区三区| 久久久久国产| 亚洲人妻一区二区三区| 亚洲精品国产熟女久久久久久| 国内精品久9| 97超碰jingpin| 噜噜噜在线视频| 午夜一区| 我中文字幕6区| 亚洲欧美精品一区天堂久久| 午夜寂寞欧美| 国产精品久久久| 丝袜美腿射精91| 黄色污污污污污污网站| 亚洲av乱伦色图网站| 国产免费一区2区3区| 内射黑丝袜| 99自拍B亚洲| 欧美精品成人亚洲| 少妇激情一区二区三区视频| 国产嫩草精品A88AV| 极品美女福利在线观看| 成人a v在线播放免费| 九九久久国产精品怡红院| 日日日啊啊啊| 欧美亚洲综合色| 亚洲一区二区性爱电影| 91人妻精华帖| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 综合日韩激情另类图片| 丁香婷婷久久 | 亚州综合AⅤ| 无码99| 99精品久久久久久久婷婷蜜桃| 中文字幕五月婷婷免费| 思思久热在线精品66| 欧美色蜜桃97| 天天影视综合色| 台湾佬中文娱乐网久久久久久久久久com | 日本999精品| 日韩二级| 麻豆黄四叶草网站| 人人爽夜夜操| 少妇500双飞99| 中文字幕av久久爽Av| 日本在线不卡123| 91色情黑丝搞鸡在线观看一区二区三区三州 | 热久久精品| 日本人体九九九九九九| 丁香五月综合| 中文字幕国产精品1区| 天美传媒国产原创中文字幕亚洲欧美另类 | 操狠狠| 日本熟妇熟色97一本在线观看| 超碰99在线| 五月婷婷六月丁香| 天美传媒国产原创中文字幕亚洲欧美另类| 婷婷激情五月| 精品久久久九九九孕妇| 日韩AV中文字幕电影| 国产无遮挡| 日本97久久久精品| 色综合20p| 啊啊啊啊好大好硬啊啊啊啊啊| 欧亚日韩综合精品国产| 91在线丝袜| 人妻丰满熟妇一区二区三| 亚洲欧美setu| 久久社区一区二区三区| 18禁免费视频| 91熟女丨91老女人| 蜜臀无码一区二区| 狠狠操夜夜操蜜桃视频三区| 色噜噜狠狠色综合日日| 日韩一级二级| 操b网站亚洲无码| 男人把坤坤插入女人的下体| 亚洲欧美变态| 国产精品不卡高清在线观看| 国产丝袜欧美在线视频| 操逼逼福利视频| 一区二区娱乐网站| 91扒丝袜综合在线| 国产丸一视频| 久久男人的天堂| 高清在线不卡一区二区 视频| 欧美日本中字另类在线| 激情综合婷婷| 91殴美大片| 正宗无毛一线天嫩逼| 亚洲国产综合视频| 多乙久久久久久| 国产欧美日韩女同性恋ww喷水精品 | 国产成人亚洲精品无码古代早漏男| 午夜高清成人在线视频| 精品国产网站| 小电影欧美91| 强奸国产精品视频| 欧美视频在线第3页| 精国久久一区二区三区98| 91精品国产91熟女| 日本操逼视频导航| 午夜呻吟欧美| 亚洲性高潮| 国产人妖视频一区在线观看| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 中文字幕少妇色| 超碰9 7女人| 成人免费看吃奶视频网站| 日日黄色三级网站| 国产JDAV无码视频在线观看| 亚欧免费| 97视频观看| 在线播放中文字幕| 91香蕉视频在线观看免费| 开心五月婷婷| 清纯唯美亚洲另类| 黄色区免费观看中文字幕| 一二三啪啪专区| 亚洲男人在线观看天堂| 女人喷水视频在线观看| 搞中出视频在线观看| 91狠狠综| 青青草操逼逼视频| 国产丝袜啪啪| 亚洲精品亚洲人成人网| 夜夜骑日日| 最新中文字幕在线亚洲| 亚洲黄a三级三级三级看三级| 欧美精品69性爱| 天天日B狠狠操| 97超碰欧美中文字幕| 婷婷久久网| 久久精品操| 人妻少妇av在线观看| 国产精品3| 精品一区二区人妖| 欧美人妻一区二区| 亚洲码专区| 视频在线观看青青99国产| 美國A片| 日韩欧美中文字| 免费A V在线播放| 欧美在线 亚洲| 久久久久久久国产a∨| 中国黄色特级精品一区二区三区片| 女同女同恋久久级三级| 97一本大道亚洲一区| 国产精品一级特黄aaa大片在线观看| 91精品丝袜久久久久久无码人妻| 一本精品日本在线视频精品| 欧美亚洲se91| 久久免费精品视频免一| 色与欲影视天天看综合网| 国产成人网站在线观看| 欧美乱欲| 怡红院怡春院| 在线国产福利网址导航| 亚洲加勒比色图| 97色在线| 国产毛片毛片4p懂色| AV在线资源| 嫖老熟女A片一二三区| 久久久久女教师免费一区 | 人妻久久久久久久久久久久久久久 | 99久久e免费热视| 成人草草视频| 国产伊人自拍| 国产精品无码久久久久2028| 欧美天天影院| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 久久久久久裸体| 久久xx| 日韩一级性爱无码| 亚洲s色图| 日韩精品 资源| 一级日本牲交大片好爽在线看| 久久97超碰香蕉| 大奶啊啊好爽| 国产高清免费不卡av| 亚洲第一页色网| 美女久久久久久久| 人妻22p| 人人贴人人摸| 亚洲色婷婷综合久久久久中文| 91美女在线精品视频| 日韩性爱毛片操骚逼| 96久久久久久久| 亚州综合色图| 精品一区二区啪啪啪| 国产Aα| 亚洲丝袜诱惑| 俺去啦自拍| 天天摸天天碰天天添青青| 国产人妻天天干精品| 国产激情视频一区区三区| 色偷综合| 99热精品国产| 国产11页| 熟女突然公开看18禁影片 | 九九久久久久久爱| 100啪啪视频大全| 97操碰| 日本五十路在线| 9/A片 | 国产丁香精品露脸视频| 黄总AV色图| 2011国产精品| 9久精品| 黄片aaaaa一区| 国产又猛又粗又爽又黄| 丝袜美腿av女优在线| 亚洲蜜臀精品视频久久| 韩日精品福利视频一区不卡在线免| 免费夜夜爱黄色视频毛片| 嫩草影院在线观看精品| 综合国产影视三级| 国产91影院| 777超碰| 99久久99九九99九九九| 久久一二三四五六七八九区| 足交视频老司机| 亚洲综合99999| 一牛影视久久久一区二区三区| 五月大香蕉| 色综合色欲色综合色综合色综合| 黄色小视频日本txt| 做爱A级亚欧| 无码人妻精品一区二区三区99不卡| 96精品久久| 变态综合色| 天天干人人乐| 亚洲熟女诱惑| 2017天天拍大香蕉| 男人的天堂2018| 国产精品天堂| 亚洲?V高清一区二区三区尤物| 日本媚薬中文字幕在线| 国产精品久久久久久久久久久久久久吹 | 久久宗合97| 超碰97人妻自拍| 男女啊啊啊| 精…码一二三区| 嗯嗯啊啊好爽| 呦呦影院| 亚洲欧美在线观看免费| 操逼不卡中文字幕| 国产亚洲日本精品在线| 爽 好舒服 无码刺激久久| 99色在线观看| 日韩97超碰中文字幕| 麻豆区99999| 欧美亚洲美少妇一区二区| 秋霞鲁丝午夜无码一区二区三| 黄久在线| 中国和日本人色哪个不下载能放| 久久岛国| 亚洲电影中字一区二区| 两性色网| 亚洲久热| 91欧美成人色站| 屁股久久久久久久久| 中文字幕青青草| 97超碰站| 日本操逼二区| 亚洲男人天堂2019| 九九成人精品| 亚洲色图欧美色图在线播放| 99re免费| 偷拍自拍在线视频观看| 丝袜 亚洲 偷拍| 久偷拍| 中文字幕第二页| 色激情综合网站| 视频国产精品未满十八禁止在线观看| 色色99| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 中国熟妇| 日韩性爱人人爱人人操| 色一情一乱一乱一区91Av| 91jk色拍| 97ai亚洲| 欧美一级久久久丰满| 九九热在线精品视频| 97干天天| 男人天堂东京热| 高清无码 国产精品| 九色 人妻 大香蕉| 久久久久96| 一级人妻性爱视频| 一区二区日韩欧美久久| 成人欧美日超碰| 97国产精品视频| 国产小u女在线观看| 91撸色网 玖玖网 欧美| 欧美日韩亚洲天堂| 中文一区在线视频| 国产午夜福利视频在线| 97在线免费看视频| 国语对白在线播放视频| 91处女视频在线观看| 九九九九九精品| 日韩av在线播放不卡| 亚洲欧洲色情高清| 一区二区乱码福利| 日本 欧美 亚中文字幕| 后入综合久久| 亚洲AV秘 精品久久老牛影视| 日韩精品三区四区| 天天肏天天干| 67194国产| 91色人| 乱伦图av| 欧美一区二区成人一卡| 啪啪啪精品| 亚欧美天堂在线| 三上悠亚在线毛片91| 色五月av| 大香蕉视频啪啪啪啪| 色牛牛AV| 90后后入| 我爱大香蕉| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 91AV入口| 爱欲AV| 9久在线视频只有精品| 亚洲天堂人妻一区二区| 亚洲男人天堂AV| 亚洲五月丁香花狠狠干一区二区三区 | 使劲用力艹少妇视频一区二区| 一个色导综合| 天天天天天天天天综合| WWW啪啪的com| 无遮挡猛进视频免费无限观看| 亚洲中文sv| 大香蕉97久久| 丁香五月激情综合| 亚洲码专区| 伊人久久在线视频观看| 亚洲无码超碰免费| 摸奶性爱视频网站在线免费播放| 欧美韩国你懂得在线 | 嗯嗯嗯啊啊啊在线免费观看| 免费一级欧美片片线观看| 最新中文字幕精品在线| 人人操,操人人| 色婷婷影视| 丁香五月性| 理论久久婷婷网8| 天天干天天拍| 欧美亚洲天堂| 嗯嗯啊啊视频一区二区三区| 日韩国产不卡在线视频| 精品人妻伦一区二区三区久久| 久久精品国产亚洲AV片多多| 人妻人久久精品中文字幕| 超碰人人超在线观看| 日本久操视频| 人人扣人人操| 夜色91| 欧洲乱码一区二区| 国产精品黄色三级av| 日日AAvv| 一区久久久二区| 国产精品美女在线一区| 中文字幕1区2区| 男人下部插入女人下部| 无码最新| 男女国产精品| 91网站18在线| 91精品黄在线观看| 强奸乱伦 亚洲一区| 97爱啪| 日韩偷拍色图| 手机在线中文字幕国产| 亚洲se91| 97在线观视频免费观看| 六月婷婷激情| 影音先锋视频在线| 亚洲天天更新| 97av,com| 国产传媒日本欧美专区| 国产亚州精品美女久久久免费| 国产精品96| 加勒比久久av| 好看的91视频| 婷婷激情五月| 亚洲暴力强奸AV| 超碰在线人人射| 久久熟女嫩草成人片免费| 亚洲熟女乱色| 五月天大香蕉| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 天天做日日做天天欢。| 91亚州| 欧洲站一级二级三级h| 亚射在线| 人妻熟女字幕一区二区| 美女写真| 国产视频人人网| 国产嫩草精品A88AV| 九九九九九九九九九九九九九九九女| 另类图片五月| 日本羞羞的视频在线播放| 国产二区三区免费视频| 欧美在线官网| 2024年最新色情网站在线观看| 一二三啪啪专区| 20cm女自慰在线日韩欧美| 裸模AV女优| 手机午夜电影神马久久| 夜嗨影院| 精品国产91av一区二区三区 | 乳欲人妻办公室奶水| 人人性爱视频免费| 三久久久四久久久久| 日韩欧美女求操每天更新| 国产精品第一页国产大屁股视频免费区i | 蜜桃狠狠色伊人亚洲综合| 国产精品对白内射| 9/A片| 夜夜嗨一区二区| 强奸xx国产| 精品久久人妻成人网| 久久久性少妇| 婷婷五月天成人网| 青青青在线高清视频在线一二三四区| 色婷婷基地| 亚洲图片激情综合另类| 激情另类激情| 天天看特黄的免费网站| 欧州色图区| 国内毛片国产欧美拍| 99re视频在线观看这里只有精品| 尤物一级在线免费观看| 欧美午夜视频精品久久| 色乱二区| 3p国产色噜噜一区| 天堂种子在线www网资源| 99精品成人免费看| 丁香五月综合| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧州激情视频在线一区二区| 区一二区日韩亚洲乱码av电影| 中文字幕加勒比海高清无码免费视频| 亚洲另类色图片| 成人日本精品九区| 91日产欧美| 中文在线视频| 91欧美情色| 999综合网| 激情五月综合开心五月| 激情无码日韩| 精品一区二区亚洲国产| 天天添天天干电影| 少妇与黑人高潮在线| 91麻豆一二三区| 欧美在线亚洲| 麻豆久久精品亚洲精品88| www.99色| 亚洲色图殴美色图激情乱伦| 久久久97| 蜜桃精品一区二区三区ww| 夜夜騷av、一區二區| 久久国产999| 日韩一级二级三级| 亚洲国产精品无码AV久久久| 国产精品自在线发布| 五月丁香六月激情综合| 日韩人妻网站| 久久久久久99999国产精品| 九九九色| 欧美一区二区三区蜜桃| 五月天伊人| 青青草乱入乱欲视频在线观看| 久久9精品网站| 日本一区二区不卡| 日本一区二区三区四区免费观看| 99这里有精品视频| 国产乱码精品久久久久久| 欧美视频一区二区三区| 被窝影院午夜看片无码| 亚洲欧美激情在线视频| 成人女人国产| 97ai亚洲| 性爱视频啪啪啪啪| 综合网欧美在线| 欧美 亚洲 另类 综合| 亚洲欧美97| 欧美人与性动交a美精品| 六九九九| 国内成人圈中文字幕无码视频 | 久久久国产精品人妻丝袜| 后入综合久久| 国产精品美女久久久久AⅤ国产馆| 六月丁香啪啪啪| 国产女人9999| 我要去看2个日本美女.com曹逼| 美女被艹尤物视频| 一牛一区二区三区久久| 玖草在线视频| 我爱大香蕉| 狠狠操狠狠燥| 国产精品爽爽v| 91丝袜美女| 伊人久久AV诱惑悠悠| 操比国产| 亚洲性猛| 91香蕉视频在线观看免费| 91ise欧美| 四虎影视精品| 五月婷婷激情网| 热热色国产一二区AV| 欧美一区二区福利在线| 亚洲欧洲美腿丝袜| 啊啊嗯嗯好爽| 日日爽夜夜爽| 中文字幕一二三av| 亚洲乱码尤物193YW| 欧美在线55555| 国产精品免费1区2区视频| 天天肏美女| 天天肏天天干| 91粉芽高清在线一区二区| 精品国产乱码久久久久久免费| 国产高清精品福利| 我爱搞逼综合网| 亚洲导航深夜福利| 久久少妇人妻| 亚洲天堂中文字| 欧美韩国你懂得在线| 国产精品亚洲无码| 好屌色综合| xxx0国产在线播放| 国产免费一区| 不卡啪啪视频| 北京美女一区二区| 美国精品国产精品| 亚洲偷91色| 亚洲国产一区二区三区在线| 日欧亚洲二三区大片不卡| 啊啊啊啊好爽好舒服一区二区易域| 久久久久久91香蕉国产| 亚洲一区二区三区久久 亚洲一区二区| 国产对白刺激视频| 欧美性爱日韩高清| A级毛片在线看免费| 狠狠色狠狠色狠狠五月| 欧美男人亚洲天堂| 日韩一级成人毛片免费观看| 黄色一区三区| 婷婷激情综合网| 色五月av| 一区,二区,三区网站| 国产极品精品美女视频| 中文字幕在线2| 中文字幕在线高清男人的天堂| 国产97av| 国产精品小视频一区二区三区| 国模无码人体一区二区三| 婷婷15月天青娱乐| 日本中文字幕在线电影| 我要色综合网| 精品小视频在线| 亚洲中文字母在线播放| 91亚洲欧美激情| 欧美色图中文字幕| a v网站在线播放| 超碰在线91| 91丝袜激情在线 | 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 五月亭亭六月丁香| 久久久111| 久热无码| 性爱视频啪啪啪啪| 亚州欧美另类| 中文字幕日韩精品一区二区三区| 国产精品久久久久久片| 欧美乱欲| 国产第二页| 熟妇人妻精品一区二区视频色欲| 91搞逼视频| 99re6在线视频播放免费精品| 哈哈操电影AV| 四虎影院成年人片| 色综合国产在线观看| 亚洲久草AV色图| 国产久久一区二区三区野外在线| 亚洲一区二区三区欧美日韩| 色综合av综合久久| nuu12国产麻豆精品| 日韩人妻网站| 久久小视频| 东京热男人的天堂精品| 国产精品 视频| 国产乱不卡| 国精综合一二三区影视| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 天天摸天天插天天日| 欧美人人操人人插| 四虎精品亚洲| 日本东京热大香蕉a片| 欧美日韩国产在线| 综合操逼| 日本韩国国产精品一区| 亚洲熟女诱惑| 死我十八禁| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 成人无码在线超碰网| 综合色欧美| 欧美色图自拍| 一区二区不卡| 亚洲城人男人的天堂| 九九无码| 99激情| 欧美一区二区三区黄色影视| 人人操,人人插| 亚洲熟女一区| 探花激情视频| 天天肏天天干| yiren97| 一区二区视频在线播放| 国产精品女久久久久av爽| 亚洲精品97p| 久久侵犯人妻爽爽爽| 大香蕉欧美国产日韩高潮| 欧美青青视频| 三级三级三级a级全黄三| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 欧美大的香蕉有线电视视频| 97精品网站| 亚洲自拍青操视频| 激情人妻另类| 激情黄色五月天| 欧美极品少妇| wwwxxx日本爽| 一区超碰一区| 久久久久ab| 亚洲淫乱骚妇AV| 精品日韩人妻视频| 乱伦熟妇一区二区| 青娱乐老司机视频| 26uuu国产亚洲综合| 国产精品不卡一区二区三区av| 性天堂| 亚洲无 码A片在线观看麻豆| 中文字幕一区二区三区50路| 国产97亚洲| 亚洲婷婷丁香在线| 立川理惠被中出无码| 国产辣妈在线视频福利| 翔田千里Av在线| 岛国毛片手机在线观看| 久久精品国产亚洲AV高级北京| 伊人黄色视频免费观看| 日本中文字幕在线电影| 水野优香在线观看| 精品射1999|