国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

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

深度學(xué)習(xí)字符驗(yàn)證碼識別CNN逐位分類Python實(shí)戰(zhàn) 簡介面向深度學(xué)習(xí)圖像識別初學(xué)者、安全方向開發(fā)者及課程設(shè)計學(xué)習(xí)者的字符型驗(yàn)證碼識別實(shí)踐包圍繞數(shù)字與字符驗(yàn)證碼的卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)建模、訓(xùn)練與預(yù)測流程展開可用于入門項(xiàng)目復(fù)現(xiàn)、算法練手和驗(yàn)證碼識別方案調(diào)研。壓縮包共1210個文件約9.58MB其中978張png、202張jpg及少量bmp、jpeg圖片構(gòu)成驗(yàn)證碼樣本17個py腳本覆蓋數(shù)據(jù)處理、模型構(gòu)建、訓(xùn)練預(yù)測等環(huán)節(jié)另含txt說明、rst文檔、zip壓縮包與模型文件等輔助內(nèi)容。已有1542人學(xué)習(xí)下載具備一定參考熱度。讀者可從中獲得從樣本歸一化、數(shù)據(jù)增強(qiáng)、one-hot編碼到CNN/RNN模型搭建、交叉熵訓(xùn)練與結(jié)果組合的完整源碼脈絡(luò)并借助示例圖片和腳本理解字符序列識別、過擬合監(jiān)控及多字符輸出思路便于改造成自己的驗(yàn)證碼識別項(xiàng)目。1. 從一批糊掉的字符圖說起這個基于深度學(xué)習(xí)的字符識別項(xiàng)目到底能干什么前陣子有人拿著一批自己生成的四位字符圖來找我圖上壓著干擾線和噪點(diǎn)人眼掃過去都得愣一下。他要的不是接個現(xiàn)成接口敷衍過去而是基于深度學(xué)習(xí)的字符型圖片數(shù)字驗(yàn)證碼識別——從零訓(xùn)一個模型出來。這份資源就是那條完整鏈路的 Python 實(shí)現(xiàn)數(shù)據(jù)生成、圖像預(yù)處理、網(wǎng)絡(luò)定義、訓(xùn)練收斂、推理解碼一步不落源碼能直接跑起來。它的適用面比看上去寬。想完整走一遍「圖像輸入到字符串輸出」流程的深度學(xué)習(xí)新手可以拿它當(dāng)?shù)谝粋€真正跑通的實(shí)戰(zhàn)做 OCR、票據(jù)編號、工牌數(shù)字、集裝箱號這類字符識別落地的開發(fā)者可以把它當(dāng)成一個能直接改的基線。字符集小、長度固定、單通道灰度圖訓(xùn)練成本低到一張消費(fèi)級顯卡幾小時就出結(jié)果這才是它適合入門的核心原因。2. 目錄結(jié)構(gòu)與技術(shù)選型一個字符識別項(xiàng)目該有的骨架先別急著看模型。字符識別這類項(xiàng)目跑不起來的原因九成不在網(wǎng)絡(luò)結(jié)構(gòu)而在目錄沒分好、配置散在各處、訓(xùn)練和推理各寫一套預(yù)處理。這套源碼的目錄劃分是我比較認(rèn)可的一種改起來不牽一發(fā)動全身。2.1 六個文件撐起整條鏈路captcha_rec/ ├── config.py # 訓(xùn)練/推理共用配置超參只在這里改 ├── charset.py # 字符集與索引映射訓(xùn)練推理共用同一份 ├── data/ │ ├── gen_captcha.py # 自建數(shù)據(jù)集生成器 │ ├── dataset.py # Dataset 與預(yù)處理流水線 │ ├── train.txt # 每行 路徑\t標(biāo)簽 │ └── val.txt ├── models/ │ └── cnn.py # CNN 主干 逐位分類頭 ├── train.py # 訓(xùn)練循環(huán)、驗(yàn)證、保存權(quán)重 ├── predict.py # 單圖/批量推理與解碼 └── utils/ ├── metric.py # 整串準(zhǔn)確率、單字符準(zhǔn)確率 └── seed.py # 固定隨機(jī)種子 └── requirements.txt這個劃分的關(guān)鍵在于三個「單一出口」config.py管參數(shù)、charset.py管字符和索引、dataset.py管預(yù)處理。很多人在自己寫的時候把預(yù)處理寫在訓(xùn)練腳本里推理時又抄一遍抄錯一個cv2.resize的插值參數(shù)線上準(zhǔn)確率立刻掉十幾個點(diǎn)這種血淚經(jīng)驗(yàn)我在別人的項(xiàng)目里見過不止一次。工程約定上train.txt和val.txt用制表符分隔路徑和標(biāo)簽不用 CSV因?yàn)閳D片路徑里偶爾會出現(xiàn)逗號。標(biāo)簽一律小寫不做大小寫混排——字符集里0和O、1和l這類形近字符如果都保留模型在低分辨率下幾乎必然混淆除非你的業(yè)務(wù)真的需要區(qū)分。charset.py是全篇最容易翻車的地方把它單獨(dú)拎出來是值得的# charset.py 訓(xùn)練和推理都必須 import 這一份禁止在別處重寫 CHARSET 0123456789abcdefghijklmnopqrstuvwxyz # 0 號位固定留給 CTC 的 blank逐位分類時從 1 開始用也不會浪費(fèi)多少參數(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 改造逐位分類時多出來的那一類永遠(yuǎn)學(xué)不會對結(jié)果沒有影響。參數(shù)說明CHAR2IDX的索引從 1 開始BLANK0是 CTC 的硬性約定改不了。IDX2CHAR必須和CHAR2IDX嚴(yán)格互逆我一般寫個斷言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訓(xùn)練慢但能跑 TRAIN_LIST data/train.txt VAL_LIST data/val.txt CKPT ckpt/best.pthIMG_H和IMG_W不是隨便定的。4 位字符橫排寬度至少要是單字符寬度的 4 倍還留出間隙60 高度能保住字符的筆畫細(xì)節(jié)又不至于讓全連接層參數(shù)爆炸。把IMG_W提到 320 而模型不變Flatten后的維度翻倍全連接層參數(shù)量直接四倍小數(shù)據(jù)集上過擬合會來得非??臁?.2 技術(shù)選型為什么先做逐位分類而不是一上來就 CRNN 配 CTC字符識別主流兩條路一條是固定長度逐位分類一條是 CRNN CTC 的序列識別。這個項(xiàng)目選的是前者理由很實(shí)在固定長度場景下逐位分類的訓(xùn)練信號更直接。逐位分類把「識別 4 個字符」拆成 4 個獨(dú)立的分類任務(wù)每個位置一個 softmax損失是 4 個交叉熵的均值。梯度回傳路徑短收斂快20 到 30 個 epoch 就能把整串準(zhǔn)確率推到很高的水位。CTC 則是把模型輸出當(dāng)成一條時間序列靠動態(tài)規(guī)劃把所有可能的對齊方式加起來它對齊能力更強(qiáng)、支持變長但訓(xùn)練早期收斂慢標(biāo)簽長度和輸入長度不匹配時還會直接給你inf損失。對比項(xiàng)逐位分類本項(xiàng)目CRNN CTC字符長度必須固定任意長度收斂速度快幾十 epoch 見效慢常要上百 epoch實(shí)現(xiàn)復(fù)雜度低多一個 view 就行中要處理 input_lengths對字符粘連的魯棒性一般靠位置先驗(yàn)硬扛較好典型翻車點(diǎn)字符集順序錯亂標(biāo)簽長度 時間步導(dǎo)致 inf選逐位分類不等于偷懶。字符長度固定的業(yè)務(wù)場景——四位驗(yàn)證碼、六位工單號、固定位數(shù)的批次號——占了實(shí)際需求的大頭用 CTC 屬于殺雞用牛刀還多背一份對齊邏輯的維護(hù)成本。真到了變長那天主干網(wǎng)絡(luò)和數(shù)據(jù)集代碼基本不用動只換分類頭和損失函數(shù)第 6 章會給具體的改法。主干網(wǎng)絡(luò)用的是最樸素的四段卷積。這套結(jié)構(gòu)在字符識別上有個隱含優(yōu)勢四段MaxPool把 60×160 壓到 2×10特征圖上橫向還剩 10 個位置剛好夠 4 個字符各自找到自己的感受野又不會因?yàn)閴旱锰莅严噜徸址谝黄?。換成三段卷積特征圖剩 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)境問題實(shí)際是依賴裝串了浪費(fèi)半天時間排查。我一般在服務(wù)器上只裝 headless 版本。charset.py里的字符集順序一旦定下來就不能隨便動。改了字符集順序而不重訓(xùn)模型輸出的索引全部錯位表現(xiàn)是「訓(xùn)練時好好的推理出來全是亂碼」這個坑在第 5 章會單獨(dú)展開。種子也要固定utils/seed.py里把random、numpy、torch三家的種子一起設(shè)復(fù)現(xiàn)實(shí)驗(yàn)才有意義。3. 數(shù)據(jù)管線從字符圖片到能喂進(jìn)網(wǎng)絡(luò)的張量模型再漂亮數(shù)據(jù)管線錯了全白搭。這一章拆的是data/gen_captcha.py和data/dataset.py兩個文件前者負(fù)責(zé)造數(shù)據(jù)后者負(fù)責(zé)把圖片變成張量。3.1 自建數(shù)據(jù)集字符圖怎么生成、怎么標(biāo)注沒有現(xiàn)成數(shù)據(jù)集的時候自己生成是最快的路。真實(shí)業(yè)務(wù)里的字符圖片通常來自截圖或掃描件但練手階段用 PIL 合成完全夠用關(guān)鍵是干擾要加到「人眼勉強(qiáng)能認(rèn)」的程度太干凈學(xué)不到東西太臟模型直接放棄。# data/gen_captcha.py 生成一張四位字符圖并寫入標(biāo)注文件 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): # 每個字符獨(dú)立抖動坐標(biāo)模擬真實(shí)場景的排版漂移 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) # 椒鹽噪點(diǎn)密度控制在千分之五左右 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]讓字符略微越界模擬真實(shí)排版里的擠壓fill取0~90的深色而不是純黑是因?yàn)榧兒谠诙祷髮Ρ冗^強(qiáng)模型會過度依賴筆畫粗細(xì)這個捷徑特征。噪點(diǎn)密度0.005是我試下來比較平衡的值提到0.02之后整串準(zhǔn)確率會掉但單字符準(zhǔn)確率還在說明模型開始靠猜。生成完記得寫標(biāo)注文件路徑和標(biāo)簽用制表符隔開一次寫一行訓(xùn)練集和驗(yàn)證集用不同的隨機(jī)種子分開生成——這一步是很多人的翻車點(diǎn)同一個種子生成兩批圖驗(yàn)證集里混進(jìn)和訓(xùn)練集幾乎一模一樣的樣本準(zhǔn)確率虛高得嚇人。3.2 預(yù)處理流水線灰度、去噪、歸一化與尺寸統(tǒng)一預(yù)處理的目標(biāo)只有一個讓訓(xùn)練和推理走完全相同的代碼路徑。dataset.py里這段是核心# data/dataset.py 預(yù)處理 張量化訓(xùn)練和推理共用 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: # 長度對不上直接丟掉別讓它污染訓(xùn)練 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 中值濾波壓椒鹽噪點(diǎn) 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 會讓噪點(diǎn)在插值時被拉伸成條狀反而更難去掉。INTER_AREA用于縮小是最不容易產(chǎn)生摩爾紋的插值方式換成INTER_LINEAR在 160 寬度下問題不大但換成INTER_CUBIC會引入振鈴邊緣出現(xiàn)假的筆畫。參數(shù)說明medianBlur的核大小必須是奇數(shù)且大于 13 是最小有效值5 會開始吃掉細(xì)筆畫。歸一化用(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 尖刺一下」。我見過有人為此把學(xué)習(xí)率砍半其實(shí)是數(shù)據(jù)加載的問題。num_workers4在機(jī)械硬盤上開太高反而更慢開了pin_memory才真正省下主機(jī)到顯存的那段拷貝時間。3.3 數(shù)據(jù)增強(qiáng)的邊界能加什么不能加什么字符識別的增強(qiáng)比自然圖像窄得多??梢约虞p微旋轉(zhuǎn)±3 度、小幅平移±5%、對比度抖動、隨機(jī)加噪點(diǎn)。不能加水平翻轉(zhuǎn)字符會變成鏡像、大角度旋轉(zhuǎn)超出手寫體常識、隨機(jī)裁剪會切掉字符。import random def augment(img): # 只在訓(xùn)練集上調(diào)用驗(yàn)證集和推理一律走原圖 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增強(qiáng)函數(shù)里最忌諱的是「訓(xùn)練加了、驗(yàn)證也加了」。驗(yàn)證集的唯一職責(zé)是反映真實(shí)分布一旦對它做隨機(jī)變換準(zhǔn)確率曲線就失去了參考價值你根本不知道模型是在進(jìn)步還是在適應(yīng)增強(qiáng)。這條我在自己項(xiàng)目里定成硬規(guī)則augment只在trainTrue的分支里調(diào)用。4. 網(wǎng)絡(luò)與訓(xùn)練CNN 逐位分類頭的完整實(shí)現(xiàn)前面鋪墊的數(shù)據(jù)和結(jié)構(gòu)到這里收口。這一章拆三段代碼網(wǎng)絡(luò)定義、訓(xùn)練循環(huán)、推理解碼每一段都能直接抄進(jìn)自己的項(xiàng)目改。4.1 CNN 主干與逐位分類頭網(wǎng)絡(luò)結(jié)構(gòu)上沒有花活四段卷積加兩層全連接重點(diǎn)是最后一層的形狀處理。# 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非對稱池化在這種寬扁輸入上比強(qiáng)行方形池化更合理。num_classes傳NUM_CLASSES含 blankmax_len傳MAX_LEN兩個都從config.py來。還有一點(diǎn)容易忽略輸入必須是(B, 1, H, W)且 H、W 和訓(xùn)練時完全一致。動態(tài)尺寸的網(wǎng)絡(luò)不是不能寫但全連接層會立刻鎖死尺寸后面改圖片寬高就得重訓(xùn)所以一開始統(tǒng)一到 60×160 是省事的做法。4.2 訓(xùn)練循環(huán)損失、優(yōu)化器和學(xué)習(xí)率調(diào)度訓(xùn)練循環(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加負(fù)對數(shù)似然不要在它前面再手動過一遍 softmax否則等于算了兩遍梯度會被壓扁到幾乎不動。逐位求和再除以max_len而不是直接相加是為了讓損失量級和單個分類任務(wù)對齊學(xué)習(xí)率不用跟著字符長度重新調(diào)。參數(shù)說明clip_grad_norm_的max_norm5.0是經(jīng)驗(yàn)值字符識別里梯度爆炸大多來自 BatchNorm 在小 batch 上的方差抖動裁剪能擋住絕大部分尖刺。訓(xùn)練循環(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é)束用驗(yàn)證集整串準(zhǔn)確率驅(qū)動 scheduler.step(val_acc)patience3表示連續(xù) 3 個 epoch 驗(yàn)證準(zhǔn)確率不漲就把學(xué)習(xí)率砍半。這個策略比固定步長衰減更適合小數(shù)據(jù)集因?yàn)槭諗壳€經(jīng)常是階梯式的卡住三個 epoch 之后往往還能再上一個臺階。weight_decay1e-4對 Adam 來說相當(dāng)于 L2 正則在三千張左右的訓(xùn)練集上能明顯壓住過擬合。驗(yàn)證函數(shù)里我只算兩個指標(biāo)——整串準(zhǔn)確率和單字符準(zhǔn)確率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)只有四個位置全對才算整串正確這個指標(biāo)才是業(yè)務(wù)真正關(guān)心的。單字符準(zhǔn)確率 95% 聽起來漂亮四個字符乘起來只剩 81%整串準(zhǔn)確率才是能拿去交付的數(shù)字。兩個指標(biāo)一起看還能定位問題——單字符高、整串低說明模型在個別位置上系統(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用了兩次第一次補(bǔ)通道維、第二次補(bǔ) batch 維最后得到(1, 1, 60, 160)和訓(xùn)練時DataLoader吐出來的形狀完全對齊。model.eval()不能漏它把 BatchNorm 從按 batch 統(tǒng)計切到用滑動平均值漏掉這一行單張推理時 BN 會拿自己這一張圖的方差去歸一化輸出會飄得非常離譜——這個現(xiàn)象很像「模型沒訓(xùn)好」實(shí)際只是忘了切模式。參數(shù)說明img_w、img_h必須和config.py里的IMG_W、IMG_H一致建議直接從 config import 而不是寫默認(rèn)值寫死默認(rèn)值是遲早要出事的。IDX2CHAR從charset.py來和訓(xùn)練時的CHAR2IDX同源這是保證索引不亂的根本。批量推理時把循環(huán)換成DataLoader再把join換成列表推導(dǎo)即可速度能快三到五倍。如果要導(dǎo)出 ONNX 給別的語言用torch.onnx.export的輸入形狀要寫死成(1, 1, 60, 160)動態(tài) batch 雖然支持但很多推理引擎對動態(tài)軸的處理不一致反而增加調(diào)試成本。5. 常見問題排查訓(xùn)練不收斂、準(zhǔn)確率虛高、顯存爆掉的真實(shí)踩坑下面五條是這類項(xiàng)目里出現(xiàn)頻率最高的問題每條按現(xiàn)象、原因、解決寫??吹臅r候?qū)φ兆约旱娜罩緞e急著改模型結(jié)構(gòu)。5.1 loss 一路降到 0.1 就卡死驗(yàn)證整串準(zhǔn)確率停在 30% 左右現(xiàn)象訓(xùn)練損失很漂亮前 10 個 epoch 從 4.0 掉到 0.1之后紋絲不動。驗(yàn)證集整串準(zhǔn)確率在 30% 上下徘徊單字符準(zhǔn)確率能到 70%。原因最典型的是學(xué)習(xí)率太大導(dǎo)致模型掉進(jìn)一個「只認(rèn)部分位置」的局部解。四個位置里有三個位置猜得準(zhǔn)第四個位置全錯整串準(zhǔn)確率就恒定在低位。另一種可能是最后一個位置的樣本分布和前面不同——比如生成數(shù)據(jù)時第四個字符的坐標(biāo)抖動范圍更小模型學(xué)到的特征沒有泛化。解決先把學(xué)習(xí)率從1e-3降到3e-4重跑看曲線形狀有沒有變化。還是卡就打印每個位置的單獨(dú)準(zhǔn)確率定位到具體是哪個位置在拖后腿。如果確實(shí)是某個位置的問題檢查數(shù)據(jù)生成代碼里那個位置的坐標(biāo)范圍、顏色范圍是不是和其他位置不一致。我遇到過一次是生成腳本里random.randint(0, 6)寫成了random.randint(0, 60)字符被抖到畫布外模型學(xué)不到任何東西。提示逐位打印準(zhǔn)確率的代碼只有五行加上去比盲猜快得多。5.2 訓(xùn)練集 99%驗(yàn)證集 40%但兩批圖明明是分開生成的現(xiàn)象訓(xùn)練集準(zhǔn)確率一路飆到 99% 以上驗(yàn)證集卡在 40% 不動損失曲線在兩邊分叉得越來越大。原因數(shù)據(jù)泄漏。最常見的形式是訓(xùn)練集和驗(yàn)證集用了同一個隨機(jī)種子生成或者生成完之后按文件順序切分導(dǎo)致高度相似的樣本兩邊都有。另一種隱蔽的情況是標(biāo)簽寫錯——驗(yàn)證集的標(biāo)注文件里有一批標(biāo)簽和實(shí)際圖片對不上模型輸出其實(shí)是對的評測腳本判它錯。解決先把驗(yàn)證集里挑 20 張圖人眼看一遍確認(rèn)標(biāo)簽沒錯。然后算一下兩批圖的哈希md5重復(fù)的直接揪出來。生成腳本里訓(xùn)練集和驗(yàn)證集必須用不同的種子并且切分時按標(biāo)簽分層抽樣別讓某個字符在驗(yàn)證集里完全缺席。我一般會在切分后打印兩邊字符頻率的分布做一次比對這一步花不了一分鐘能省下幾小時的懷疑人生。5.3 換了字符集之后模型輸出固定幾個字符怎么訓(xùn)都一樣現(xiàn)象把字符集從小寫字母擴(kuò)到大小寫加數(shù)字重新訓(xùn)練之后模型輸出永遠(yuǎn)是0000或者aaaa。原因CHAR2IDX改了但I(xiàn)DX2CHAR沒同步改或者推理腳本里 import 的是另一份舊的映射表。訓(xùn)練時標(biāo)簽編碼用的是新表解碼用的是舊表兩邊一錯位輸出看起來就像模型啥也沒學(xué)會。解決字符映射表只能存在一個地方訓(xùn)和推理都從charset.pyimport。加一個自檢函數(shù)訓(xùn)練啟動時跑一遍from charset import CHARSET, CHAR2IDX, IDX2CHAR assert all(IDX2CHAR[CHAR2IDX[c]] c for c in CHARSET), 字符映射不互逆 assert len(CHARSET) len(set(CHARSET)), 字符集有重復(fù)字符第二行斷言防的是字符集里混進(jìn)重復(fù)字符比如013456789里漏看了個3映射表的長度和實(shí)際類別數(shù)對不上模型最后一層維度會算錯但報錯信息很難指向根因。5.4 把 batch_size 從 64 調(diào)到 8loss 直接變成 NaN現(xiàn)象為了在顯存小的機(jī)器上跑把 batch 改小訓(xùn)練幾百步之后損失變成nan之后再也回不來。原因BatchNorm 在極小 batch 上方差估計極不穩(wěn)定。batch 為 8 時每個通道只有 8 個樣本參與統(tǒng)計方差可能接近 0除下來數(shù)值爆炸反向傳播時梯度變成inf參數(shù)被污染后整個訓(xùn)練崩掉。解決三條路按優(yōu)先級排。一是保持 batch 不小于 32顯存不夠就降分辨率或者減小通道數(shù)二是把 BatchNorm 換成 GroupNorm它對 batch 大小不敏感代價是收斂稍慢一點(diǎn)三是用梯度累積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 訓(xùn)練時準(zhǔn)確率很好換了批圖推理結(jié)果全錯現(xiàn)象驗(yàn)證集上整串準(zhǔn)確率 90%拿幾張新生成的圖去推理輸出幾乎是隨機(jī)的。原因推理腳本的預(yù)處理和訓(xùn)練不一致。常見差異包括訓(xùn)練用cv2.imread讀灰度推理用 PIL 讀 RGB 再手動轉(zhuǎn)灰度兩個庫的灰度轉(zhuǎn)換系數(shù)不同訓(xùn)練做了中值濾波推理忘了訓(xùn)練歸一化到[-1,1]推理只除以 255。這些差異單看都微不足道疊加起來足以讓模型失效。解決把預(yù)處理抽成一個函數(shù)訓(xùn)練和推理都調(diào)它。參數(shù)從同一個 config 讀別在推理腳本里寫默認(rèn)值。我習(xí)慣在訓(xùn)練開始前隨手存一張預(yù)處理后的中間結(jié)果到磁盤推理時拿同樣一張圖跑一遍兩張圖逐像素比對差超過 1e-6 就說明路徑不一致。這個檢查不用改任何業(yè)務(wù)代碼兩分鐘能做完。6. 二次開發(fā)換字符集、改變長、上部署的改造路徑真拿這個項(xiàng)目去接需求改動能落到三個地方按改動成本從低到高排。6.1 換字符集與變長輸出的具體改法換字符集是最簡單的一種。只改charset.py的CHARSET字符串和config.py的MAX_LEN然后從頭重訓(xùn)。別試圖在舊權(quán)重上繼續(xù)訓(xùn)類別數(shù)一變最后一層全連接的維度就變了加載權(quán)重必然報 shape 不匹配硬改strictFalse會丟掉整個分類頭等于重訓(xùn)還多了個錯誤來源。字符長度不固定時把逐位分類頭換成 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是必須開的否則當(dāng)某個樣本的標(biāo)簽長度超過時間步 T 時損失會返回inf并污染整個 batch 的梯度。T 的大小由特征圖的寬度決定輸入 160 寬經(jīng)過四次池化剩 10 個時間步意味著標(biāo)簽長度最多 10四位字符綽綽有余但如果要識別十幾位的長串就得減少池化次數(shù)或者加寬輸入。這個約束在寫網(wǎng)絡(luò)結(jié)構(gòu)的時候就要算清楚訓(xùn)到一半發(fā)現(xiàn) T 不夠只能推倒重來。改造前建議先用小數(shù)據(jù)集跑通整條鏈路確認(rèn)識別正確再上全量。判斷標(biāo)準(zhǔn)很直接訓(xùn)練 500 步之后loss應(yīng)該穩(wěn)定下降到 3 以下如果一直在 8 附近晃八成是input_lengths或target_lengths傳錯了單位。6.2 落地前的驗(yàn)證清單上線前我會過一遍這張表每一項(xiàng)都對應(yīng)過真實(shí)的翻車場景。改造點(diǎn)涉及文件驗(yàn)證方法主要風(fēng)險換字符集charset.py、config.py訓(xùn)練前跑互逆斷言新舊映射混用導(dǎo)致亂碼改圖片尺寸config.py、models/cnn.py打印 Flatten 后維度全連接層維度不匹配換 CTCmodels/cnn.py、train.py單 batch 過擬合測試時間步不足導(dǎo)致 inf導(dǎo)出 ONNXpredict.py與 PyTorch 輸出逐元素比對BN 未切 eval 模式加數(shù)據(jù)增強(qiáng)data/dataset.py驗(yàn)證集不加增強(qiáng)增強(qiáng)污染驗(yàn)證指標(biāo)單 batch 過擬合測試是我最常用的手段拿 8 張圖反復(fù)訓(xùn) 200 步如果損失降不到接近 0說明網(wǎng)絡(luò)容量或者數(shù)據(jù)管線有問題跟超參無關(guān)。這個測試能在十分鐘內(nèi)排掉一大半「訓(xùn)練不收斂」的偽問題。從那以后我每次動數(shù)據(jù)管線都會先拿 8 張圖做一遍過擬合測試確認(rèn)這條路走得通再去碰全量訓(xùn)練。字符識別這行沒有玄學(xué)絕大部分「模型學(xué)不會」都是數(shù)據(jù)和預(yù)處理在背后捅刀子把這條紀(jì)律守住能省下的時間遠(yuǎn)超想象。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品乱码久久久久久| 久超碰这里只有精品| 土豪酒店各种姿势玩弄极品幼稚| 日韩欧美亚洲自拍偷拍| 精品视频日日夜夜| 少妇天堂| 亚洲欧洲综合视频在线| 亚洲女优有码无码高清| 在线人人人人人人精品超| 啊啊啊啊啊啊啊好爽不要| 欧美一区二区男人天堂| 蜜桃久久久久久久| 东北少妇高潮zzzz| www色色com| 天美久久久久| 成人看片网站| 日本精品一区二区三区四区的功能| www.zbzhongsen.com| 果冻传媒一区二区三区| 日本精品高清一二区一本到| 久久久久久少妇| 欧美黄色大片在线观看 | 99综合视频| 校园春色宗合网| 国产成人精品必看 | 亚洲成?V人片在线观看福利| asc国产精品| 国产真实野战在线视频| 久久久久久99999国产精品| 色噜噜精品一区二区三| 久久中久文96| 99热成人| 国产无码三级视频在线观看| 亚洲色悠悠久久88| 国产精品三级视频网站| 网友自拍第1页| 欧美三级偷拍| 中文字幕啊啊啊在线观看视频| www欧美91| 女优免费一区二区永久| 97超碰磁| 久久精品电影| 粉嫩国产精品久久粉嫩| 熟妇的味道HD中文字幕| 亚洲日韩97| 五月丁香影院| 情趣丝袜无码操逼视频| 亚洲图片偷拍欧美| 久久9精品视频| 色综合av综合久久| 欧美骚少妇| 久久天堂婷婷网| 中文字幕日韩专区精品系列 | 1769一区二区| 91狠狠综合网| 日韩熟女视频二区| 97se综合网| 午夜福利视频在线一区| 精品国模无码| 热热色国产一二区AV| 久99视频| 天天视频黄| 久久久男人的天堂| 欧美中文字幕男人天堂久久精品| 日韩国产乱子伦App| 亚洲色图欧美色18直播在线| 人妻熟女一区二区| 大香蕉伊利av| 日韩av一级黄片| 国产精品9999| 久久精品六区| 亚州欧美总和| 久久久久亚洲精品| 丁香激情网| www.99色| 人人妻人人爽一区二区三区| 天天干天天中出av| 欧美熟爽综合| 国产一级片| 黄色电影在线播放综合网站| 日韩亚洲欧美中文字幕| 蜜桃臀一区二区aV| 亚洲天堂日本| 都市激情人妻一区二区青青操视频| 欧美成97爱| 九九国产| 97超碰亚洲| 91色艳| 国产精品成人福利在线| 一级性爱视频免费在线| 91精品国产91久久青草| 97亚洲自在精品在线观看| 亚州中文字幕超碰97| 久久精品人体AV| 国产浮力影院第1页| 免费成人在线观看91| 9Ⅰ超碰| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 园内精品自拍视频在线播放| 中文乱码字字幕在线第5页| 99超碰网| 超碰 欧美| 青青草国产盗摄一二三区| 五月丁香| 色小视频蜜乳| 国产树林里野战在线看| 中文字幕一二区二三区人妻专区| 黄色大片免费在线| 国产无码成人无码| 极品销魂美女一区二区 | 欧美激情综合| 亚洲欧美综合| 日本爽爽爽爽爽爽免费视频| 欲香欲色| 97超碰护士| 大香蕉日韩欧美| 中文字幕在线2| 天美一二三在线观看Av| 欧美日韩情色一区二区| 蜜臀久久99精品久久久老,,| 日韩亚洲美州欧洲综三区一品在线| 欧洲熟妇xxXx欧美老妇裸体| 免费一级视频特黄色大片| 国产精品久久久久久久毛片1| 亚洲AV无码秘 蜜桃臀国精产品| 九九九九9999| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 99操| 亚欧美综合网。| 久久亚洲不卡一区二区三区| 久久久久久久久九九久孕交| 国产一区二区三区不卡手机在线| 国产乱婷婷精品二区三区| 中出91| 日韩免费人妻色情网站| 无码人妻一区二区一牛影视| 亚洲s在线观看| 午夜男人天堂| 日日嗨AV一区二区夜夜| 九九九九AV| 精品久久97观看在线视频| 992视频一区| 蜜臀久久久99久久久久 | 久久超碰97| 啊啊啊无码| 丰满熟女一区二区三区在线播放| 日产操逼| 国产在线视频二区| 欧美麻豆成人同性GⅤ在线| 欧美东京热精品A∨| 亚洲熟女av日韩熟女| 国产无码一二三区| 9 9精品一区二区三区| 婷婷99狠狠| 极品五月天噜噜| 啊啊啊好湿国产一二| 天天插夜夜爽| 欧美图片色五月天| 亚洲激情视频| 国产精品人妻熟女aⅴ| 多乙久久久久久| 亚洲乱妇p22| 国产91福利小视频在线观看| 999国产精品999| 99视频只有精品| 日韩AV中文字幕电影| 超碰在线97国产| 性高潮久久久久久久久久久| 国内毛片热久久思思热| 巨爆乳肉感一区二区三区竹菊影视| 激情婷婷| 亚洲欧美setu| 久久久四区| 在线观看无码三级少妇| 91日本在线观看| 亚洲。日韩。欧美| 亚洲精品97中文字幕| 亚洲风情在线观看| 思思性爱| 亚洲日韩欧美一区二区| 91 丝袜在线播放| 欧亚在线视频| 欧美少妇高潮久久91| 久久男人| 日婷婷| 国产亚洲99久久精品| 亚洲一二三精品久久网| 午夜美女诱惑电源网| 亚洲国产精品成人综合| 五月婷婷激情综合| 新精精品久久精品| 91狠狠| 日人妻视频91| 操人妻视频| 91成人无码| 精品v日韩欧美国产| 久久久性| www.人人摸在线视频| 亚洲美女30b| 五月天婷婷色色| 亚洲日韩美女中文字幕乱| 日本肉体xxxx裸交| 亚洲国产成人福利在线观看| yw尤物av无码点击进入麻豆| 女生91网站| 国产成人五月天丁香花| 婷婷五月天色网| 精品性爱久久视频| 久久久久久久久女黄| 亚洲精品一区二区免费在线观看| 人妻大香蕉| 亚拍在线| 亚洲91在线| 国产91 丝袜在线播放00-百度| 日韩欧美麻豆| 91欧| 久久久久久久久一区二区三区| 老司机福利社视频在线观看| 熟女少妇视频| 97视频在线看| 国产9 9在线 | 亚洲| 免费看黄片现成| 五月天我淫我色av| 在线观看高清AV| 亚洲成人av电影在线| 人人 操人人 操人人| 人人潮人人摸| 三级片网站在线播放| 91精品黄在线观看| 人妻啊啊人妻啊| 色香阁在线| 久久夜色一区二区| 成人在线午夜视频一区| 国产精品白丝www| 丰满人妻-区二区三区免费看 | 久伊人网78| 日韩一级二级三级| 97超碰69| 超碰天天操你比| 任你干在线视频| 免费男人的天堂| 色综91| 99国产精品视频尤物| 国产亲戚伦亲在线| 插入综合网| 91天堂视频| 久欲AV| 日骚逼视频| 91久久九九精品国产综合| 蜜乳AV一区| 国产农村一一级特黄毛片| 日韩有码一区三区| 欧美性Fer办公室秘书| 国产97视频| 久久无码一区二区二三区性色| 思思热影视| 五月色综合| 久久人妇| 国产精品不卡高清在线观看| 天天日天天干天天整| 四虎永久在线精品免费网址| 亚洲偷拍欧美激情| 美女天天干| 国产乱伦一二三区| 中文字幕88av在线| 欧美色视| 5月婷婷6月六月丁香| 青青草在线视频人人想人人上 | 国产精品探花色| 亚洲精品三| 日韩电影天堂视频二区三区| 3PAV乱伦视频| 婷婷综合在线| 久久激情视频| 操逼操逼视频操逼| 97在线青| 亚洲国产成人精品999| 成人AV在线网站| 中文字幕精品一区欧美| 美女主播色欲91抠b在线播放| 亚洲人妻五月丁香婷婷| 中文字幕日本久久| 九九九九九九九九九九九九九九九女| 91视频伊人| 天天爽爽爽爽| 蜜臀无码视频在线观看| 日本少妇va7777| 亚洲在饯| 日本 欧美 亚中文字幕| 91欧美经典| 国产欧美一区激情交| 亚洲AV人人澡人人爱| 久久精品国产AV一区二区三区| 亚洲欧美一区二区三区在钱蜜桃| 91黄站| 亚洲欧洲网站免费观看| 久久精品女同亚洲女同13| 最新三级网址| 在线亚洲丝袜视频网站| 亚洲αv一区二区三区| 97色色,97综合| 精品亚洲一区在线观看| 久久久久9999妇女| 萌白酱自拍视频| 高清肉丝中文无码| 色综合色欲色综合色综合色综合| 亚洲精品欧洲色| 日本三级中国三级99人妇网站| 深夜视频| 亚洲综合性感在线| 午夜啪啪片| 欲色啪| 亚洲国产成人高清在线| 91白虎| 91 手机在线播放 绯色| 手机在线免费看的av| 国产青视频| 色官网色综合| 伊香蕉综合久久久久久久噜噜噜| 97综合在线观看| 国产狂喷潮在线精品| 91天堂视频| 国产高清MV操逼视频| 久久久久极品| 天美精品av| 国产成人99久久亚洲综合| 97热视频在线观看| 色婷婷五月天| 99久久久久久亚洲精品不卡| 啊啊啊啊啊啊啊网址在线观看| 成人综合久久精品色婷婷| 伊人麻豆传媒| 精品一久久久| 久久久久人妻| 琪琪精品免费一区二区三区| 老司机福利社视频在线观看| 久久一二三四五六七八九区区| 欧美黄片欧美黄片xxx| 风间由美日韩欧美久久| 久久亚洲不卡一区二区三区 | 欧美性天天影院| 五月天激情婷婷| 国产一在线观看| 91亚洲综合在线| 久久骚少妇| 九九久久99| 久久精品国产99精品亚洲蜜... | 激情五月天插| 欧美少妇人妻| 啊啊啊啊啊舒服| 国产少妇与亚洲av| 任你草| 免费观看国产小粉嫩喷水精品午| 狠狠超| 啊啊啊男女| 久久久久亚洲一区女同性恋中文字幕| 免费夜夜爱黄色视频毛片| 免费又黄又裸乳的视频| AV乱伦国产| 欧美情色亚洲| 天堂性色| 99精品九九九九九九| 97色妞| 极品丝袜无码| 久久天天摸| 九九黄色网| 国产AV毛片| 国产精品久久久久无码Av网曝门| 日本成a人v网站在线观看| K8久久久久| 欧美在线干| 狠狠夜色午夜久久综合在线| 大香蕉中文aV在线| 青青草视频导航官网| 亚洲图片欧美91N| 熟女被操视频网址| 5月婷婷6月六月丁香| 日韩无码黄色片| 蜜乳成人AV| a亚洲欧美色欲| 超碰97护士| 国产精品播放| 中文字幕乱亚洲美女精品一区| 淫纸中9区| 丰满欧美放荡少妇在线| 久久久久96| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 青青操视频在线| 欧美色图在线视频少妇| 快播久久人人aV| 青青操日韩| 亚洲少妇视频| 久久久96| 天天操夜夜操狠很操| 国产一区二区三区白丝| 天天操天天干一区二区 | 亚洲伊人久久精品影院| 啊啊啊啊啊啊啊啊啊在线观看| 伊人国产视频| 亚洲综合骚逼| 欧美日韩精品久久久久东北老熟妇| 久久久九九| 人妻少妇精品无码专区二区密桃| 97资源站国产精品| 神马久久久久| 亚洲欧洲日韩天堂av| 天天操夜夜嗨| 播播亚洲小说亚洲| 91欧美高清| 欧美 青青草| 十八禁一区二区无码观看| 啊啊啊啊啊好舒服视频| 亚洲男人在线观看天堂| 精品综合久久久久久五月天| AV不卡在线| 激情小说五月天| 久9久| 欧美天天综合站| 欧美日韩亚洲少妇寂寞影院正在播放 | 国语精品av| 老女人综合网| 日韩一性一交一A片俄罗斯| 婷婷在线视频| 中国小夫妻勾搭露脸淫荡对白 | 黄色高清无码无码破解免费暗网| 大香交伊人网| 国产91丝袜在线播放蜜月| 久久啊啊啊| 二男一女成人A片| 国产67194| 熟妇人妻一区二区| 热热色青青草| 91丨九色丨国产丨人妻在线| 九九九九久久久| 精品亚洲俞拍视频一区| 97干在线| 天天天天操| av线电影| 久久精品 六十路 熟女 欧美| 一区二区三区精品视频| 中文字幕97色| 国产 日韩 欧美一区| 婷婷AV一区二区三区| 精品无人区麻豆乱码久久久| 亚洲天堂男人天堂网| 欧美劲爆视频一区二区| 97精品国产手机| 女人天堂av在线播放| 婷婷中文网| 久草色悠悠在线视频| 熟女少妇一区二区三区| 欧美日韩性爱无码| 亚洲中文电影| 欧美v亚洲v综合v国产v妖精| 天天操女人| 久久在肏| 五月婷丁香| 少妇特黄一区二区三区| 人人插人人摸人人| 欧美性爱一区二区三区四区 | 草莓精品视频| 超碰久久综合| 一牛影视成人片免费| 亚洲激情色片| 亚洲免费在线探花| 久干网| 欧美日韩啪啪电影| 97免费在线| 久9热| 秘书高跟黑色丝袜国产91在线| 国产区91柔拿会所技师| 中出人妻中文字幕91在线| 手机在线播放国产福利| 中文字幕文字幕无码一区二区三区电影99| 日韩激情电影中文字幕| 激情欧美日韩女同久久| 日韩在线一区二区| 搡老女人老91妇女熟女| 成人福利视频网| 国产欧美日产一区二区三区 - 国产欧美日 | 精品国产Av无码久久久亚洲| 欧美色图片91| 欧美成人AⅤ大片在线观看| 国产精品电影推荐| 色官网在线| 欧美色91| 黄页大片在线观看| 亚洲国产av中文字幕久久| 99热 按摩 日韩| 盗摄女人妻在线| 中出20p| 这里只有精品久久| 日本性感人妻91| 91高跟美女在线播放| 伊人网综合在线视频| 亚洲欧洲激情| 精品四五区| 四虎影视永久在线免费| 欧日韩一二三f区| 欧美黄页在线| AV污污污污| 色吊丝 日日骚 清纯唯美| 久超碰在| 黑人无码一区二区| 亚洲综合91| 亚洲国产精品久久久男人的天堂| 爱做久久久久久| 中文字幕欧美日韩三级| 大香蕉92| 欧美九九爱| 欧美日韩激情无码专区| 久久久久久久97| a人欧美综合天堂麻豆| 日韩去日本高清在| 亚洲性爱成人| 久久久女人| 国模不卡一本二本三电影| 在线观看av区| 一级做a爰片性色毛片久久| 懂色av中文字幕一区二区三区天美 | 97WW精品| 色一色综合网| 国产亚洲精品久久久久小| 午夜福利 成人 91| 精品人妻视频一区二区三区蜜桃视频| 五月天激情四射| 国产高清精品一区二区三区毛片| 久久久久久九九九| 蜜桃精品一区二区三区久在线| 久久午夜伦| 九九久久一区二区伦理| 欧美成熟性爱精品| 欧美日韩久久精品爱爱| 怡红院亚洲怡春院av| 自拍欧美| 国产极品999| 色五月网址| 嫩草影院在线观看精品| 成人av福利在线观看| 少妇久久久久久| 色路综合| 天美传媒精品久久视频| 色五月AV在线| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 无码九九| 精品人妻一区二区三区视频| 国产大片精久久久久久| 欧美亚洲激情小说| 97天天爽| 日韩在线视频1234| 人妻天天爽夜夜爽爽| 亚洲五月丁香花狠狠干一区二区三区 | 国产夜夜操| 人人天天欧洲| 欧美性天天影视| 天天操夜夜操| 久久色人体| 日韩AV片| 国产成人亚洲精品自产在线| 熟妇女伦乱视频视频| 啊啊啊不要好爽日韩无码一区| 好吊色一区| 国产专区路线| 精品久久久久久久久久久久| 操一区| 素人无码中文字幕| 青草视频人妻在线观看| 人妻天天爽| 大白逼三四级| 怡红院成人视频| 酒色综合网| 国产一级高清免费观看| 内射夫妻三片| 日本免费一级AAA大片器 | 国产熟妇一区二区| 色眯眯av| 青青草色AV| 色婷婷一区二区三区久久| 熟妇乱伦一区二区| 一区操逼| 在线不卡视频| 成人AV素股で擦久久| 综合网久久| 激情四射婷婷六月天| 全国男人天堂网| 国产传媒日韩| 亚洲欧洲综合av在线| 性色av网站| 920日本午夜免费| 国产白嫩精品久久| 蜜臀av网址| 欧美劲爆第一页| 五月天婷婷在线看| 欧日a| 日本在线一二 | 免费看污网址| 五月天久久人妻| www久久国产精品| 久操凹凸视频| 91大胆欧美| 欧美青青视频| 懂色av一区二区三区天美传媒| 色欲无码人妻日韩欧美精品| 色色国产| 久草精品一区| 97色碰| 蜜臀AV网站| 中文乱码99| 青青久日| 中文字幕一二区二三区人妻专区| 色蜜AV| 黑人干亚洲| 肏逼视频日本| 婷婷色色五月| 综合九九| 黄视频免费| julia高潮后不停追击中出| 色 亚洲 91| 97亚洲综合| 大香蕉五月天| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 成人久久久精品| 亚精品无码毛片一区二区三区| 白丝1区2区3区| 91AV老熟女视频| 丝袜视频网国产90| 精品少妇人妻av久久免费| 夜夜嗨一区二区| 精品二区三四区五电影 | 丁香色五月 97干| 国产一区二区久久| 老熟女乱伦一区| 精品国产乱码久久久久A| 在线 欧美 亚洲| 婷婷去俺也去六月色| 欧美亚男人的天堂| 91亚洲电影| 婷婷五月成人| 国产嫩草精品A88AV| 亚洲天堂7777| 涩涩久久精品| 成年女人黄网站| 久久一二三四不卡| 第四色奇米影视777| 久草视频制服诱惑| 国产无码成人无码| 亚洲国产综合久久久性感熟妇| 96精品久久| 日日夜夜天天| 久久久久久九| 九九视品黄色| 性色AV网站| 蜜桃在线观看一区二区三区 | 九九玖玖精品| 久久超碰国产一区二区三区| 有码人妻系列| 青青青国产手线观看视频2| 九九九综合精品| 超碰免费人妻人人| 99精品网站| 一起草欧美| 欧美传媒一区| 伊人久久大香大香线蕉中文 | 人妻精品视频一区二区三区 | 欧美性爱超碰97| 婷婷中文字幕| 加勒比综合| 精品人妻夜夜草| 午夜操逼不卡| 91女优在线观看| 人人插人人搞人人操| 在线欧美亚洲| 成人综合网 欧美| 亚洲va有码在线天堂| 国产精品乱码久久久、久久| 久草五月| 人妻一区二区三区四区视频| 国产成自自拍在线观看| 色久桃花影院在线观看| 一本久久久精品| 久久99国产综合精品女同| Sekablack无码一区| 日韩亚洲97| 婷婷五月天网| 免费av高清无码| 亚洲色天堂九9| 91狠狠综合久久久久久| 久久黄色视频一区二区三区 | 久久中文字幕一区不卡| 88在线一区二区三区| 乱精品一区字幕二区| 韩日色费| 亚州Av天美传媒| 依人大香蕉| 精品久久久久久AV无码| 亚洲久草AV色图| av婷婷色网| 久久久 国产精品| 亚洲影院成人| 国产一区二区在线看| 夜夜爽妓女| 人人天天干干| 国产亚洲精品A在线观看下载| 久久人妻一区二区三区高清| 性感女人网页在线观看视频| 人人爱人人操人人性| 激情五月天中文字幕色| 亚洲蜜臀精品视频久久| 天天日天天屌天天操| 久久精品欧美一区蜜桃| 92人人操人人| 国产精品探花色| 欧美日韩在线小说| 无码精品啪啪啪一区二区三区三州| 亚洲美女精品| 99性爱视频| 亚洲黄网在哪免费看| 亚欧毛片基地国产毛片基地| 香蕉视频精品亚洲一区二区三区在线播| 青青草色插素人| 久久久久久性爱视频| 亚洲成人在线播放| 日本在线视频导航| 在线无码网站| 久久成人国产精品| 12一15性XXXX粉嫩国产| 人妻少妇精品视频一区二区三区| 爱丝福利| 伊人在线大香蕉二。| 日韩噜噜69| 免费久久9999| 熟女中出视频| 精品久久久久黄少妇| 98一区二区精品| 丁香六月婷婷久久综合| 成人综合久久精品色婷婷| 多乙久久久久久| 亚洲第2页| 无码av永久免费专区网站| 黄色二级片网站| 五月天婷婷综合| 97综合在线| 亚欧高清在线| 国产热RE99久久6国产精品首| 1024人妻熟女一区二区三区| 精品偷拍13p欧美dodk视频| 久久久久亚洲三级电影| 超清福利精品视频在线| 激情 欧美 亚洲 小说| 日韩精品色呦呦| 欧美日日操| 日本熟女中文字幕一区| 免费伦费视频在线观看| 黄色视频特级毛片| 免费毛片在线播放| 婷婷五月天伊人| 91久久国产综合久久| www.操| 情色五月天久久久| 东北女人操比视频| 超碰综合97在线| 91情色在线| 久久久亚洲| 91大神精品长腿在线观看网站| 国产一区二区三区白丝| 国产精品久久久久久 百度| 久久婷婷综合国际产色怕| 国产女人成人精品视频| 一品道视频一区二区三区| 大香蕉综合| 亚洲天堂日本| 男人天堂毛片| 青娱乐二区免费| 人妻一区视频| 大香网伊人久久综合| 91网站18在线观看| 都市激情人妻一区二区青青操视频| 学生妹天天看| 亚洲有码视频二区| 一类av片在线看| 九月婷婷综合| 亚洲综合小视频小说在线观看| 国产成人啪一区二区| 色妇综合网| 岛国激情视频软件| 久色网| 日韩精品第3页| 青青草公开在线免费不卡视频| 精品久久久av无码免费| 无码乱人伦中文视频| 亚洲色图超碰在线| 很狠操| 老熟妇乱轮| 亚洲最大网站av| 伊人色综合超碰| 草B在线| 在线综合 亚洲 欧美中文字幕| 乱色视频中文字幕| 东北老女人的激情视频| 一本色道久久综合精品婷婷| 中文字幕亚洲永久精品| 国产农村妇女一区二区| 欧美草草| 在线色导航| 一区二区三区在线资源| 欧美性五月| 色综合V| 熟妇在线视频一区二区| 亚洲AV在线资源| 亚洲婷婷综合网| 婷婷久久五月天| 内射中国少妇高清视频免费视频 | 入口操逼网站| 极品粉嫩少妇视频| 日本成人在线不卡一区二区三区| 亚洲欧美日韩综合在线尤物 | 中文字幕天天操| 女人综合网| Aa东京男人的天堂| 超碰97精品| 狠狠综合网| 一区二区三区男人的天堂| 艹精品| 久久超碰97中文字幕| 超碰97护士| 亚洲色啪| 青青草在线视频美女| 国产成人手机视频激情| 亚洲欧洲久久天堂| 日韩强奸av| 蜜伊人色综合97| 97超碰站| 久久理论字幕视频| 丰满人妻区一区二区三| 久久国产视频性吧| 91制服丝袜中文字幕| 97最新在线播放视频| 999熟女精品| 思思热影视| 亚州欧美综合| 国产av美女被艹的乱叫| 国产九九九九九九| 熟女六十路| 久久9999| 簧片免费看视频| 青娱乐 青青青操 日逼| 9l视频自拍9l九色成人| 99re这里只有| 国色天香av| 色吧5亚洲| 啊啊啊在线观看免费视频| 亚洲精品白浆高清久久久久久 | 伊人五月天婷婷| 欧美色图成人网一区二区| 岛国毛片在线观看免费| 色天堂在线观看| 国产色精品午夜大片| 99精品在线| 丁香五月婷婷基地| 久久色网| 亚州高清色综合| 性爱乱伦一区| 超碰在线91| 97香焦色区| 家庭乱伦麻豆| 国产精品久久久九九九| 免费av大片| 97欧美日韩| 求求你操操我| 免费A V在线播放| 亚洲成成熟女人综合一区二区| 狠狠中文字幕| 天天色黄色影院天天操| 欧美综合在线第一页| 在线观看一卡二卡| 国产又黄又粗的视频| 亚洲极品| http://qxhbdz.com| 日韩无码a片| 亚洲男人天堂网站| 91久久伊人婷婷青青草| 日韩免费性爱视频在线观看| 精品九九九| 欧美狠狠操| 波多野42部无码喷潮在线观看| 嫩草影院永久在线制服丝袜| 九九成人视频| av强奸乱轮| 91性片| 色臀aV| 久草综合京东| 国产在线视视频有精品| 天天射天天操天天干天天吃2018| 日本亚欧爱爱| 欧美久久久15P| 国产亚洲在线| 国产精品美女久久久久AⅤ国产馆| 999热日韩精品| 品亲网欧美品亲网| 天天综合网一91网| 久久精视频美日韩在线视频| 自拍偷拍第26| 国产视频第二页| 日韩一级二级三级免费看完整版国语版 | 一区超碰一区| 日日夜夜青青草母狗| 久久久无码国精品无码三区三区| 一本大道不卡一二三区| 欧美第一页| 欧美韩日精品99综合| 99在线视频播放| 天天干天天日天天射黄色| 亚洲精品国产精品乱码不99| 久久精品欧美一区二区三区不卡| 超碰欧美97| 51一区二区三区| 国产第11页| 激情亚洲天堂| 无码heyzo高清一区| 91啪啪| 综合色啪| 日本在线播放不卡一区| 国产51色综合久久免费| 东京热视频网| V A在线| 欧美色偷偷| 伊人久久AV诱惑悠悠| 97亚洲自在精品在线观看| 97久久国产亚洲精品超碰热| 久噜噜| 日韩不卡码| 在线观看A啊啊啊| 午夜天堂精品久久| 嗯……啊…嗯嗯…啊…好舒服| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 97视频在线观看高清资源| 亚洲人精品久久久喷水| 亚洲图片欧美91N| 日日干夜夜干| 天天综合色| 日产狠狠干| 国产女人高潮视频| 加勒比大香蕉视频在线| 激情综合五月婷婷| 先锋精品av色鲁| 亚洲av夫妻操穴网| 欧美激情总合网| 偷拍 精品 另类 四区| 精品久久久九九九孕妇| 欧美精品在线观看| 天天综合影院91| 蜜臀久久在线视频| 2017天天透天天通天天擦| 亚洲精品不卡一二三区| 欧美高潮| avav青青草久久夜| 国产丝袜啪啪| 白丝AV| 三级日韩一区二区三区| 不卡av在线中文字幕| 久久人人舔人人爽舔人人av片| 黄色视频特级毛片| 这里只有精品视频| 日韩伦理久 久久 清纯| 白丝jkav| 精人妻无码一区二区三区伊人直播| 中文字幕精品亚洲熟女| 青青在线视频免费| 欧美色www亚洲国产阿娇要播| 亚洲色欲天天天堂色欲网女| 亚洲人妻中文高清| 在线只有精品| 久久国产视频专区一二三| 91综合国产精品| 欧美瑟综合| 激情综合网激情综合| 草草影院最新网址| 99ri精品| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 国产精品免费视频人成| 国产伦精品一区二区三区在线观| 综合网欧美在线| 亚洲精品国产精品乱码不卡| 久久久国产护士丝袜美腿一| 91人妻少妇| 欧美日韩香蕉| 精品国产乱码久久久久久影片| 久久精品72| 情色大香蕉| 欧美18 在线观看| 亚洲色欲天天人妻无码系列专区| 91原创在线观看| 亚洲性综合| 日韩兔费看黄片| 凸凹视频在线观看| 欧美 亚洲 大香| 欧美色老汉| 成人av在线播放| 婷婷五月天在线观看| 国产熟女二区| 亚洲综合999| 黄色高清无码无码破解免费暗网| 91狠狠综合久久久久久| 国产中文字幕在线观看| 精品美女久久久久| 色爱综合网| 超碰在线综合97| 欧美一二三级精品在线| 天天插天天插| 日本性一区| 日韩簧片免费看| 亚洲AV无码天美传媒一区| 伊人嫩草| 欧美亚洲尤物久久| 男人的天堂.com| 78操B| 在线啊v一区| 激情四射熟女丝袜| 最新av中文字幕高清| 欧州色图区| 欧美伊人电影| 大地资源在线观看中文第二页| 熟妇精品juliaannAV| 男女啪啪网站免费视频| 亚洲无码色| 加勒比综合在线| 国产亚洲日本精品在线| 91天天爱| 日韩黄片视频试看| 97久久精品国产| 精品人妻一二三| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | www鬼畜国产男人的天堂| 欧美伊人电影| 乱色视频中文字幕| 丰满欧美放荡少妇在线| 91久久精品中文字幕| silk lablo在线观看一区二区| 日日操免费视频| 午夜欧美J进J出白浆流出久久久| 中文字幕在线观看网址| 97超碰国产精品| 久久专区| 久草视频制服诱惑| 天天视频黄| 蜜桃视频精品一区二区三区| 黑人免费福利视频| 麻豆久久久久久久久丝袜 | 97精品视频在线播放| 日韩欧美俄罗斯A片| 国产丝袜高跟美女av免费观看| 成人aⅴ一区二区三区| 欧洲精品久久| 青青操狠狠撩| 东北老熟女| 日韩啪啪啪啪啪| 亚洲性网| 91成人在线| 亚一综合久久久久久久久久| 少妇99| www.色婷婷色综合| 91欧美色| 久久久久久大| 被男人添B超爽视频| 99热99re6国产在线播放| 亚洲国产欧美中文永久| 中文字幕第2页| 欧美久久婷| 国产福利在线视频网站| 9久9久9久9久视频网站| 人妻天天夜夜爽一区二区| 国产精品久久aV| 激情四射熟女丝袜| www99热| 一个人免费视频观看在线WWW | 操操操操网黑人| www国产天美久久久| JuliaAnnXXX888| 红桃视频高潮| 自拍大香蕉乱插| 91亚洲人| 亚州综合AⅤ| 婷婷亚洲天堂| 性爱网站一区二区| 欧美后入式| 天天综合网久久ww| 久久久免费一级黄片| 蜜臀久久99精品久久久| 久久人妇| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 大香蕉宅男伊人| 日本色婷婷| 亚洲春色欧美激情自拍| 日韩在线观看AV| 自拍丝袜美腿人妻| 亚洲日韩精品在线播放| 色屁屁影院www国产| 噜噜噜亚洲精| 大香蕉在线视频重口味毛片在线| 日本午夜久久电影| 无码区蜜乳| 俞拍久久国应视频| 青草影院内射高潮| 91人妻超碰| 乱伦系列一区二区| 无码免费在线观看黄色片| 91欧| 天天综合麻豆视频| 欧美天天综| 天天综合精品| 永久免费发布性爱网| 欧美18老人禁| 99re黄| 夜夜操夜夜高潮夜夜爽国产精品区| 亚洲国产综合久久久性感熟妇| 91精品久久久久久77777| 国产欧美精选激情视频| 午夜性生活av免费在线看| 亚欧洲日韩国产精品| 五毛骚逼极品美女怕怕| 日韩人妻网站| 国产精品91一样| 99久热| 日韩欧美经典在线观看| 一级黄色性爱A级片| 成人一道本免费视频| 91国模| 97在线观| 天堂网亚洲区手机版| 碰人碰碰人人开房人肉| 欧美97视频| 天天天天做夜夜夜夜做| 78p欧美| 人妻精品综合中文字幕在线| www.五月天| 五月天久久久| 91粉嫩萝控精品福利网站_精品影音先锋国| 成在线人在线观看视频| 大香蕉99热| 日韩熟女精品无码专区一区二区| 精品久久視頻在线| 五月婷婷六月激情| 色婷婷丁香五月天| 免费看日产一区二区三区| 久久精品国产96精品亚洲拳交 | 西西美女视频网| 一区 欧美 日韩 麻豆| 日韩欧亚太美不卡| 精品免费一区二区三区在线亚洲人成| 五月天婷婷欧美三区| 日日夜夜天天| 久久天天摸| 九九精品美女高溯喷水| 97干在线看| 久久视网78| 亚洲 另类 丝袜 自拍 动漫| 精品美女少妇一区二区三区| 国产地址二三| 九九九精品色乱九九九| 自拍第一页|