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

ARTICLE DETAIL

資訊詳情

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

WebGPU加速的瀏覽器端以圖搜圖:MobileNet特征提取與本地向量檢索實戰(zhàn)

WebGPU加速的瀏覽器端以圖搜圖:MobileNet特征提取與本地向量檢索實戰(zhàn) 你有沒有遇到過這種情況客戶要一個“以圖搜圖”功能圖片又不想傳到服務(wù)器上要求在瀏覽器里直接完成而且速度還不能慢。傳統(tǒng)前端想都不敢想的任務(wù)現(xiàn)在靠瀏覽器端 AI 加上 WebGPU 加速已經(jīng)能跑得很舒服了。我這次做的項目就是讓瀏覽器加載一個 MobileNet 特征提取模型把用戶上傳的圖片變成 1024 維向量再拿這個向量去全本地索引里搜相似圖整個鏈路不依賴 GPU 服務(wù)器也不把圖片發(fā)出去。這套方案的核心技術(shù)點有三個MobileNet 這種輕量 CNN 為什么適合在瀏覽器端跑WebGPU 和傳統(tǒng) WebGL 推理的差異到底在哪里以及 1024 維特征向量怎么支撐起一套可用的以圖搜圖鏈路。適合看這篇文章的人我大概歸了三類想做前端 AI 應(yīng)用但卡在性能和兼容性上的開發(fā)者正在做素材管理、相冊去重、版權(quán)比對這類圖片檢索需求的工程師還有想低成本給自己的網(wǎng)頁應(yīng)用加“相似圖片”搜索能力的產(chǎn)品和技術(shù)決策者。文章里的代碼基于 onnxruntime-web 實現(xiàn)模型用 MobileNetV2 結(jié)構(gòu)推理走 WebGPU向量檢索在前端用純 JavaScript 完成。我會把從模型導出、環(huán)境準備、代碼拆解到踩坑記錄全流程講一遍你跟著操作就能在自己項目里復(fù)現(xiàn)。1. 為什么非要在瀏覽器里跑特征提取1.1 用戶要的“不傳圖”實際上要的是隱私和速度先說個挺有意思的現(xiàn)象。做后端推理的兄弟可能覺得客戶端傳圖、服務(wù)器返回結(jié)果不是挺成熟的方案嗎確實成熟但落地的時候有三個問題很難繞開。第一是隱私。相冊類應(yīng)用、企業(yè)內(nèi)部素材庫、醫(yī)療影像系統(tǒng)的用戶對圖片數(shù)據(jù)極其敏感圖片一旦上行合規(guī)、加密、審計的流程就全來了。很多項目根本不是技術(shù)做不到是“圖片能不能出域”這一條直接被客戶否掉了。第二是延遲。圖像上傳要看帶寬服務(wù)器排隊要看負載。哪怕后端推理只要 50 毫秒一張兩兆的圖傳上去再加上網(wǎng)絡(luò)抖動用戶感知到的就是“轉(zhuǎn)圈”。而瀏覽器端直接處理圖片從本地文件到特征向量幾百毫秒內(nèi)完成這種反饋是實打?qū)嵉?。第三是成本。做圖片特征抽取要吃 GPU 資源如果只是偶爾查一次專門起一個 GPU 服務(wù)就是浪費。把計算挪到用戶設(shè)備上服務(wù)器只負責靜態(tài)資源分發(fā)成本結(jié)構(gòu)完全不一樣。所以“瀏覽器端跑 AI”聽起來像炫技實際上是在隱私、速度、成本三個維度上都更優(yōu)的選擇。尤其是圖庫規(guī)模不大比如幾千到幾萬張、查詢頻率不高的場景純前端方案是性價比最高的一條路。1.2 WebGPU 相比 WebGL 到底強在哪可能有人問瀏覽器端跑神經(jīng)網(wǎng)絡(luò)又不是今天才有WebGL 時代就有人用 TensorFlow.js 跑過模型了。為什么現(xiàn)在要提 WebGPU因為這個差距實在太大了。WebGL 本質(zhì)上是為二維和三維圖形渲染設(shè)計的 API想在它上面跑神經(jīng)網(wǎng)絡(luò)得把卷積、矩陣乘法這些算子偽裝成片段著色器把數(shù)據(jù)塞進紋理再把計算結(jié)果從紋理里讀回來。這個過程中紋理讀寫的限制很多內(nèi)存分配和算子控制也很粗糙遇到復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)性能損耗非常明顯。WebGPU 不一樣它引入了 compute shader 的概念能夠直接操作 GPU buffer做通用并行計算。這意味著卷積、矩陣乘法這類重計算算子可以用更接近底層的方式組織數(shù)據(jù)不必反復(fù)在紋理和 CPU 之間倒騰。對神經(jīng)網(wǎng)絡(luò)推理來說WebGPU 還有一個天然優(yōu)勢支持更靈活的 tensor 布局比如直接用 NCHW 布局減少推理框架內(nèi)部的 transpose 開銷。我用同一個 MobileNet ONNX 模型做過對比在同樣的機器上WebGL 后端跑一次推理大約 300 到 500 毫秒WebGPU 后端降到 30 到 60 毫秒差距接近一個數(shù)量級。這種差距決定了“在瀏覽器里做實時圖片檢索”是可行的還是只能停留在玩具階段。1.3 選型MobileNet ONNX Runtime Web 的組合怎么定下來的模型選 MobileNet理由很直接。MobileNet 的核心設(shè)計是深度可分離卷積把標準卷積拆成逐通道卷積和逐點卷積兩步參數(shù)量和計算量大幅下降很適合瀏覽器這種算力受限的環(huán)境。MobileNetV2 在 ImageNet 上的精度雖然不如 ResNet 這類大模型但作為特征提取器它的瓶頸層輸出已經(jīng)能很好地表達圖像語義足夠支撐相似圖片檢索。推理引擎我選了 ONNX Runtime Web。這里要說說為什么不用 TensorFlow.js。TensorFlow.js 對 TensorFlow 模型生態(tài)的支持確實好但我日常更多是 PyTorch 訓練模型ONNX 作為中間格式更通用。onnxruntime-web 對 ONNX 算子的覆蓋度一直在提升而且從 1.17 版本開始加入 WebGPU 執(zhí)行后端走的是官方維護的路線。特征維度定在 1024不是拍腦袋。維度太低相似圖片容易誤判維度太高索引和檢索的開銷明顯增加。人臉識別領(lǐng)域常見的特征維度是 512 或者 1024這個區(qū)間在語義區(qū)分度和計算量之間比較平衡。MobileNetV2 原版瓶頸層輸出是 1280 維我在項目里對模型做了一點調(diào)整輸出層改成 1024 維的 embedding 頭后面會詳細說導出方式。2. 動手前的準備環(huán)境、模型導出與工程骨架2.1 瀏覽器端 WebGPU 能不能用的自檢方法寫代碼之前先確認目標環(huán)境下 WebGPU 到底可不可用。WebGPU 需要瀏覽器和硬件驅(qū)動雙重支持不是裝了新瀏覽器就一定行。最直接的檢測方法是看navigator.gpu是否存在。Chromium 內(nèi)核的瀏覽器從 Chrome 113 開始默認支持 WebGPUEdge 113 也同步支持。Firefox 目前是部分支持Safari 在較新版本里也開始跟進。開發(fā)階段建議優(yōu)先用 Chrome 或 Edge 調(diào)試。還有一個隱藏條件WebGPU 要求安全上下文。也就是說頁面必須在 HTTPS 環(huán)境下打開或者本地 localhost 調(diào)試普通的 HTTP 頁面是拿不到 GPU 權(quán)限的。我寫過一個簡單的檢查函數(shù)頁面加載時直接跑一遍function checkWebGPU() { if (gpu in navigator) { console.log(WebGPU 可用GPU 設(shè)備:, navigator.gpu); return true; } console.warn(當前瀏覽器不支持 WebGPU請使用 Chrome 113 或 Edge 113); return false; }如果navigator.gpu存在但推理速度異常慢建議打開chrome://gpu頁面看一下 WebGPU 相關(guān)的狀態(tài)和驅(qū)動告警。有時候是顯卡驅(qū)動版本太舊WASM 和 WebGPU 本身沒問題但硬件加速沒跑起來。2.2 把 MobileNet 導出成 1024 維特征模型這一步把 PyTorch 模型轉(zhuǎn)成 ONNX 格式。我用的 MobileNetV2 來自 torchvision默認的分類頭輸出 1000 類現(xiàn)在要把它替換成 1024 維的特征輸出。注意一個細節(jié)MobileNetV2 在全局池化之后classifier包含兩層第一層是 Dropout第二層是Linear(last_channel, 1000)其中l(wèi)ast_channel是 1280。要改成 1024 維特征直接替換最后的 Linear 層即可。import torch import torchvision import torch.nn as nn model torchvision.models.mobilenet_v2(weightstorchvision.models.MobileNet_V2_Weights.DEFAULT) model.classifier[1] nn.Linear(model.last_channel, 1024) model.eval() dummy_input torch.randn(1, 3, 224, 224) torch.onnx.export( model, dummy_input, mobilenet_v2_feat.onnx, input_names[input], output_names[feature], opset_version17 ) print(導出完成輸出維度應(yīng)在 ONNX 中為 [1, 1024])這里要提醒一句隨機初始化的 Linear 頭在沒經(jīng)過微調(diào)時特征質(zhì)量不一定比原版 1280 維好。我在實際項目里用的是在業(yè)務(wù)數(shù)據(jù)集上用度量學習微調(diào)過的 1024 維 head。如果你只是驗證流程可以暫時用隨機初始化的 head相似圖片檢索的結(jié)果會有一點下降但流程能跑通。另一個方案是直接用原版 1280 維輸出在前端用固定投影矩陣降維到 1024這個后面再聊。MobileNet 的輸入預(yù)處理要和訓練時保持一致resize 到 224x224像素歸一化到 0 到 1然后按 ImageNet 的 mean 和 std 做標準化。導出 ONNX 時沒有把歸一化層放到模型里所以這些步驟要在前端預(yù)處理完成。2.3 工程結(jié)構(gòu)、依賴與 wasm 文件放置項目使用 npm 安裝 onnxruntime-web 的穩(wěn)定版本。注意 WebGPU 后端還處于快速迭代期API 有變化建議鎖定一個大版本不要每次盲目升級。npm install onnxruntime-web1.19.2onnxruntime-web 底層是 WASM瀏覽器需要加載對應(yīng)的 wasm 文件。最簡單的做法是把node_modules/onnxruntime-web/dist/下的 wasm 文件復(fù)制到項目的public/wasm/目錄然后用ort.env.wasm.wasmPaths指定路徑。項目目錄結(jié)構(gòu)參考project/ ├── public/ │ ├── models/ │ │ └── mobilenet_v2_feat.onnx │ └── wasm/ │ ├── ort-wasm-simd-threaded.wasm │ └── ... ├── src/ │ ├── feature-extractor.js │ ├── image-search.js │ └── main.js └── index.htmlfeature-extractor.js負責加載模型、圖像預(yù)處理和推理image-search.js負責向量歸一化、相似度計算和圖庫管理。這樣拆開之后模型相關(guān)的邏輯和檢索邏輯可以獨立測試。初始化代碼是這樣的import * as ort from onnxruntime-web/webgpu; ort.env.wasm.wasmPaths /wasm/; const session await ort.InferenceSession.create(/models/mobilenet_v2_feat.onnx, { executionProviders: [webgpu], graphOptimizationLevel: all });這里把executionProviders指定為[webgpu]onnxruntime-web 會用 WebGPU 后端執(zhí)行算子。如果某些算子不支持 WebGPU會自動回退到 CPU。后續(xù)調(diào)試的時候可以打開日志確認算子有沒有發(fā)生回退。3. 核心代碼拆解從圖片到 1024 維向量3.1 圖像預(yù)處理resize、歸一化、布局轉(zhuǎn)換預(yù)處理是整個流程里最容易寫錯的地方因為模型對輸入布局極其敏感。ONNX 模型的輸入一般是 NCHW 格式也就是[batch, channel, height, width]在 JavaScript 里就是一個Float32Array數(shù)據(jù)順序是先放所有像素的 R 通道再放 G 通道最后放 B 通道。下面這段代碼把圖片畫到 canvas 上縮放到 224x224再按 ImageNet mean/std 做標準化輸出ort.Tensorasync function imageToTensor(imageSource) { const width 224; const height 224; const canvas document.createElement(canvas); canvas.width width; canvas.height height; const ctx canvas.getContext(2d, { willReadFrequently: true }); ctx.drawImage(imageSource, 0, 0, width, height); const imageData ctx.getImageData(0, 0, width, height); const data imageData.data; const float32Data new Float32Array(3 * width * height); const mean [0.485, 0.456, 0.406]; const std [0.229, 0.224, 0.225]; for (let i 0; i width * height; i) { const r data[i * 4] / 255.0; const g data[i * 4 1] / 255.0; const b data[i * 4 2] / 255.0; float32Data[i] (r - mean[0]) / std[0]; float32Data[width * height i] (g - mean[1]) / std[1]; float32Data[2 * width * height i] (b - mean[2]) / std[2]; } return new ort.Tensor(float32, float32Data, [1, 3, height, width]); }有幾個細節(jié)要提一下。getContext(2d, { willReadFrequently: true })這個參數(shù)在頻繁讀取像素時能避免 canvas 使用 GPU 加速導致的問題。如果圖片帶透明通道data[i * 4 3]是 alpha 值這里直接忽略因為 MobileNet 訓練時用的是 RGB 三通道圖像。如果你用的是createImageBitmap(file)讀取本地圖片得到的ImageBitmap對象可以直接傳給drawImage性能比先把文件轉(zhuǎn)成img標簽再畫要好尤其在批量處理場景下明顯。3.2 用 WebGPU 執(zhí)行推理并拿到特征向量預(yù)處理完之后推理代碼其實只有三行但背后發(fā)生的事情很多const output await session.run({ input: tensor }); const feature outputs[feature].data;session.run會走 WebGPU 計算管線輸入 tensor 上傳到 GPU buffer算子按圖執(zhí)行最后結(jié)果從 GPU buffer 讀回 CPU。第一次調(diào)用時WebGPU 需要完成管線編譯會有明顯的等待所以正常做法是在頁面加載后先“預(yù)熱”一次后面會專門講。拿到outputs[feature].data之后它是一個類型化數(shù)組長度理論上應(yīng)該是 1024。但 ONNX 輸出可能帶 batch 維度最好先確認一下形狀const shape outputs[feature].dims; // 例如 [1, 1024] const feature new Float32Array(outputs[feature].data); console.log(特征維度:, feature.length);這里用new Float32Array(...)復(fù)制一份很有必要。output.data可能引用的是 onnxruntime 內(nèi)部緩沖區(qū)后面再次推理時會被覆蓋復(fù)制出來可以避免臟數(shù)據(jù)。完整的抽取封裝大概長這樣let session null; async function initFeatureExtractor(modelPath) { if (session) return session; session await ort.InferenceSession.create(modelPath, { executionProviders: [webgpu], graphOptimizationLevel: all }); await warmup(); return session; } async function extractFeature(imageSource) { const tensor await imageToTensor(imageSource); const outputs await session.run({ input: tensor }); const feature new Float32Array(outputs[feature].data); return normalize(feature); }warmup就是拿一張全黑或全白的 224x224 圖先跑一次推理把 WebGPU 管線編譯和算子調(diào)度預(yù)熱完成這樣用戶真正查詢時就不會卡在那幾秒的編譯等待里。3.3 把特征向量喂給檢索模塊歸一化與余弦相似度特征向量做檢索之前先做 L2 歸一化。歸一化之后兩個向量的余弦相似度等于它們的內(nèi)積計算量小很多而且這種查詢方式在索引層面也更友好。export function normalize(vector) { let sum 0; for (let i 0; i vector.length; i) { sum vector[i] * vector[i]; } const norm Math.sqrt(sum) || 1; const normalized new Float32Array(vector.length); for (let i 0; i vector.length; i) { normalized[i] vector[i] / norm; } return normalized; } export function cosineSimilarity(a, b) { let dot 0; for (let i 0; i a.length; i) { dot a[i] * b[i]; } return dot; }注意如果a和b都已經(jīng)歸一化cosineSimilarity返回的就是余弦相似度值域在 -1 到 1 之間。以圖搜圖場景里返回結(jié)果一般按相似度從高到低排序。我在項目里會額外保存每個特征的平方和用來排查向量是否因為某種原因變成全零向量全零向量直接跳過不參與排序。4. 圖片庫構(gòu)建與檢索鏈路打通4.1 離線入庫批量抽取圖片特征以圖搜圖不止需要“查詢端”能抽特征圖片庫里的每張圖也得有特征。項目初期圖庫不大可以直接在瀏覽器里批量入庫把圖片庫的圖片逐張丟給extractFeature生成特征后存起來。批量入庫比單張查詢更容易做性能優(yōu)化。MobileNet 輸入是動態(tài) batch 維度的我可以把多張圖拼成一個[N, 3, 224, 224]的輸入張量一次推理同時輸出 N 個 1024 維向量。這個優(yōu)化在 WebGPU 后端下收益很大GPU 并行能力被充分用起來。批量特征抽取的示意代碼async function extractFeaturesInBatch(imageSources) { const tensor await batchImagesToTensor(imageSources); const outputs await session.run({ input: tensor }); const data outputs[feature].data; const shape outputs[feature].dims; const [batch, dim] shape; const features []; for (let i 0; i batch; i) { const vec new Float32Array(dim); vec.set(data.subarray(i * dim, (i 1) * dim)); features.push(normalize(vec)); } return features; }batchImagesToTensor就是把預(yù)處理的循環(huán)從單張變成多張構(gòu)造Float32Array(batch * 3 * 224 * 224)。我建議入庫過程放在 Web Worker 里跑避免 UI 卡死這個后面講工程化時展開。4.2 特征存儲IndexedDB 與二進制編碼入庫生成的特征需要持久化否則每次刷新頁面都要重新抽一遍特征。瀏覽器端的自然選擇是 IndexedDB它支持結(jié)構(gòu)化克隆Float32Array可以直接保存。我的存儲結(jié)構(gòu)很簡單每條記錄一個 id、一個Float32Array特征向量、還有圖片的縮略圖 Blob 和元信息。查詢時把圖庫全部向量取出來在內(nèi)存里做相似度計算。function saveFeatureToDB(id, vector, thumbnailBlob) { return new Promise((resolve, reject) { const request indexedDB.open(image-search-db, 1); request.onupgradeneeded () { const db request.result; if (!db.objectStoreNames.contains(features)) { db.createObjectStore(features, { keyPath: id }); } }; request.onsuccess () { const db request.result; const tx db.transaction(features, readwrite); tx.objectStore(features).put({ id: id, vec: vector, thumb: thumbnailBlob, createdAt: Date.now() }); tx.oncomplete () { resolve(); }; }; }); }要提醒一句IndexedDB 的結(jié)構(gòu)化克隆在保存Float32Array時是安全的但所有讀出來的Float32Array都是新的副本不會和內(nèi)存里的引用沖突這一點用起來很省心。如果你的項目圖庫超過十萬張1024 維 float32 的向量就是 400 多兆純前端暴力檢索的內(nèi)存壓力會非常大必須引入索引剪枝策略這個放到最后一節(jié)講。4.3 在線查詢一次完整的上傳檢索流程在線查詢的完整鏈路是用戶選擇圖片 -createImageBitmap讀取 -extractFeature抽特征 - 從 IndexedDB 讀取庫向量 - 逐個計算余弦相似度 - 排序取 TopK - 展示結(jié)果。檢索函數(shù)核心代碼async function searchByImage(imageSource, db, topK 10) { const queryVec await extractFeature(imageSource); const allFeatures await loadAllFeatures(db); const results []; for (const item of allFeatures) { const score cosineSimilarity(queryVec, item.vec); if (Number.isFinite(score)) { results.push({ id: item.id, score, thumb: item.thumb }); } } results.sort((a, b) b.score - a.score); return results.slice(0, topK); }細節(jié)上有一個性能優(yōu)化點查詢向量在循環(huán)外只歸一化一次庫向量在入庫時也已經(jīng)歸一化所以內(nèi)循環(huán)就是純乘加運算。對于一萬張圖就是一萬次 1024 維的內(nèi)積主線程上大概 10 到 20 毫秒體驗完全能接受。如果查詢過程中發(fā)現(xiàn)結(jié)果明顯不對先別急著改模型檢查一下查詢向量和庫向量是不是都做了歸一化這是我踩過最多的坑。5. WebGPU 推理的坑我替你踩了一遍5.1 打開頁面發(fā)現(xiàn) navigator.gpu 是 undefined這是最常見的兼容性問題。用戶瀏覽器版本太老或者頁面不在 HTTPS/localhost 環(huán)境下都會導致 WebGPU API 不可用。我的處理方式是在應(yīng)用入口做雙保險先檢查navigator.gpu不可用時給出提示同時給用戶一個回退按鈕用 CPU 執(zhí)行器跑同一個模型。const useWebGPU gpu in navigator; const executionProviders useWebGPU ? [webgpu] : [cpu];不過要把預(yù)期管理好CPU 后端跑 MobileNet一次推理大概在 200 到 400 毫秒小圖庫勉強能接受大圖庫就差很多。項目上線前一定提前確認目標用戶群用的瀏覽器版本不要指望所有用戶都有最新版 Chrome。5.2 首次推理慢得像假死預(yù)熱能解決多少WebGPU 的“首次運行慢”是新手遇到最多的現(xiàn)象明明同一個模型第二次跑快得很第一次卻可能要等好幾秒。原因是 WebGPU 后端需要把計算管線編譯成 GPU 指令這個編譯過程在第一次用一組算子形狀時觸發(fā)。方案就是預(yù)熱。session 創(chuàng)建完成后立即用一張和真實輸入尺寸完全一樣的假圖跑一次推理。這里強調(diào)“尺寸完全一樣”因為 WebGPU 管線編譯是按輸入形狀緩存的你用 224x224 預(yù)熱之后如果突然來一張別的尺寸輸入會再次觸發(fā)編譯。因此我在項目里把所有輸入都固定 resize 到 224x224避免形狀變化。預(yù)熱還有一個副作用就是能把 wasm 實例跑熱后續(xù)的線程調(diào)度也會更穩(wěn)定。5.3 WebGPU 結(jié)果和 CPU 推理不一致心里慌不慌這個現(xiàn)象我遇到的時候也慌了一下。同一張圖CPU 推理出來 Top1 結(jié)果和 WebGPU 推理出來有一點偏差尤其是在 FP16 支持不完整的顯卡上。原因在于 WebGPU 后端為了性能在部分 GPU 算子上會使用半精度浮點計算而 CPU 后端通常用全精度 float32。MobileNet 這類模型對浮點精度誤差有一定容忍度最終特征向量的歸一化數(shù)值不會差很多但如果你在兩個后端上對比精確值會有細微差異。處理方式要分場景。如果是檢索排序微小的特征數(shù)值波動一般不影響 TopK 結(jié)果不用過度擔心。如果你在做嚴格的精度對比實驗可以在創(chuàng)建 session 時把 WebGPU 后端的浮點精度設(shè)置調(diào)整一下。具體參數(shù)在不同版本里命名不一樣建議查 onnxruntime-web 官方文檔。我在項目里用的策略是用搜索結(jié)果的相似度閾值來判斷是否可信低于閾值的查詢直接提示用戶“可能沒有相似圖片”而不是讓用戶盯著一個不靠譜的 Top1 猜來猜去。5.4 跨域與 WASM 加載報錯最容易讓人連夜排查onnxruntime-web 是 WASM 程序要跑多線程還需要 SharedArrayBuffer。瀏覽器對 SharedArrayBuffer 有嚴格限制要求頁面處于跨域隔離狀態(tài)也就是必須帶上Cross-Origin-Opener-Policy: same-origin和Cross-Origin-Embedder-Policy: require-corp這兩個響應(yīng)頭。如果你的頁面部署在普通靜態(tài)服務(wù)器上沒配置這兩個頭控制臺會報一堆跟 WASM 相關(guān)的錯誤最常見的是 “SharedArrayBuffer is not defined” 或者 wasm 加載失敗。很多人會誤以為是模型文件路徑寫錯了其實問題出在響應(yīng)頭。解決方法是讓靜態(tài)服務(wù)器加上響應(yīng)頭同時給模型文件、wasm 文件等所有跨域資源加上Cross-Origin-Resource-Policy: cross-origin。如果你用的是 Nginx配置大概是這樣add_header Cross-Origin-Opener-Policy same-origin always; add_header Cross-Origin-Embedder-Policy require-corp always; add_header Cross-Origin-Resource-Policy cross-origin always;如果模型文件和頁面在同域也要確保模型文件響應(yīng)里帶上 CORP 頭。這個坑很容易出現(xiàn)在“本地開發(fā)好好的一部署到線上就崩”的場景里排查順序應(yīng)該是先看控制臺報錯再檢查響應(yīng)頭最后才懷疑模型文件。5.5 內(nèi)存問題session 重復(fù)創(chuàng)建和 canvas 泄漏瀏覽器端跑推理內(nèi)存泄漏通常不是 GPU 顯存問題而是 JavaScript 堆內(nèi)存被悄悄吃掉。最容易踩的一個坑是每查詢一次就調(diào)用一次InferenceSession.create。創(chuàng)建 session 要加載模型、實例化 wasm、初始化 WebGPU 管線這些對象在多次創(chuàng)建后如果沒有被正確釋放堆內(nèi)存會持續(xù)上漲。我一開始為了“保險”每個查詢都新建 session結(jié)果瀏覽器內(nèi)存從 100 多兆一路漲到 800 多兆頁面開始卡頓。后來改成全局單例 session問題直接消失。另一個坑是 canvas 對象。每次預(yù)處理都創(chuàng)建新的 canvas 并保留在局部變量里沒問題但要避免把 canvas 存在全局數(shù)組或者事件回調(diào)里。用ImageBitmap讀取圖片后要記得調(diào)用close()釋放底層資源尤其是在批量入庫幾百張圖時不釋放的話內(nèi)存漲得飛快。6. 工程化優(yōu)化從能跑到跑得穩(wěn)6.1 會話復(fù)用、預(yù)熱與內(nèi)存回收的落地工程化第一步就是把基礎(chǔ)的資源管理做好。session 全局唯一啟動時創(chuàng)建進程級復(fù)用。預(yù)熱跑一次假推理。索引查詢時給Float32Array用完后及時置空引用讓 GC 可以回收。這里給一個我在項目里用的初始化流程順序很重要checkWebGPU()檢查環(huán)境。創(chuàng)建 session指定executionProviders。執(zhí)行預(yù)熱推理捕獲異常如果 WebGPU 失敗則回退 CPU。從 IndexedDB 加載圖庫特征構(gòu)建內(nèi)存索引。注冊文件上傳、拖拽等事件。初始化是異步過程要給用戶一個 loading 狀態(tài)。瀏覽器端 AI 應(yīng)用最常見的體驗問題就是“沒有任何反饋地白屏幾秒鐘”用戶以為頁面壞了。我習慣在首屏渲染一個進度條至少告訴用戶模型正在加載。6.2 別讓主線程卡死Web Worker 與多請求并行推理和向量檢索都是 CPU/GPU 密集任務(wù)放在主線程會阻塞頁面交互。工程化方案是 Web Worker。在 Worker 里創(chuàng)建 onnxruntime session主線程通過postMessage傳ImageBitmap給 WorkerWorker 完成推理后把特征向量傳回來。ImageBitmap在結(jié)構(gòu)化克隆時是零拷貝的性能影響很小而且 Worker 里跑推理不會卡住頁面。多請求并行的實現(xiàn)要特別注意WebGPU 并不適合無限并發(fā)。GPU 的計算隊列本身是串行調(diào)度的同時發(fā)起幾十個session.run只會增加線程切換開銷并不會加快總吞吐。我的做法是在 Worker 內(nèi)維護一個任務(wù)隊列同一時間最多執(zhí)行一個推理任務(wù)。如果收到多個查詢請求按順序排隊處理。const taskQueue []; let running false; self.onmessage async (event) { taskQueue.push(event.data); if (!running) await processQueue(); }; async function processQueue() { running true; while (taskQueue.length 0) { const task taskQueue.shift(); const imageBitmap task.imageBitmap; const vec await extractFeature(imageBitmap); self.postMessage({ id: task.id, vec: Array.from(vec) }); } running false; }注意postMessage傳Float32Array也是結(jié)構(gòu)化克隆如果向量很大可以改用transferable轉(zhuǎn)移緩沖區(qū)所有權(quán)避免拷貝開銷。但轉(zhuǎn)移之后原數(shù)組就不能用了要確保 Worker 側(cè)不再持有引用。6.3 大圖庫檢索暴力枚舉不是終點純暴力枚舉在幾千張圖的時候表現(xiàn)不錯但圖庫到了十萬張數(shù)量級每查詢一次就要計算十萬次 1024 維內(nèi)積主線程就撐不住了。優(yōu)化思路是聚類剪枝。離線入庫時用 K-Means 把全部特征聚成 K 個類存下每個類的中心向量。在線查詢時先用查詢向量和 K 個中心計算相似度選出最相近的幾個類再只對這幾個類里的特征做精確比對。K 的取值我一般取 64 到 256取決于圖庫總量和目標延遲。這個方案在純前端實現(xiàn)起來不復(fù)雜效果卻非常明顯十萬張圖可以剪到只比對幾千張查詢時間從幾百毫秒降到幾十毫秒。如果向量維度可以降也可以降維。MobileNet 的瓶頸層特征本身有很強的信息冗余我在另一個項目里用 PCA 把 1024 維降到 256 維檢索 Top10 的召回率只下降了 2% 左右但內(nèi)存和計算量直接縮小到原來的四分之一。這個方向?qū)η岸藞鼍昂軐嵱谩?.4 更多落地場景相冊去重、商品同款、素材管理這套方案能做的事不止“以圖搜圖”一個場景。做相冊應(yīng)用時可以批量抽取相冊圖片特征然后做去重和相似聚類用戶不用手動整理幾千張照片。做電商場景時用戶拍一張商品圖瀏覽器直接在本地的商品庫里找同款不上傳圖片購物流程更順暢。做素材管理系統(tǒng)時設(shè)計師上傳一張參考圖本地檢索相似素材響應(yīng)速度遠超云端方案。如果你往里再疊加一個人臉檢測模型做區(qū)域裁剪檢索精度還能進一步提升。我的經(jīng)驗是MobileNet 提取的是全局特征對整圖的配色、構(gòu)圖、物體布局比較敏感但沒法做到精細的局部匹配。遇到這類需求可以在 MobileNet 之前接一個檢測模型或者換用多尺度特征融合的方案別指望一個全局特征解決所有問題。這個工程的延展性其實很好。模型文件可以換后端執(zhí)行器可以切索引策略可以升級但整體的“瀏覽器端特征抽取 本地向量檢索”架構(gòu)是穩(wěn)定可復(fù)用的。只要把extractFeature這個函數(shù)的輸入輸出協(xié)議定好后面換成任何其他特征提取模型業(yè)務(wù)代碼都不用改。這也是我在實際項目中比較受益的一個設(shè)計決策。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
毛片99-全集电影手机免费观看完整-B029AV| 男人天堂综合| 国产乱不卡| 特色a在线上| 亚洲无吗在线视频| 久草综合京东| 91热色| 亚洲在线91| 日本一区视频在线观看| 亚洲av在线免费观看| 人妻丝袜肏逼| 人人操人人干xxx| 欧美综合区| 有码免费观看| 久久尹人大香焦视| 亚洲欧美国产成人综合不卡| 牛牛久久国产精品视频一二三| 久久久精品中文字幕爱豆| 亚洲无线码一区国产欧美国| 成人天天看站长推荐| 凹凸 69堂 在线播放| 亚洲精品久久久久毛片A片拉屎 | 精品黄色电影| 国产专区第一页| 高清国产成人无码| 麻豆国产视频精品观看| 亚洲中文字幕三级在线| 岛国精品视频在线观看| 婷婷五月天AV| 日本国产二线女色| 日韩中文字幕精品一区在线| 超碰久久中文| www.91视频网| 中文字幕中文字幕一区二区| 日日干夜夜操视频h| 91中文字幕在线观看| 大学生口爆吞精| 五月天婷婷影院| 91美女国产在线| 亚洲精品白浆高清久久久久久| 欧美一级三级| 日韩干B| 久久久久亚洲三级电影| 欧美性猛交美女自慰91| 久午视频| 国产无码一二三区| 精品小视频在线| 96精品久久久久久久久久| 五月天大香蕉| 黄站在线免费观看| 亚洲色图亚洲无码强奸乱伦| 97资源站久久| 精品国产人成在线| 欧美日韩精品久久| 久久久精品电影| 日韩丝袜人妻AV| 色爱亚洲| 亚洲性爱高潮影院| 欧美 亚洲| www久久久| 麻豆天美在线喷水AV| 九月激情婷婷| m欧洲一级午老| 九九九九九九九九九国产精品 | 国产熟女免费观看久久| 激情五月丁香五月| 清清一区二区三区四区不卡视频| 欧美日韩人妻精品一区二区三区| 三四中文字幕| 亚洲国产成人精品999| 欧美性爱在线无码| 免费AV播放| 97精品视频在线播放| 一区二区不卡视| 日韩大香蕉AV影片| 久久精品国产精品亚洲艾通辽熟妇 | 亚州色阁| 欧美日韩性爱无码| 精品视频免费在线一区| 国产女大学生AV| 国产v片在线免费观看| 欧美刺激色黄片免费看| 爱媛媛久久国产福利| 男人天堂网址| 亚洲导航深夜福利| 777奇米影视777四色| 日本大片日本一区二区免费高清| 麻豆天美传媒在线视频天堂| 91熟女视频网| 蜜乳视频网站| 天天躁日日躁AAAAXXXX国产| 黄色性爱网网| 亚洲天堂第一页| 亚洲狠狠入| 久久av无码| 日本在线不卡一二区| 91色黑人少妇| 超碰是碰在线观看| 久久超碰97| 日本五十路熟女一区二区| 后X久久| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 特色a在线上| 嗯嗯啊啊好疼| 欧美日韩精品久久久久东北老熟妇| 国产91 丝袜在线播放00-百度| 亚洲小电影免费涩涩成人在线高清 | 99久久99久久免费精品蜜臀| 99久久婷婷丁香| 日本在线不卡123| 亚欧美色图| 在线无码网站| 日本蜜桃| 中文字幕黄片在线| 日本天天人人狠狠在线日美女| 国产不卡的视频 | 99热官网| 夜夜操中文字幕| 欧美日本成人一区二区| 99re视频在线观看这里只有精品| 国产超碰欧美| 国产亚州高清国产拍精| 久久超碰大香蕉| 欧美爱三级日韩久久| 男人的天堂啪啪| 综合网久久| 亚州高清AV| 日本肏逼视频在线观看| 怡红院亚洲怡春院av| 日本爽爽爽爽爽爽免费视频| 又黑又大又粗| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 大香蕉综合网| 人妻天堂综合网| 久久黄人人爽视频| 激情五月婷| 欧美综合色,www| 婷婷伊人綜合中文字幕小说| 玖玖无码超碰| 91动漫操逼视频| 天美传媒精品一区二区三区| 亞洲久久直播| 精品人妻一区春色| 欧美黑人精品一区二区| 色与欲影视天天看综合网| 日本一级性爱| 久久久久久十| 高清不卡视频| 国产又黄又爽又刺激久久久久久| 婷婷综合视频| 亚洲自拍97| 亚洲色堂免费视频| 亚洲欧美日韩制服另类| 欧美亚洲AN| AV不卡在线| 999综合色| 操逼逼无码| 99re在线视频国产| 日韩欧美视频青青| 亚洲欧美另类激情小说| 四虎免费看黄| 亚洲欧美中文日韩视频中国语 | 亚洲s在线观看| 老熟女91视频| 超碰99在线| 国产欧美岛国精品一区| 少妇99| 日本三级韩三级99久久| 超碰精品人妻狠狠干| 呦呦一区| 成人日韩中文字幕| 欧美网站免费| 中文AV制服乱伦| 欧美三级一级| 伊人久久综合精品欧美| 鸥美中出| 97精品国产精品免费观看| 欧美日韩性爱视屏免费看了| 亚洲精品九九九| 中美日韩毛片| 五月婷婷激情综合| 三男一女不戴套的A片| 国产成人精品午夜福利| 混色激情av| 天天搞在线综合网| 大香蕉伊人75| 久热久操| 97视频网站在线观看| 日韩人成网站在线播放| 亚洲91在线| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 色悠久久久av| 激情丁香婷婷| 日韩性爱再线视频| 女同女同恋久久级三级| 亚州大图综合色图 | 久综合国内精品自在自线| 亚洲Av诱惑| 久久久久国产| 国产一区二区三区,在线观看观看| 中文字幕亚洲在线一区| 久久国内| AV污污污污| 在线亚洲 欧美 日本专区| 狠日欧美| 亚洲欧洲激情| www.91欧美| 狠狠爱夜夜干| 亚洲欧洲综合| 久艹视频在线| 在线国产福利网址导航| 欧美性天天| 色天堂在线观看| 天天综合有色网| 99在线精品视频| 欧美亚洲国产日本在线,久久精品国产| 亚洲天堂男人在线| 五月香婷婷| 欧美一区二区三区另类精品| 久久精品久久久久久久| 亚洲欧美黄| 天天爱天天操| 中国人高清www色视频免费| 黑人性欧美| 国产免费一区| 九九热精彩视频| 豆1无夜无码| 中文乱码99| 91电影色诱| 中文字幕少妇色| 亚洲国产剧情少妇激情| 日本97久久久精品| 大香蕉色欲AV| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 综合亚洲欧美| 东京热大香蕉| 9丨久久九九九| 麻豆熟妇乱妇熟色A片在线看| 日产精品久久久一区二区| 久久久青青草| 男人的天堂1024| 久久超碰网| 亚洲欧美一区二区网址| 黑人白女精品一区| 亚洲av影院在线观看| 人人操人人狠狠操| 国产伊人自拍| 日日夜夜模| 97精品视频在线| 亚洲熟妇A V黑人| 日本一道在线播放高清| 日本天天操| 国模精品一区二区三区苹果色戒| 东京热激情视频一二三区| 天天干,天天日| 色呦呦、国产精品| 天天干天天日天天射黄色片| 蜜桃臀一区二区aV| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 淫色网综合| 夜夜骑天天燥| 在线二区不卡| 黑人白女精品一区| 国模精品娜娜一二三区| 大香樵伊人网| m欧洲一级午老| 风月影院男女十八禁| 另类欧美| 亚洲无码超碰免费| 性爱av网站| 日本福利二区视频| 中文字幕乱碼在线| 九九九九热只有精品| 日产欧美电影一区二区三区| 伊人久久艹| 色一射色一射| 97视频一区| 亚洲啪啪视频免费| 久久久国产亚洲精品系列| av优播| 干婷婷综合网| 人人色97| 性欧美999| 殴美在线AⅤ| 亚洲91综合| 日韩成人电影AV| 国产91 丝袜在线播放00-百度| 黄色成年| 欧美夜色| 亚洲日韩少妇一道本视频| 极品久久久久久久久久久久久久| 欧美综合色综合| 色妺妺AⅤ| 91被操| 亚洲成人美女无吗| 96AV精品| 天天综合麻豆视频| 日韩成年人性爱视频| 视频黄色国产一级| 色五月首页| 欧州激情视频在线一区二区| 欧美色吧综合| 欧美人黑A片无码免视费| 欧美性爱精品七区| 婷婷中文网| 午夜免费视频1000| 色香伊人| 无遮挡一级毛片视频免费的| 99这里只有精品| 黄久在线| 白丝被操91| 国产成人精品亚洲日本| 国产乱码精品久久久久久| 一二视频神马久久传媒| 精品对白久久不卡| 影音先锋少妇| 日韩中文字幕视频在线观看| 欧美日本天堂| 日韩性爱啪啪视频| 国产后入精品| 深夜激情| 美女国产一区二区久久| 1204金沙人妻懂旧版免费| 亚州性色| 欧美日韩操逼嗦吊| 歐美一級亂黃99在綫精品| 久久久久久中文| 日韩操逼HD| 嗯啊啊啊轻点视频| 中出欧美| 天天影视网综合少妇| 日韩无码服务区| 肉嘟嘟www视频在线观看高清| 夜夜狼人妻| 亚洲欧美色图片| 久久五月丁香| 亚洲做性| 精品性爱一二三区| 91在线/欧洲| 国产精品久久久无码AV网站| 日韩淫色网| 国产成人免费观看在线视频| 日日干夜夜骑| 日本女优在线视频福利| 欧亚乱色熟一区二区三四区| 久久只有精品| 不卡人妻少妇精品毛片一区23区视频| 亚洲高潮影院| 五月天综合在线| 91白嫩| 天天操夜夜操| 国产一级高清免费观看| 日韩精品三区四区| 精品人妻中文字幕高清| 91在线美女| 丁香色狠狠色综合久久小说| 麻豆国产av网| 国产精品爆乳懂色蜜乳| 天天日天天射天天干| 国内偷自视频区视频综合| 欧美亚洲AN| 国产精品成人无码av无码免费| 校园春色家庭伦理欧美激情| 伊人网综合在线视频| 激情久久日韩精品中文字幕麻豆| 国产日韩在线播放| 欧美春色| 欧美最婬乱婬爆婬性视频 | 日韩丨制服丨中文|在线| 激情五月天插| 日韩97在线| 婷婷五月天丁香| 97视频在线看| 熟女一区二区三区| 日韩一性一交一A片俄罗斯| 9精品在线| 伊人久久大香大香线蕉中文| 色网色网色网色网色网色| 日韩欧美丝袜诱惑| 久久婷色| 五月亭亭六月丁香| 牛牛久久国产精品视频一二三| 国产精品自拍xxxx| 中文乱码字幕观看视频| 天天干天天干天天干| 一起草三级AV电影在线观看 | 男人的天堂久久狠| 国产一区二区三区中文字幕| 大香网站| 97干97色| 操老熟女AV| 97WW精品| 被体育老师抱着c到高潮| 中文字幕99999| 九七毛片九九毛片| 夜夜高潮夜夜爽高清视频一| 91丨九色丨国产打屁股| 一区二区三区免费岛国片| 丁香七月婷婷| 加勒比海人人操超碰在线| 天天射网| 日本福利二区视频| 国产精品嫩草久久久久| 91bbb| 91无摭挡| 好屌色综合| 国产女人高潮视频| 色综合色色| 强奸国产在线| 一级性爱视频免费在线| 美女骚尻视频| 啊啊啊97视频| 性欧美体内射精| 看日韩美女二区三区免费操逼视频| 影音先锋乱| 国产成年精品高清在线观看91| 97欧美| 欧美色图20P| 60秒免费小视频| 精品超碰中文在线| 婷婷操逼| 久久久久婷婷| 国产精品视频精品一二| 91性高潮久久久久久久久| 综合影视国产无码| 亚洲二区精品在线观看 | 人妻 欧美 中文| 神马福利久草| 欧美久久婷| 精品网站9999| 嗯啊不要啊啊在线观看视频| 日韩紧密久久| 午夜天堂精品久久| 99色婷婷中文字幕乱色| 天堂精品小草| 噜噜噜亚洲精品| 97超碰逼| 国产丰满熟夫69mpp| 亚州综合电影| 亚洲素人网| 老鸭窝日丰县女人| 激情情色五月天| 97操B| 国产97色在线| 亚洲天堂2020| 伊人天天久久动态图| 国产精品福利资源在线尤物| 最新av中文字幕高清| 国产品精品自在在线午夜免费| 张柏芝国产一区在线观看| 久久久久久网址| 一区二区三区亚洲| 亚洲AV成人无码一区二区三区在线观看 | 日逼视频日本| 婷婷99狠狠躁天天躁| 91亚洲人电影| 亚洲另类色图片| 热热色色综合| 四季av一区二区凹凸精品小说| 九九九九九九精品| 日韩欧美亚欧在线视频| 日韩中文字幕精品一区在线| 欧美1区二区三区公司| 人妻99p| 激情小说五月天| 99re不伦| 少妇色欲综合网2| 搡老女人老91妇女老熟女| 日本免费一级AAA大片器| 秋霞免费AV| 久热久一区二区三区| 好看的91视频| 舔人妻中文免费视频| 欧美性暴力| 久久综合国产精品国产| 久久精彩视频| 超碰97欧美日韩| 91爱| 国产日韩精品人妻久久久久色欲网站| 极品白嫩美女白浆成人福利在线看| 乱精品一区字幕二区| 人人妻人人色| 精品久| 欧美熟女操屄| 久热久操| 婷婷色综合欧美日韩| 9丨亚洲一区二区在线| 天天爽天天干| 免看60秒涩涩视频| 亚洲精品乱码线路中文字幕| 天美av在线观看| 亚洲中文sv| 盗摄女人妻在线| 久久久久久大| 久久久久少妇| 920日本午夜免费| 色99久草| 激情久久av一区av二区av| 亚洲综合图片在线| 无码一区二区精品视频久久久春药| 竹菊影视国产一区二区| 日日橹狠狠爱欧美超碰| 免费AV中文网在线观看| 久久婷婷五月天| 亚洲男人的天堂AV| 2018天天日天天日| 人妻出轨一区二区三区| 一本色道无码DVD中文字幕| 五月天婷婷欧美三区| 快播电影网日韩新片| 美国日韩黄色片| 伊人亚洲综合| 中日韩欧美精品无码AⅤ一区二区| 自拍欧美| 国内亚洲高清无码| 91久久久久久久久久久| 亚洲日本大香蕉1| 探花熟女,姿勢到位,體驗感也到位| 97在线观视频免费观看| 黑人嘿嘿嘿超爽免费视频| 操B久久| 人妻一区二区三区视频| 久久99手机免费视频| 国产黄色视频久久| 欧美国产一区二区三区麻豆传媒| 特色a在线上| 性爱久久| 青草精品视频-日本久久久久网站| 淮穴色AV| 青娱乐淫乱1314| 亚洲熟女综合| 18禁免费视频| 中文字幕AV片| 一区二区三区机械有限公司| 先锋女优在线观看视频| 中文字幕视频2区| 91人妻做a观看视频| 激情五月天校园春色网| 日韩性爱再线视频| 91宗合网| 91+欧美| 久草视频在线视频在线视频在线观看| 日日玩天天干| 少妇99成人麻豆| 八戒午夜福利理论片| 亚洲国内精品成人不卡| 午夜男女爽爽爽在线视频| 国产老女人久久毛| 亚洲欧美精品久| www狠狠| 91无码西班牙视频在线| 青青操在线亚洲视频观看欧美在线 | 久久婷婷热| 久久久人妻| 青青草吊丝| 日韩中文字幕在线视频观看| 啪啪自拍九九综合| 人妻 制服 日韩 中文 在线| 亚洲欧美中文日韩视频中国语| 欧美日韩狠狠爱| 青青操少妇| 亚洲二区精品在线观看| 久草午夜| 90后后入| 丰满精品人妻少妇久久字幕| A久久| 九月丁香婷婷色| 屁股久久久久久| 国产精品3| 91逼逼女人91| 狠狠爱综合| 免费?级毛片无码?∨蜜芽试看| 国产嫩草精品A88AV| 欧美性爱视频免费一区一A| 黄色免费网| 亚洲黄色AV电影| 日本黄色天堂| 秋霞男人网| 国产一区二区av综合| 日韩免费簧片| 国产一级内射高清视频| 中文字幕AV中出| 久久久成人免费av电影| 老鸭窝黄色视频网站| 熟女日韩| 色五月激情网| 一区二区三区激情在线观看| 人妻另类 专区 欧美 制服| 欧美亚州综合网图片| 大香蕉青青9| 亚洲成人一二三区| 日本天天人人狠狠在线日美女| 99精品网| 99在线精品视频| 亚洲各类熟们中文字幕| 成年人一级黄色毛片大全在线观看| 国产精品嫩草影院午夜两性| 国产精品不卡高清在线观看| 欧美激情激情xxxx欧美专区| 高清国产精品福利网站| 日韩紧密久久| 蜜臀va69| 男人天堂婷婷五月天校园春色| 波多野42部无码喷潮在线观看| 91高清日| 色综合久久夜色精品国产天堂| 91欧美高清| 韩国黄色片精品久久久| 高跟丝袜AV专区国产| 日产欧美电影一区二区三区| 亚洲欧美碰碰| 青青草女人天天干| 国产精品久久久久久久免牛肉蒲团| 大香蕉伊人在线成人AV在线观看| 91丝袜美女| 欧美日韩理论一区| 熟女自慰久久久| 欧美久久久15P| 美女高潮视频91| 东北黄色电影| 欧美熟妇乱码在线一区| 久久久久中出| 欧美精品双插| 天天草AV| chaopen97久久| 久久有码视频| 狠狠躁伊人中文字幕| 免费视频一二三区| 午夜亚洲WWW湿好大| 日韩精品在线放| 三级AV入口| 日韩美女操b| 亚洲欧美日韩夜夜| 丁香六月婷婷久久综合| 91丝袜美女| 超碰97首页| 天干天干天干天天做| 精品一区二区三区丰满熟女-亚洲欧美一区| 午夜αv| 人妻一区二区三区四区视频| 久久精品人人做人人看| 十八岁啪啪视频免费看| www.婷婷| 欧美亚洲美少妇一区二区| 大香交| 97日韩欧美| 八戒午夜福利理论片| 亚洲国产欧美中文永久| 打av高清| 亚洲人精品久久久| 日韩av无码网站| 强奸乱伦亚洲第一页| 99无码视频| 自拍欧美| 97久久久久| 国产精品成人无码a v毛片| 99精品热| 午夜无码熟妇丰满人妻| 亚洲人妻久久| 亚洲午夜福利在线影院| 久久色人体 | 国产乱不卡| 欧美不卡五十路| 欧美丰满熟妇XXXX性ppX人交| 亚州乱码中文字幕综合久久久| 午夜视频久久久| 性爱乱伦视频免费| 亚洲成人av色网| 性色高清..……| 日韩人妻一二三区视频| 韩日男人的天堂| 中文字幕第7页| 福利在线观看一区二区| 97在线欧洲| 日韩大香蕉| 激情专区综合| 久久久久久裸体| 黄色电影在线播放综合网站 | 久久99久久99久久99人受| 十八禁电影伊人网| 思思在线免费视频| 久久噜| 最新av网站在线观看| 亚洲中文制服诱惑| 日本影视久久免费| 97 亚洲 日韩 欧美 在线| 亚洲91色| 野狼激情网| 丁香九月婷婷| 中文有码第五页| 日本精品五区| 色 婷97| 香港澳门日本三级网站| 最新亚洲风情电影| 999亚洲国产视频| 国产女主播视频在线观看| 国产野战露脸在线播放| 欧美亚洲厕所精品偷拍91| 欧美一级A片不卡视频。| 天天超级碰碰碰| 国产熟女免费观看久久| 日本不卡中文| 韩国久久97| 欧美性爱精品七区| 久久久久久久久久久久黄色| 无码人妻精品一区二区中文| 欧美草草| 天天操天天射青青草| 淫荡熟女乱伦网| 大干人妻| 宅男91视频在线播放| 欧美一区二区三区另类精品| 欧美色图99| 久久久一区二区三区四曲免费听| 色欲Av人妻精品一区二| 啊啊啊啊啊啊啊在线| 狠狠穞A片一區二區三區| 久操视频在线观看| 欧美骚少妇| 99久久这里只有精品| 四虎影视永久在线免费| 国产乱子伦一区二区三区在线观看| 亚洲综合在线高清| 大香蕉520| 岛国片在线播放| 欧美97网| 啊啊啊啊在线观看网址| 六月丁香网| 啪啪AV导航| 翔田千里AV无码秘 三区| 亚洲欧美国产中文字幕| 亚洲精品色| 岛国艾薇凹凸视频天堂| V A在线| Julia Annxxxxx| 人妻插插人妻人| 激情综合97| 天天色播亚洲综合网站| 久艾草在线精品视频在线观看| 中文区中文字幕免费看| 97超碰中文字幕| 成人久久精品| 欧美午夜色妇色鬼| 蜜臀久久99精品久久久久久久久| 91精品丝袜在线观看| 密乳无码| 91东京热男人的天堂| 中文字幕国产在线天堂| 久久超碰com| 天美传媒精品久久视频| 精品二区三四区五电影| 亚洲。天堂。日本在线观看| 99精品高潮| 在线亚洲精品久久久| 麻豆AV一区二区| 熟妇女人妻呻吟久久AV| 人人喜人人妻| 蜜桃成人1区2区3区| 欧美大香蕉卡久久| 亚洲综合在线高清| 操b网站亚洲无码| 高树玛利亚无码流出| 久久的网站啊啊啊啊啊| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚 | 嗯嗯啊啊操死我| 图色综合网| 国产60区。| 麻豆 亚洲 97| AV色五月天| 亚洲自拍青操视频| 78精品| 中国AAAAAA黄色片| 天天日天天干天天色| 国产女人和拘做爰视频 | 成人精品在线免费视频| 国产精品人妻无码久久久老鸭窝| 国产午夜精品理论片一二三区区| 日韩综合成人免费视频| 91操人| 丁香五月激情综合| 在线视频一区二区传媒| julia ann久久| 在线洲亚线| 成·人免费午夜在线观看| 日本高清视频xxxx| 91狼人| 久久秀这里有精品| 狠狠爱AV| 国产精品999aaa| 国产精品亚洲无码| 丁香五月天啪啪| 日本99一区二区| 久久9久久| 绯色一区二区三区不卡少妇| 在线观看色视频| 色噜噜综合在线| 91人妻久久久久久久久久久久久| 青青青青青手机视频| 韩国一级婬片A片无码天美| 99热在线播放| 日韩 欧美 国产 麻豆| 人妻色偷色噜| 五月丁香啪啪| 操逼999| 色逼综合| 国产精品熟女丝袜一区二区| 久艹伊人精品综合在线| 九九九不卡| 性久久| 熟妇视频一区二区三区在线观看| 风间由美日韩欧美久久| 成人性爱av.com| 性生活久久久久久久久久| 亚洲欧洲综合| 中国国国产一级特黄毛片| 日韩激情视频| 免费精品无码一级毛片牛牛影视| 国产一区二区三区影片| 强奸熟女一区二区三区| 国产中文字幕在线点播| 日本亚洲vr欧美不卡高清专区| 91中出在线| yellow网站免费观看日韩高清无码| 麻豆天美制片厂网站视频| 欧美91在线| 大稥蕉免费视频这里只有精品| 亚洲男人天堂网站| 五月天激情小说| 欧美淫乱视频| 丁香五月性| 国产综合久久久麻桃个| 熟妇在线视频一区二区| 丝袜综合网| 日产狠狠干| 久久97| 欧美激情 日韩精品| 强奸乱伦AV一天堂网| 美女91在线观看| 亚洲一区二区三区春色| 欧美在线啊啊啊 | 懂色av色欲av蜜臀av| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 91在线免费精品视频| 久久婷婷色综合一区二区三区| 999久久久| 少妇一区二区三区在线观看| 最新国内自拍av免费| 亚洲日韩欧美一区二区| 啪啪一区| 亚洲九九九九| 熟妇人妻一区二区三在线| 久久一区二区三区入口| 亚洲色欧| 嗯~啊~快点 死我视频| 91深夜夜| 欧美97免费| 欧美一区二区情色| 人人操人人摸人| 中文字幕蜜乳av| 五月开心久久AV官网| 婷婷色网| 日韩中文字幕精品一区在线| 极品出轨视频网站| 日本三级日本三级三级人妇四虎| 日韩欧美综合激情| 超碰97人妻| 丝袜天堂网| 久久9久9久99久9久9| 18禁美女裸体无遮挡啪啪| 好爽视频在线观看视频 | 加勒比av网| 97视频观看| 妺妺跟我一起洗澡没忍住| 日本操逼视频在线| 在线观看啊啊啊啊啊| 四季AV综合网址| 狠狠色丁香| 久久激情亚洲精品无码?V| 性夜影院爽黄A爽免费动漫| 美女骚尻视频| 人人噜夜夜操| 五月天丁香欧洲日韩| 人、人、摸,人、人、草| 八戒无码国产午夜福利| 日韩福利电影网| 高潮9999外国| 夜夜青青无码影院| 欧美亚洲日韩16色| 熟妇艹鸡八| 色女网日韩| 亚 欧 美 综合| **一级毛片国产| 日韩欧美国产高清视频| 十八岁啪啪视频免费看| 嫩草在线视频| www.亚洲黄色| 亚洲人成在线放东京热| 色与欲影视| 女优大全 - 91n| 久久伊人影院| 啊啊啊好想要| 91美女视频| 新亚洲无码| 精品蜜乳AV免费观看| 国产精品美女视频诱惑| 欧美色人| 51久久夜色精品国产麻豆| 亚洲成人性爱网站在线播放| 性爱网站一区二区| xxx0国产在线播放| 日韩中文字幕视频在线观看| 国产成人无码高清| 成片免费观看视频大全| 在线黄页看毛片| 日本不卡卡一区| 国产精品色哟哟| 2017大香蕉国产精品久久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 国产在线视频午夜精华在| 麻豆国产97在线| 一类无码操逼视频| 免费观看啪视频| 亚洲情色电影网| 大香蕉欧美伊| 国产和美国毛片| 国产精品一区二区三| 韩国免费播放一级毛片| 黄色视频60分钟| 久久久免费一级黄片| 欧美亚洲综合色| 九九成人精品| 日本布卡一区二三区| 亚洲不卡三级手机播放| 淫荡少妇免费| av天天在线观看| 亚洲综合九| 久一区久久蜜桃| 91三级理论片播放器| 色色色综合网| 九九九九精品一区| 操逼操逼操| 人人插人人搞人人操| 午夜啊啊啊| 神马久久免费电影观看| 在线观看无码三级少妇| 亚洲情色第一页| 久热99999| 99在线免费公开视频| 亚洲精品丝袜-不卡成人免费……| 最新av在线| 韩国免费播放一级毛片| 国产精品大香蕉| 久久精品夜色国产亚洲AV| 91丝袜美女视频| 欧美一区二区亚洲天堂| 九九九影院| 欧美黄色片在线播放| 午夜激情床戏激情| 91白虎| 麻豆这里只有精品| 智利AV在线网| www.91逼逼.com| 国产盗摄美女如厕大神作品在线观看| 亚洲有码视频二区| 九九久久精品| 欧美偷| 操逼逼无码| 久99在线免费观看视频| 人人爱人人操人人性| 亚洲色情在线影视| 久久五月天婷婷丁香中文字幕| 800zy一区二区| a片在线播放| 亚洲综合888| 日韩性爱啪啪视频| 天天欧美色| www.色吧5.com| 久操 高清| 亚洲国产ⅴ高清在线观看| 亚洲人妖网| 一个人免费视频观看在线WWW | 99九九久久| 国产精品一区av在线| 97精品97久久| 精品国产精品一区二区| 人人澡人人干| 精品久久久久9999| 操婢日韩| 人妻熟女一区二区| 亚洲AV成人无码久久精品播放| 国产精品一区二区密臀| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧美亚洲系列| 欧美激情欧美精品| 亚洲超碰AV| 超碰在线一区二区三区| 国产性爱欧美性爱在线 | 亚洲欧美日韩免费电影| 天天综合网亚洲综合网| 99re6久热只有精品6在线直播 | 久操视频在线| 大香蕉伊人亚洲| 乱伦AVxx| 中文字幕第2页| 成熟熟女国产精品一区二区| 秋霞视频一区二区| 日本羞羞的视频在线播放| 老鸭窝成人| 久久久精品日本一道| 约操熟妇| 操国产高清| 97操碰| 亚州 综合 色图| 天堂精品在线| 免费中文在线| 亚洲无码 国产无码| 青青久日| 欧洲精品久久| 日产中文字幕2020| 玖玖视频在线资源一区二区三区| 北约熟女超碰| 91P0RNY大屁股人妻| 久久久久久无码人妻中文字幕| 亚洲高清内射| 后X久久| 男人的天堂不卡一区二区| 日本国产高清色www视频在线| 自拍偷拍第26| 麻豆国产97在线| 97天天| 亚欧美综合网| 国产又大又粗又长视频| 少妇色综合| 日韩精品大香蕉伊人在线| 亚洲视频,小说| 麻豆人妻少妇在线免费观看| 亚洲美女精品| 伊人久久国产免费观看视频| 日韩在线AB| 久久久99久9| 久久极品一区二区| 91碰碰碰| 九九成人| 五月丁香六月激情综合| 91色久| 日韩成人精品中文字幕| 亚洲综合五月天| renqi久久久久久久久久久久| 92福利社视频| 国产精品老熟女一区二区| 久热69九色熟妇97| 久久精精区一区二区一蜜桃一区二区| 狠狠色综合网| 中文字幕91综合| 97免费视频网| 国产五码丝袜屁眼| 大香蕉琪琪日本女优不卡| 亚洲国产亚洲天堂| 亚洲欧美综合图片| 91综合在线| 综合五月婷婷亚洲一区| 中国女人内射6XXXXX| 欧美,日韩,亚洲视频| 可以看的av| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 樱花草社区www中国| 91爰爱欧美| 久久久免费视频18| 国产熟妇 码视频户外直播 | 欧姜老司机| 在线综合 亚洲 欧美中文字幕| 日韩激情中文字幕有码| 亚州精人品大香蕉| 欧美 综合 亚洲| 欧美色图第一页| 国产啊v在线免费播放| 狠狠操综合| 97超碰无码网| 青青操在线视频| 国产精品成人久久一区二区三区| 欧美日韩性爱视屏免费看了| 久悠悠av| 亚洲第一页色网| 小视频国产| 67914亚洲精品| 欧美综合 站| 一级性爱视频免费观看| 五月丁香社区婷婷日韩欧美精品影院 | 再深点灬舒服灬太大了好硬好爽| 色婷婷成人综合| 日本媚薬中文字幕在线| 黄色一区二区秘书性感| 91啪9色| 久久久日本电影| 女人高潮大叫一级毛片| 自拍亚洲综合| 一级性爱视频免费在线| 亚洲成av人片色午夜乱码| 男人天堂综合| 操逼视频国产无套| 9久超碰| 一二三区精品视频| 精品一二三区久久AAA片| 少妇色综合| 秋霞一级A片黄色视频| 亚洲情色1区| 神马九九| 九九久久一区二区三区| 啊啊啊啊啊啊啊啊视频| 六月婷婷综合| 麻豆精品.欧美精品.日韩精品.| 黄色av一区二区在线| 啪啪啪综合| 老外又粗又长一晚做五次| 久久久久日本视| 亚洲日韩电影| 国产青一二三| 午夜精品久久久| 精品人妻二区三区| 久久老女人| 欧美三级免费伊人| 无码 黑人一区二区三区| 性色av一区二区| 久久精品中文字幕无码l| 亚欧美综合网。| 操逼网站地址| 高清无码人妻久久久一区二区三区aⅴ| 午夜免费福利视频一区| 精品国产乱子伦一区二区三区,精品一| 婷婷大香蕉| 色姑娘综合网| 国产乱码精品久久久久久| 亚洲欧美综合区自拍另类 | 无码人妻丰满熟妇区毛片| 丁香九月激情| 试看60秒 爽| 密臀AV在线| 国产成人www免费人成看片| 国产精品久久久久久久久久久久久久吹| 久久一区无码| 可以在线观看AV的网站| 天堂性色| 色综合久久夜色精品国产天堂| 亚洲国产欧美中日韩成人综合视频| 中文字幕视频二区| 欧美日韩国产男人| 97最新在线播放视频| 精品久久久av无码免费| 亚洲少妇激情一区二区三区| 五月丁香综合| 色婷婷激一区二区三区 | 亚洲欧洲偷拍一区| 中文字幕人妻资源在线| 九九九只有精品| 欧美性爱一区二区三区四区| 偷窥自拍A片| 国产三级在线现体验区| 日本欧美不卡| 日韩欧美天天爽爽爽天天爽爽| 韩国久久97|