欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

醫(yī)學(xué)圖像分類(lèi)實(shí)戰(zhàn):腎臟數(shù)據(jù)集組織、yolov5訓(xùn)練與混淆矩陣評(píng)估

醫(yī)學(xué)圖像分類(lèi)實(shí)戰(zhàn):腎臟數(shù)據(jù)集組織、yolov5訓(xùn)練與混淆矩陣評(píng)估 簡(jiǎn)介一套針對(duì)腎臟結(jié)節(jié)與腫瘤識(shí)別的醫(yī)學(xué)圖像分類(lèi)數(shù)據(jù)集包含正常、結(jié)節(jié)、腫瘤三種標(biāo)簽專(zhuān)為基于深度學(xué)習(xí)的影像分類(lèi)場(chǎng)景設(shè)計(jì)適用于醫(yī)學(xué)影像入門(mén)實(shí)驗(yàn)、算法驗(yàn)證及競(jìng)賽練習(xí)。數(shù)據(jù)已按照訓(xùn)練集、驗(yàn)證集、測(cè)試集劃分并保存在data目錄下的獨(dú)立文件夾中三類(lèi)圖像數(shù)量分別為訓(xùn)練集2800張、驗(yàn)證集800張、測(cè)試集400張可直接用作卷積神經(jīng)網(wǎng)絡(luò)分類(lèi)或YOLOv5分類(lèi)數(shù)據(jù)集的輸入。資源包共2000個(gè)文件主要由1998張JPG樣本圖組成另含1個(gè)記錄類(lèi)別名稱與索引對(duì)應(yīng)關(guān)系的JSON字典文件以及1個(gè)用于數(shù)據(jù)集可視化的Python腳本整體壓縮包約151.5MB結(jié)構(gòu)簡(jiǎn)潔、便于快速檢查數(shù)據(jù)質(zhì)量。目前已有299人學(xué)習(xí)下載類(lèi)別字典清晰標(biāo)注類(lèi)別與索引的對(duì)應(yīng)關(guān)系可視化腳本便于快速檢查樣本減少數(shù)據(jù)整理與預(yù)處理的繁瑣步驟。對(duì)于希望快速獲得劃分完善、格式規(guī)整醫(yī)學(xué)圖像數(shù)據(jù)的研究者這套資源能顯著縮短實(shí)驗(yàn)前期準(zhǔn)備時(shí)間。1. 醫(yī)學(xué)圖像分類(lèi)的第一步這份腎臟數(shù)據(jù)集的目錄里藏著什么做醫(yī)學(xué)圖像分類(lèi)的人最怕的不是模型選型而是數(shù)據(jù)本身沒(méi)收拾利索。標(biāo)簽對(duì)不上、圖片混在一起、訓(xùn)練驗(yàn)證切分不干凈這些問(wèn)題往往在項(xiàng)目過(guò)半時(shí)才暴露一返工就是幾天。這次拆的資源是一份已經(jīng)劃分好的腎臟結(jié)節(jié)、腫瘤圖像識(shí)別數(shù)據(jù)集3 分類(lèi)正常、結(jié)節(jié)、腫瘤訓(xùn)練集 2800 張、驗(yàn)證集 800 張、測(cè)試集 400 張按文件夾組織好還帶類(lèi)別字典 json 和一個(gè)可視化腳本可以直接喂給 yolov5 分類(lèi)模式或任意分類(lèi)網(wǎng)絡(luò)。拿到手之后我的第一感覺(jué)是這省掉的不是下載時(shí)間是整理數(shù)據(jù)的時(shí)間。很多開(kāi)源數(shù)據(jù)集只給一堆散圖和一個(gè)標(biāo)注文件你得自己寫(xiě)腳本按標(biāo)簽歸文件夾、按比例切分稍不注意就漏圖或者路徑寫(xiě)錯(cuò)。這份資源把 train、valid、test 三套目錄都鋪好了圖片按類(lèi)別歸類(lèi)路徑即標(biāo)簽。對(duì)剛上手醫(yī)學(xué)圖像分類(lèi)的開(kāi)發(fā)者來(lái)說(shuō)可以直接跳過(guò)數(shù)據(jù)預(yù)處理這個(gè)最容易翻車(chē)的環(huán)節(jié)直接進(jìn)入訓(xùn)練和調(diào)參對(duì)熟手來(lái)說(shuō)省掉的是重復(fù)造輪子的時(shí)間把精力放在類(lèi)別邊界和模型評(píng)估上。2. 拆開(kāi)數(shù)據(jù)集看門(mén)道目錄、類(lèi)別字典與 4000 張圖的分布邏輯2.1 train / valid / test 三份目錄yolov5 分類(lèi)模式默認(rèn)的數(shù)據(jù)組織方式我第一次拿這份資源時(shí)先做的不是訓(xùn)練而是把目錄結(jié)構(gòu)和文件數(shù)量完整數(shù)了一遍。分類(lèi)任務(wù)和檢測(cè)任務(wù)不一樣檢測(cè)要讀 xml 或 txt 標(biāo)注分類(lèi)任務(wù)最簡(jiǎn)單可靠的組織方式就是「一個(gè)文件夾一個(gè)類(lèi)別」文件夾名就是標(biāo)簽。yolov5 的 classify/train.py 正是按這個(gè)約定讀數(shù)據(jù)的它內(nèi)部用 torchvision 的 ImageFolder 機(jī)制指定根目錄后會(huì)自動(dòng)掃描子目錄把每個(gè)子目錄名當(dāng)作一個(gè)類(lèi)別。# 在項(xiàng)目根目錄執(zhí)行查看數(shù)據(jù)集目錄樹(shù) tree -L 3 datadata/ ├── train/ │ ├── normal/ # 正常腎臟影像 │ ├── stone/ # 腎結(jié)石 / 結(jié)節(jié) │ └── tumor/ # 腫瘤 ├── valid/ # 有些版本寫(xiě)作 valyolov5 兩個(gè)寫(xiě)法都認(rèn) │ ├── normal/ │ ├── stone/ │ └── tumor/ └── test/ ├── normal/ ├── stone/ └── tumor/數(shù)完目錄我心里的預(yù)期是 train 2800、valid 800、test 400實(shí)測(cè)后跟摘要對(duì)得上。這里的邏輯說(shuō)明很簡(jiǎn)單yolov5 對(duì)訓(xùn)練集和驗(yàn)證集目錄名有約定train 和 valid或 val是它掃描的固定關(guān)鍵詞test 目錄在訓(xùn)練階段不會(huì)被動(dòng)用只在推理或最終評(píng)估時(shí)使用。參數(shù)說(shuō)明一下如果目錄名寫(xiě)的是 validation 而不是 valid 或 val那個(gè)文件夾會(huì)被忽略模型把驗(yàn)證集當(dāng)成了不存在這個(gè)問(wèn)題我見(jiàn)過(guò)不止一次。2.2 類(lèi)別字典 json從文件夾名到訓(xùn)練標(biāo)簽的映射關(guān)系數(shù)據(jù)文件夾本身已經(jīng)把標(biāo)簽寫(xiě)在路徑里了那 json 文件還有什么用它解決的是「數(shù)字標(biāo)簽」和「語(yǔ)義標(biāo)簽」的對(duì)應(yīng)關(guān)系。模型輸出的 argmax 結(jié)果是個(gè)整數(shù)比如 0、1、2你總得知道 1 到底代表結(jié)節(jié)還是腫瘤這就是類(lèi)別字典存在的意義。import json with open(data/classes.json, r, encodingutf-8) as f: class_dict json.load(f) print(class_dict) # {0: normal, 1: stone, 2: tumor} # 具體鍵值順序以你下載到的 json 為準(zhǔn)這里只是示例 # 反向映射訓(xùn)練時(shí)模型輸出 0/1/2通過(guò)它轉(zhuǎn)成可讀類(lèi)別 idx_to_name {int(k): v for k, v in class_dict.items()} name_to_idx {v: k for k, v in idx_to_name.items()}邏輯說(shuō)明這段代碼把 json 讀進(jìn)來(lái)后同時(shí)生成了兩個(gè)方向的映射。訓(xùn)練階段用 name_to_idx 把文件夾名轉(zhuǎn)成目標(biāo)張量驗(yàn)證和推理階段用 idx_to_name 把模型輸出轉(zhuǎn)成可讀的類(lèi)別文字。參數(shù)說(shuō)明json 里的鍵不一定是字符串形式的數(shù)字有的資源直接寫(xiě)的 {normal: 0}如果你拿到的是這種結(jié)構(gòu)把 int(k) 那行去掉就行讀取前先 print 一下原文件是標(biāo)準(zhǔn)動(dòng)作。有一個(gè)容易忽略的點(diǎn)torchvision 的 ImageFolder 在掃描子目錄時(shí)是按字典序生成 class_to_idx 的和 json 里定義的順序不一定一致。如果你的類(lèi)別名是 normal、stone、tumor按字母序恰好是 normal0、stone1、tumor2和 json 一致算運(yùn)氣好如果類(lèi)別名是中文或者首字母大小寫(xiě)混亂就要以 ImageFolder.class_to_idx 的實(shí)際結(jié)果為準(zhǔn)拿 json 來(lái)校驗(yàn)而不是拿來(lái)直接替換。2.3 show 腳本先可視化再訓(xùn)練省掉一半冤枉路資源里附帶了一個(gè) show 腳本我的習(xí)慣是在任何訓(xùn)練開(kāi)始前先跑它。醫(yī)學(xué)圖像分類(lèi)的視覺(jué)檢查和自然圖像不一樣很多圖片在普通人眼里長(zhǎng)得幾乎一樣但模型要學(xué)習(xí)的紋理特征就藏在這些細(xì)微差異里。腳本的作用是把每個(gè)類(lèi)別隨機(jī)抽幾張圖拼成網(wǎng)格展示出來(lái)確認(rèn)圖片能正常讀取、沒(méi)有黑圖或損壞文件順便對(duì)類(lèi)別特征有個(gè)直觀印象。import matplotlib.pyplot as plt import os import random from PIL import Image data_root data/train classes [d for d in os.listdir(data_root) if os.path.isdir(os.path.join(data_root, d))] fig, axes plt.subplots(len(classes), 4, figsize(12, len(classes) * 3)) for row, cls in enumerate(classes): cls_dir os.path.join(data_root, cls) imgs os.listdir(cls_dir) sample random.sample(imgs, min(4, len(imgs))) for col, img_name in enumerate(sample): img Image.open(os.path.join(cls_dir, img_name)) axes[row, col].imshow(img) axes[row, col].set_title(f{cls}) axes[row, col].axis(off) plt.tight_layout() plt.show()邏輯說(shuō)明這段腳本遍歷訓(xùn)練集下每一個(gè)類(lèi)別文件夾每個(gè)類(lèi)別隨機(jī)抽 4 張圖拼成一行網(wǎng)格。random.sample 做的是無(wú)放回抽樣避免同一張圖重復(fù)出現(xiàn)。參數(shù)說(shuō)明figsize 的第二項(xiàng)用 len(classes) * 3 動(dòng)態(tài)計(jì)算高度類(lèi)別越多圖越高min(4, len(imgs)) 是為了防止某個(gè)類(lèi)別的圖片數(shù)量不足 4 張時(shí)報(bào)錯(cuò)這屬于防御性寫(xiě)法資源里每類(lèi)都遠(yuǎn)超 4 張但寫(xiě)腳本時(shí)保留這個(gè)保護(hù)沒(méi)壞處。跑完 show 腳本我還習(xí)慣順手統(tǒng)計(jì)一下每個(gè)子目錄的具體數(shù)量這一步在分類(lèi)任務(wù)里的重要性超出很多人想象具體原因下一章展開(kāi)講。如果 show 腳本跑出來(lái)個(gè)別圖片是純黑或者明顯是損壞文件趁早剔除而不是等訓(xùn)練到一半 loss 異常再去排查。3. 把圖片喂進(jìn)模型yolov5 分類(lèi)模式與通用 CNN 兩條訓(xùn)練路線3.1 yolov5 分類(lèi)模式命令行訓(xùn)練與關(guān)鍵參數(shù)說(shuō)明這份數(shù)據(jù)集直接兼容 yolov5 的分類(lèi)模式這是最快跑通 baseline 的路線。yolov5 倉(cāng)庫(kù)里 classify 目錄下提供了獨(dú)立的訓(xùn)練入口不需要額外寫(xiě)數(shù)據(jù)加載器目錄結(jié)構(gòu)滿足約定后一行命令就能開(kāi)訓(xùn)。git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt # 使用官方分類(lèi)模型做預(yù)訓(xùn)練權(quán)重在腎臟數(shù)據(jù)集上微調(diào) python classify/train.py \ --model yolov5s-cls.pt \ --data ../kidney_dataset/data \ --epochs 50 \ --img 224 \ --batch 64 \ --name kidney_cls_run1這段命令的邏輯說(shuō)明--data 指向數(shù)據(jù)集根目錄yolov5 會(huì)自動(dòng)尋找該目錄下的 train 和 valid或 val子目錄--model 指定模型結(jié)構(gòu)同時(shí)加載官方在 ImageNet 上預(yù)訓(xùn)練好的權(quán)重遷移學(xué)習(xí)可以顯著加速收斂--img 224 是把輸入圖縮放到 224×224這是分類(lèi)模型在 ImageNet 上的標(biāo)準(zhǔn)輸入尺寸改成 320 或 640 可以提升小目標(biāo)細(xì)節(jié)的辨識(shí)度但顯存占用和訓(xùn)練時(shí)間會(huì)同步上漲。參數(shù)說(shuō)明里有兩個(gè)值得單獨(dú)拎出來(lái)--batch 64 依賴 GPU 顯存在 8GB 顯存以下的卡上建議降到 32 或 16否則會(huì)出現(xiàn) CUDA out of memory--name 是實(shí)驗(yàn)標(biāo)簽yolov5 會(huì)把權(quán)重和日志存到 runs/train-cls/name 目錄下?lián)Q一組超參就換一個(gè) name這是最簡(jiǎn)單的實(shí)驗(yàn)管理方式。訓(xùn)練完成后結(jié)果目錄里會(huì)自動(dòng)生成 confusion matrix 和 results.png那個(gè)混淆矩陣圖就是后文要重點(diǎn)看的東西之一。我一般會(huì)先跑 50 個(gè) epoch 看 loss 曲線是否正常下降再?zèng)Q定要不要加時(shí)間。醫(yī)學(xué)圖像數(shù)據(jù)集通常比自然圖像更「難學(xué)」因?yàn)轭?lèi)間差異小50 個(gè) epoch 往往還不夠收斂如果還有時(shí)間預(yù)算加到 100 epoch 效果會(huì)更好。yolov5 分類(lèi)模式默認(rèn)會(huì)做早停patience 默認(rèn) 100所以不用太擔(dān)心過(guò)擬合跑太久。3.2 通用 CNN用 torchvision 的 ImageFolder 手寫(xiě)一個(gè)數(shù)據(jù)加載器如果不想綁定 yolov5想自己控制模型結(jié)構(gòu)或做更精細(xì)的數(shù)據(jù)增強(qiáng)torchvision 的 ImageFolder 是最順手的加載方案。它做的事情正是章節(jié) 2.2 里說(shuō)的掃描根目錄下的子文件夾把文件夾名映射成整數(shù)標(biāo)簽返回 (圖像張量, 標(biāo)簽) 配對(duì)的數(shù)據(jù)集。這與本數(shù)據(jù)集的「文件夾保存」方式是完全對(duì)應(yīng)的不需要額外寫(xiě)標(biāo)簽解析邏輯。import torch import torch.nn as nn from torchvision import datasets, transforms, models # 訓(xùn)練集增強(qiáng)隨機(jī)水平翻轉(zhuǎn) 顏色擾動(dòng)抑制醫(yī)學(xué)圖像過(guò)擬合 transform_train transforms.Compose([ transforms.Resize((224, 224)), transforms.RandomHorizontalFlip(p0.5), transforms.ColorJitter(brightness0.2, contrast0.2), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) # 驗(yàn)證集只做縮放和歸一化不做隨機(jī)增強(qiáng) transform_val transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) train_ds datasets.ImageFolder(data/train, transformtransform_train) val_ds datasets.ImageFolder(data/valid, transformtransform_val) test_ds datasets.ImageFolder(data/test, transformtransform_val) train_loader torch.utils.data.DataLoader( train_ds, batch_size32, shuffleTrue, num_workers4, pin_memoryTrue) val_loader torch.utils.data.DataLoader( val_ds, batch_size32, shuffleFalse, num_workers4, pin_memoryTrue) # 用 ResNet18 做遷移學(xué)習(xí)把最后一層全連接換成 3 分類(lèi) model models.resnet18(weightsmodels.ResNet18_Weights.IMAGENET1K_V1) model.fc nn.Linear(model.fc.in_features, 3) criterion nn.CrossEntropyLoss() optimizer torch.optim.Adam(model.fc.parameters(), lr1e-3)邏輯說(shuō)明ImageFolder 返回的數(shù)據(jù)集對(duì)象自帶 classes 和 class_to_idx 兩個(gè)屬性classes 是文件夾名列表class_to_idx 是名字到數(shù)字的映射建議打印出來(lái)和類(lèi)別字典 json 對(duì)一遍防止字母序?qū)е碌臉?biāo)簽錯(cuò)位。驗(yàn)證集的 transform 不能帶隨機(jī)增強(qiáng)否則每次評(píng)估結(jié)果都有波動(dòng)無(wú)法橫向比較。參數(shù)說(shuō)明num_workers 在 Windows 上如果報(bào)多線程錯(cuò)誤就改成 0pin_memory 只在 GPU 訓(xùn)練時(shí)有意義CPU 訓(xùn)練可以刪掉。這里的優(yōu)化器只傳了 model.fc.parameters()意思是凍結(jié)主干網(wǎng)絡(luò)只訓(xùn)練新加的分類(lèi)頭先用這個(gè)配置跑通流程確認(rèn) loss 能降下來(lái)再解凍全部層做精調(diào)可以省一次從頭冷啟動(dòng)的時(shí)間。對(duì)比 yolov5 路線和通用 CNN 路線前者勝在開(kāi)箱即用日志、可視化、早停都內(nèi)置了后者勝在可控性強(qiáng)想換 loss、改 backbone、加自定義增強(qiáng)都方便。兩份數(shù)據(jù)是同一套切換路線的成本只在于重寫(xiě)數(shù)據(jù)加載器而這一節(jié)代碼可以直接復(fù)用到后續(xù)所有分類(lèi)實(shí)驗(yàn)里。3.3 loss 曲線的正常形態(tài)與異常形態(tài)跑通之后看什么不管用哪條路線訓(xùn)練起來(lái)之后第一件事是盯 loss 曲線。一個(gè)正常的訓(xùn)練過(guò)程train loss 在前 10 個(gè) epoch 應(yīng)該有明顯的下降趨勢(shì)val loss 緊隨其后下降但始終比 train loss 高一些。如果 val loss 先降后升而 train loss 還在降那就是過(guò)擬合信號(hào)需要增強(qiáng)正則化或提前停止。數(shù)據(jù)顯示這張表的對(duì)比場(chǎng)景我在 yolov5 的訓(xùn)練日志里整理過(guò)幾類(lèi)常見(jiàn)形態(tài)寫(xiě)在這里可以當(dāng)一份速查表用loss 曲線形態(tài)可能原因處理方式train/val loss 都不降學(xué)習(xí)率過(guò)大或過(guò)小、數(shù)據(jù)沒(méi)對(duì)齊先調(diào)到 1e-4 試跑 10 epoch確認(rèn)數(shù)據(jù)路徑正確train loss 降、val loss 升過(guò)擬合加數(shù)據(jù)增強(qiáng)、增大 weight_decay、提前停止兩個(gè) loss 都震蕩劇烈batch 太小或?qū)W習(xí)率偏大增大 batch 或降低學(xué)習(xí)率loss 為 NaN學(xué)習(xí)率過(guò)大、輸入含 NaN 像素用小學(xué)習(xí)率重啟檢查圖片是否損壞這里有個(gè)血淚經(jīng)驗(yàn)如果 train loss 在第一個(gè) epoch 就降到接近 0但不是收斂而是「假擬合」多半是標(biāo)簽和數(shù)據(jù)對(duì)不上——比如所有圖片被當(dāng)成同一類(lèi)。遇到這種詭異情況第一時(shí)間打印一個(gè) batch 的 data 和 label 出來(lái)人工核對(duì)不要急著調(diào)參這是深度學(xué)習(xí)圖像識(shí)別項(xiàng)目里最常見(jiàn)的「黑匣子」陷阱。4. 三類(lèi)標(biāo)簽的四個(gè)暗坑正常、結(jié)節(jié)、腫瘤容易翻車(chē)的地方4.1 類(lèi)別不平衡先數(shù)數(shù)再訓(xùn)練別等 loss 異常才回頭分類(lèi)任務(wù)里第一個(gè)暗坑就是類(lèi)別不平衡。摘要說(shuō)訓(xùn)練集總量 2800 張但沒(méi)保證三個(gè)類(lèi)別各 933 張現(xiàn)實(shí)是醫(yī)學(xué)圖像數(shù)據(jù)集里正常樣本往往比腫瘤樣本多得多。如果某個(gè)類(lèi)別只有 500 張而另一個(gè)有 1300 張模型會(huì)傾向于把模糊樣本預(yù)測(cè)為多數(shù)類(lèi)整體準(zhǔn)確率可能不低但少數(shù)類(lèi)的召回率會(huì)很難看。import os from collections import Counter def count_images(root): counter Counter() for cls in os.listdir(root): cls_path os.path.join(root, cls) if os.path.isdir(cls_path): counter[cls] len(os.listdir(cls_path)) return counter for split in [train, valid, test]: print(split, dict(count_images(fdata/{split})))邏輯說(shuō)明這段代碼統(tǒng)計(jì)每個(gè)集合下每個(gè)類(lèi)別的圖片數(shù)量輸出形如 {normal: 1200, stone: 800, tumor: 800} 的字典。拿到數(shù)量后做兩件事一是確認(rèn)每個(gè)類(lèi)別數(shù)量都在可訓(xùn)練范圍內(nèi)二是算一下最少數(shù)量的類(lèi)別能不能支撐訓(xùn)練。參數(shù)說(shuō)明如果發(fā)現(xiàn)某個(gè)類(lèi)別只有一兩百?gòu)堄袃煞N處理路徑一是對(duì)少數(shù)類(lèi)做過(guò)采樣在 DataLoader 里設(shè) sampler 按類(lèi)別權(quán)重抽樣二是用類(lèi)別權(quán)重加權(quán)損失函數(shù)把 torch.nn.CrossEntropyLoss 的 weight 參數(shù)設(shè)為 [1.0, 1.2, 1.5] 這類(lèi)與樣本量成反比的值。這是一個(gè)容易被忽略的地方驗(yàn)證集和測(cè)試集的比例分布也必須看一眼。很多項(xiàng)目訓(xùn)練集是平衡的但驗(yàn)證集因?yàn)殡S機(jī)劃分湊巧不平衡導(dǎo)致評(píng)估結(jié)果虛高或虛低。這份資源已經(jīng)劃分好了我們省了切分的力氣但「數(shù)數(shù)」這一步不能省。4.2 數(shù)據(jù)泄漏同一來(lái)源的圖片被拆進(jìn) train 和 valid醫(yī)學(xué)圖像和自然圖像有一個(gè)本質(zhì)區(qū)別同一病人的多次掃描切片之間高度相似。如果劃分?jǐn)?shù)據(jù)時(shí)只按文件名隨機(jī)打亂同一個(gè)案例的相鄰切片很可能同時(shí)出現(xiàn)在訓(xùn)練集和驗(yàn)證集里模型等于提前看過(guò)答案驗(yàn)證集指標(biāo)會(huì)虛高上真實(shí)場(chǎng)景就露餡。這張表的坑怎么識(shí)別看文件名。這份資源的文件名自帶.rf.加一串哈希的后綴如果多張圖片的哈希前綴相同大概率來(lái)自同一次標(biāo)注批次或同一個(gè)病例。檢查方法很簡(jiǎn)單對(duì)所有文件名提取哈希段統(tǒng)計(jì)同一個(gè)哈希前綴下的圖片是否被分到了不同集合。import os, re from collections import defaultdict def check_leakage(data_root): seen defaultdict(set) for split in [train, valid, test]: split_dir os.path.join(data_root, split) for cls in os.listdir(split_dir): cls_dir os.path.join(split_dir, cls) if not os.path.isdir(cls_dir): continue for fname in os.listdir(cls_dir): m re.search(r\.rf\.([a-f0-9]), fname) if m: seen[m.group(1)].add(split) leak {k: v for k, v in seen.items() if len(v) 1} return leak leak check_leakage(data) if leak: print(f發(fā)現(xiàn) {len(leak)} 組同源圖片被分到多個(gè)集合需重新劃分) else: print(未發(fā)現(xiàn)跨集合同源圖片)遇到數(shù)據(jù)泄漏時(shí)不要慌如果只是個(gè)別圖片串集直接刪掉測(cè)試集里那些同源圖片就行。如果比例很高要考慮重新劃分?jǐn)?shù)據(jù)劃分依據(jù)是哈希前綴而不是單張圖片文件名。這就是這份資源「按文件夾劃分好」背后的另一層價(jià)值劃分邏輯是可見(jiàn)的排查起來(lái)有跡可循。4.3 類(lèi)別字典與 ImageFolder 的索引順序不一致這個(gè)坑非常隱蔽我翻車(chē)過(guò)一次。ImageFolder 在構(gòu)建 class_to_idx 時(shí)按文件夾名的字典序排序如果類(lèi)別文件夾是 normal、stone、tumor索引恰好是 0、1、2但如果有人把文件夾命名成 normal、tumor、stone比如按創(chuàng)建時(shí)間排的那索引順序就變成 normal0、tumor1、stone2而類(lèi)別字典 json 里可能是 stone1、tumor2兩者對(duì)不上模型訓(xùn)練時(shí)的監(jiān)督信號(hào)就全亂了。# 打印 ImageFolder 實(shí)際生成的標(biāo)簽映射和類(lèi)別字典 json 對(duì)比 print(train_ds.class_to_idx) # 例如 {normal: 0, stone: 1, tumor: 2} # 讀取 json 里的映射 with open(data/classes.json, r, encodingutf-8) as f: json_map json.load(f) print(json_map) # 如果兩者不一致以 ImageFolder 為準(zhǔn)因?yàn)橛?xùn)練時(shí)用的就是它排查方法很簡(jiǎn)單把兩行打印結(jié)果并排對(duì)照。理論上這份資源在打包時(shí)已經(jīng)做過(guò)一致性校驗(yàn)但下載文件的版本可能不同json 也可能被編輯過(guò)跑這一步只需要一分鐘值得做。如果發(fā)現(xiàn)不一致解決方式是修改 json 字典的鍵順序而不是去改文件夾名因?yàn)槲募A名改起來(lái)牽連太多。4.4 隨機(jī)劃分的「看似隨機(jī)實(shí)則不隨機(jī)」最后一類(lèi)坑出在復(fù)現(xiàn)上。有人訓(xùn)練同一個(gè)模型兩次結(jié)果差異很大于是開(kāi)始懷疑模型問(wèn)題或者環(huán)境問(wèn)題但其實(shí)問(wèn)題出在數(shù)據(jù)加載順序。PyTorch 的 DataLoader 在 shuffleTrue 時(shí)用全局隨機(jī)數(shù)生成器洗牌如果不固定種子每次跑數(shù)據(jù)順序都不同結(jié)果自然不同。這在調(diào)參階段是災(zāi)難你不知道指標(biāo)變好是參數(shù)生效了還是隨機(jī)性帶來(lái)的。def seed_everything(seed42): import random import numpy as np random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) seed_everything(42)這段代碼要在訓(xùn)練腳本的最頂部執(zhí)行并且在 DataLoader 創(chuàng)建之前。參數(shù)說(shuō)明PyTorch 的 DataLoader 還可以單獨(dú)傳入 generator torch.Generator().manual_seed(42) 來(lái)控制洗牌隨機(jī)性這樣即便全局種子被其他庫(kù)污染數(shù)據(jù)順序依然可控。固定種子的價(jià)值在于讓每一次實(shí)驗(yàn)可復(fù)現(xiàn)這是深度學(xué)習(xí)項(xiàng)目從「玄學(xué)」走向「工程」的分水嶺。5. 圖像識(shí)別算法繞不開(kāi)的三件收尾驗(yàn)證分類(lèi)報(bào)告、混淆矩陣與誤判圖5.1 分類(lèi)報(bào)告別盯著準(zhǔn)確率看每類(lèi)的 precision / recall / f1訓(xùn)練結(jié)束后第一步跑測(cè)試集評(píng)估。很多人只看整體準(zhǔn)確率這對(duì)三分類(lèi)任務(wù)來(lái)說(shuō)遠(yuǎn)遠(yuǎn)不夠尤其在三個(gè)類(lèi)別數(shù)量不完全均衡時(shí)準(zhǔn)確率會(huì)被多數(shù)類(lèi)主導(dǎo)。sklearn 的 classification_report 一行代碼輸出每個(gè)類(lèi)別的精確率、召回率和 F1這三列合起來(lái)才能反映模型對(duì)每個(gè)類(lèi)的真實(shí)辨識(shí)能力。import torch from sklearn.metrics import classification_report, confusion_matrix device torch.device(cuda if torch.cuda.is_available() else cpu) model.to(device) model.eval() y_true, y_pred [], [] with torch.no_grad(): for images, labels in test_loader: images images.to(device) outputs model(images) _, predicted torch.max(outputs, 1) y_true.extend(labels.cpu().numpy()) y_pred.extend(predicted.cpu().numpy()) target_names list(train_ds.classes) print(classification_report(y_true, y_pred, target_namestarget_names))邏輯說(shuō)明model.eval() 是關(guān)鍵它關(guān)閉 dropout 和 batch norm 的訓(xùn)練行為否則同一張圖多次推理結(jié)果不同。torch.max(outputs, 1) 取的是每個(gè)樣本在 3 個(gè)類(lèi)別上的最大得分索引也就是模型的預(yù)測(cè)類(lèi)別。參數(shù)說(shuō)明target_names 直接取 ImageFolder 的 classes 屬性保證報(bào)告里的行順序和訓(xùn)練時(shí)一致不要手寫(xiě)類(lèi)名列表省得順序?qū)戝e(cuò)。這個(gè)報(bào)告還會(huì)輸出 macro avg 和 weighted avg前者是每個(gè)類(lèi)指標(biāo)的算術(shù)平均后者按樣本數(shù)加權(quán)兩者差距大說(shuō)明模型在少數(shù)類(lèi)上表現(xiàn)偏弱。5.2 混淆矩陣看模型把哪兩類(lèi)搞混了分類(lèi)報(bào)告給的是數(shù)值匯總混淆矩陣給的是錯(cuò)誤分布的具體位置。一個(gè) 3×3 的矩陣第 i 行第 j 列表示「真實(shí)類(lèi)別 i 被預(yù)測(cè)成 j」的樣本數(shù)對(duì)角線是預(yù)測(cè)正確的數(shù)量。看混淆矩陣我一般先找非對(duì)角線的最大值那個(gè)位置就是模型最容易混淆的類(lèi)別對(duì)。cm confusion_matrix(y_true, y_pred) print(混淆矩陣行真實(shí)列預(yù)測(cè)) print(cm) # 找出錯(cuò)誤最集中的位置 import numpy as np np.fill_diagonal(cm, 0) # 把對(duì)角線置零后剩下的最大值就是最嚴(yán)重的混淆 worst np.unravel_index(np.argmax(cm), cm.shape) print(f最嚴(yán)重混淆: 真實(shí){target_names[worst[0]]} - 預(yù)測(cè){target_names[worst[1]]}, 數(shù)量 {cm[worst]})對(duì)腎臟三分類(lèi)數(shù)據(jù)來(lái)說(shuō)最常見(jiàn)的混淆發(fā)生在結(jié)節(jié)和腫瘤之間因?yàn)閮烧咴谟跋裆系奶卣鬟吔绱_實(shí)模糊。如果混淆矩陣顯示 normal 和 stone 之間錯(cuò)誤很多那可能是標(biāo)注本身有問(wèn)題或者圖片采集條件不一致這時(shí)候去調(diào)模型是徒勞的要回頭查數(shù)據(jù)質(zhì)量。這一節(jié)里做的所有評(píng)估動(dòng)作本質(zhì)是回答一個(gè)問(wèn)題模型學(xué)到了什么又在什么地方學(xué)錯(cuò)了。5.3 誤判圖可視化把錯(cuò)誤樣本打出來(lái)看別再黑匣子調(diào)參混淆矩陣告訴你「哪里錯(cuò)了」誤判圖告訴你「錯(cuò)的是什么樣」。把預(yù)測(cè)錯(cuò)誤的樣本整理成網(wǎng)格畫(huà)出來(lái)標(biāo)題同時(shí)標(biāo)注真實(shí)類(lèi)別和預(yù)測(cè)類(lèi)別以及置信度分?jǐn)?shù)這一步對(duì)醫(yī)學(xué)圖像分類(lèi)尤其有價(jià)值。import matplotlib.pyplot as plt misclassified [] model.eval() with torch.no_grad(): for images, labels in test_loader: images, labels images.to(device), labels.to(device) outputs model(images) prob, pred torch.max(torch.softmax(outputs, dim1), 1) for i in range(len(labels)): if pred[i] ! labels[i]: misclassified.append((images[i].cpu(), labels[i].item(), pred[i].item(), prob[i].item())) if len(misclassified) 12: break if len(misclassified) 12: break fig, axes plt.subplots(3, 4, figsize(12, 9)) for idx, (img, true_label, pred_label, conf) in enumerate(misclassified): ax axes[idx // 4][idx % 4] img img.permute(1, 2, 0).numpy() img img * [0.229, 0.224, 0.225] [0.485, 0.456, 0.406] # 反歸一化 img img.clip(0, 1) ax.imshow(img) ax.set_title(f真:{target_names[true_label]}\n預(yù)測(cè):{target_names[pred_label]} ({conf:.2f})) ax.axis(off) plt.tight_layout() plt.show()這段代碼里的反歸一化是常見(jiàn)的坑模型訓(xùn)練時(shí)做了 Normalize 操作顯示圖片前必須用相同的 mean 和 std 還原否則看到的是一張偏色的圖無(wú)法判斷問(wèn)題出在哪。參數(shù)說(shuō)明clip(0, 1) 是為了防止數(shù)值越界導(dǎo)致圖像出現(xiàn)不自然的色塊。每次只取 12 個(gè)誤判樣本人眼能在一張圖內(nèi)快速瀏覽多了反而不容易看出規(guī)律。對(duì)誤判圖的觀察要落到具體模式上比如「所有被誤判成 tumor 的 stone 圖片都有明顯的強(qiáng)回聲區(qū)域」或者「正常樣本里有鈣化點(diǎn)所以被判成結(jié)節(jié)」。當(dāng)誤判呈現(xiàn)出明顯的視覺(jué)規(guī)律時(shí)說(shuō)明數(shù)據(jù)里有干擾特征下一步不是調(diào)模型結(jié)構(gòu)而是考慮加預(yù)處理步驟屏蔽干擾或者人工清理這些邊緣樣本。5.4 softmax 置信度的二次排查低置信度樣本單獨(dú)拎出來(lái)最后一層 softmax 輸出的置信度分布也值得看。醫(yī)學(xué)圖像分類(lèi)的實(shí)用場(chǎng)景里我們往往需要模型在拿不準(zhǔn)的時(shí)候「說(shuō)出來(lái)」而不是硬猜一個(gè)結(jié)果。統(tǒng)計(jì)一下測(cè)試集里置信度低于 0.6 的樣本數(shù)量如果占比很高說(shuō)明模型對(duì)大量樣本都缺乏把握部署時(shí)要考慮設(shè)置置信度閾值低于閾值的樣本轉(zhuǎn)人工審核。這個(gè)動(dòng)作的成本很低但對(duì)落地價(jià)值很大。yolov5 分類(lèi)模式在推理時(shí)會(huì)輸出每個(gè)類(lèi)別的置信度直接加判斷條件即可自己寫(xiě)的模型就是上面代碼里那個(gè) prob 變量。二分類(lèi)里有個(gè)概念叫閾值調(diào)整三分類(lèi)同樣適用只是要對(duì)每個(gè)類(lèi)分別設(shè)定。6. 三分類(lèi)項(xiàng)目收尾技巧把訓(xùn)練配置固化成一張復(fù)現(xiàn)清單訓(xùn)練完成、評(píng)估做完項(xiàng)目還沒(méi)結(jié)束。醫(yī)學(xué)圖像分類(lèi)模型如果要寫(xiě)進(jìn)報(bào)告或者準(zhǔn)備上線最忌諱的是「重啟之后不知道這次實(shí)驗(yàn)用了什么參數(shù)」。我的收尾習(xí)慣是把整次實(shí)驗(yàn)的可復(fù)現(xiàn)信息收斂成一個(gè)訓(xùn)練腳本或配置文件下次任何人跑一遍都能得到同一結(jié)果。# 訓(xùn)練復(fù)現(xiàn)腳本示例每次實(shí)驗(yàn)執(zhí)行前先讀取并記錄環(huán)境狀態(tài) export PYTHONHASHSEED0 python classify/train.py \ --model yolov5s-cls.pt \ --data data \ --epochs 100 \ --img 224 \ --batch 64 \ --seed 42 \ --name kidney_final參數(shù)說(shuō)明里有個(gè)容易被忽略的PYTHONHASHSEED 控制 Python 字符串哈希的隨機(jī)種子不固定它即使在代碼里調(diào)了 random.seed 和 torch.manual_seed某些依賴哈希次序的邏輯比如集合遍歷順序仍可能導(dǎo)致結(jié)果不一致。這個(gè)環(huán)境變量要放在訓(xùn)練命令的同一行 export而不是在 Python 代碼里設(shè)置因?yàn)樗诮忉屍鲉?dòng)前就必須生效。我還會(huì)在訓(xùn)練腳本同目錄下留一個(gè) data_report.txt把每次實(shí)驗(yàn)的數(shù)據(jù)集分布、類(lèi)別字典內(nèi)容、訓(xùn)練和驗(yàn)證的準(zhǔn)確率記錄在同一份文件里。這樣一個(gè)月后回來(lái)看不用重新打開(kāi)任何一個(gè)權(quán)重文件就能快速回憶起當(dāng)時(shí)的數(shù)據(jù)條件和模型表現(xiàn)那份文檔比模型權(quán)重本身更能說(shuō)明問(wèn)題。分享一個(gè)從不例外的習(xí)慣不管項(xiàng)目多急最后一輪實(shí)驗(yàn)完成后我強(qiáng)制自己用 10 分鐘把「數(shù)據(jù)集版本 劃分文件 訓(xùn)練命令 最終指標(biāo)」四件事寫(xiě)進(jìn)倉(cāng)庫(kù) README 里。做過(guò)的醫(yī)學(xué)圖像分類(lèi)項(xiàng)目里被返工最多的從來(lái)不是模型性能不夠而是后來(lái)者不知道當(dāng)時(shí)的實(shí)驗(yàn)是怎么配出來(lái)的。這類(lèi)資源真正的價(jià)值是幫你把數(shù)據(jù)從「看懂」推進(jìn)到「跑通」——如果這篇拆解幫你少走了彎路希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美噜噜免费观看| 天天在线XXX| 色99视频| 99激情视频热| www,婷婷,com| 久久视频在线| 伊人玖玖综合| 大香蕉婷婷五月天| 欧美色婷婷| 色婷婷AAA| 色欲婷婷五月天| 96精品久久久久久久久| 那里有AV网址| 欧美成人猛片AAAAAAA| 性 色 婷婷| 久久综合99| 狠狠搞五月天| 色135综合网| 五月婷六月丁香| 五月四色激情| 色噜噜五月天| A一级操| 激情综合婷婷| 色五狠狠| 色播婷婷五月天| 性一交一乱一交A片久久四色| 日韩精品一区二区亚洲AV观看| 99人妻碰碰碰久久久久视| 区美毛片子| 日韩AAAAA| 九九人妻福利| 大香蕉懂9| 婷婷五月天亚洲五码| 一区视频网站| 日韩AV免费电影在线播放| m色激情网| 丁香五月婷婷综合激情哟哟哟| 婷婷五月天资源| 九九激情| 天天色宗合| 丁香六月av| 99九九这里有免费视频| 综合激情五月天| WWW.五月天9999| 五月激香蕉网| 色停停香蕉视频| 天天爽天天爽天天爽天天爽天天爽| 五月天婷婷综合网| 国产激情婷婷| 色婷婷五月天天天天天天天天天| 操逼三区| 久久精品国产AV一区二区三区 | 伊人久久大香蕉网| 久久AV电影| 久婷婷五月天影院| 五月综合激情啪啪啪啪啪| 丁香五月伊人| 亚洲婷婷五月草久| 亚洲婷婷丁香| av免费在线观看0| 色综合久久中文| 婷婷五月激情六月丁香| 六月丁香六月婷婷欧美| 综合色色色| 五月丁香啪啪激情| 在线成人网址| 日韩aⅴ视频| 超碰人人草| 色九月激情综合网| 国产激情久久久| 九九九九精品精| 五月婷婷婷| 婷婷激情丁香五月天综合| 婷婷五月五月丁香| 91超级碰碰| 色婷婷五月天久久| 伊人午夜综合色啪| 色久婷婷网| 亚洲婷婷综合视频| 怎么样可以看免费的一级av| 五月天婷婷丁香| 日本成人噜噜| 襙比视频| xxxx五月| 九九热九九| 五月婷婷婷色| 色哟呦av| 伊人激情AV一区二区三区| 五月天激情综合网| 日韩五月丁香| 色婷亚洲| 色婷婷AV五月天| 色综合婷婷| 九九成年视频| 五月婷婷黄色网址| 色狠狠色噜噜AV天堂五区| 九九无码| 欧洲激情精品婷婷| 五月天另类小说| 777丁香六月青青草婷婷综合久月| 欧美三日本三级少妇三99| 狠狠干.com| 久操综合| 五月天婷婷社区| 激情综合网亚洲色图| 久久久久98| 亚洲免费成人电影AV| 五月大香蕉| 97狠狠色| 99热9999| 婷婷天堂站| 色五月五月婷婷| 五月天婷婷激情春色小说| 五月激情婷婷图片基地| 琪琪秋霞| 丁香五月日啪| 五月丁香六月日逼| 丁香五月色综合色播五月| 色色五月天激情| 九九99在线视频| 91久久网站| 中文字幕日产A片在线看| 97视频久久| 天天干天天干天天干天天干天天干| 天天天天天天天操| 久久精品亚洲一级牲爱综合| 久播影院免费观看电视剧大全最新网| 久久亚洲婷婷| 亚洲第79页| 天天爽夜夜爽天天爽夜夜爽| 桔色成人在线| 五月丁香激情综合网| 日日夜夜天天综合| 婷婷丁香六月| 成人视频在线免费播放| 五月婷婷av| 另类 在线| 99热都是精品| 色五月色五天色情网| 人人爽欧美婷婷久久久五月丁香 | 噜噜精品| 婷婷色导航| 天天日夜夜拍| 色婷婷影院| 人伦30P| 强伦轩人妻一区二区电影| 国产性爱一级| 丁香丁婷五月激情| 深爱五月天天| 久久a热| 精品久热69| 97久久精品| 欧美三日本三级少妇三99| www.9797国产| 色五婷婷在线视频| 五月激情婷婷在线| XX色综合| 亚洲免费av观看| 色色五月婷婷久久| 热久久99视频| 1024手机在线观看看片_日韩精品| www超碰com| 久草x色在线观看99 | 99色热| 99天堂网| 九九色中文| 综合五月丁香97| 99久精品视频| 婷婷丁香五月天综合网| 情趣视频66| 超碰在线中文字幕| 六月天婷婷| 国产人妻777人伦精品HD| 97日本在线播放| 亚州婷婷五月激情综合| 99re这里只有精品99| 五月天激情综合网站| 2015好吊操| 变态另类色图| 91欧美日韩综合| 婷婷五月激情六月丁香| 婷婷五月丁香香蕉| 综合色色网| 一二线视频 另类| 丁香五月婷婷激情蜜桃| 中文字幕黄色片| 在线色五月婷婷| 久久人妻久久| 亚洲色另类| 国产精品18久久久| 久久婷婷国产| 操啊操av| 天天爽天天操| 五月天色色色网| 久久 婷婷 五月天| 丁香激情婷婷网| 婷婷六月色开 | 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 九月婷婷综合在线| 久久男人网婷婷| 香蕉久久国产av一区二区| 色丁香五月婷婷婷| 五月婷婷激情综合| 激情综合色五月丁香| 9 1大香蕉| 丁香五月综合高清在线| 色天五月天在线观看视频| 婷婷激情六月| 爆乳熟女一区二区三区爆乳| 天天看片日日夜夜| 综合色影| 亚洲国产精品VA在线看黑人| 538任你爽| 婷婷 丁香 久久| 五月天国产成人| 亚洲日日操| 99精品免费| 丁香婷婷婷婷十二月在线观看视频| 91超级碰碰碰| 婷婷综合五月天| 丁香婷婷综合激情五月色| 激情五月婷婷啪啪| 99热的无码| 婷婷丁香18| 婷婷六月久久| 五月久久亚洲| 激情五月天色播| 九月丁香欧美综合| 久久A区B区| 天天天天干| 综合激情在线观看| 99免费视频网| 思思热视频在线观看| 激情五月婷婷色综合| 色婷婷基地| 天天操狠狠操| 色五月首页| 日本 色综合| 六月色狠狠色| 成人午夜视频精品一区| 五月六月激情婷婷| 国产日韩欧美| 日日干夜夜撸夜夜骑| 婷婷久久久| 在线资源av-超碰中文在线-成人AV| 婷婷激情五月综合丁香社| 可以直接看的AV| 久久五月婷婷视频| 99视频激情四射| 色播色丁香五月| 开心五月综合| 日韩 mm 不卡| 九九热视频在线观看| 婷婷综合干| 天天橾夜夜爽| www.激情com| 日韩欧美一级大黄网站| 91久草五月天婷婷| 日本99在线| 婷婷色操| 日本99久久| 五月丁香色色| 激情婷婷五月天| 久久视这里只有精品| 五月丁香啪啪啪| 深夜男女福利刺激影院一区完整| 亚洲五月天激情| 色色综合色视频| 色五月五月婷婷| www.天天干.com| 色婷网| 九九热99re8热免费观看| 激情综合网五月天| 五月丁香狠狠爱婷婷综合| 国产亚洲精品AAAA片APP| 色五月天天| 免看黄大片AA | 色婷婷六月开心中文字| 2005天天干天天1| 久久性爱视频网站| 婷婷九月色| 99热综合| 丁香婷在线| 午夜激情久久| 九九热欧美| 五月天激情小说| 亚洲色啪| 天天干天天干天天干天天干天| 久久一伦| 超碰人人草| 五月丁香好婷婷姑娘综合网| 9l视频自拍九色9l黑人| 五月丁香久久网| 婷婷色色五月天| 婷婷久久综合久| 激情综合丁| www.九月婷婷丁香.com| 天天插天天草人人玩| 91久久久久久久久久18| 人人操人人干AV| 亚洲操逼网| 99这里有精品视频| 色欧洲| 中文无码婷婷| 婷婷在线中文字幕| 97香蕉碰碰人妻国产欧美| 丁香婷婷五月天亚洲| 色婷婷五月天av在线| 丁香婷婷月| 亚洲啪视频| 五月婷婷丁香六月| 操骚货在线| 久久九九爽| 国产69久久久欧美黑人A片| 79色色色色| 九九色人| 超碰免费观看| 丁香五月激情五月| 婷婷五月天开心网| 99热6这里只有精品6| 偷拍99在线视频观看| 亚洲碰碰碰| 狠狠另类视频| 九九自拍网| 日本人妻伦在线中文字幕| 色色色色网站| 五月丁香六月欧美综合| 国产精品色婷婷99久久精品| 色五月色综合| 色色色无码| 久久aaaa片一区二区| 欧美啪啪9| 国产古装妇女野外A片| 91啪啪| 五月天丁香久久综合| 久艹大香蕉| 新激情五月开心五月婷婷五月丁香五月| 操逼国产91| 五月婷婷深深爱| 成年人丁香五月| 开心婷婷五月激情网小说| 六月激情网| 激情五月综合| 啪啪激情网| 韩国三级五月天婷婷。| 日本www五月婷婷| 六月婷婷色色色| 中国操逼99| 五月丁香色色网| 深情五月天| 五月激情丁香久久综合网| 丁香五月图片| 丁香婷婷五月综合影院| 久9久9热久热| 9l久久久视频| 电影《战争与艾拉》免费观看| 操日挥操日日| 99色热| 婷婷久久在线| 婷婷天天综合| 激情六月婷婷| 日韩av在线免费观看| 提提热五月天婷婷| 五月天久久婷婷| 久久久9久| 这里只有精品视频视频在线观看| 激情九九六月激情免费视频| 久99久视频精品| 超碰人人草| 欧洲免费视频色| 九九99久久| 国产色视频网站2| 国产va在线视频| 久久99精品久久久久久噜噜| 91av无码| 思思w99| 亚洲无码色色| 亚洲、欧美、国产另类笫二区| 五月天色婷婷基地| 乱精品一区字幕二区| 曰曰久久| 五月婷婷九| 色色色com| 99精品视频免费在线播放| 婷婷五月天视频亚洲| 92久久精品一区二区| 亚洲av网站| 爽天天天天天天天| 精品九九久久| 九九热精品视频九九| 国产日比| 五月丁香综合激情在线观看| 综合网亚洲| 五月婷婷色啪| 天天舔天天爽| 超碰国产在线观看| 97色色视频| 天天色五月婷婷91久久久久久久| 久久激情五月网| 极品少妇XXXX精品少妇偷拍| 亚洲俩性性爱图片久久第六页| 丁香六月色婷婷| 丁香五月婷婷大香蕉| 婷婷久久综合久色| 激情五月天99色| 色丁香五月天婷婷| 超碰免费99| 91无码色色| 久久草大香蕉| 国产脫衣舞一区二区三区| 99网址在线看| 成人精品在线观看| 97激情五月天| 天天日天天做天天操| 天天干天天操天天上| 五月天堂在线| 可以免费观看的AV| 色色色五月婷婷| 婷婷五月影院| 五月丁香亭亭电影久久| 伊人久久大香线蕉亚洲五月天,| 国产探花一片区| 九九热99精品| 色综合网址| 久久久婷| 激情综合网激情五月欧美| 亚洲色vA| enecarbon-materials.com污K127封锁请涟系@wip1688 | 色五狠狠| 色欲影香| 涩五月婷婷| 少妇出轨做爰高潮A片| 99热10在线高清播放| jiuse91在线| 婷婷少妇激情| 人妻系列久久久久久久久久久| 亚洲色激婷| 日日肏夜夜干| 九九精品综合| 丁香六月婷婷久久综合| 亚洲视频另类| 99激情在线| 婷婷五月天成人动漫 | 99热这里都是精品| 成人免费超碰| 日韩999| 久色视频首页| 亚洲第一综合| 大香蕉啪啪啪| 91九色PORNY中文啦| 综合AV在线| 狠狠婷婷爱| 久久黄色片| 亚洲九区| 丁香五月婷婷操逼| 色墦五月丁香| 五月婷婷啪啪啪啪| www夜夜| 婷婷操无码| 丁香五月六月综合激情| 五月丁香好婷婷A片网| 成人va视频| 婷婷色网| 91色在线| www,婷婷五月天,com| 久久99激情| 亚洲精品久久久无码| 婷婷综合偷拍| 婷婷涩涩网| 狼人婷婷综合| 精品视频二级九九| 婷婷五月成人| 五月丁香婷婷成人网| 亚洲a色| 色婷婷色丁香色欲av| 日韩操人| 五月综合激情视频在线| 久久久天堂国产精品女人| 午夜成人综合| 色综合色综合色综合| 婷婷九月色| 久久婷五月影院| 久久机热这里只有精品免费视频| 欧美性爱五月天| 夫妇交换刺激做爰| 亚洲AV网站| 天天色激情| 五月丁香综合啪啪| 97人凄人人操人人爽| 亚洲人人操BD| 搡BBBB搡BBB搡18| 丁香五月情| 99re在线这里只有精品视频首页| 九九色热| 久久草大香蕉| 丁香九月综合| 中文字幕性爱视频| 婷婷综合色五月天| 精品人妻伦九区久久AAA片| 婷婷五月天六点丁香五月| 婷婷五月天成人小说| 国产亚洲成AV人片在线观黄桃| 五月婷中文字幕| 丁香五月亚洲| 婷婷综合九色伊人| 五月综合亚洲| 99国产精品白浆在线观看免费| 五月丁香啪啪综合| 五月婷婷在线观看黄| av婷婷丁香| www.五月婷婷久久.com| 嫩BBB槡BBBB搡BBBB| 五月天久久久| 九月激情网| 色狠狠综合入口| 色色网五月激情| 乱乱av| 婷婷五月天无码熟女| 五月丁香六月欧美综合网站| 色五月首页| 99干日本| 色婷婷免费视频| 99精品热| 久久一级片| 色色色9| 色五月丁香91| 色色亚卅| 蜜桃婷婷丁香综合久久开心亚洲| 操逼福利视频| 国产性av| 开心五月天激情| 91中文狠狠综合| 五月丁香五月丁香| www.狠狠操| 无码网| 色玖玖| 色五月xxx| 五月婷婷啪啪| 狠狠夜夜五月丁香| 中文字幕丰满孑伦无码专区| 亚洲激情视频网| 亚洲精品一区中文字幕乱码| 欧美韩日AAA网站| ..真实国产乱子伦对白在线_欧 | 中文av网站| 婷婷综合偷拍| 玖玖婷婷色五月| 99啪啪网| 婷婷五月色| 婷婷视频网| 97操碰| 日韩色色网| 色丁香五月婷婷| 六月婷婷狠狠| 欧美性爱专区| 亚洲色视频| 激情九色| 亚洲久热| 五月婷婷丁香伦理网| 夫妇交换刺激做爰| 色五月视频,小说| 黄色成人AV在线| 99热这里全都是精品| 久久婷婷五月综合激情国产| 五月天激情丁香| 色色色在线播放| 激情文学综合婷婷五月天丁香花| 色婷婷色五月天| 激情久久丁香| 狠狠干夜夜干| 久久人妻情侣| www91久久| 色五月婷婷综合| 99亚色色色| 99精品偷自拍| 婷婷五月天高清无码| 丁香五月婷婷综合精品素人| 99热这里有精品| 五月天婷婷激情小说| 久久婷婷五月综合网| 四月婷婷五月丁香| 婷婷色播色五月五色五月天色妇| 青青草原亚洲久| 五月成人网站| 九九这里只有精品在线视频| 五月丁香综合精品欧美| 91丨九色丨熟女| www。狠狠干。com| 五月综合激情图片| 日本99热| 国精产品一区二区三区| 亚洲无码11| 内射爽无广熟女亚洲| 精品A√| 五月婷婷色色色| 国产无遮挡又黄又爽免费网站| 丁香六月成人| 色VA| 日本理论久久| 少妇人妻人伦A片| 五月婷婷丁香网| 亚洲思思热久| 96色婷婷| 狠狠色色| 99热精品在线在线| 色婷丨日丨天丨综合久久| 久草丁香婷婷五月天婷| 成人精品视频99在线观看免费| 天天干狠狠| 五月激情丁香五月| 99热全是精品| 嫩草AV久久伊人妇女超级A| 丁香五月激情五月| 天天射射夜| 久婷婷婷| 天堂va久久久噜噜噜久久Va| www.91久久| 天天操婷婷| 天天日人人| 任我鲁这里有精品视频| 射满了还射免费在线观看 -午夜版全集-新视觉影院 | 婷婷五月在线免费| www久久久久久| 国外亚洲成AV人片在线观看| 伊人玖玖精品| 这里只有精品视频一区| 激情小说五月天社区丁香 | 亚洲精品国产成人AV在线| 欧美天堂婷婷日韩| 久久婷婷五月综合| 大香蕉天堂| 99日这里只有精品| 丁香五月另类小说在线阅读| 色5月婷婷色| 大香蕉视频99| 男女啪啪做爰高潮无遮挡| 天天爽人人综合免费7799| 激情五月天小说| 婷婷五月丁香高清无码| 综合婷婷| 中文字幕,综合,91| 超碰五月婷婷五月天| 国产欧美日韩综合精品一区二区| 日日爽日日| 无码动漫av| 婷婷五月丁香综合人妻| 丁香成人综合| 免费成人va| 91操网| 丁香五月综合首页| 九九热内射| 爽tv | a在线观看| 狠狠综合网| 亚洲婷婷基地| 六月婷婷八月丁香| 久久99热这里只有精品| 九九精品在线观看视频6| 99精品视频免费观看,| 伊人青草成人| 亚洲激情丁香五月天色| 色一情一乱一乱一区91Av| 狠狠干综合网| 五月丁香久久呀| 色月丁| 亚洲综合欧美色丁香婷婷888月图片| 婷婷丁香中文字幕| 国产婷婷婷| 熟女人妻一区二区三区免费看| www.99热| 二色av| 99热这里只有精品在线观看| 伊人婷婷五月天| 五月丁香成人网| 色999;丁香五月| 色丁香久久| 久久九九网| 日韩亚洲视频| 99视频在线精品| 色婷婷小说| 丁香五月在线| 五月天大香蕉| AA片在线观看视频在线播放| 操操操97| 婷婷五月天丁香综合网| 婷婷五月超碰| 五月婷婷导航| 1024国产| 97色色色色色色色| 久久久久综合激动五月天| 婷婷在线操| 丁香伊人综合| 99久久精品视频女神1| 五月婷婷二月丁香| 人人爱人人草| 另类的婷婷| 亚洲视频在线观看99| 5月丁香综合网| 激情www.98com| 色狠狠色综合| 欧美精品18| 99久久婷| 国产超碰在线| 五月丁香婷婷欧美色图视频五月丁香777电影 | 國語久久婷| www.久久爱| 二人电影免费版在线观看| 婷婷色五月亚洲| 色婷婷色五月综合| 激情五月丁香五月| 91色五月| 亚洲精品99| 国产av天天插天天操天天爽| 久久婷婷东京热| 久久三级视频| 丁香六月婷婷色XXXX| 欧美黄色AA片哗啦啦啦| 99在线观看视频| 国产超碰在线| 久9热在线免费观看| 久久9热| 人妻性操逼中文字幕 国产| 啪啪婷婷五月天激情| 天天综合影院| 六月婷婷av| 婷婷丁香六月| 亚洲第一影院高清无码网站| www色色色com| m色激情网| 久久99综合网| 亚洲精品久久久久久久久久吃药| 91 久热| 玖玖婷婷五月天| 手机AVAV天堂看网| 偷拍91九色| 少妇熟女视频一区二区三区| 久久综合五月婷婷| 免费视频舔| 婷婷五月天激情在线| 婷婷丁香熟妇综合网| 99干日日干| 五月天丁香久久| 人人人人人人人人人草| 五月丁香六月婷婷色日| 开心五月天激情网| 久久9999| 春色激情第四色| 亚洲色夜| 综合aV在线| 丁香五月手机在线| 色婷五月天网站| 亚洲AV日韩无码| 色五月综合激情网| 久久婷婷伊人| 丁香婷婷五月| 综合五月天| 五月丁香六月欧美综合网站| 免费91久久精品| 日本人妻A片成人免费看片| 26uuuuuuuu国产| www.日日夜夜.com| 97人人操人人操人人操人人| 婷婷五月 丁香六月| 久色| 婷婷六月偷拍| 六月激情婷婷色| 免费视频无码| 久久涩视频| 久久视屏这里只有久久| 少妇搡BBBB搡BBB搡毛茸茸 | 综合久久十三| 色婷婷中文字母五月丁香| 九九热精品在线| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 激情久久伊人| 色婷婷五月开心六月综合| 色婷婷五月天偷拍| 五月婷A V在线| 综合网色| 五月综合视频| 日韩精品呦呦va| 国产精品噜噜在线视频| 五月激情六月宗合| 天天操五月天| 五月婷婷欧美激情| 少妇性按摩无码中文A片| 九热视频| 在线成人网址| 久草丁香婷婷五月天婷| 99综合一区| 天天射影院| 99色这里| 超碰在线人妻| www.婷婷,com| 最新丁香六月婷婷| 伊大人久久| 五月深爱婷婷| 色五月丁香五月| 色综合com| 激情五月天综合网| 97成人在线视频精品| 日日操,夜夜撸| 国产FREESEXVIDEOS性中国| 99re热精品在线视频| 欧美日本国产欧美日本韩国99| 综合网网欲色| 五月丁香五月婷婷在线观看| 中文字幕人妻一区二区| 日夜夜天天| 亚洲国产精品SUV| 五月激情丁香六月狠狠干| 99热这里只有精品2| 综合色五月| 9精品在线| 久久性刺激| 99九九在线视频| 97热久久| 色婷婷天堂| 国产午夜精品一区二区| 99ri视频在线播放| 91|九色|动漫| 色九月婷婷丁香| 久艹大香蕉| 91热视频色网站| 国产操B视频| 一区视频网站| 99ri精品| 亚洲中文乱字字幕在线永久| 五月丁香六月婷婷综合在线| 激情五月丁香五月| 综合激情网| 国产无遮挡又黄又爽免费网站| 婷婷五月AA五月在线| 欧美性生交XXXXX无码小说| 26UUU欧美激情一区二区| 亚洲V国产V欧美V久久久久久| 五月婷无码| 8090在线影视少妇| 99爱免费视频在线观看| 韩国不卡AC视频| 色五月丁香五月婷婷五月成人网| 色yeye欧美| 第五色婷婷| 激情婷婷久久| 精品人妻一区二区三区四区不卡在| 婷婷五月激情四月综合| 国产精品涩涩涩视频网站| 婷婷深爱五月亚洲综合| 色五月丁香91| 激情五月天婷婷五月天| 日本欧美国产| 亚洲色网址| 五月天a婷婷伊人| 99久久欧美| 日本色爽| 狠狠操综合| 久久婷五月天| 日韩精品无码99| 色九九七七| 丁香久久| 亚洲丁香五月深爱五月| 五月丁香婷婷老司机| WWW,五月| 都市激情蜜桃婷婷五月天| 久久精品99国产精品日本| 天天日天天干天天插天天射| 91 九色 入口| 婷婷中文字幕| 婷婷五月激情在线| 碰97久久| 久久精彩视频| 韩国天天婷婷| 99精品热| 大香蕉 婷婷| 波多野结衣AV无码Porn| 色婷婷六月性| 婷婷五月另类网站| 大香蕉九九| 能看的AV网站| 991国产精选视频在线播放下载| 啊v视频在线观看| 五月婷婷六月婷| 五月久久婷婷丁香| 操操操97| 色婷婷天堂| www.狠狠操.com| 激情骚五月| 婷婷五月天成人网| 开心激情网在线| 99操视频| 婷婷五月综合中文字幕| 天天色图| 五月中旬婷婷丁香六| XX久久| 亚洲电影在线观看| 激情久久久久久久久久| 蜜乳A√| 久9精品视频| 欧美性生交xXxX久久久| 五月丁香成人| 五月中旬婷婷丁香六| 色久九| 超碰69天堂| 日韩视频99| 婷婷色五月丁香六月欧美啪| 99rewww| 日韩精品电影| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 在线观看欧美| 婷婷五月久久| 伊人影音无码一区二区三区 | 五月天亭亭俺也| 亚色网站小视频| 久Se视频在线观看| 天天日色情| 开心婷婷五月| 先锋资源婷婷| 狠狠狠狠狠操| 激情美女五月天| 九九综舍久久| 操日本99| 99精品无码| 99操久久| 丁香五月婷婷色情综合| 青草久久五月婷伊人| www.五月婷婷| CAOBIBI| 99色免费观看全部| 俺也去色| 亚洲激情AV| 欧美性爱五月天| 色婷婷五月天在线| 激情婷婷人妻| 疯狂做受XXXX高潮A片动画| 五月天婷婷网站888| 天堂草在线观看| 天天综合插插| 操操操操操操婷婷五月天| 久久性刺激| 久久99jiu9| 日本eVa一区=区视频| 91操人视频| 色综合com| 天天日天天插| 激情五月丁香六月| 9这里只有精品| 欧美va国产va| 色婷婷XXXXX| 玖玖爱资源站| 99精品国产在热久久婷婷| 日日操夜夜操中国无码| 日韩一级一片内射视频4K| 99re久久| 色五月在线播放| 色综合久久88色综合天天99| 色五月亚洲| 婷婷激情五月综合| 五月宗合激情网| 五月丁香婷婷啪啪综合网| 丁香五月婷婷久久久| 久99热| 91超碰在线观看| 99re在线视频| 99碰| 9热精品| 国产成人AV在线播放| 久久精品噜噜噜成人A∨色欲| 精品视频二级九九| 极品精品一区二区三区在线| 亚洲亚洲人成综合网络 | 色色色色色色综合| 五月丁香天天| 熟女五月天久久综合| 五婷婷六月合| 六月婷五月丁香| 最新激情五月天| 性婷婷| 五月综合亚洲| 思思热99在线| A网在线欧洲| 五月综合缴情网| 五月丁香六月婷婷综合网缴情| 五月婷婷自拍视频| 五月宗合激情网| 五月情婷婷| 人人草开心五月天| 婷婷丁香六月天| 麻豆雪千夏| 日本三级韩三级99久久| 99热最新网址| 91久久久久久久| 99热在线观看| 久久婷婷丁香花综合网| 婷婷五月综合社区在线| 激情婷婷综合网| 丁香五月婷婷亚洲另类| 色情婷婷。| 婷婷五月天奸女| 五月婷婷av| 国产永久一二一起草| 婷婷丁香六月激情综合| 99热这里只有精品2024| 欧美啄木乌丝袜人妻系列| 欧美丁香婷婷五月天| pom538精品视频| 亚洲色啪| 国产亚洲精品久久久久久郑州| www久久久久久久久久久| 五月综合激情网| 日韩一级网站| 五月婷婷久久久| 六月婷婷五月丁香首页| 成人狠狠成人狠狠成人狠狠成人狠狠| 9l视频自拍9l视频自拍九色学生| 六月丁香啪啪啪| 亚洲第一色网站| 狠狠干 狠狠操| 激情五月色婷婷| 午夜成人AV在线| 久久婷婷伊人| 99热在线观看成人| 亚洲综合999| 婷婷成人网五月天| 开心五月婷婷激情网| 欧美五月丁香| 激情婷婷| 性欧美大战久久久久久久83| 岛国午夜视频| 五月丁香婷婷综合网| 狠狠999| 色色色综合色| 开心激情网五月天| 琪琪布丁香社区激情五月天| 看全色黄大色大片| 丁香亭亭久久| 五月天色婷婷伊人网| 99色中文| 福利视频在线播放| 99在线播放| 亚洲成人在线播放| 久色五月| 丁香五月综合婷婷| 国产AV影片| 国产日韩av片| 五月丁香成人| 26uuu丁香婷婷五月| av国产精品| 九九九九九九毛片| 99久热这里有精品| 天天日本夜夜谢| 思思99热| 九九精品婷| 色频玖玖五月天| 97色色综合| 亚洲综合九九| 婷色视频| 乱女乱妇熟女熟妇综合网站| 婷婷五月天AV| 亚洲欧美在线观看| 另类激情四射| 快色t v在线入口| 久久久婷| 丁香五月天社区婷婷| 久久最新色色色| 激情五月天婷婷五月天| 亚洲视频在线观看| AV无码免费| 欧美综合五月丁香五月天| 97人人干人人操| 亚洲综合碰| 激情无码五月天| 久久色亭亭五月天| 国产真实乱对白精彩| 99久在线精品| 色婷婷裸体色性在线| 久热婷婷| 成人在线综合| 五月婷网站| 99久re热视频精品98| h亚洲| 激情婷婷五月基地| 91久久99久久91熟女精品| 99人人操人人操人人精| 久久机只有这里精品| 五月天成人小说| 免费亚洲成人电影AV| 丁香五月亚洲天堂| 婷婷伊人五月| 九九这里只有精品| 啪啪丁香五月| 婷婷五月天啪啪| 99精品视频在线观看| 在线日韩视频| 久久hd| 99热97美女| 26uuu亚洲色| 五月丁香激情综合网| 欧美性猛交99久久久99| 五月天婷婷无码视频| 欧类av怡春院| 久久这里只有精彩| 五月天激情图片| 丁香色影院| 久久九九在线视频| 嫩草AV久久伊人妇女超级A| 五月丁香婷婷色| 色噜噜97视频在线观看| 婷婷色五月天色色| 五月丁香六月婷婷久久久综合| www.婷婷| 婷婷五月小说色综合| 大香蕉久艹| 操逼巨乳91| 丁香五月Av| 超碰免费人人肏| 五月婷婷免费在线观看| 亚洲中文字幕在线观看| 久久九九怡红院| 国产激情综合五月久久| 大香蕉中文| 91无码高清| 色婷婷色| 久久精品视频在这里有| 亚洲色图五月丁香五月婷婷| 五月婷婷久久网| 国产3p露脸普通话对白| 五月丁香综合啪啪啪啪啪| 色色色色色色色色网站| 久久性视频| 五月丁香999| 色综合网址| 97久久草草超级碰碰碰| 婷婷在线综合| 97碰| 久久女人天堂| 久久9视频欧美| 丁香五月网址| 五月丁香六月婷| 亚洲操人| 五月婷婷天| 久久婷婷五月天| 99这里| 一夜福利不卡| 亚洲综合色网| www.伊人天堂偷偷婷婷| 9久久狠狠的| 人人操A| 九久久九精品视频| 成人五月天视频播放| 婷婷综合干| 99热国产免费| 久99热在线观看| 91精品久久久久久77777| 操操碰| 久久久18| 五月婷色丁香| 亚洲xx在线| 影音先锋777xfplay色资源网站| 丁香五月激情啪啪啪| 国av网| 性天天中文网| 五月婷中文娱乐综合| 色婷婷五月综合在线| 亚洲丁香婷婷丁香五月天激情| 欧美乱码国产一级A片| 久操综合| 丁香五月天欧洲在线| 丰满老熟妇BBBBB搡BBB| 久久这里有精品在线观看| 丁香五月激情啪啪啪| 五月精品| 超碰人人干| 99色在线| 五月天激情久色| 97超碰99热99| 亚洲综合另类| 婷婷五月天在线看| 成人无码精品1区2区3区免费看| 五月天激情网页| 婷婷色六月| 五月丁香999| 久久黄色网扯| 伊人激情综合| 99这里有精品视频| 婷婷在线播放av| 国产精品成人AV在线观看春天| 五月激情网站| 色婷婷久久天天性爱| 99爱精品| 亚洲五月情| 成人永久免费视频在线观看| 99在线观看精品视频| 九九热99精品| 婷婷五月,偷窥偷拍网| 色色性爱视频| 婷婷五月天首页| 天天搞天天色综合| 五月天激情国产综合婷婷婷| 丁香五月婷婷六月| 色婷婷97| 91人在线观看| 亚洲成人超碰| 国产成人VA| 吾爱AV导航| 亚洲男女激情| 在热视频精品| www.99在线| 婷婷5月久久综合网站| 夜夜躁婷婷AV| 婷婷丁香六月影视| 五月丁了香蕉综合| 丁香五月天社区| 国产日韩亚洲欧美在线观看| 日本色道视频网站| 超碰操日| 综合色久| 99这里只有精彩视频| 黄网网站在线播放| 七月丁香五月婷婷在线| 婷婷射综合| 天天射影视综合网| 影视av久久久噜噜噜噜噜三级| 无码免费人妻A片AAA毛片西瓜| 六月婷婷色综合| 天天在线久久综合| 国产无人区大片| 日韩成人无码| 99热最新精品| 亚洲噜色| 欧美色色色| 久久九九囯产| av中文在线| 色欲婷婷五月天丁香| 艹| 日本超碰在线| 操b视频在线观看一区二区| 天天干天天干天天| 99这里只有精品视频| 丁香激情合作五月| 色婷婷伊人| 精品自拍97| WWW.国产| 五月丁香久久网| 天天爽天天摸| 袁子仪视频观看| 色婷婷五月综合在线| 先锋影音男人的天堂AV| 亚洲va成人va成人va在线观看| 五月亭亭网成人在线视频| 激情五月婷婷在线区| 欧美熟女99| 九九色天堂| 天天日天天久久青青| 亚洲热视频在线| 丁香五月天激情综合| www.sezonghe| 韩日在线熟女| www.色综合.com| 成片免费观看大全| 亚洲乱码日产精品BD| 五月天婷婷激情在线色图| 九九热在线视频| 丁香九月婷婷色| 激情五月天啪啪| www.xtbsty.cn.com蜜乳AV| 久久色五月|