亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

YOLO26模型導(dǎo)出全攻略:從ONNX到TensorRT的完整避坑指南

YOLO26模型導(dǎo)出全攻略:從ONNX到TensorRT的完整避坑指南 【內(nèi)容安全審查】通過YOLO26 模型導(dǎo)出從訓(xùn)練到部署的最后一公里我踩過的坑和最終方案做計(jì)算機(jī)視覺的同學(xué)應(yīng)該都有這種經(jīng)歷訓(xùn)練時各種指標(biāo)刷得飛起模型在 Colab 上跑得好好的loss 降得賞心悅目mAP 也說得過去。結(jié)果到了要交付的時候?qū)熁蛘呒追揭痪洹鞍涯P徒o我我這邊要接進(jìn)系統(tǒng)”你才發(fā)現(xiàn)手里只有一個.pt文件拿去給對方的 C 工程師人家眉頭一皺這玩意兒我們這邊跑不了。這就是模型導(dǎo)出的意義。YOLO26 作為目前 YOLO 系列里熱度一直居高不下的版本網(wǎng)上關(guān)于它訓(xùn)練、改進(jìn)、結(jié)構(gòu)圖解析的內(nèi)容已經(jīng)很多了但“訓(xùn)練完之后怎么把模型導(dǎo)出成不同平臺能吃的格式”這塊系統(tǒng)性講清楚的內(nèi)容反而不多。不少做計(jì)算機(jī)視覺大作業(yè)的同學(xué)、做 YOLO26 人員入侵檢測項(xiàng)目的人甚至很多已經(jīng)在跑 YOLO26 訓(xùn)練自己數(shù)據(jù)集的工程師都卡在了導(dǎo)出這一步。這篇東西我想把它徹底講透。你不需要是部署專家只要手里有一個訓(xùn)練好的 YOLO26 模型能看懂 Python按著下面的思路走一遍基本就能把 ONNX、OpenVINO、TensorRT 這些格式理清楚也知道每一步為什么要那么做。1. 導(dǎo)出不只是“換個后綴”模型的運(yùn)行世界變了很多人第一次接觸導(dǎo)出覺得就是把.pt轉(zhuǎn)成.onnx本質(zhì)上是文件格式轉(zhuǎn)換。這個理解不算錯但太淺了會導(dǎo)致后面遇到問題完全找不到方向。1.1 訓(xùn)練框架和推理引擎對“模型”的理解完全不同PyTorch 里的模型本質(zhì)是一堆層結(jié)構(gòu)加上一堆權(quán)重然后被 Python 的 runtime 動態(tài)解釋執(zhí)行。它靈活、方便調(diào)試但每跑一次前向都要經(jīng)過 Python 層的調(diào)度圖的優(yōu)化也幾乎為零。這在訓(xùn)練階段完全沒問題因?yàn)橛?xùn)練本身就要頻繁改權(quán)重、算梯度本來就需要這種靈活性。但推理不一樣。推理的時候模型結(jié)構(gòu)是固定的權(quán)重也是固定的不存在反向傳播也不存在動態(tài)建圖的需求。推理引擎要的是“把計(jì)算圖固化下來針對固定 shape 做極致優(yōu)化”。這就是為什么業(yè)界要把訓(xùn)練好的模型從 PyTorch 里“搬”出來搬到一個中立的、描述計(jì)算圖的格式里。ONNXOpen Neural Network Exchange就是這個“中立格式”。PyTorch 訓(xùn)練完的模型導(dǎo)出成 ONNX 后相當(dāng)于把整張計(jì)算圖固化成了標(biāo)準(zhǔn)化的描述文件。邏輯上它就是一個“計(jì)算圖快照”任何支持 ONNX 的推理引擎ONNX Runtime、TensorRT、OpenVINO、Core ML 等都能讀取并執(zhí)行它。用個生活化的比喻PyTorch 模型像一位會臨場發(fā)揮的廚師你告訴他“做一道魚”他會根據(jù)今天有什么食材、灶臺什么火力、自己當(dāng)時的心情決定具體怎么做。而 ONNX 就像一份精確到克數(shù)的菜譜食材、步驟、火候全部寫死。你把這菜譜給任何一個能看懂菜譜的廚房各種推理引擎都能做出一模一樣的菜。1.2 ONNX、TensorRT、OpenVINO 各管哪一段路這是新手最容易懵的地方格式太多了分不清。我把它們按“離硬件有多近”排個序就清楚了ONNX最中立的計(jì)算圖描述格式本身不做太多優(yōu)化像一個通用的中間表示IR不太依賴具體硬件。它能跑的地方最廣但優(yōu)化的空間也最大。ONNX RuntimeORT微軟出品的推理引擎直接吃 ONNX 文件。它在 CPU 和 GPU 上都能跑做了不少圖優(yōu)化和算子融合適合做“通用部署”。OpenVINOIntel 出品的推理工具套件針對 Intel CPU、集成顯卡、Movidius 神經(jīng)計(jì)算棒做了深度優(yōu)化。如果你部署的目標(biāo)機(jī)器是 Intel CPUOpenVINO 往往是性能最好的選擇之一。它可以把 ONNX 進(jìn)一步轉(zhuǎn)成它自己的 IR 格式.xml.bin也可以直接讀 ONNX。TensorRTNVIDIA 出品的推理優(yōu)化器只在 NVIDIA GPU 上工作。它會針對你的目標(biāo) GPU 做層融合、精度校準(zhǔn)、kernel 自動調(diào)優(yōu)是“NVIDIA GPU 上推理性能天花板”級別的存在。它吃 ONNX轉(zhuǎn)化后再序列化成 TensorRT engine.engine文件。Core MLApple 生態(tài)的模型格式給 iPhone、Mac 上用的。所以整個導(dǎo)出的鏈路一般是PyTorch (.pt) → ONNX → OpenVINO / TensorRT / Core ML / ONNX Runtime理解了這條鏈路你就明白為什么大家總說“先導(dǎo)出 ONNX”它是一個必經(jīng)的中間站是 PyTorch 和各個硬件推理引擎之間的“通用語言”。不只是 YOLO26YOLOv5、v8、v11 這些全是這個套路。1.3 NMS 在導(dǎo)出流程里的真正地位提到 YOLO 導(dǎo)出有個繞不開的東西叫NMSNon-Maximum Suppression非極大值抑制。YOLO 模型輸出的原始裸結(jié)果是一大堆候選框每張圖可能有上萬甚至幾萬個框其中絕大多數(shù)是重疊的、低置信度的“廢框”。NMS 的作用就是把這些框過濾、合并最后留下每個目標(biāo)位置上最合適的那個框。訓(xùn)練和驗(yàn)證的時候NMS 是在 PyTorch 代碼里用純 Python 或 C 擴(kuò)展實(shí)現(xiàn)的這部分邏輯根本沒進(jìn)到模型的計(jì)算圖里。而導(dǎo)出成 ONNX 后你拿到的是“模型輸出原始框”這一步NMS 要不要一起導(dǎo)出就成了 YOLO 系列導(dǎo)出時最容易出現(xiàn)分歧的大問題。實(shí)際工程里主流做法是模型只導(dǎo)出到“原始輸出”為止NMS 后處理放在推理代碼里用目標(biāo)語言C/C#/Java/Go自己寫。原因后面會詳述但你現(xiàn)在先記住導(dǎo)出 YOLO 系列模型基本默認(rèn)不導(dǎo)出 NMS除非你的部署場景非常特殊比如目標(biāo)檢測的嵌入式端后處理寫起來極其困難才有動力把 NMS 一起塞進(jìn)模型里。2. 你的 YOLO26 是“哪一款”不同任務(wù)導(dǎo)出的策略不一樣在具體動手前先別急著敲命令。你要回頭看一下自己訓(xùn)練的 YOLO26 到底是“哪一款”模型。YOLO 系列從 v8 開始就不僅僅是目標(biāo)檢測器了它同時支持分類、分割、姿態(tài)估計(jì)這些任務(wù)。YOLO26 在這個基礎(chǔ)上還衍生出了 depth深度估計(jì)等變體網(wǎng)上搜“yolo26 depth”“yolo26 姿態(tài)模型版本區(qū)別”就能看到很多人都在這塊有疑問。不同任務(wù)類型模型輸出的頭head完全不同導(dǎo)出的注意事項(xiàng)也各不相同。2.1 常規(guī)目標(biāo)檢測模型的導(dǎo)出重點(diǎn)這是最簡單、最常見的情況。你訓(xùn)練了一個 YOLO26 目標(biāo)檢測模型比如 YOLO26n、yolo26s、yolo26m 這些用來做人員入侵檢測、安全帽檢測、車輛識別等任務(wù)。這種情況導(dǎo)出時核心關(guān)注點(diǎn)有三個輸入尺寸訓(xùn)練時用的 imgsz 是多少導(dǎo)出時就盡量保持一致。雖然 ONNX 支持動態(tài)輸入但對推理性能不友好后面細(xì)說。輸出格式Y(jié)OLO 檢測模型的原始輸出一般是[1, 4 num_classes, 8400]這種形狀具體數(shù)字取決于模型輸入尺寸和 stride其中 4 是框坐標(biāo)cx, cy, w, h 或 xyxynum_classes 是類別數(shù)8400 是不同尺度特征圖上的候選框總數(shù)輸入 640 時。導(dǎo)出時你會在輸出節(jié)點(diǎn)上看到類似名字。要不要 NMS默認(rèn)不要。讓下游代碼自己處理。如果你是用 Ultralytics 框架訓(xùn)練的 YOLO26框架本身已經(jīng)把導(dǎo)出邏輯封裝好了正常情況一句model.export()就能搞定。但如果你跑的是別人魔改的 YOLO26網(wǎng)上“yolo26 改進(jìn)專欄”里這種特別多比如加了注意力機(jī)制、換了檢測頭就不能完全依賴框架自動導(dǎo)出要手動檢查改動過的層能不能被 ONNX 算子集支持。這是最讓人頭疼的場景我后面會用一節(jié)專門講怎么排查這類問題。2.2 depth 版本導(dǎo)出時處理額外輸出頭如果你用的是 YOLO26 depth 版本用于單目深度估計(jì)它的網(wǎng)絡(luò)結(jié)構(gòu)在檢測頭之外還掛了一個深度頭輸出的是一個和輸入圖像尺寸成一定比例的深度圖。導(dǎo)出這種模型你要額外確認(rèn)深度頭的輸出名稱和 shape導(dǎo)出的 ONNX 文件中深度輸出是一個獨(dú)立的輸出節(jié)點(diǎn)通常像[1, H, W]或[1, H/scale, W/scale]。深度值范圍你訓(xùn)練時的深度標(biāo)簽是相對深度0~1還是絕對深度米模型輸出的原始值范圍是什么這些信息雖然不影響導(dǎo)出但會影響你部署后怎么處理深度圖最好在導(dǎo)出的同時寫進(jìn)模型說明文檔。后處理差異檢測分支可能需要 NMS深度分支只需要插值縮放回原圖尺寸并做可視化或后續(xù)計(jì)算。這決定了你在推理代碼里要同時處理“框后處理”和“深度圖后處理”兩套邏輯導(dǎo)出本身沒區(qū)別但部署代碼要注意。姿態(tài)模型導(dǎo)出與模型版本差異YOLO26 的姿態(tài)模型pose輸出就更特殊了。Ultralytics 框架里的 pose 模型訓(xùn)練好的.pt導(dǎo)出 ONNX 后輸出通常是兩個頭的拼接或分開一個是檢測框分支一個是關(guān)鍵點(diǎn)分支。以 COCO 姿態(tài)任務(wù)為例關(guān)鍵點(diǎn)通常是 17 個每個點(diǎn)有(x, y, confidence)三個值。所以關(guān)鍵點(diǎn)分支的輸出維度一般是 batch 相關(guān)、通道數(shù) 17 * 3。檢測框分支仍然輸出框和類別置信度。這里必須注意“版本差異”。網(wǎng)上搜“yolo26 姿態(tài)模型版本區(qū)別”能看到很多人在問同一個 YOLO26 名字下有不同權(quán)重版本關(guān)鍵點(diǎn)位順序、坐標(biāo)約定是不是和 COCO 一致是否帶了可見性 flagvisible flag這些細(xì)節(jié)不同訓(xùn)練腳本導(dǎo)出的結(jié)果形狀就不一樣。我的建議是導(dǎo)出姿態(tài)模型之前先拿一張測試圖用 PyTorch 原始模型推理一遍打印出每個輸出的 shape并人工檢查關(guān)鍵點(diǎn)的坐標(biāo)值是不是符合預(yù)期。只有確認(rèn)了“PyTorch 階段輸出是正確的”你導(dǎo)出 ONNX 后去對比才有參照物。如果你連 PyTorch 階段的輸出都沒確認(rèn)過導(dǎo)出后出了 bug 你根本分不清是導(dǎo)出環(huán)節(jié)的問題還是模型本身的問題。2.4 基于 YOLO26 做人員入侵檢測等項(xiàng)目時的導(dǎo)出選型結(jié)合很多做“YOLO26 人員入侵檢測”這類計(jì)算機(jī)視覺項(xiàng)目的同學(xué)其實(shí)是為了交大作業(yè)或者做畢設(shè)。這種項(xiàng)目通常需要部署在一臺普通的電腦上甚至可能是 CPU only 的機(jī)器。這種場景下我最推薦導(dǎo)出OpenVINO格式原因有兩點(diǎn)Intel CPU 是個巨大的存量市場OpenVINO 對此的優(yōu)化是出了名的猛經(jīng)常能在不損失精度的情況下比純 PyTorch CPU 推理快 2 到 4 倍。Ultralytics 框架原生支持導(dǎo)出 OpenVINO一條命令就能完成還會幫你生成配套的部署文件。如果項(xiàng)目方指定要用 NVIDIA GPU 跑推理那就直接上 TensorRT。雖然推理速度最快但因?yàn)樗途唧w顯卡綁定注意是“綁定”不是“兼容”換了一張顯卡型號甚至驅(qū)動版本都可能要重新導(dǎo)出在交付時要多留個心眼千萬別只給客戶一個 .engine 文件一定要把 ONNX 文件一起交付不然客戶換臺機(jī)器就跑不了。3. 直接抄作業(yè)我驗(yàn)證過的導(dǎo)出流程和參數(shù)配置理論鋪墊完了現(xiàn)在進(jìn)入實(shí)操。下面是我在自己的環(huán)境里跑通的完整導(dǎo)出流程包含了環(huán)境準(zhǔn)備和導(dǎo)出命令以及每一步背后的選擇邏輯。3.1 環(huán)境準(zhǔn)備與版本對齊先說一個重要教訓(xùn)導(dǎo)出 YOLO26 前先確認(rèn)你的 ultralytics 包版本和你下載/訓(xùn)練的模型來源一致。YOLO26 相關(guān)的代碼和權(quán)重在社區(qū)里流傳速度很快往往你今天下載的yolo26n.pt需要用某個特定版本的ultralytics包才能正常加載。如果你是在跑“yolo26 環(huán)境配置”時按網(wǎng)上的博客裝了一個版本的包然后又從另一個來源下載了權(quán)重很可能加載時就報(bào)錯或者行為異常。我本地的建議環(huán)境組合Python 3.9~3.11PyTorch 2.1 或以上ultralytics 包版本以你模型來源說明為準(zhǔn)一般 8.2.x 之后的版本對 YOLO26 支持比較完整onnxruntime 1.17 以上用于導(dǎo)出后驗(yàn)證onnx 1.15 以上openvino 2024.x如果用 CPU 部署建議導(dǎo)出 OpenVINO 格式tensorrt 8.6 或以上如果用 NVIDIA GPU建議導(dǎo)出 TensorRT提示Torch、CUDA、TensorRT 三個版本要互相兼容這是老生常談但永遠(yuǎn)有人在這上面翻車。TensorRT 對 CUDA 版本很敏感建議統(tǒng)一用 NVIDIA 官方文檔里列的兼容矩陣來配。你可以在終端里檢查版本python -c import torch, ultralytics, onnx, onnxruntime; print(torch.__version__, ultralytics.__version__, onnx.__version__, onnxruntime.__version__)如果輸出里沒有報(bào)錯說明基礎(chǔ)環(huán)境沒問題。3.2 標(biāo)準(zhǔn)導(dǎo)出命令與超參選擇如果是用 Ultralytics 框架訓(xùn)練的 YOLO26最笨但也最靠譜的導(dǎo)出代碼長這樣from ultralytics import YOLO # 加載你自己訓(xùn)練的權(quán)重 model YOLO(runs/detect/train/weights/best.pt) # 導(dǎo)出 ONNX model.export( formatonnx, # 導(dǎo)出格式 imgsz640, # 輸入尺寸和訓(xùn)練時保持一致 opset12, # ONNX 算子集版本 dynamicFalse, # 是否允許動態(tài)輸入尺寸 simplifyTrue, # 是否用 onnxsim 簡化計(jì)算圖 nmsFalse, # 是否導(dǎo)出 NMS強(qiáng)烈建議 False )這行代碼執(zhí)行完后會在權(quán)重同目錄下生成一個best.onnx。你可能會問參數(shù)為什么這么設(shè)我逐個解釋imgsz640你訓(xùn)練時如果是 640這里就填 640。如果訓(xùn)練時是 1280這里就得填 1280。模型的 backbone 和 head 對輸入特征圖的尺寸有依賴stride 通常是 8、16、32 的組合。輸入尺寸必須是 32 的倍數(shù)或者至少是 stride 最小公倍數(shù)的倍數(shù)否則特征圖會出問題。你導(dǎo)出時如果填了一個訓(xùn)練時完全沒有用過的尺寸精度可能會莫名掉點(diǎn)因?yàn)槟P蛷奈丛谶@個分辨率上充分適配過。opset12ONNX 的算子集版本。太低的版本不支持一些較新的算子太高的版本對老版本推理引擎不友好。YOLO 系列在這種 CNN 結(jié)構(gòu)里opset 11~13 之間都夠用。我默認(rèn)選 12兼容性和功能都比較平衡。如果你后續(xù)要轉(zhuǎn) TensorRTTensorRT 8.6 以上的版本對 ONNX opset 的適配已經(jīng)很好不需要額外操心。dynamicFalse這個我強(qiáng)烈建議。設(shè)成 True 雖然能讓模型接受任意尺寸輸入但代價是推理引擎沒法做輸入 shape 相關(guān)的固定優(yōu)化比如 TensorRT 的某些層會根據(jù)固定尺寸做內(nèi)存布局調(diào)優(yōu)性能會有損。部署階段如果你能保證輸入尺寸固定就固定死不要開動態(tài)。但有個例外如果你的業(yè)務(wù)里輸入圖像尺寸不能預(yù)知且變化幅度極大又不想做 letterbox 填充把圖像縮放并填充成固定尺寸那只能開 dynamic。這種情況你要意識到每換一個尺寸推理引擎可能會重新做 shape 推導(dǎo)延遲會高不少。simplifyTrue導(dǎo)出的 ONNX 會經(jīng)過 onnxsim 工具做一遍常量折疊、冗余節(jié)點(diǎn)刪除之類的優(yōu)化。實(shí)測下來YOLO26 的模型開 simplify 后文件體積和推理時間都有改善而且不影響精度。但注意如果你的模型里有自定義算子simplify 可能會報(bào)錯那就不用 onnxsim后面手動排查。nmsFalse前面講過原因。官方導(dǎo)出選項(xiàng)里有 nms 這個參數(shù)默認(rèn)是 False。我建議保持默認(rèn)除非你非常明確自己的部署鏈路為什么需要模型內(nèi)置 NMS。3.3 導(dǎo)出 ONNX 后我用這三種方式驗(yàn)證它沒問題導(dǎo)出成功不等于導(dǎo)出正確。我見過太多人 export 時沒有報(bào)錯以為萬事大吉結(jié)果接入部署代碼后檢測結(jié)果全亂套。以下三步每步都值得做第一步用 onnx.checker 檢查模型結(jié)構(gòu)合法性import onnx onnx_model onnx.load(best.onnx) onnx.checker.check_model(onnx_model) print(ONNX model check passed.)如果你看懂了 checker 的報(bào)錯內(nèi)容大多數(shù)結(jié)構(gòu)性問題比如節(jié)點(diǎn)輸入輸出不匹配、維度信息缺失都能在這一步暴露出來。第二步用 onnxruntime 推理一張測試圖和 PyTorch 輸出對比這是最關(guān)鍵的一步。拿同一張測試圖分別用原始.pt模型和導(dǎo)出的.onnx推理打印輸出矩陣的 shape 和數(shù)值看看是否一致。注意不同框架的預(yù)處理方式可能有細(xì)微差別比如像素歸一化方式是 0~1 還是 -1~1通道順序是 RGB 還是 BGR。為了驗(yàn)證 ONNX 本身沒導(dǎo)錯你應(yīng)該把 ONNX 的輸入喂成 PyTorch 模型輸入張量的完全相同的值。這在部署階段做“預(yù)處理對齊”前的一個獨(dú)立驗(yàn)證。import numpy as np import torch import onnxruntime as ort from ultralytics import YOLO # 用 PyTorch 模型推理得到輸入張量 x 和輸出 model YOLO(best.pt) x torch.randn(1, 3, 640, 640) # 這里可以放一張真實(shí)圖片預(yù)處理后的張量 with torch.no_grad(): pt_outputs model.model(x) # 這是 PyTorch 原始輸出不是后處理后的結(jié)果 # 用 ONNX Runtime 跑同一個輸入 session ort.InferenceSession(best.onnx, providers[CPUExecutionProvider]) ort_inputs {session.get_inputs()[0].name: x.numpy()} ort_outputs session.run(None, ort_inputs) # 對比每個輸出的 shape 和數(shù)值 for i, pt_out in enumerate(pt_outputs): ort_out ort_outputs[i] print(fPyTorch output {i}: shape{pt_out.shape}) print(fONNX output {i}: shape{ort_out.shape}) print(fMax absolute diff: {np.abs(pt_out.numpy() - ort_out).max():.6f})如果 max diff 在 1e-4 這個量級甚至更小說明導(dǎo)出基本無損。如果 diff 很大比如超過 1e-2那說明計(jì)算圖里有算子被錯誤替換了或權(quán)重對齊出了問題要回頭查簡化過程或者逐層對比。第三步可視化模型結(jié)構(gòu)把導(dǎo)出的 ONNX 文件拖進(jìn) Netron 網(wǎng)頁端https://netron.app認(rèn)一遍從輸入到到各分支輸出的形狀變化。這一步特別適合檢查你用的是不是接了正確 head也適合給做 YOLO26 結(jié)構(gòu)圖展示的人用。這個習(xí)慣很值得養(yǎng)成導(dǎo)出不是驗(yàn)證的終點(diǎn)“導(dǎo)出完更要對齊再收工”省下的全是后面排查自己的時間。我在自己帶團(tuán)隊(duì)做項(xiàng)目時甚至立過規(guī)矩沒做輸出對齊驗(yàn)證的模型不允許發(fā)給下游。3.4 繼續(xù)導(dǎo)出 OpenVINO 和 TensorRTYOLO26 用 Ultralytics 導(dǎo)出 OpenVINO 很簡單model.export(formatopenvino, imgsz640, halfFalse) # halfFalse 保持 FP32如果推理機(jī)器支持且對精度損失做了評估你可以設(shè)置halfTrue轉(zhuǎn)成 FP16。很多 Intel CPU 的核顯對 FP16 也算友好但如果你在普通 CPU 上做純 CPU 推理FP32 其實(shí)更穩(wěn)妥。導(dǎo)出 TensorRT 則這樣model.export(formatengine, imgsz640, halfTrue, device0) # device 指定 GPUTensorRT 導(dǎo)出時務(wù)必指定在 NVIDIA GPU 上。halfTrue是 FP16 精度在主流 Ampere 及之后架構(gòu)的卡上YOLO26 用 FP16 推理精度損失通常很小速度提升明顯。如果你的模型是用 FP32 訓(xùn)練的在 NVIDIA 顯卡上直接用 FP16 推理絕大多數(shù)情況下沒有問題但你仍然要在導(dǎo)出完成后對同一批驗(yàn)證集圖跑一遍 mAP確認(rèn)精度下降不超過 1 個百分點(diǎn)才比較穩(wěn)。目標(biāo)平臺推薦格式關(guān)鍵特征通用 CPUONNX ONNX Runtime跨平臺安裝簡單Intel CPUOpenVINOCPU 推理優(yōu)化充分易部署NVIDIA GPUTensorRT推理性能天花板綁定顯卡Apple 設(shè)備Core ML生態(tài)私有格式跨平臺原型驗(yàn)證ONNX先落地再決定正式優(yōu)化4. 導(dǎo)出時最容易翻車的隱蔽環(huán)節(jié)與完整排查鏈路這一節(jié)我想專門講“導(dǎo)出過程中報(bào)錯”的處理思路。因?yàn)?YOLO26 的源碼和公開資源太多太雜你下載的“YOLO26 源碼下載”很可能是某個博主二次開發(fā)的版本結(jié)構(gòu)圖和官方不完全一樣甚至已經(jīng)加了各種改進(jìn)模塊。這種模型導(dǎo)出最容易在“自定義算子轉(zhuǎn) ONNX”這一步掛掉。4.1 先復(fù)現(xiàn)再排查處理導(dǎo)出報(bào)錯的通用鏈路假設(shè)你在跑 export 時遇到了一個問題比如報(bào)錯說某個算子不支持。不要急著搜“YOLO26 導(dǎo)出報(bào)錯”這種寬泛的關(guān)鍵詞按照下面的鏈路一步步縮小范圍第一步精確定位到具體的層名和算子Ultralytics 的 export 日志通常會打印到哪個模塊、哪個節(jié)點(diǎn)失敗。如果日志里只給了統(tǒng)一錯誤用 traceback 定位到模型結(jié)構(gòu)定義文件里的具體調(diào)用棧找到出錯的模塊名。第二步檢查這個模塊是不是新加的“改進(jìn)模塊”如果它來自你下載的“YOLO26 改進(jìn)專欄”代碼那么它大概率是社區(qū)里有人寫的自定義模塊內(nèi)部可能用了不常規(guī)的 PyTorch 操作比如torch.cumsumscatter的組合有些注意力機(jī)制會這么寫、用了可變循環(huán)長度等。這些操作要么 ONNX 算子集里沒有直接對應(yīng)要么對動態(tài) shape 支持不好。第三步把該模塊單獨(dú)摳出來構(gòu)造假數(shù)據(jù)導(dǎo)出單測這是非常高效的排查手段。你在一個新文件里單獨(dú)定義一個只包含那個模塊的小模型隨機(jī)生成相同 shape 的輸入對它單獨(dú)做 torch.onnx.export看能不能成功。如果單獨(dú)導(dǎo)出成功說明該模塊本身沒有算子問題問題出在和模型中其他模塊的配合上如果單獨(dú)導(dǎo)出失敗那問題就鎖定在這個模塊內(nèi)部。然后嘗試把模塊內(nèi)疑似有問題的操作逐個替換成更基礎(chǔ)的算子比如把某些變形操作用 reshape transpose 拆開再重新導(dǎo)出驗(yàn)證。第四步考慮將“改進(jìn)模塊”留在 PyTorch 中用前后處理承接如果自定義模塊實(shí)在無法轉(zhuǎn) ONNX某些復(fù)雜的注意力機(jī)制和檢測頭結(jié)構(gòu)確實(shí)會有問題可以考慮導(dǎo)出時屏蔽掉該模塊把它放到部署代碼前后處理階段用別的方式補(bǔ)償。比如注意力模塊輸出可以在 PyTorch 階段預(yù)先計(jì)算好部署時把它的結(jié)果作為預(yù)處理的一部分。這聽起來繞但在工程上是常見的妥協(xié)方案。第五步計(jì)算圖分段導(dǎo)出再拼接如果模型主體是標(biāo)準(zhǔn)結(jié)構(gòu)、只有個別模塊導(dǎo)不出可以把這個模塊從全圖中拆出來單獨(dú)導(dǎo)出成一個小 ONNX然后用 ONNX GraphSurgeon、onnx_graphsurgeon 或者 ONNX 官方工具庫進(jìn)行圖拼接。這樣做非常接近“模型主體 一系列子圖”的部署方式比較考驗(yàn)對計(jì)算圖結(jié)構(gòu)的理解。一般不建議新手輕易嘗試但它確實(shí)是高階方案里最有效的。4.2 圖像縮放方式造成的“精度翻車”是部署階段最常見的坑導(dǎo)出時模型內(nèi)部計(jì)算沒問題但推理結(jié)果不對最常見的原因之一是圖像預(yù)處理沒有對齊訓(xùn)練時的邏輯。YOLO 系列訓(xùn)練和驗(yàn)證時有一套默認(rèn)的預(yù)處理流程等比縮放 letterbox向邊緣填充灰邊 歸一化 BGR/RGB 通道順序約定。這套邏輯在 PyTorch 階段是框架內(nèi)部自動幫你做掉的但導(dǎo)出到 ONNX 后模型本身只負(fù)責(zé)“吃一個張量吐一個張量”預(yù)處理你必須自己在推理代碼里實(shí)現(xiàn)。我見過無數(shù)人栽在這件事上直接用了 OpenCV 的cv2.resize(image, (640, 640))把原圖拉變形了喂進(jìn)模型導(dǎo)致小目標(biāo)檢測效果極差或者圖像尺寸沒做 letterbox 填充直接把非正方形圖塞進(jìn)去模型輸出的候選框坐標(biāo)在映射回原圖時就全位移了。正確的做法是部署代碼里復(fù)刻 ultralytics 的預(yù)處理函數(shù)。核心邏輯如下計(jì)算縮放比例、完成等比縮放、再用灰邊 (114, 114, 114) 填充到目標(biāo)尺寸、最后做歸一化和維度調(diào)整。下采樣映射回原圖時再把 letterbox 填充的偏移量減去。這段代碼不復(fù)雜但如果抄網(wǎng)上零散版本很容易漏掉 BGR/RGB 轉(zhuǎn)換。建議統(tǒng)一從你訓(xùn)練的框架源碼里把預(yù)處理函數(shù)摳出來翻譯成目標(biāo)語言的版本而不是自己重新“發(fā)明”一遍預(yù)處理。4.3 導(dǎo)出 ONNX 后輸出和 PyTorch 輸出差一點(diǎn)但不算離譜這類問題很隱蔽。報(bào)錯倒是沒有數(shù)值對比 diff 也在 1e-3 到 1e-2 量級。這種情況通常來源于兩種因素一是 batch norm 層轉(zhuǎn) fold 時的數(shù)值誤差。PyTorch 推理時 batch norm 是按x - running_mean/ sqrt(running_var eps) * weight bias 逐層計(jì)算的而導(dǎo)出到 ONNX 時推理引擎會嘗試把 BN 融合到卷積層里變成 y x * scale offset。這個融合理論上精確但浮點(diǎn)運(yùn)算順序變化會引入微小誤差。這種誤差在 1e-4 量級通常不影響后處理結(jié)果。二是在 FP16 推理下引入的量化誤差。如果你導(dǎo)出時開了 halfTrueFP32 權(quán)重轉(zhuǎn)成 FP16 會損失一點(diǎn)精度輸出 diff 到 1e-2 量級也是正常的。如果 diff 在這個量級而你的后處理結(jié)果比如檢測框沒有明顯變化基本可以繼續(xù)走但如果 diff 到了 1e-1 以上檢測框都飄了就別以為是“正常誤差”大概率是你某個參數(shù)導(dǎo)出時變了比如權(quán)重文件沒正確加載。4.4 dynamicTrue 導(dǎo)出后動態(tài) shape 導(dǎo)致的隱性 bug有的 YOLO26 模型以動態(tài) shape 導(dǎo)出后某些自研模塊在推導(dǎo)輸入尺寸時依賴于“shape 的數(shù)值”做條件分支比如判斷特征圖寬度是否大于某閾值來決定是否執(zhí)行某個操作。PyTorch 是實(shí)時執(zhí)行沒問題但 ONNX 導(dǎo)出時這種條件分支會被固化成靜態(tài)的算子路徑換了輸入尺寸可能執(zhí)行了錯誤的計(jì)算路徑導(dǎo)致輸出錯亂。規(guī)避方案很直接不要開 dynamic。如果你的業(yè)務(wù)場景確實(shí)需要輸入尺寸可變優(yōu)先考慮在你的部署代碼里做“多檔位”策略比如固定支持三種輸入尺寸分別導(dǎo)出三個 engine 或 ONNX 模型推理時按需調(diào)用。這在工程上比一個動態(tài)模型靠譜得多。4.5 CPU 和 GPU 推理的輸出差異注意點(diǎn)同一個 ONNX 文件在 CPU 上用 ONNX Runtime 跑和在 GPU 上用 TensorRT 跑輸出結(jié)果會有很小的差異原因在于浮點(diǎn)運(yùn)算順序不同、某些算子在不同后端有不同的實(shí)現(xiàn)策略。只要差異在正常范圍內(nèi)通常 mAP 差異不超過 1 個百分點(diǎn)都是合理的。如果差異明顯優(yōu)先檢查是不是某個算子如Resize、GridSample在兩種后端上的插值方式實(shí)現(xiàn)不同。YOLO 系列里Resize最常出問題因?yàn)榭蚣苣J(rèn)的Resize模式不同版本有細(xì)微差別。5. 導(dǎo)出完成后模型要怎么接進(jìn)真實(shí)系統(tǒng)導(dǎo)出只是第一步模型接進(jìn)推理引擎跑起來才是完整閉環(huán)。這里講一講我在實(shí)際項(xiàng)目中用的最小可用推理鏈路以 ONNX Runtime 為例方便各位理解部署側(cè)在做什么。5.1 一套簡潔的 ONNX Runtime CPU 推理流程import numpy as np import cv2 import onnxruntime as ort class YOLO26ONNX: def __init__(self, onnx_path, conf_thres0.25, iou_thres0.45): self.session ort.InferenceSession(onnx_path, providers[CPUExecutionProvider]) self.input_name self.session.get_inputs()[0].name self.input_shape self.session.get_inputs()[0].shape # [1, 3, H, W] self.conf_thres conf_thres self.iou_thres iou_thres def preprocess(self, img_bgr): # 這是從 ultralytics 源碼里摳出來的 letterbox 邏輯 h, w img_bgr.shape[:2] target_h, target_w self.input_shape[2], self.input_shape[3] ratio min(target_w / w, target_h / h) new_w, new_h int(round(w * ratio)), int(round(h * ratio)) resized cv2.resize(img_bgr, (new_w, new_h), interpolationcv2.INTER_LINEAR) canvas np.full((target_h, target_w, 3), 114, dtypenp.uint8) dw, dh (target_w - new_w) // 2, (target_h - new_h) // 2 canvas[dh:dh new_h, dw:dw new_w] resized # BGR - RGB, HWC - CHW, 歸一化 blob canvas[:, :, ::-1].transpose(2, 0, 1).astype(np.float32) / 255.0 blob np.expand_dims(blob, axis0) return blob, ratio, dw, dh def postprocess(self, outputs, ratio, dw, dh): # 先做置信度過濾再做 NMS把框坐標(biāo)減掉 letterbox 偏移并除以縮放比 # outputs shape: [1, 4 num_classes, num_anchors] preds outputs[0][0] # preds shape: [4 num_classes, num_anchors] boxes preds[:4].T # [num_anchors, 4] class_scores preds[4:].T # [num_anchors, num_classes] class_ids class_scores.argmax(axis1) confs class_scores.max(axis1) mask confs self.conf_thres boxes, confs, class_ids boxes[mask], confs[mask], class_ids[mask] # 轉(zhuǎn)換為 xyxy x_center, y_center, bw, bh boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3] x1, y1 x_center - bw / 2 dw, y_center - bh / 2 dh x2, y2 x_center bw / 2 dw, y_center bh / 2 dh candidates np.stack([x1, y1, x2, y2, confs, class_ids], axis1) # 這里可以接 nms 函數(shù)按 class 分別做 NMS 或者統(tǒng)一做 NMS return candidates上面代碼里 NMS 部分我沒有展開推薦大家直接復(fù)用成熟實(shí)現(xiàn)比如 torchvision.ops.nms 的等價邏輯或者自己翻譯成純 NumPy 的矩陣版本。最需要注意的是后處理時要把 letterbox 加的偏移量(dw, dh)減掉、把坐標(biāo)除以ratio才能映射回原始圖像尺寸。這一步是絕大多數(shù)“模型導(dǎo)出后檢測框不準(zhǔn)”的根源。5.2 TensorRT 部署時的 batch 與顯存管理如果你導(dǎo)出了 TensorRT engine推理時用的是 TensorRT Python API 或者通過 ONNX Runtime 的 TensorRT provider。這里提醒三個點(diǎn)batch size導(dǎo)出 engine 時如果固定了 batch1那推理時只能一次一張地跑如果要支持多 batch導(dǎo)出時需要設(shè)置 batch 維度Ultralytics export 里 batchsize 參數(shù)可配。顯存占用TensorRT engine 在推理時會額外申請 workspace如果你的顯存比較緊張?jiān)趯?dǎo)出時可以通過參數(shù)限制 workspace 大小避免推理時顯存溢出。第一次推理慢TensorRT 第一次加載 engine 和選 kernel 需要預(yù)熱時間生產(chǎn)環(huán)境建議在服務(wù)啟動時就提前加載并 warmup 一次而不是等第一個請求進(jìn)來才做。5.3 一個被低估的能力判斷導(dǎo)出模型的正確“工作溫度”推理引擎在不同精度模式下的運(yùn)行速度差距非常大。FP32、FP16、INT8 三種模式下延遲可以差 3 到 10 倍。實(shí)際部署中優(yōu)先級順序是先用 FP32 把全鏈路跑通、產(chǎn)出結(jié)果正確再做 FP16 優(yōu)化精度評估通過后再考慮 INT8 量化不要一上來直接上 INT8除非你非常了解量化校準(zhǔn)集的概念我的建議是導(dǎo)出不是一次性的而是按性能需求分階段迭代的。第一次先導(dǎo)入 ONNX 跑通正確性第二次導(dǎo)出 OpenVINO/Engine 追求速度第三次嘗試 INT8 壓縮體積。寫在最后YOLO26 的模型導(dǎo)出本質(zhì)上一句話把 PyTorch 的動態(tài)圖世界搬到靜態(tài)圖推理引擎的確定世界里去中間所有的不確定性都要靠流程和驗(yàn)證來消滅。我個人在大量導(dǎo)出實(shí)踐中有一個心得永遠(yuǎn)不要讓“格式轉(zhuǎn)換成功”成為你做導(dǎo)出任務(wù)的終點(diǎn)而是要拿“對下游完全可解釋、可復(fù)現(xiàn)”作為交付標(biāo)準(zhǔn)。你可以順手把驗(yàn)證腳本、輸出 shape、精度誤差記錄、導(dǎo)出命令都一起放進(jìn)一個說明文件里和模型一起交付。這樣無論是給自己半年后回頭看還是交給下一位接手的工程師都會省掉大把重復(fù)排雷的時間。如果你現(xiàn)在正好卡在某個導(dǎo)出報(bào)錯里不妨回頭按我排查鏈路的順序一步步走大概率會在第五步之前找到問題癥結(jié)。YOLO26 的代碼和社區(qū)迭代速度都很快工具鏈本身也在不斷變化但“導(dǎo)出前先確認(rèn)結(jié)構(gòu)、導(dǎo)出后立刻對齊驗(yàn)證、部署時復(fù)刻預(yù)處理”這三條原則是長期有效的。祝各位都能順利把模型送到生產(chǎn)環(huán)境里好好地跑起來。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
青青三级视频| 1024人妻熟女一区二区三区| 超碰诱惑| 日韩不卡一二三四| 超碰在线974| wwwcaobibi| A V少妇特黄三级| 中文字幕日韩人妻视频| 白丝AV| 欧美1727免费观看视频| 日欧亚洲二三区大片不卡| rion磁力链接| 操逼啊啊啊91| 中文字幕乱偷人妻久久艾草网| 色综合色| av天堂手机版追回| 久久男人精品| 91性高朝久久久久久久久| 亚洲天堂少妇| 97精品综合久久网| 天美精品一区二区三区四区在线观看 | 亚洲中文字幕97久久精品少妇| 精品国产91内射久久| 超碰九7| 亚洲玖玖爱| 丝袜美腿射精91| 中美日韩毛片| 夜夜高潮夜夜爽高清视频一| 无码99| a在线视频免费观看| 日本狂喷奶水在线播放212| 日韩亚洲欧美中文字幕| 亚洲精品九九九| 校园春色亚洲色图| 友优传媒精品在线一区二区| 熟女熟妇一区二区三四区| 中文字幕欧美日本乱码一线二线 | 久久精品国产96精品亚洲拳交| 日韩偷拍一区二区三区| 午夜小电影在线插入淫高潮| 日本淫乱女一区二区三区视频| 大香蕉视频啪啪啪啪| 97射欧美| 欧洲精品二区| 天天综合网日韩| 免费a v| 欧美一区二区| 国产精品第一页国产大屁股视频免费区| 在线洲亚线| aV中文麻| 熟妇色99| 蜜乳视频网站| 日日噜噜夜夜狠狠视频无| 免费少妇一区二区| 无码高清操逼网址| 乱伦图av| 婷婷五月色| 91狠狠综合久久久| 亚洲精品久久久久久久久豆丁网| 91在线美女| 午夜性| 四虎884a| 男人天堂导航| 国产精品999aaa| 欧美特大AA级黄片| 日本一区二区做爱的视频| 一级性爱aaaa| 天天操av懂色| 北野未奈加勒比av| 96超碰网| 国产欧美日本亚洲精品| 日本一区二区中文字幕久久| 中文字幕丝袜国产第一页不卡| 五月天丁香婷婷综合网站| A片三级无码| 成人五月香网在线| 国产精品suv一区| 亚洲做性| 午夜福利一区二区影院| 亚欧韩av| 97色色色综合网站| 亚洲一二三四区在线免费看视频| 不卡视频一区蜜桃视频 | 动漫av中文| 好爽要喷了| 亚洲欧美首页| 大色综合网| 2010男人的天堂| 亚洲熟女乱熟乱熟妇综合网二区| 中精品一区二区三区| 啊啊啊无码| 亚洲AV成人无码久久精品播放| 久久草大香蕉| 欧美大片天天看| 婷婷激情四射| 成人美女av| 四月丁香婷婷| rivers-china.com| 日本免费一级AAA大片器 | 日韩精品一区,二区 九九...老司机| 91麻豆天美国产欧美高潮| 啊啊啊啊啊啊在线观看| 精品性爱一二三区| 青青草黑寡妇男人天堂| 久九九九九九九九热| 日韩欧洲操屄视频| 射 色综合| 极品出轨视频网站| 国产精品久久妻无码网站| 婷婷五月影院| 精品久操| 久久肏大逼| 天天综合网~69| 亚洲好色人妻| 午夜久久无码1000合集| 久久久精久久久| 大香蕉2017| 国产 日韩 欧美高清| 国产suv精品一区二区四区999| 人人九九精| 精品国产91内射久久| www.狠狠干.coom | 91丝袜美女| 亚洲AV色图一区| 91免费看一区二区三区| 91精品久久久久久综合五月天| 丝袜狂射91| 一级婬片120分钟试看| 日本美女性生活久久久久久久| 精品夜夜澡人妻无码AV| 91在线色综合| 丰满人妻一区二区三区色-百度| 操逼逼福利视频| 欧美色图片欧美色图| 亚洲欧美日韩精品久久久一区二区| 欧美体内射精| 91美女在线视频| 国产精品日韩在线一区| 美女自卫慰黄网站免费| 日本亚洲熟女视频| 99国产人成精品| 夜夜 中文视频rt| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 欧美日韩亚洲天堂| 日本视频一区二区三区| 超碰爽人妻熟女Av| 91狠狠综合久久| AV免费在线播放一区| 91 手机在线播放 绯色| 久久中文字幕人妻熟av女蜜柚| 亚洲综合首页| 9色在线| 二级久久网| 日韩兔费看黄片| 国产av尤物| 亚洲做性| 欧美日韩中文亚洲v在线综合| 干B| 张柏芝国产一区在线观看| 综合激情五月丁香| 久9爱精品| 在线观看黄色电话| 操逼无毒无码免费视频| 黑人操一区二区| 亚洲有码第一页| 岛国黄| 天堂综合| 五月天色色网站| 東南亚性呦成人伦理资源在线视频| 99热这里只有精品地址| 热久久九九热| 97国产|免费| www…国产操逼| 毛片99-全集电影手机免费观看完整-B029AV | 熟女色图在线| 在线播放免费av福利片| 国产和美国毛片| 欧美极度丰满熟妇hd| 51一区二区三区| 超碰av在线| 国产2.3.4区| 亚洲色综合| 超碰色图| 日日夜夜青青草母狗| 国产乱色国产精品免费视| 人妻熟女一区二区三区在线| 中文操嬖片。| 久久超碰日韩精品| 色999偷自拍拍| 9国产超碰| 极品粉嫩少妇视频| 九九无码视频| 97在线观看| 国产农村妇女精品一二区| www.色吧5.com| 欧美大战久久久伊人| 欧美成人AⅤ大片在线观看| AV在线播放网址| 久久婷婷五月综合| 精品免费视频国产一区| 国产av热热色| 韩国午夜理伦三级好看| 久久香蕉国产线看观看亚洲女人 | 人妻另类| 人人摸人人干| 色成人Www精品永久观看| 欧美制服另类丝袜| 中日韩熟女| 美女91在线| 欧美性生活内射| 中文字幕在线播放2中文字幕在线观看2| 久久精品国产亚洲AV清纯| av东京热男人的天堂| 久热9| 一级人妻性爱视频| 亚洲一区二区av| 九九夜精品九九在线| 精品国产一级久久| 超碰97护士| 1024手机看片欧美日韩| 丁香五月天激情| 日韩美女操b| 超碰色综合| 色综合1991| 精品国产一区二区三区久久久蜜臀 | 香蕉99秘 一区精品蜜桃臀| 色天堂在线观看| 97玖玖人妻| 伊人久久婷婷| 国产无套粉嫩白浆在| 国内毛片无遮挡国产| 日本男人天堂| 欧美最婬乱婬爆婬牲视频| 亚洲中文字幕日产无码久久| 青青操97| 精品国产嫩穴视频| 91oumei| 欧美综合区| 高清孕妇孕交| 日韩射精| 久久69| 久久丝袜| 超碰97综合在线| 青草影院内射高潮| 日韩黄色小说| 午夜后入| 裸体1区| 国产SV一线| 日韩美脚一区二区网站| 欧美1727免费观看视频| 狠狠综合| 国产精品一二三免费网站| 国产精品熟女乱伦| 91精品久久久久久77777| 亚洲中文字母在线播放| 丁香九月激情啪| 六十路日本| 91精品丝袜在线观看| 人妻日日干| 91强热人妻| 国产一级作爱毛片| 日韩乱伦影音先锋| 最新日韩黄片| 日韩AV片| 中文字幕av久久爽Av| 欧美色图私拍91| 97爱亚洲综合色| 人妻人人澡人人爽人人| 欧美韩日精品资源| 91热色| 大香蕉懂9| 99色热| 男人午夜天堂| 中国少妇XXXX做受| 91九色精品熟女内射| 六月激情网| yirendaxiangjiashipin| 69精品人人人人| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 一本色道久久综合狠狠操| 淫纸中9区| 99国产精品| 麻豆国产视频精品观看| 亚洲偷拍自拍在线视频| 97中文超碰| 99在线观看无大码| 天天综合91入口| 欧美色狠| 艹少妇网站| 2010男人的天堂| 亚洲色图欧美另类在线| 蜜臀久久99精品久久久久久| 国产日韩在线播放av| 婷婷五月天影院| 欧美综合色站| 大香蕉99re| 国产福利一区二| 新久久AV| 天天操女人| 伊人四虎综合| 澳门黄片一香蕉视频| 国产精品嫩草影院免费| 午夜人妻精品综合在线| 曰本91情色| 中文字幕视频二区| 免费一级a毛片久久久久久鸭绿欲| 欧美日韩国内不卡| 天美传媒av 在线| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 欧美日韩传媒| 亚洲精品美女久久久久久久久| 哈哈操电影AV| 欧美第二页| 麻豆啪啪啪视频| www.高清无码诱惑一区.com| 美女啊啊啊啊啊啊| 成年人性爱日韩| 欧美狠狠操| 丝袜足交视频| 熟女视频久久| 久久视频,这里只有精品| 国产深夜福利| 亚洲五月丁香花狠狠干一区二区三区| 色哟哟av网址| 国产强奸91| 六月婷激情福利天堂69| 精品人妻一区二区三区免费视频| 亚乱色| 四虎884a| 97超碰中文字幕| 国产一区二区在线播放量| 狠狠综合网| 欧美综合自拍亚洲综合图| 日本视频在线中文字幕| 色情婷婷| 91熟女在线| 激情综合五| 国产精品不卡少妇白| 丁香六月啪| Aa东京男人的天堂| 亚洲精品一区二区三区在线播放| 亚洲无限观看| 脫衣舞一区二区三区| 欧美91在线+|+欧美| 狠狠色伊人亚洲综合网站色| 性色中出| 日本狂喷奶水在线播放212| 亚洲一二三精品久久网| 2017天天操| 麻豆人妻精品一区二区| 一区在线精品中文字幕| 老熟女熟妇| 岛国免费视频在线| 免费超碰97久久| 成人免费看吃奶视频网站| 九一精品牛牛一区二区| 视频一区二区三区精品| 蜜桃一区二区三区| 日欧操屄视频| 99人妻| 九九九久久久久| 白天啪啪晚上啪啪视频| 51一区二区三区| 亚州精品一区二区三区香中文字幕在线| 精品亚洲| 久久久久9999妇女| www.99中文字幕| 久久风骚城市| 蜜臀亚洲中文| 性色av网站| 性欧美999| 九九黄色网| 亚洲色图一区二区三区| 九九自拍伦理| 午夜福利免费精品视频| 天天干夜夜鈤| 九九九网页| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 亚洲精品乱码久久久久久蜜桃麻豆| yy少妇精品久久| 久久久久久久久久va| 91欧美丝袜| 久久久久日本视| 久久亚洲精品成人av| 台湾一区国产高清在线| 高颜值美女口爆高潮浪叫| 亚洲码和欧洲精品激情系列| 欧亚免费视频| se..亚洲欧美| 色偷综合| a男人的天堂| 高清无码国产亚洲| 香蕉热人人精品| 伊人九九九| 日日干夜夜骑| 91在线免费观看处女| 乱伦系列一区二区| 免费无码国产精品v片在线观看| 啊啊啊啊免费视频| 91jk色拍| 日韩三级一区 | 日韩欧视频| 9 7超碰在线免费观看| 色九月婷婷| 久久男人精品| 国产高清视频无码在线| 日韩熟女精一区二区三区不卡| 亚洲国产青青| 欧美91在线+|+欧美| 18一区二区三区| 大香蕉一线视频| 草草影院最新网址| 亚洲无码精品AV久久久| 91美女在线观看| 另类欧美综合| 清纯唯美综合| 精品少妇一区二区三区| 高清孕妇孕交 交孕妇| 中文字幕女同在线| 少妇内射www在线观看视频| 偷拍亚洲高清图片| 久草色悠悠在线视频| 亚洲人在线成线成人| 九九无码久久精品视频| 男女打扑克高清网站| 精品精品精品| 91人妻超碰| 激情婷婷五月天| 伊人成人中文字幕久久网| 伊人久久88国产女| 91爽啪| 小草精彩毛片| 人妻无码后入| 在线视频一区二区传媒| 嗯嗯啊啊好疼| 中国黑人三级片网站上区| 麻豆精品A片免费观看| 欧美一区二区传媒| n1038 一二三区| 青青草久久一区网| 亚洲色图欧美色图制服丝袜 | 日本三级A片网站com| 亚欧毛片基地国产毛片基地| 日韩性爱毛片操骚逼| 亚洲天堂7777| 99成人| av在线人气| 91偷拍欧美亚洲| 金典av| 国产日韩美女小穴视频网站不卡| 激情小说亚洲色图| 99e久久国产精品| 日本色色色色色视频| 人人扣人人操| 亚洲欧美精品一区天堂久久 | 欧美人妻制服| 国产强奸AV在线| 亚欧毛片基地国产毛片基地| 无码免费精品高清| 国产福利第一视频| 91碰碰碰| 国产25页| 亚洲男人在线观看天堂| CCYY草草影院地址入口| www网站黄| 男人的天堂2018东京热啪啪啪| 欧美夜色| 亚洲丝袜诱惑| 在线视频免费播放一区| 超碰97精品在线| 99久热精品99re6热| 0755午夜福利视频| AV一区观看| 午夜丁香婷婷| 乱码人妻一区二区三区| 懂色Av| 女人被男人桶爽视频网站| www色色com| 青青草原人妻| 中日韩久久久免费看| 人人看黄色视频| 成人丁香五月| 新精精品久久精品| 97天天摸天天爽| 大香蕉免费乱伦视频| 天堂日本亚洲欧美| 中文字幕免费看| 夜夜草天天| www.色婷婷| 男人精品天堂一区| 影音先锋每日最新资源在线观看| 人妻AV 中文字幕的| 欧美在线色| 欧美色网络| 另类一区| 操淫穴亚洲五月丁香 | 国内成人圈中文字幕无码视频| 亚洲成人精品在线一区| 婷婷五月丁香五月| 综合情欲网| 国产精品点击进入在线影院| 五月花婷婷| 好舒服视频| 国产91av在线播放| 亚熟在线| 日本成人免费一区二区三区| 久久午夜伦| 大香交| 日操粉逼逼| 亚洲日韩久久精品一区| 久久久久久亚洲中文| 欧美页片| 三级AV入口| 欧美日本天堂| 欧 美 自 拍 偷 拍| 新97国产超碰| 密乳无码| 亚洲诱惑天堂| 国产视频一区二区免费| 任我爽在线视频免费观看| 亚洲精品国产熟女久久久久久| 亚洲色图国产另类| 国产高清26uuu| www. 男人天堂成人在线| 8x福利精品第一福利视频导航 | 日韩综合无码色欲vv| 97在线观看免费视频l| 中文字幕亚洲永久精品| 少妇蹲下买菜露大唇0| 午夜福利免费福利视频| 久久精品无码熟妇一区二区三区视频导航 | 亚洲AV资源| 中文字幕天堂在线| 怡春苑东京热| 国产亲戚伦亲在线| 女人香蕉久久毛毛片精品| 五月天综合| 久一区久久蜜桃| 国产精品亚洲四五区在线观看| 国产成人 综合亚洲 天堂| 九九九九九九九九九五码| 中文字幕在线观看二区三区| 草B在线| 色性欧美| 国产一级不卡在线观看| 97人人色| 97综合在线观看| 亚洲日韩在线a不卡99精品 | 99久久网站| 免费操逼91| 亚洲十八禁止| 性欧美另类高清| 天天弄天天操| 黄页av| 嗯嗯啊好大| 丁香五月天激情| 插入逼91| 97在线播放| 色狠狠综合噜一二三区| 中文字幕av乱伦| 国产高清视频无码在线| 亚洲做性| 欧美亚洲美少妇一区二区| 夜夜草网站| 国产91av在线播放| 91亚洲人| 亚洲国产亚洲天堂| 九九热免费国产视频婷婷伊人| 天天色天天干天天射| 97亚洲中文| 亚洲国产av中文字幕久久| 97视频在线免费播放| 亚洲欧美精品一区天堂久久 | 99re8超碰| 国产激情在线观看| 26uuu国产亚洲综合| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 97激情97激情| 九九久久精品| 亚洲啪啪视频一区二区| av网站国产主播在线| 亚春色色| 大香蕉99热| 亚洲18禁| 麻豆久久久一区二区| 国产精品干干干| 国产精品女aA片爽爽视频| 正宗无毛一线天嫩逼| 青青草伊人久久| 另类图片五月| 91日韩在线| 在线强奷到舒服的无码视频 | 黄页网站成人免费| 久射吧| 精品无码产区一区二| 9精品久久| se,,,亚洲欧美| 精品性爱久久视频| 精品久久大胆人体| 久久久九九九九| 操b网站亚洲无码| av亚洲天堂资源网站| 天美一二三在线观看Av| 精品人妻一区二区乱码一区二区| 美女主播色欲91抠b在线播放| 国产自产91区13区| 东北丰满熟女国产一区| 精品一区二区综合熟妇| 精品性爱无码在线播放| 婷婷色中文字幕| www.夜夜操| 五月天社区| 97资源超碰| 亚洲乱色视频一区、二区在线| 亚洲AV乱码专区国产噜噜亚洲| 超踫中文字幕| 久久天天躁日日躁狠狠躁 | 日日日日做夜夜夜夜无码| 国产日韩色综合| 日韩国产欧美伦理在线| 黄色视频特级毛片| 久久婷婷伊人| 很黄很污的免费网站| 国产又黄又猛又粗又爽的网站| ss久久| 看黑人AV不卡| 韩日精品福利视频一区不卡在线免| 夜色97| 综合情欲网| 男人精品区| 成人av性爱电影在线观看| 性久久久| 最近2019中文字幕国语免费版| 手机看av网站在线看| 91五月天| 97欧美精品综合| 日本最新1区2区3区| 欧美精品黑人猛交高潮| 欧美激情专区| 久久亚洲AV无码专区国产精品 | jiujiujiujingpin| 久久人妻熟女一区二区| 亚洲一曲日韩精品| 99精品热| 欧美日韩人妻婷婷一区| 久久一区二区三区四区五区| 欧美日韩香蕉| 超91综合网| 亚洲熟女乱色一区二区三区久久久 | 欧洲无码一区二区| 色呦呦、国产精品| 97中文综合| 中文字幕五月婷婷免费| 人妻熟女午夜精品在线| 欧美精品三区| 精品一区二区三区麻豆| 国产 亚洲 丝袜 制服| 人妻少妇蜜桃视频欧美一区| 久久爱超碰网| 激情综合网亚洲| 中文字幕成人理论在线| 97久久超碰国产网站| 日韩在线观看AV| 亚洲天堂中文字| 97一区二区蜜臀| 夜夜夜爽www精品视频| 日韩欧美成人性爱在线| 亚91亚洲网| 九九九精品美女| h无码动漫在线观看| 啊啊啊在线观看免费视频| 欧美激情区| 91精品伊人久久久大香线蕉91| 日韩99神马视频播放| 欧美色图亚洲色| 久久99网站| 加勒比av网| 白天啪啪晚上啪啪视频| laoshunv91| 香蕉国产精品麻豆亚洲欧美日韩| 久久女人一区二区三区| 18精品一二区| 欧美黄片视频在线观看免费| 中文字幕伊人| 日韩三级天堂在线观看| 碰超人人在线一区二区三区| 欧美的性爱网站免费| 黑丝91视频| 日韩亚洲欧美中文字幕| 99成人| 欧美草草高清日韩视频| 国产日本久久免费精品| 欧美青青草视频| 老熟女乱伦一区| 亚洲美欧999| 蜜臀AV秘一区翔田千里| 精久久久91| 日韩字幕一区| 欧美伦乱爱| 免费一级特黄特色大片在线观看看 | 久久草草亚洲蜜桃臀| 欧洲Au麻豆| 视频一区二区免费在线| 久草新免费| ,成人免费啪啪视频| 操操操操操操| 亚洲激情综合另类男同| 九一精品牛牛一区二区| 亚洲欧美综合区自拍另类| 97视频www| 美女被艹尤物视频| 超碰美国| 极品白嫩福利在线| 台湾成人无码AV| 精品九九九九九九九九九| 国产日韩欧美亚洲精品95| 精品少妇一区二区三区| 99ri视频| 午夜啪| 中文字幕久久精品一区| 国产树林里野战在线看| 久久国产精品m码| 亚洲有薄码区日本系列中文字幕| 两女互慰AV高潮喷水在线观看| 日韩丝袜高跟制服在线观看| 91精品黄在线观看| 国产精品免费久久久久久久久久| 操一区| 91超级碰| 亚洲熟伦熟妇AV无码春色| 国产精品。| 91超级碰碰| 91香蕉国产尤物视频| 青草视频人妻在线观看| 色婷婷激情| 亚洲精品乱码线路中文字幕| 极品少妇久久久久| 久久综合日韩亚洲欧美| 三级激情网站| 久久久夜夜夜| 久久大精品乱码视频人妻熟女| 九九在线精品| 人人操我人人干| 亚洲情色 欧美| 91精品久久久久久77777| 人人操av| 18禁的网站在线| 国产精品爆乳懂色蜜乳| 激情情色五月天| 另类亚洲图色| 亚洲综合在线视频| 太久视频| 国产无码久久高清| 97亚洲中文| 在线情色电影 91大| 超碰日本97美女人妻人人玩人人爱| 国产人伦a片信息免费片| 精品九九| 国产9l 大屁股| 亚洲国产亚洲天堂| 久久亚洲不卡一区二区三区| 欧美亚洲日韩人妻在线观看| 日本精品高清一二区一本到| 老熟女乱伦一区| 97在线免费视频观看| 视频黄站| 爱爱久久| 大香蕉在线视频重口味毛片在线| 久久香蕉国产传媒一区剧情天美| 国产亚洲禁久一区二区| 超清福利精品视频在线| 三级日韩一区二区三区| 黑人娇小av在线播放| 亚州性色| 国产激情在线| 日本久久久久久久久久| 尤物AV免费网站| 亚洲色图欧美色18直播在线| 97综合激情| 91成人亚洲色图| 桑老女人九区| 南澳成人一级片在线播放| 亚洲色图欧美色图在线播放| 午夜福利在线合集| 日韩精品电影| 中字一区| 99re99在线视频| 清纯唯美激情| 91国模| 无码国产精品96久久久久孕妇| 91亚洲色图| 日本视频在线中文字幕| 波多野42部激情无码喷潮| 大香蕉乱级| 蜜臀AV秘一区翔田千里| 夜夜天天噜狠狠爱2021| 日韩精品亚洲专区在线影视| 成人性爱美曰韩| 午夜男人一级A片7777| 九九九九九九九精品视频| av九九| 黄污污污污| 麻豆国产av网| 久久久久久久六六| 上床啊啊啊| 日B操| 欧美日韩性爱无码| 婷婷五月天激情四射| 欧美色66| 欧美在线色| 精品一区二区三区18| 美女诱惑一区| 涩涩涩综合| 亚欧韩av| 国产夜夜操| 少妇高潮喷水无套久久久久久| 99精品九九九九九九| 五十路三区在线| 国产欧美精选自拍一区| 99操碰| 丝袜喷水在线| 91黄射| av毛片aaaaa免费看| 国产精品香蕉热久久新品| 婷婷五月天久久久| 超91综合网| 色五月激情AV在线| 色99999| 久久久久亚洲?V片无码V| 97干在线视频| 亚洲综合小视频小说在线观看| 草久在线| 一本一道vs波多野结衣| 黑操B| av日韩中文字幕| 99re免费视频精品全部| 乱精品一区字幕二区| 日本一级不卡一二区| 高清有码一区二区| 丝袜 亚洲 偷拍| 老熟妇一区二区三区| 啪啪啪精品| 骚乳在线| 啊啊啊啊啊在线| 天天天天天干夜夜夜夜夜操| 视频在线观看一二三区| 美女高潮国产高清| 国产欧美日韩在线不卡第一页| 一区二区不卡| 乱伦a片视频| 欧美少妇一区二区三区| 久操电影网| 囯产操逼片| 久久久99999久网站| 麻豆国产精品午夜视频| 看日韩美女二区三区免费操逼视频| 超碰97在线色男人??| 超碰人人操97碰| 丝袜综合色图| 又粗又长又大国产不卡| 清柠毛片| 91美女在线| 日韩成人性爱电影在线播放| 美女丝袜激情小说| 久久久久久99AV无码免费网站| 亚殴在线| 伊人影院日本| 后入 亚洲 美女 射| 综合激情一一91| 性开放中文AV高清无码免费看| 深夜啪啪啪视频免费| 久久久久久久唑| 欧亚在线视频| 欧美自拍网| 乱欲一区二区| 中文字幕av一区二区三区人妻少妇| 国产高清在线观看欧美| 久久精品91| 天天操天天舔| 精品美女少妇一区二区| 五月天激情网站| 男人的天堂2019| 亚洲色图a| 园内精品自拍视频在线播放| 国产精品久久久久999| 国产又爽又黄| 日韩日韩日韩-国产乱码精品一区二区| A片三级无码| 青青草好吊色| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 边做饭边操逼逼| 色色色色色色色色综合| 日韩乱伦视频| dy888午夜老子影视达达兔| 久久亚洲熟妇在线视频| 国产精选三级在线观看| 91亚洲色图| 一本久久精品中文字| 超碰av在线| 欧美性爱18观看| 青青草原伊人网| 人妻出轨一区二区三区| 精品区国产区一区二区三区| 91老熟女91老女人| 人妻少妇一区二区| 男女激情黄色网址| 蜜臀久久99精品久久久久| 精品网站99999| 亚洲国产无码精品首页久久久| av网站免费看| 欧美日韩国产色五月综合在线| renqi久久久久久久久久久久| 老司机深夜18禁污污网站| 人妻 欧美亚洲| 亚洲AV免费在线观看| 欧美αv.com| 日本男人天堂| 60秒免费小视频| 久久透逼视频| 成人性交午夜免费片| 欧美日韩淫加| 激情综合网五月婷婷五月天| 青春草莓视频在线观看网址| 熟女熟妇一区二区三区视频| 久久999久| 内射日韩大臀美女| 99久re热视频精品98| 高清国产成人无码| 2024黄色视频| 青青草福利视频| 欧美色97| 999热日韩精品| 熟女高潮精品一区二区| 黄呦呦在线| 嗯嗯啊啊亚欧精品| 97五月天| 熟女人妻一区二区三区| 岛国激情视频在线观看| 一级毛片电影免费看| 国产在线激情| 国产人人干| 婷婷五月天无码 | 久久精品女同亚洲女同13| 白丝AV网站| 草蕉影视亚洲无码| 伊人青青草久久| 搡老女人老妇女老妇老熟女怎么读| 在线只有精品| 欧美亚洲日韩人妻在线观看| 丁香五月激情综合| 五月天婷婷久久| 精品性爱无码在线播放| 亚州AV无码国产精品| 亚洲第一狼人丝袜美女另类| 久久久国产av美女私房| 熟妇一区二区| 国产9l 大屁股| 天天干人人乐| 亚洲色图欧洲| 久久久人妻| 亚洲欧美黄| 亚洲精品99999| 国产精品ww久久| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 超97在线精品视频| 在线综合色| 国产精选三级在线观看| 一起草av| 久久一二区四| 天天天天天天天天综合| 久久动漫精品视频这里只有精品| 欧美伦乱爱| 97网站在线观看| 高潮精品| 日本日逼高清| 91丨熟女丨丰满熟女| 伊人久久婷婷| 97亚洲国产影视| 婷婷另类小说| 男女香蕉一区二区| 伊人91| 懂色中文一区二区三区| 蜜臀AV秘一区翔田千里| 精品性爱一区二区| 五月婷婷久久综合| 少妇诱惑视频| 俺去啦自拍| 好爽视频在线观看视频 | 日韩影片中文字幕一区二区三区| 加勒比东京热五月天天堂网| 深夜激情| ji熟女.com| 久久婷色| 国产污视频麻豆传媒一区二区 | 操逼日韩无码 | 夜色91| 美女写真| 大香蕉伊人一区在线观看| 欧亚成人在线视频| 九七色图| 777AV电影| 女同在线视频一区| 97国产天堂岛| 美女啊啊啊啊啊啊| 日韩精品永久在线观看| 久久精精区一区二区一蜜桃一区二区| 久久超碰98| 午夜性生活av免费在线看| 亚洲熟女中文字幕在线| 不卡九肏| 上床啊啊啊| 亚洲成熟国产精品美女| 日韩一级二级在线| 国产久久天堂资源| 色伊人91| 麻豆AV96熟妇人妻| 91 丝袜在线播放| 久久国产热视频97电影| 用力操死我| 亚洲欧美不卡线| 久久精品99| 久久久无码精品人妻二区| 99色热国产视频精品| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 九九99精品| 中文字幕免费看| 无码天天操| 最新av在线| 偷拍三区| 91成人国产综合久久精品蜜月| 国产嫩草精品A88AV| 国内毛片婷婷六月色| 日韩在线97| 老子午夜伦不卡影院| www.91色综合| 天天狂操夜夜狂日| 成人乱码一区二区三少妇| 男人的天堂在线| 高清一区AV无码| 久久久久七视频| 成人无遮挡毛片免费看| 四虎永久在线精品免费网址| 日韩中文字幕精品一二三事国产精品| 久久综合国产精品国产| 99re在线观看| 男女啪啪网站免费视频| 91丝袜在线观看视频在线观看| 欧美啪啪色吧在线| 婷婷色综合| 色悠久| 精品乱子一区二区三区99| 浓厚中出中文字幕在线| 天天看片麻豆| 97人人夜夜精品视频| 性欧美体内射精| 久久久久久69国产一区二区| 日本丝袜美腿人妻九九| AV和黑人在线播放| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 思思久热在线精品66| 久草资源在线视频官方总站日韩丝袜美腿| 九九九九精品九九九九| 人妻在线中出视频| 国产最新小视频在线播放下载| 激情四射五月天| www.久久| 国语少妇精| 欧美日韩少妇色情| 天天干天天操天天干天天操| 在线观看啊啊啊啊啊| 色九九九九久| 日韩高清黄片| 啊啊啊好舒服好爽啊啊啊视频| 亚州欧美一区| 蜜乳AV色欲AVAV无码| 欧美激情激情xxxx欧美专区| 欧美精品三区| 激情99| 亚洲一卡二卡在线免费| 亚洲日本天堂| 蜜臀久久99精品久久久久久久久| 美日韩男女操屄视频| 久噜噜| 亚洲情色91| 91成人久久| 加勒比海人人操超碰在线| 欧美白嫩在线放| AV 少妇 人妻 偷拍| 国产精品无码成人精品| 情色五月天网| 日本一区二区电影网站| 亚洲色 国产 欧美 日韩| 张柏芝国产一区在线观看| 99视频自拍区| 欧美色图中文字幕| 中字乱伦AV| 欧美探花网| 亚洲校园激情| 久久久久9999妇女| 成人资源中文字幕在线观看天天| 熟女激情综合网| 亚洲精品电影| 91超碰碰在线| 中美日韩毛片| 欧美黑人XXXⅩ高潮交| 亚欧高清在线| 国产高清在线观看欧美| 欧美一级美片在线观看免费| 91丨人妻丨国产丨丝袜| 欧美激情精品久久久久久| 亚洲日韩东京热一区| 殴美日韩m| 久久超碰爱| 97人人模人人爽人人| www久久国产精品| 日本精品五区| 91综合站| 高清不卡 中文 人妻| 最新精品久久蜜桃 | 成人欧美日超碰| 大鸡吧尹人在线| 欧美亚洲中文字幕| 艹比视频国产精品| 久久精品国产亚洲AV无码做| 91人人操| 天美传媒av在线| 死我十八禁| 精品对白久久不卡| 日本色色色网站免费看不卡| 久综合国内精品自在自线| 日本不卡一二区| 午夜福利 成人 91| 日韩精品一区二区人人人| 五月天精品| 国色综合天| 无码高清操逼| 午夜a成v人电影| 东北丰满熟女国产一区| 亚洲1区2区三区高清中文字幕| 国产精品久久久久久照片| 中文字幕一区二区韩| 日韩中文字幕视频在线观看| 久久香蕉综合一本到3atv| 熟女人妻一区二区三区| 日韩不卡a级视频专区| 天天日天天插| 伊人综合色网| 四虎AV无码| 欧美日韩国产人人| 少妇99| 大香蕉伊人75| 欧美性爱精品七区| 亚洲成人免费中文字幕| 中文字幕 国产区| 91亚州日韩高清| 大香蕉在线视频重口味毛片在线| 97AV在线免费观看| 亚洲色交| 最新国内自拍av免费| 一级啊性爱在线视频|