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

ARTICLE DETAIL

資訊詳情

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

QEMU+debootstrap:PC端搭建arm64仿真環(huán)境部署YOLOv5s全攻略

QEMU+debootstrap:PC端搭建arm64仿真環(huán)境部署YOLOv5s全攻略 1. 為什么先要在PC端搭一個(gè)仿真環(huán)境1.1 這套教程走到這一步到底在解決什么問題如果你已經(jīng)拿到了香橙派5這塊板子也看完了前面幾篇關(guān)于RK3588基礎(chǔ)環(huán)境和YOLOv5s模型結(jié)構(gòu)的文章大概率會(huì)迫不及待地想把模型跑到板子上。但我先潑一盆冷水真機(jī)部署YOLOv5s這件事卡點(diǎn)從來不在模型本身而在于環(huán)境。YOLOv5s這個(gè)模型結(jié)構(gòu)并不復(fù)雜PyTorch生態(tài)也成熟難的是arm64架構(gòu)下的Python環(huán)境、PyTorch庫、OpenCV、numpy這些依賴之間的兼容關(guān)系。稍有版本對(duì)不上就會(huì)出現(xiàn)import torch直接段錯(cuò)誤、cv2讀取圖片全部為空、模型權(quán)重加載到一半卡死之類的玄學(xué)問題。調(diào)試這些問題最痛苦的點(diǎn)在于香橙派5的串口調(diào)試和SSH連上去倒是方便但每次修改環(huán)境都要重新燒錄、重啟、裝包一次完整調(diào)試周期可能要二十分鐘以上。尤其是當(dāng)你需要反復(fù)測(cè)試YOLOv5s推理鏈路時(shí)這種低效率會(huì)消磨掉整個(gè)項(xiàng)目的熱情。所以這篇教程里的核心思路就八個(gè)字先仿真后上板。PC端模擬器仿真的本質(zhì)是在X86工作機(jī)上搭建一個(gè)完整的arm64運(yùn)行環(huán)境讓你在開發(fā)機(jī)上以接近原生的方式運(yùn)行arm64版本的Python、PyTorch以及YOLOv5s整套代碼。這樣你可以先把代碼邏輯、依賴版本、推理流程全部調(diào)通確認(rèn)沒有任何環(huán)境層面的問題之后再去香橙派5上做真實(shí)部署。因?yàn)槟M器和真機(jī)共享同一套arm64指令集環(huán)境所以只要你在這里跑通了上了真機(jī)大概率一次成功。這套方案適合誰呢我按使用場(chǎng)景分了三類。第一類是你剛剛接觸RK3588開發(fā)板對(duì)YOLOv5s的部署流程不熟想把整個(gè)技術(shù)棧在PC上先摸一遍避免反復(fù)折騰板子。第二類是你正在做YOLOv5s的代碼移植和功能驗(yàn)證比如要接攝像頭或者修改后處理邏輯適合在快速迭代的PC仿真環(huán)境里改代碼。第三類是你手上只有一塊香橙派5但舍不得把它當(dāng)作實(shí)驗(yàn)品來折騰想先確定方案可行再動(dòng)手。無論你是哪一類這篇教程的方法都能省下大量時(shí)間。1.2 模擬器仿真和交叉編譯是兩回事很多人會(huì)把交叉編譯和模擬器仿真搞混我先花一點(diǎn)篇幅把這兩個(gè)概念掰開。交叉編譯解決的問題是“編譯動(dòng)作和目標(biāo)執(zhí)行環(huán)境不一致”。也就是說你在X86的PC上編譯出一個(gè)arm64架構(gòu)的可執(zhí)行文件但你的X86機(jī)器此時(shí)運(yùn)行不了這個(gè)文件必須把這個(gè)文件拷到香橙派5上才能運(yùn)行。這種做法適用于編譯原生代碼工具鏈比如C/C程序但面對(duì)Python這種解釋型語言時(shí)就不太夠用了。為什么不夠用因?yàn)镻ython的運(yùn)行不僅需要解釋器還需要一大堆site-packages里的擴(kuò)展庫。PyTorch在arm64平臺(tái)上的whl輪子包體積動(dòng)輒幾百兆里面既有編譯好的.so動(dòng)態(tài)庫又有Python層代碼。你想在PC上把這些whl全部通過交叉編譯的方式逐個(gè)搞定工作量是災(zāi)難級(jí)的。退一步說就算你費(fèi)盡功夫全編譯出來了pkg版本之間的依賴關(guān)系在交叉編譯時(shí)也很難完全模擬出來。而模擬器仿真的思路完全不同。它是在X86宿主機(jī)上正兒八經(jīng)運(yùn)行一套arm64的根文件系統(tǒng)rootfs然后通過QEMU這個(gè)“翻譯層”把a(bǔ)rm64的機(jī)器指令翻譯成X86機(jī)器指令來執(zhí)行。在這個(gè)rootfs里你安裝的是arm64版本的Python解釋器、arm64版本的PyTorch、arm64版本的OpenCV它們互相配合相當(dāng)于一個(gè)完整的香橙派5系統(tǒng)跑在你的開發(fā)機(jī)里。對(duì)YOLOv5s這個(gè)模型來說這套環(huán)境里跑出來的推理行為和真機(jī)是一致的性能只是打了個(gè)折扣。所以我的結(jié)論很簡(jiǎn)單交叉編譯適合折騰單個(gè)小程序模擬器仿真適合折騰一整套Python深度學(xué)習(xí)環(huán)境。你要部署YOLOv5s走模擬器路線是性價(jià)比最高的。當(dāng)然這個(gè)方法也有代價(jià)就是運(yùn)行速度明顯低于真機(jī)這個(gè)我們通過模板編譯優(yōu)化可以部分彌補(bǔ)但整體性能仍然有限。后文我會(huì)專門分析這個(gè)磚頭。1.3 先想清楚性能預(yù)期別拿模擬器當(dāng)性能標(biāo)準(zhǔn)我見過不少朋友拿著模擬器環(huán)境跑YOLOv5s發(fā)現(xiàn)一幀圖片要跑十幾秒直接就下了“RK3588跑不動(dòng)目標(biāo)檢測(cè)”的結(jié)論。這是完全錯(cuò)誤的判斷方向。模擬器仿真的價(jià)值絕對(duì)不在于性能而在于功能驗(yàn)證和環(huán)境驗(yàn)證。QEMU的翻譯執(zhí)行天然有性能損耗數(shù)據(jù)通常會(huì)是真機(jī)的五到二十倍具體取決于你跑的是純計(jì)算還是帶大量內(nèi)存操作的代碼。在仿真環(huán)境里你真正應(yīng)該關(guān)心的是模型能正常加載嗎圖片前處理流程有沒有問題推理結(jié)果和真機(jī)預(yù)期一致嗎模型輸出框的位置和分類是否正確這些是可以用模擬器快速確認(rèn)的因?yàn)樗鼈冎灰蕾嘋PU計(jì)算邏輯的正確性不依賴速度。而推理耗時(shí)要控制在正式部署時(shí)再調(diào)整那才是RK3588的NPU和CPU協(xié)處理真正發(fā)揮價(jià)值的地方。這里我想額外強(qiáng)調(diào)一點(diǎn)模擬器跑出來的環(huán)境和你之后在香橙派5上搭建的環(huán)境兩者在Python版本、依賴庫版本、模型權(quán)重上必須保持一致。你要是模擬器里用Python 3.9到了真機(jī)上卻裝了Python 3.11那代碼能跑但可能會(huì)引入一些隱性的庫兼容問題排查起來非常痛苦。盡量用同一套rootfs或者至少鎖定同樣的版本這是仿真的核心原則。2. 仿真環(huán)境的搭建三個(gè)核心組件的逐一拆解2.1 交叉編譯器給arm64準(zhǔn)備一套C/C編譯環(huán)境雖然我們走了模擬器路線但交叉編譯器依然是整套方案的地基。原因很簡(jiǎn)單你在X86宿主機(jī)上編譯出來的Python、OpenCV等第三方庫雖然目標(biāo)平臺(tái)是arm64但編譯過程中需要調(diào)用交叉編譯器來生成最終的目標(biāo)機(jī)器代碼。沒有這個(gè)基礎(chǔ)組件后面每一步都得卡殼。推薦使用aarch64-linux-gnu-gcc這是Ubuntu和Debian系的交叉編譯工具鏈。安裝命令在一行之內(nèi)但版本選擇有講究。在香橙派5的生態(tài)里我通常建議使用Ubuntu 22.04 LTS上的gcc-aarch64-linux-gnu它的glibc版本和板子自帶的鏡像系統(tǒng)匹配度較高。如果你用的是Debian系宿主系統(tǒng)直接裝gcc-aarch64-linux-gnu也可以但要注意交叉編譯出來的二進(jìn)制在目標(biāo)機(jī)上的glibc版本依賴如果目標(biāo)機(jī)版本太舊有可能會(huì)報(bào)GLIBC_2.34 not found之類的錯(cuò)誤。為什么這塊這么重要因?yàn)镻ython在編譯時(shí)需要生成C擴(kuò)展模塊比如_ctypes、_hashlib、_ssl這些擴(kuò)展模塊最終都是.so動(dòng)態(tài)庫必須鏈接到正確的arm64系統(tǒng)庫上。如果交叉編譯工具鏈的sysroot路徑里的庫版本和目標(biāo)rootfs不一致你編譯出來的Python解釋器可能可以運(yùn)行但一些第三方包在import時(shí)就可能出現(xiàn)“undefined symbol”的詭異錯(cuò)誤。所以我的固定搭配是交叉編譯器gcc-aarch64-linux-gnu版本不低于10目標(biāo)rootfsDebian bullseye arm64glibc版本2.31編譯參數(shù)-marcharmv8-acrc確保兼容RK3588的Cortex-A76核心這套搭配我用了小半年沒出過大問題。如果你的PC是新的Intel或AMD平臺(tái)裝Ubuntu 22.04之后直接apt install gcc-aarch64-linux-gnu就能拿到全部組件。安裝完成后用aarch64-linux-gnu-gcc --version檢查一下輸出類似aarch64-linux-gnu-gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0就說明環(huán)境就緒。2.2 QEMU用戶態(tài)模擬器讓arm64程序在X86上跑起來QEMU是整個(gè)模擬器方案里最核心的執(zhí)行引擎。這里我使用的不是QEMU全系統(tǒng)模擬也就是不用模擬完整的主板和硬件而是用戶態(tài)模擬模式也就是qemu-aarch64-static。它的工作模式可以理解成一個(gè)“指令翻譯器”當(dāng)你的X86宿主機(jī)準(zhǔn)備執(zhí)行一個(gè)ELF格式為arm64的可執(zhí)行文件時(shí)內(nèi)核會(huì)通過binfmt_misc機(jī)制把這個(gè)文件交給qemu-aarch64-static來運(yùn)行后者逐條將arm64指令翻譯成X86指令來執(zhí)行。為什么要選用戶態(tài)模擬而不是全系統(tǒng)模擬這里有一個(gè)顯著的利弊權(quán)衡。全系統(tǒng)模擬需要加載香橙派5的完整內(nèi)核鏡像好處是可以連驅(qū)動(dòng)和硬件行為一起模擬壞處是速度慢到你懷疑人生——跑一次Debian的啟動(dòng)都要十分鐘以上更別提在里面跑PyTorch了。而用戶態(tài)模擬跳過了內(nèi)核層面的模擬只處理用戶程序的指令翻譯速度要好得多。對(duì)于跑純用戶態(tài)程序的YOLOv5s來說功能完全夠用。安裝上特別推薦使用靜態(tài)編譯版本的qemu-aarch64-static。apt install qemu-user-static裝出來的就是這個(gè)形態(tài)。為什么非要靜態(tài)版本因?yàn)槟M器本身運(yùn)行在宿主機(jī)上它需要依賴宿主機(jī)的glibc但如果在目標(biāo)rootfs環(huán)境中使用動(dòng)態(tài)鏈接的qemu它就會(huì)嘗試從目標(biāo)rootfs里尋找依賴庫很容易導(dǎo)致加載順序混亂崩潰。靜態(tài)版本通過file qemu-aarch64-static查看輸出應(yīng)該是statically linked字樣。binfmt_misc的注冊(cè)也很關(guān)鍵。apt install qemu-user-static的時(shí)候Debian系會(huì)自動(dòng)幫你注冊(cè)好arm64格式的binfmt記錄所以一般來說不需要手動(dòng)配置。但如果你換了別的Linux發(fā)行版可能需要手動(dòng)執(zhí)行一次注冊(cè)命令。Linux內(nèi)核里有一個(gè)“執(zhí)行格式處理器”機(jī)制讓系統(tǒng)遇到arm64的ELF文件時(shí)自動(dòng)調(diào)用模擬器這個(gè)機(jī)制被命名為binfmt_misc。我通常檢查是否注冊(cè)成功的方式很簡(jiǎn)單直接運(yùn)行一個(gè)arm64版本的busybox能正常輸出就是成功了。2.3 debootstrap根文件系統(tǒng)搭一個(gè)完整的arm64“小系統(tǒng)”交叉編譯器和QEMU只是工具真正的“虛擬香橙派”是根文件系統(tǒng)。我需要強(qiáng)調(diào)一下這里的rootfs并不是一個(gè)只能用來跑YOLOv5s的簡(jiǎn)易目錄而是一個(gè)完整的Debian bullseye arm64系統(tǒng)里面有/usr/bin、/lib、/etc這些標(biāo)準(zhǔn)目錄再加上Python運(yùn)行所需的共享庫。構(gòu)建方法是用debootstrap工具這個(gè)工具原本是為了快速建立Debian chroot環(huán)境而生的但它配合QEMU就能輕松構(gòu)建一個(gè)arm64的rootfs。命令大概是這樣sudo apt install debootstrap sudo mkdir -p /opt/op5-rootfs sudo debootstrap --archarm64 --foreign bullseye /opt/op5-rootfs http://deb.debian.org/debian這里有個(gè)關(guān)鍵細(xì)節(jié)--foreign參數(shù)意味著debootstrap只把第二階段所需的包解壓到rootfs但不在宿主機(jī)上直接執(zhí)行配置腳本。為什么要這樣因?yàn)閐ebootstrap第二階段的腳本需要在目標(biāo)架構(gòu)環(huán)境里運(yùn)行在X86宿主機(jī)上跑會(huì)直接報(bào)錯(cuò)。所以需要先chroot到rootfs里去執(zhí)行第二階段而chroot到arm64 rootfs時(shí)又依賴于QEMU用戶態(tài)模擬。第二階段的執(zhí)行流程是這樣sudo cp /usr/bin/qemu-aarch64-static /opt/op5-rootfs/usr/bin/ sudo chroot /opt/op5-rootfs /debootstrap/debootstrap --second-stage這個(gè)過程視網(wǎng)絡(luò)狀況而定一般在五分鐘到十分鐘。跑完之后/opt/op5-rootfs就是一個(gè)可以正常進(jìn)入的arm64最小系統(tǒng)了。以后每次需要“進(jìn)入”這個(gè)虛擬香橙派環(huán)境只需要sudo chroot /opt/op5-rootfs /bin/bash你在chroot環(huán)境里敲命令時(shí)感覺就像直接登錄了一塊香橙派5板子。不過這里要特別提醒chroot說白了只是切換了文件系統(tǒng)根目錄并沒有完整模擬香橙派5的硬件信息所以你在里面用cat /proc/cpuinfo看到的CPU信息還是宿主機(jī)的這不是問題不影響Python程序運(yùn)行。如果你追求希望通過模擬器看到真實(shí)板卡的/proc/cpuinfo輸出就需要換全系統(tǒng)模擬方案但那在性能上的代價(jià)不適合本項(xiàng)目。這時(shí)候整個(gè)仿真環(huán)境的三塊拼圖都齊了交叉編譯器負(fù)責(zé)編譯QEMU負(fù)責(zé)指令翻譯rootfs提供一個(gè)完整的arm64系統(tǒng)空間。接下來進(jìn)入實(shí)際的環(huán)境配置環(huán)節(jié)開始準(zhǔn)備能跑YOLOv5s的Python運(yùn)行環(huán)境。3. 實(shí)操全程從零到模擬器里跑出YOLOv5s檢測(cè)框3.1 第一步安裝宿主依賴并準(zhǔn)備目錄正式開始前先把宿主機(jī)的依賴補(bǔ)全。我是在一臺(tái)跑Ubuntu 22.04的臺(tái)式機(jī)上做的這套流程核心就是安裝前面提到的交叉編譯器和QEMUsudo apt update sudo apt install qemu-user-static binfmt-support debootstrap sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu這幾個(gè)包安裝完成后建議順手檢查一下binfmt注冊(cè)情況。因?yàn)槲抑坝龅竭^某些發(fā)行版安全策略限制/proc/sys/fs/binfmt_misc/register寫入權(quán)限不夠的情況表現(xiàn)為你運(yùn)行arm64二進(jìn)制時(shí)直接報(bào)Exec format error。這種情況下需要臨時(shí)提升權(quán)限sudo sysctl -w fs.binfmt_misc.status1然后確認(rèn)rootfs目錄存在按理說前面已經(jīng)做好了如果你跳過了上面的debootstrap步驟一定先回去做。我這里假設(shè)你已經(jīng)建好了/opt/op5-rootfs目錄并且第二階段執(zhí)行完成。準(zhǔn)備就緒后先進(jìn)入rootfs做一次最小化的系統(tǒng)更新避免后面裝包時(shí)庫里版本過舊sudo chroot /opt/op5-rootfs /bin/bash apt update apt install wget curl vim git build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev這條命令里的依賴全部是編譯Python時(shí)需要的系統(tǒng)庫關(guān)鍵就是libffi-dev和libssl-dev。記住我之前踩過的坑如果缺了libffi后面Python import ctypes會(huì)失敗整個(gè)深度學(xué)習(xí)框架都沒法加載。如果缺libssl安裝pip后連PyPI倉庫都連不上。3.2 第二步編譯arm64版Python 3.9這是大頭進(jìn)入rootfs之后我們開始編譯Python。為什么不用系統(tǒng)自帶Python版本主要原因是香橙派5上運(yùn)行的Ubuntu系統(tǒng)自帶的Python是3.10而YOLOv5官方代碼對(duì)Python 3.9的支持驗(yàn)證最充分很多第三方預(yù)編譯的PyTorch arm64 wheel也是對(duì)cp39優(yōu)化得最好。用系統(tǒng)自帶版本容易在后續(xù)裝包時(shí)碰到“該wheel不支持此Python版本”的提示所以我堅(jiān)持用3.9。編譯Python的過程和你在普通Linux上編譯沒有本質(zhì)區(qū)別但因?yàn)樗赒EMU模擬環(huán)境里跑速度會(huì)慢一些整個(gè)編譯過程大概得半小時(shí)到四十分鐘建議用tmux掛個(gè)會(huì)話慢慢等。cd /usr/src wget https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tgz tar -zxvf Python-3.9.17.tgz cd Python-3.9.17 ./configure --prefix/usr/local/python3.9 --enable-optimizations --with-lto make -j4 make install有幾個(gè)參數(shù)需要解釋一下。--enable-optimizations會(huì)自動(dòng)執(zhí)行PGO優(yōu)化因?yàn)橹癚EMU環(huán)境下PGO測(cè)試階段那個(gè)性能損耗會(huì)更明顯整個(gè)過程會(huì)拉長。如果你遇到的問題是想快速搭好環(huán)境可以直接去掉這個(gè)參數(shù)編譯時(shí)間能縮短一半。--with-lto啟用鏈接時(shí)間優(yōu)化對(duì)于C擴(kuò)展模塊的加載有一定性能提升但它要求交叉編譯器支持LTO所以我在編譯這道工序里用的就是gcc-aarch64-linux-gnu版本必須高一點(diǎn)太低版本會(huì)有LTO兼容問題。編譯完成后設(shè)置PATH和LD_LIBRARY_PATHexport PATH/usr/local/python3.9/bin:$PATH export LD_LIBRARY_PATH/usr/local/python3.9/lib:$LD_LIBRARY_PATH關(guān)鍵一步來了確認(rèn)Python能正常import所有需要的標(biāo)準(zhǔn)庫python3 --version python3 -c import sqlite3; import ssl; import ctypes; print(ok)如果輸出okPython解釋器這部分就合格了。如果報(bào)錯(cuò)優(yōu)先檢查是否漏裝了libsqlite3-dev、libssl-dev、libffi-dev其中任何一個(gè)庫。這是我遇到過最多的一個(gè)問題特別是sqlite3缺失時(shí)Python的包管理器會(huì)間接出問題排查起來還不明顯。3.3 第三步組裝虛擬環(huán)境裝PyTorch與YOLOv5倉庫為什么我要堅(jiān)持用虛擬環(huán)境venv而不是直接把這個(gè)Python裝成系統(tǒng)的全局Python原因很實(shí)際你后面在真機(jī)上部署時(shí)極有可能這臺(tái)香橙派5上已經(jīng)有系統(tǒng)自帶的Python環(huán)境和別的項(xiàng)目如果用全局Python安裝一套YOLOv5s要用的大堆依賴可能會(huì)把系統(tǒng)環(huán)境搞壞。用虛擬環(huán)境可以做到“項(xiàng)目環(huán)境隔離”最終整個(gè)依賴目錄打包帶走拷貝到香橙派5上解壓就能用部署效率高很多。創(chuàng)建虛擬環(huán)境并進(jìn)入cd /opt /usr/local/python3.9/bin/python3 -m venv yolo_env source yolo_env/bin/activate這個(gè)虛擬環(huán)境創(chuàng)建完成后你會(huì)看到shell提示符前面多了一個(gè)(yolo_env)前綴。但這里要特別提醒一個(gè)QEMU模擬下的坑虛擬環(huán)境創(chuàng)建時(shí)pip的安裝引導(dǎo)腳本是從系統(tǒng)中的ensurepip模塊復(fù)制過來的如果在QEMU模擬里這個(gè)引導(dǎo)過程閃斷你可能會(huì)遇到virtualenv可用但pip不可用的情況。解決辦法是創(chuàng)建venv后再手動(dòng)裝一次pippython3 -m ensurepip --upgrade接著安裝YOLOv5依賴的Python庫。PyTorch在ARM平臺(tái)上的安裝方式很有講究我們不能直接用pip install torch因?yàn)槟J(rèn)源拉下來的可能是X86版本。需指定使用arm64專用的ManyLinux輪子倉庫。如果你在arm64的Raspberry Pi或者其他ARM板子上裝過PyTorch對(duì)https://download.pytorch.org/whl/cpu這個(gè)地址應(yīng)該很熟悉它提供的torch-1.11.0cpu-cp39-cp39-manylinux2014_aarch64.whl就是為arm64準(zhǔn)備的標(biāo)準(zhǔn)wheel。pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu這里的CPU版本有優(yōu)勢(shì)真機(jī)香橙派5的NPU對(duì)PyTorch模型的優(yōu)化不是通過常規(guī)的torch CUDA路徑實(shí)現(xiàn)的所以GPU版和NPU加速的兼容性很差。所以一上來就用CPU版反而能在模擬器和真機(jī)之間保持高度一致的推理結(jié)果。還有一點(diǎn)是我的個(gè)人經(jīng)驗(yàn)在仿真環(huán)境里建議先用pytorch 1.11.0這個(gè)版本的arm64 wheel包兼容性最大跟我后面要說的后處理封裝能很好地銜接。裝完P(guān)yTorch后克隆YOLOv5倉庫并安裝剩余依賴注意requirements.txt里包含opencv、numpy、matplotlib、pandas等一堆東西git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt這一步會(huì)拉取大量whl包。模擬器環(huán)境下pip的下載速度正常但安裝階段有幾類包要做本地C擴(kuò)展編譯速度明顯比宿主機(jī)慢。這里必須耐心等待。如果等待過程中有任何包編譯失敗把報(bào)錯(cuò)信息記錄下來繼續(xù)排查最常見的是opencv-python頭文件問題和pandas里的numpy版本沖突。我的建議是把opencv-python替換成opencv-python-headless因?yàn)樗蕹薌UI相關(guān)依賴在無顯示器仿真環(huán)境里少裝一堆庫也讓后續(xù)的包依賴管理更干凈。如果你用的也是我這種方式最后可以檢查一下環(huán)境python3 -c import torch; print(torch.__version__) python3 -c import cv2; print(cv2.__version__)如果輸出torch為1.11.0cpu且cv2正常環(huán)境就緒了。如果輸出類似Illegal instruction (core dumped)或者段錯(cuò)誤基本就是QEMU翻譯出現(xiàn)指令集沖突直接看第四章第三節(jié)的排查方法。3.4 第四步跑通推理測(cè)試并做精度和性能記錄環(huán)境搭好了開始正式跑一張圖片驗(yàn)證YOLOv5s推理鏈路。在YOLOv5倉庫目錄下有一張輕量級(jí)的測(cè)試圖data/images/bus.jpg我們直接用detect.py腳本測(cè)試python3 detect.py --weights yolov5s.pt --source data/images/bus.jpg --project runs/sim_test第一次運(yùn)行這個(gè)命令時(shí)如果本地沒有yolov5s.pt權(quán)重文件腳本會(huì)自動(dòng)從官方GitHub Release上下載。這一步在模擬器環(huán)境里可能有坑因?yàn)閭}庫里的下載地址有時(shí)連通性不佳而且模型的權(quán)重文件是放在GitHub LFS上的。我遇到過下載卡半天不動(dòng)的解決方式是提前手動(dòng)下載權(quán)重文件放到weights/目錄再在運(yùn)行時(shí)通過--weights weights/yolov5s.pt指定。推理跑完后腳本會(huì)在runs/sim_test/exp目錄生成帶檢測(cè)框的標(biāo)注圖片。在無圖形界面的仿真環(huán)境下你可以直接把生成圖片拷貝到宿主機(jī)上打開看效果cp runs/sim_test/exp/bus.jpg /tmp/result_bus.jpg然后退出chroot環(huán)境在宿主機(jī)上查看/tmp/result_bus.jpg。理論上你應(yīng)該看到bus類別被正確識(shí)別檢測(cè)框位置準(zhǔn)確。這一步代表模擬器里YOLOv5s的完整推理鏈路已經(jīng)跑通。同時(shí)也要記錄一下模擬器的運(yùn)行耗時(shí)數(shù)據(jù)。在chroot環(huán)境下直接加時(shí)間time python3 detect.py --weights yolov5s.pt --source data/images/bus.jpg我實(shí)測(cè)的一張1920x1080圖片在模擬器環(huán)境里跑一整個(gè)流程大概需要80到100秒其中很大一部分是環(huán)境初始化和圖像預(yù)處理耗掉的。這個(gè)數(shù)據(jù)不用慌張因?yàn)檎鏅C(jī)上通過NPU加速推理同一張圖往往只需要幾百毫秒。模擬器真正檢驗(yàn)的功能你都已經(jīng)完成了。作為對(duì)比我還建議你在拿到真實(shí)板子后用同一套venv跑一次同樣的命令記錄下真機(jī)耗時(shí)把兩張數(shù)據(jù)表放進(jìn)你的開發(fā)文檔里這是非常有價(jià)值的驗(yàn)收和驗(yàn)證數(shù)據(jù)。4. 模擬器環(huán)境里的排坑實(shí)錄與經(jīng)驗(yàn)總結(jié)4.1 必踩之坑一site-packages的符號(hào)鏈接陷阱這個(gè)坑我花了整整一個(gè)晚上才找到原因非常典型先拿出來說。我用venv創(chuàng)建虛擬環(huán)境并安裝PyTorch之后一切看起來正常但一執(zhí)行import torch就報(bào)錯(cuò)說找不到某個(gè)模塊。我進(jìn)入虛擬環(huán)境的lib/python3.9/site-packages目錄發(fā)現(xiàn)里面一大堆包的文件赫然是符號(hào)鏈接指向系統(tǒng)的/usr/local/python3.9/lib/python3.9/site-packages目錄。按理說venv里的包文件就是應(yīng)該這樣操作的畢竟虛擬環(huán)境設(shè)計(jì)上就是通過軟鏈來復(fù)用基環(huán)境的庫。但在QEMU模擬環(huán)境下問題出現(xiàn)了chroot進(jìn)去后這些軟鏈接指向的是宿主機(jī)上的絕對(duì)路徑/usr/local/python3.9/...但這個(gè)路徑在rootfs環(huán)境里根本不存在軟鏈接就全部變成懸掛狀態(tài)Python自然找不到模塊。我驗(yàn)證這個(gè)猜測(cè)的方式是ls -la /opt/yolo_env/lib/python3.9/site-packages/ | head -20看到一堆broken symbolic link的提示后問題定位就明確了。解決辦法有兩種。第一種是在rootfs里把虛擬環(huán)境做成“獨(dú)立完整”的——不依賴基環(huán)境的軟鏈具體做法是創(chuàng)建虛擬環(huán)境之前不要安裝全局Python到/usr/local而是把所有包全部裝在venv內(nèi)。但這樣效率低、包安裝耗時(shí)長。第二種更簡(jiǎn)潔的方案是不要用venv直接在rootfs里用全局Python的site-packages因?yàn)槲覀兊哪繕?biāo)是把這套環(huán)境整體打包拷貝到真機(jī)全局和venv在打包遷移上差別不大全局環(huán)境還少了軟鏈這一層麻煩。我的最終建議是直接放棄venv改為在rootfs全局Python里安裝依賴并嚴(yán)格記錄pip freeze的包版本。這樣打包rootfs到香橙派5時(shí)整個(gè)/usr/local/python3.9目錄都是真實(shí)文件不存在軟鏈陷阱。4.2 必踩之坑二Illegal instruction與AVX指令亂入這個(gè)坑的詭異程度在模擬器踩坑里絕對(duì)排得上號(hào)。當(dāng)我第一次在模擬環(huán)境里跑YOLOv5s的train.py時(shí)模型加載階段報(bào)出Illegal instruction (core dumped)整個(gè)Python進(jìn)程直接崩掉。第一反應(yīng)以為是QEMU翻譯錯(cuò)誤但用gdb跟了一下core dump的原因發(fā)現(xiàn)是程序在執(zhí)行某段代碼時(shí)觸發(fā)了非法指令。再仔細(xì)查問題是PyTorch在安裝時(shí)其setup階段會(huì)自動(dòng)檢測(cè)宿主機(jī)CPU支持的指令集。如果你的X86宿主機(jī)是近幾年的CPU幾乎一定支持AVX、AVX2甚至AVX512指令集。但YOLOv5s用的一些底層優(yōu)化函數(shù)和PyTorch的torchvision::ops會(huì)基于這些指令集做特化優(yōu)化可QEMU在翻譯arm64指令時(shí)并不認(rèn)識(shí)這些AVX指令它只處理arm64的指令集。所以本質(zhì)上我在X86推理機(jī)上裝了arm64版的PyTorch wheelwheel本身是arm64的代碼但在編譯torchvision::ops的C擴(kuò)展時(shí)如果發(fā)現(xiàn)是從pip的源碼構(gòu)建而非預(yù)編譯會(huì)退回到本機(jī)優(yōu)化就出現(xiàn)了X86指令污染arm64環(huán)境的罕見案例。解決方法是徹底避開源碼編譯使用官方預(yù)編譯的torch1.11.0cpu版本確保所有C擴(kuò)展都是arm64預(yù)編譯的二進(jìn)制。這類wheel包里的.so文件是純arm64的不存在宿主機(jī)指令集探測(cè)邏輯。如果你確實(shí)需要編譯某些源碼包建議在編譯時(shí)顯式指定CFLAGS禁用AVX系列指令export CFLAGS-marcharmv8-a export CXXFLAGS-marcharmv8-a這里armv8-a是arm64的基礎(chǔ)架構(gòu)理論上兼容性最好。經(jīng)過這一步調(diào)整YOLOv5s就能穩(wěn)定跑起來。這個(gè)坑是模擬器特有的畢竟你真機(jī)運(yùn)行arm64原生程序時(shí)根本不存在X86指令的概念。4.3 必踩之坑三YOLOv5s.pt模型加載后decode卡死模型加載成功一段時(shí)間后我就發(fā)現(xiàn)一個(gè)更隱蔽的問題在運(yùn)行detect.py時(shí)模型成功加載圖像預(yù)處理也完成了但在最后的NMS后處理階段直接卡死??刂婆_(tái)沒有任何輸出也沒有報(bào)錯(cuò)就是一直掛著不動(dòng)。排查了好一陣子最后發(fā)現(xiàn)卡點(diǎn)是PyTorch 1.11.0在arm64環(huán)境里的一個(gè)已知問題某些版本的CPU版torch在非標(biāo)準(zhǔn)平臺(tái)比如QEMU模擬環(huán)境上實(shí)現(xiàn)torchvision.ops.nms()時(shí)存在死鎖或無限循環(huán)。好消息是解決方案特別簡(jiǎn)單就是把YOLOv5的默認(rèn)后處理替換成純PyTorch實(shí)現(xiàn)的版本避免調(diào)用torchvision.ops.nms。具體做法是在detect.py里強(qiáng)制指定model.model[-1].nms False或者直接修改YOLOv5倉庫里utils/general.py中的NMS函數(shù)實(shí)現(xiàn)將torchvision.ops.nms注釋掉改用YOLOv5自帶的non_max_suppression函數(shù)。這里多說一句YOLOv5倉庫實(shí)際上早在0.7版本之后就在默認(rèn)路徑上避免使用torchvision.ops.nms了所以這個(gè)問題主要影響的是通過pip install -U torchvision誤升級(jí)到新版torchvision的場(chǎng)景。如果你在安裝時(shí)嚴(yán)格固定torchvision0.12.0這個(gè)版本和torch 1.11.0匹配大概率能繞開。這個(gè)坑排查的價(jià)值在于它告訴我們模擬器環(huán)境和真機(jī)一樣版本鎖定對(duì)深度學(xué)習(xí)框架項(xiàng)目來說是極度重要的尤其是以毫秒計(jì)的算子實(shí)現(xiàn)版本差異可能直接決定項(xiàng)目能否跑通。4.4 必踩之坑四虛擬環(huán)境激活后 import torch 仍然失敗有一次我在某臺(tái)新PC上重新搭整套環(huán)境virtualenv創(chuàng)建成功進(jìn)入rootfs激活venv后Python版本檢查正常但import torch報(bào)出找不到torch._C模塊的錯(cuò)誤。這種情況最氣人因?yàn)榘姹緳z查顯示torch已經(jīng)裝上了甚至pip show torch也確認(rèn)包位置無誤。排查過程讓我意識(shí)到這是venvinside-chroot場(chǎng)景下PYTHONPATH發(fā)生了混亂。在chroot環(huán)境中venv激活腳本會(huì)把一些路徑硬編碼進(jìn)去但宿主機(jī)和rootfs之間的絕對(duì)路徑又不一致導(dǎo)致Python加載擴(kuò)展模塊時(shí)找不到真正的.so文件。定位方法很簡(jiǎn)單(venv) python3 -c import torch; print(torch.__file__)如果能輸出site-packages/torch/__init__.py但隨即在加載torch._C時(shí)失敗那就是擴(kuò)展模塊路徑的問題。解決辦法是不要依賴activate腳本直接設(shè)置好PYTHONPATH和LD_LIBRARY_PATHexport PYTHONPATH/opt/yolo_env/lib/python3.9/site-packages export LD_LIBRARY_PATH/usr/local/python3.9/lib:$LD_LIBRARY_PATH確保這些動(dòng)態(tài)庫路徑都在你的環(huán)境變量里import torch大概率就正常了。這個(gè)問題的根本原因在于QEMU模擬環(huán)境下的動(dòng)態(tài)鏈接器在某些情況下不如原生環(huán)境靈活所以手動(dòng)指定運(yùn)行時(shí)庫路徑比依賴默認(rèn)搜索機(jī)制更可靠。4.5 其余零散但高頻的坑除了上面四個(gè)大坑還有幾個(gè)頻率高但解決起來快的小問題列成清單方便你排查現(xiàn)象排查方向建議處理OpenCV讀不了圖片opencv-python是GUI版依賴libgtk卸載后裝opencv-python-headlesspillow版本沖突YOLOv5依賴pyyaml較老與pillow 10.x不兼容鎖定pillow 9.5.0matplotlib渲染崩潰模擬器無顯示環(huán)境字體文件缺失提示使用Agg后端MPLBACKENDAgglibopenblas加載失敗BLAS庫路徑錯(cuò)誤在rootfs里apt install libopenblas-dev libatlas-base-devtorch推理耗時(shí)異常長QEMU的浮點(diǎn)模擬損耗這是正?,F(xiàn)象記錄數(shù)據(jù)即可不優(yōu)化模擬器尤其是OpenCV這個(gè)問題幾乎每個(gè)用YOLOv5系列的人都會(huì)碰到。原因在于很多ARM基礎(chǔ)教程里為了省事直接裝opencv-python全量版但香橙派5上可能缺少對(duì)應(yīng)的GTK依賴導(dǎo)致圖片讀取路徑上的cv2.imread返回None。排查依據(jù)是cv2.imread沒報(bào)錯(cuò)但result全是空針對(duì)這個(gè)坑我強(qiáng)烈建議在模擬器和真機(jī)上都統(tǒng)一使用headless版本省時(shí)省力。4.6 從模擬器到真機(jī)的遷移技巧既然整個(gè)仿真環(huán)境的意義就是為了最終的板子部署最后說說怎么把這套環(huán)境“搬”到香橙派5上。本質(zhì)就是打包rootfs和Python依賴然后拷貝到開發(fā)板的SD卡或SSD上。先明確目標(biāo)機(jī)的rootfs目錄就是你模擬器里用的/opt/op5-rootfs打包它c(diǎn)d /opt sudo tar -czpf op5_rootfs.tar.gz op5-rootfs注意tar打包時(shí)要保留軟鏈接和權(quán)限-p參數(shù)不能少。生成的包大概有2到3GB取決于你安裝的PyTorch和依賴拷貝到真機(jī)上解壓即可。但這里要提醒解壓到真機(jī)后不能直接用chroot進(jìn)入因?yàn)檎鏅C(jī)會(huì)運(yùn)行自己的內(nèi)核和rootfs里的Debian mirror的源配置不一致。我這個(gè)方法的精度是“依賴打包遷移”不是“系統(tǒng)整盤燒錄”你真正拿到真機(jī)上用的是rootfs里的/usr/local/python3.9目錄以及YOLOv5倉庫和訓(xùn)練好的權(quán)重文件。這些文件在真機(jī)上放入系統(tǒng)的對(duì)應(yīng)目錄并配置好環(huán)境變量就能無縫激活。同步文件時(shí)的建議是直接用SCP或rsync因?yàn)橄愠扰?在局域網(wǎng)里的訪問很方便rsync -avz --excludeproc --excludesys /opt/op5-rootfs/ userorangepi5:/opt/op5-rootfs/同步完之后在真機(jī)上設(shè)置環(huán)境變量并驗(yàn)證Python和torch版本配合前面在模擬器里跑通的業(yè)務(wù)代碼真機(jī)推理就水到渠成了。而且因?yàn)榄h(huán)境版本完全一致模擬器里排過的一切坑在真機(jī)上都不會(huì)再出現(xiàn)。這套路我前前后后用了四五次每次的效果都相當(dāng)穩(wěn)定。其實(shí)說到底PC端模擬器的價(jià)值不在于替代真機(jī)而是把風(fēng)險(xiǎn)前置到開發(fā)階段。環(huán)境對(duì)了版本鎖定了邏輯跑通了上板只是時(shí)間問題。個(gè)人在實(shí)際操作中的一個(gè)體會(huì)是模擬器環(huán)境里無意中引發(fā)的“異常指令”和“軟鏈丟失”這些問題反而讓我對(duì)arm64架構(gòu)的運(yùn)行邏輯比直接上手真機(jī)還要明白。希望這篇手把手的內(nèi)容能幫你少走幾步彎路。最后再分享一個(gè)小技巧仿真環(huán)境里的pip freeze輸出一定要保留成文件連同rootfs一起存好就算之后你的真機(jī)環(huán)境真被折騰壞了隨時(shí)還能拿這套東西快速重建一個(gè)完好的工作環(huán)境。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天激情综合网| 亚洲国产亚洲天堂| 久久这里只精品99re66图 | 后入日本1234| 成·人免费午夜在线观看| 91伊人久久在线| 女人天堂av在线播放| 久草视频分类在线| 青青草国产一区二区三区| 天天插网| 狠狠操夜夜操蜜桃视频三区| 中文字幕欧美日本乱码一线二线| 日本操逼无码| 91爱看| 欧美少妇一区二区三区| 99re免费视频精品全部| 亚洲情色电影网| 大香网站| 青草香蕉网| 欧美肥臀在线| 国产A v无码专区| 黑丝少妇| 国产精品成久久久久午夜午夜| 久久久久久久国产视频| 东京热激情视频一二三区| 色老大| 加勒比在线观看一区二区| 极品色www影院| 久干网| 青青草在线成人视频| 亚洲一区二区精品福利| 九九九九九九亚洲| 久久久久久九九九| 九九色热| 久久精品无码不卡| 欧美人妻精品| 日本精品一区二区三区四区的功能| 99爱在线视频| 亚洲天堂加勒比| 日韩AV熟女乱伦| 97一本大道亚洲一区| 北约熟女超碰| 日韩美女高潮喷水视频| 在线国产探花| 亚洲伊人成综合成人网| 亚洲色香| 91网站18在线观看| 人人看人人爰人人操| 超碰欧美在线欧美| 五十路六十路素人熟女| 色臀aV| 黄色AAAAAAAAAAA大片| 大肉棒导航| 成人性爱全视频观看| 色与欲影视天天看综合网| 婷婷在线精品| 97色综合中文网| 激情六月天| 男人天堂网址| 一区二区三区日韩欧美| 黄片免费视频2019| 男人综合网| 青青草黑寡妇男人天堂| 一个人免费视频观看在线WWW | 国内毛片四区| 丝袜综合| 欧美日产国产在线成人第一区| 亚洲精品97中文字幕| 91GD.COM| 色牛aV| 9999九九九久久久| 大胆91| 97欧美| 久久的网站啊啊啊啊啊| 亚洲啪啪视频一区二区| 新亚洲无码| 亚洲欧洲无码97久久精品| 你懂得91| 大香蕉碰| 五月婷婷综合在线| 国产黄色av大片网站| 懂色av中文字幕| 美国日韩黄色片| 乱操乱伦AV| 超碰午夜| 色综合中文字幕不卡| 澳门特级毛片免费观看| 天天色黄色影院天天操| 东京热一区二区中文字幕| 97伊人| 超碰视97中文| 五月丁香成人网| 性色亚洲| 校园春色 亚洲| 久久宗合亚洲| 欧美日韩国产电影| 1769一区| 免费男人的天堂| 天堂在线一区二区| 1024手机看片欧美日韩| 人人操人人射人人干| 欧美香蕉视xxx| 日韩AV一区二区三区四四| 天天干天天燥| 国产精品久久久久久久久久久久久久| 中文字幕一品色图| 春色综合免费| 骚逼自拍99| 伊人991| 国产乱人妻精品入口| 麻豆乱码久久精| 1956日韩精品| 0755午夜福利视频| 婷婷五月天成人| 91美女视频在线观看| 男人的天堂三级| 亚洲人码13| h色99999| 国产熟妇一区二区| 亚洲色图综合网| 国产欧美成人精品| 免费男人的天堂| 欧洲自拍第一页| 干美女人妻| 亚洲图片视频小说| 超碰偷拍| 91人妻少妇| 亚洲成人激情小说视频| 久久久不卡| 国产精品伦理| av三级电影在线播放| 亚洲九区| 麻豆福利视频导航| 97精品中文字幕| 成人日本片久久久蜜桃| 97天天综合| 久9re热视频这里只有精品| 亚洲电影中字一区二区| 亚洲av影院在线观看| 人妻人人操| 国产97色在线 | 亚洲| 少妇九九九九| 精品人成视频在线观看| 2019天天干天天操| 五月天婷婷综合| 日本免费不卡二区| 中文三一区| 97视频在线| 亚洲午夜免费狠狠干| 日日躁夜夜躁狠狠躁超爽| 99操| 在线观看不卡一区二区三区| 性色aV一区二区三区噜噜| 福利一级版子| 密臀在线视频| 超碰在线一区二区三区| 高清在线不卡一区二区 视频| 国产精品一区av在线| 9999免费精彩视频| 人妻久热在线| 99re在线| 99视频自拍| 国产精品 午夜福利| 亚洲风情综合网| 综合影院永久入口国产| 婷婷亚洲综合| 熟女网站最新| a级免费在线观看| 日韩亚洲中文字幕在线| 67194无码不卡| 91麻豆天美国产欧美高潮| 午夜小电影在线插入淫高潮| 中文字幕性感少妇av| 婷婷三区| 99999国产| 成人一级性爱| 亚洲aw毛茸茸在线| 97干在线视频| 久久性爱城| 激情文学 国产一二三aV| 欧美成人一区二区| 青青草日韩无码| 久久久蜜桃臀无码视频| 精品人妻一区二区三区蜜桃视频| 久草尤物| 久久这里精品国产99丫e6| 大香蕉日亚洲日本亚大| 欧美不卡二区| 色阁阁AV综合网| 久久国产AⅤ| 久无码| 大粗鳼巴久久久久| 国产精点久久久成人| 欧美综合第一| 国产对白刺激视频| 美女淫穴| 91三级理论片播放器| 色天使亚洲综合在线观看| 精品性爱无码在线播放| 亚洲诱惑天堂 | 中文字幕免费看| 人人操人人摸人人看人人干| 综合色久| 色爱天堂| 日本三级久| 97亚洲自在精品在线观看| 综合久久六月久久婷婷| 俺也射| 91精品无码人妻系列| 精品久久大胆人体| 国产精品蜜乳AV| 午夜福利在线合集| 丰满人妻一区二区三区| 97精品视频| 一区=区三区视频| 亚洲啪啪综合?v一区综合精品区| 四虎 精品 WWW| 亚洲在线欧美| 啊啊啊啊啊在线视频| 亚洲视频中文一区| 国产精品丝袜久久亚洲不卡| 去干网最新版| 国产精品欧美在线观看 | 久久黄色视频一区二区三区| 蜜臀久久久国产| 国产真实野战在线视频| 国产精品自拍xxxx| 日韩欧美综合激情| 加勒比av网| 久热9| 啊啊啊在线观看| 午夜成人福利影视| 中文字幕中文字幕一区二区| 97ai亚洲| 丝袜喷水在线| 日韩 欧美 另类 人妻| 97在线播放| 色妹子A V| 97超碰这里只有精品| 国产精品自在线发布| 男人天堂毛片| 好爽,再快点啊哈嗯嗯嗯嗯| 呦呦影院| 黄页av| 久久久性爱视频| 亚洲精品影视老司机| 亚洲综合在线91| 精品人妻二区三区| 久久99午夜精品一区人妻| 蜜臀久久99精品久久久久久婷婷| 亚州久久9| 亚洲成人碰碰| 久久直播国产| 91丝袜在线观看| 午夜AV污污污| 人人污日韩一区二区| 亚洲Av无码成人精品国产| 超碰97网站| 欧美洲精品一级| 日本裸体久久色噜噜| 亚洲AV无码国产成人| 亚洲一区在线观看欧洲| 青娱乐91| 青青青在线高清视频在线一二三四区 | 9久久久久| 蜜臀99久久精品| 2025亚洲男人天堂| 日韩欧美视频青青| 精品国产www久久| 国产精品ⅴ无码大片在线看.| 少妇蹲下露出大唇5| 青青草玖玖爱| 99精品伊人| 日本一级二级三级网站| 亚洲一曲日韩精品| 欧美亚洲国产91在线| 亚州欧美在线| 欧美色图亚洲色,麻豆| 中文字幕久久亚州无码| 少妇69中文| 旡码电影特区| 国产人妻精品久久久一区二区三区 | 亚洲欧美日韩免费观看| 日韩情色一区二区| 欧美天天综合在线| 97国产|免费| 国产蜜臀在线| 五十路成人在线视频二区三区| 夜夜综合| 欧美精品久久| 少妇色综合| 国产精品在线网站| PMv在线观看| 另类图片五月| 久久超碰爱| 香蕉在线一区二区三区| 婷婷五月天激情四射| 五月天玖玖资源站| 色综合久久88色综合久久天天| 中文字幕一区二区免费在线| 伊人丁香五月婷婷| 黄色激情电影在线观看| 国产高清无码一区三区二区| 久久精品色欧美aⅴ一区二区| 亚洲囯产精品女人久久久| 午夜.DJ高清在线观看免费7| A级毛片在线看免费| 一个色导综合| 手机在线播放国产福利| 亚洲精品一区二区三区在线播放| 欧美日韩性爱视屏免费看了| 丁香九月激情| 97超碰碰碰| 99re这里只有精品3| 久草综合京东| 亚洲情色一区二区三区| 久久国产精品视频| 日韩无码一区二区三区| 美女天天干| 无码高清少妇久久| 日韩精品在线观看网站| 蜜臀少妇一区二区| 白丝AV网站| 色香在线| 啊啊啊啊操死我| 日本淫乱女一区二区三区视频| 亚洲伊人久久综合97| 亚洲囯产精品女人久久久| 青娱乐日韩无码| 青青草视频这里只有精品| 美女97超碰| 在线色资源| 欧美亚洲激情| 特级毛片特黄久久免费看 | 一级AAA片一区二区三区| 国产精品扒开腿做爽爽爽视频| 日韩一级久久毛片| 色综合网1| 91亚洲不卡一区| 亚洲涩涩| 中文字幕后石码三区四区| 美国精品国产精品| 激情99| av麻豆啪啪| 久久爱97| 操逼www.| 国产伦乱91| 亚洲色图A| 日韩猛交| 美国人人操人人操| 少妇与黑人高潮在线| 精品久久久亚洲AV成人网站| 精品久久久久9999| 欧美色吧综合| 日本1区2区不卡视频| 图片区小说区| 97一区二压| 亚洲天堂资源网| 久操精品| 亚洲天堂美臀在线| 夜夜操中文字幕| 少妇内射视频| 大香蕉国产中文自拍| 中文字幕国产| 欧美色色色| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美Aⅴ| 亚洲 国产 精品一区| 成人精品电影| 我想要 啊 啊 啊| av日韩在线观看电影| 天堂精品小草| 大香蕉在线SuP| 日韩成人人妻网站| 国产精品乱码久久| 中文字幕成人| 啊啊啊久久久视频| www.久久制服糖| 91精品国产综合久久久蜜臀| 久久久性爱| 立川理惠无码一区二区| 很很很很操| 人人看人人插| 欧美 亚洲 大香| 超碰在线人人射| 欧美天天插| 综合亚洲网| 丝袜熟女一区二区三区| 中文一区二区| 亚洲最新av无码成人精品区| 91 综合 色| 看大黄色大片原件| 乱子伦一区二区三区国产精品| 人人操人人插 - 百度 - 百度| 久久久久久久一级黄色打同平台| 国产精品国产拍高清AV| 四虎884a| 精品成人亚洲午夜电影| 欧美日韩国产人人| 婷婷丁香五月天综合东京热| 国产蜜臀在线| 91精品大奶人妻| 青青操日韩| 亚欧韩av| 国产97在线视频| 亚洲天堂男人在线| 91丨国产丨白浆秘 洗澡动漫| 国产四虎在线| 日韩性爱1级片视频| 国产精品高潮久久AV| 国产操伦| 狠狠躁日日躁夜夜躁A| 柠檬AV导航| 亚洲色图尤物视频| 国产中文字幕曰本毛片| 婷婷五月成人| 精品视频97| AV在线播放网址| 无码粉嫩白虎一线天b区| 青草精品视频日本久久久久网站在线| 欧美特大AA级黄片| 自慰白浆在线观看| 成人影 天天操 亚洲| 宗合情欲网| 久久人体一区二区| 亚洲āv网址在线观看| 色在线亚洲视频www| 少妇滛荡视频| 蜜桃视频精品一区二区三区| 无码九九| 一级性爱视频免费在线| 91人妻爽爽人人做人人澡| 伊人国产av| 亚洲一区二区中文字幕| 国产99精品一区二区三区免费| 亚洲AV无码成人精品久久| 91肏屄网| 欧美亚洲在线| blacked精品一区国产| 五月丁香网站| 亚洲好色人妻| 亚洲精品xxx| 一二三啪啪专区| 中文字幕av一区二区三区人妻少妇| J?P?NESEHD熟女熟妇伦| 久久久人妻| 久久久天美| 亚洲h片在线免费观看| 欧美久久人体| 亚洲91色| 亚洲综合五月天| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 久久久影院| 蜜桃臀一区二区三区久久| 99人妻碰碰碰久久久久禁片| 超碰99热| 91精品国产91熟女| 久久九色| 欧美成人贴图| 久综合网| 黑人精品欧美一区二区蜜桃| 日本精品不卡一二三区| 走光一区92下载| 国产日韩欧美操逼视频 | 日韩无码极品| 久久亚洲天天做| 婷婷婷婷婷婷久久久久| 富二代亚洲精品99| 三上悠亚在线毛片91| 99热超碰| 999999精品| 婷婷色在线| 91n处女在线观看| 国产无马av| 毛片99-全集电影手机免费观看完整-B029AV | 欧美性爱综合,免费| 野狼激情网| 成人怡红院| 国产后入精品| 中文一区二区三区影院| 性色乱AV一区二区| 久久午夜鲁丝片| 插老姨肥穴| 日韩三A大片在线观看| 麻豆人妻少妇在线免费观看| 乱伦图av| 无套后入双马尾| 99这里只有精品| 亚洲天堂男人天堂| 四虎884a| 女人被添高潮免费视频| 91 丝袜在线播放| 78综合网| 天天躁日日躁xxxxx| 欧美日韩国产人人| 九九Av| 大JI巴好深好爽又大又粗视频| 91九久| 免费看黄片现成| 九九九九精品一区| 欧美大色交| 亚洲欧美国产成人综合不卡| 伊色久人大在线| 亚洲另类久操网| 91欧美丨精品丨入口| 久久免费9| 69人妻精品一区二区绯色| 精品午夜福利| 日本欧美色| 嫖老熟女A片一二三区| 992大香蕉| 天色综合网| 国产精品一区二区 尿失禁| 天堂亚洲精品| 欧洲与亚洲欧美精品中文字幕| 一级aaaaa欧美中文字幕录像片| 少妇蹲下买菜露大唇0| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 最新av在线| 精品国产片亚洲一区| 久久AV无码AV| 公司1区2区3区精产精| 人妻天堂综合网| 成人三一级一片aaa| 好涩综合| 精品久久艹| 天天影视网综合少妇| 熟女乱伦A| 人妻少妇精品视频一区二区三区| 一级黄碟在线看| 男人的天堂2010| 韩国成人精品久久久免费看| 日本成a人v网站在线观看| 狠狠干2020| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 丰满人妻-区二区三区免费| 搡老女人老91二区| 亚洲少妇免费视频\| 国产老熟女| 亚洲色色色| 欧美十八禁网站| 亚洲熟伦熟妇AV无码春色| 黄页网站成人免费| 秋霞鲁丝午夜无码一区二区三| 麻豆蜜桃视频在线观看| 五月激情视频| 色牛牛AV| 亚洲福利中文字幕在线| 久久精品毛片免费不卡| 粉嫩av久久一区二区三区| 亚洲久久久久| 无码天堂| 日本操逼视频免费| 9999久久久| 国产传媒日韩欧美| 97这里只有精品| 黄页| 蜜臀久久99精品久久久久久无删减 | 亚州熟妇精品| 欲射影视| 亚州高清av| 中文久久96| 操淫穴亚洲五月丁香| 9999亚洲精品| 国产久久男人天堂| 黄色十八禁| 欧美在线 亚洲| 亚洲鸥美色图| 久久久96精品| 丝袜加勒比| 天天夜夜rb| 麻豆天美在线| 韩国一级做a久久久久| 探花精品 一区二区| 2019天天干| 亚洲 欧美 日韩 国产一区二区 | 精品国产99| 久久久久网站-538在线视频-欧美永久乱码 | 人、人、摸,人、人、草| 欧美一区二区三区日韩| 五月天激情网图片| 欧美日韩国产中文精品字幕自在自线,| 久久9 9 9精品| 嗯嗯嗯啊啊啊操的我好爽 | 国产精品成人久久一区二区三区| 日韩精品在线观看观看| 国产亚洲色婷婷久久99精品91葵花宝典| 久久av一级av少妇av高潮| 色婷婷九月天天综合| 99热久| 日本不卡三级网在线播放| 综合网久久| 国产AV人人夜夜澡人人爽麻豆| 日本精品加勒比海一区| 91狠狠| www.99中文字幕| 天天色播亚洲综合网站| 九九热男人天堂| 2019午夜福利视频| 大色综合| 欧美系列在线一区二区| 亚洲91极品| 亚洲综合贴图91| 日韩9区| 国产人妖视频一区在线观看| 99久久99久久综合| 伊人 俄罗斯 a v| 啪啪91| 亚洲情色在线| 校园激情狠狠四射| 国产一区自拍欧美日韩| 黄网在线播放| 91久久久视| 日本高清_区二区三区| 豆花视频操逼网址| 岛国黄色大片网站| 天天干2019| 五毛骚逼极品美女怕怕| 亚洲国产精品成人久久蜜臀| 入口操逼网站| 69视频福利导航| 人妻熟妇一区二区三区| 男人天堂黄片| 日韩在线国产字幕| 久久久久亚洲av综合波多野制衣| 色人久久| 欧美一区二区三区成人性生活| 国产精品操| 小情侣高清国产在线视频| 91撸色网 玖玖网 欧美| 日本二三四区| 97网址www| 大但人体久久久久| 91精品女厕偷拍视频| 天天透伊人| 欧美 亚洲精品首页| 日本www操操操| 精品小视频在线| 人人模人人看| 神马久久久久眼| 香蕉视频欧美一卡二卡| 色综合99| 久久久夜夜嗨免费视频| 久久夜夜夜夜| aaa亚无码专区| 国模限制级电影| 综合 亚洲 欧美| 黄网在线播放| 亚洲色图日韩丝袜制服一区二区五月在线| 国产精品美女在线一区| 97超久碰| 美国人人操人人操| 欧美成人综合| 人人摸人人添人人操| 午夜后入| 亚洲一级特黄大片在线播放91| 日韩国产十八禁| 在线岛国新天堂8| 老司机久久| 亚州黄站| 91足交| 亚洲精品一二牛牛| 日本三级久| 久草加勒比一区在线| 嗯啊不要在线| 蜜臀一区二区三区在线| 99啪啪| 91社操逼| 亚洲色图片区| 99色悠悠| 亚洲国产尤物yw在线观看| www.男人天堂| 香蕉婷婷| 青娱乐淫乱1314| 国产欧美后入| 伊人五月天| 麻豆三极片| 加勒比AV天堂| 国产精品色色| 屌色在线97视频| 美女诱惑久久| 歐美一級亂黃99在綫精品| 国内偷自视频区视频综合| 亚洲91大片| 91肉丝| 欧美熟妇视频| 强奸国产精品视频| 久久精品女同亚洲女同13| 一区二区日韩欧美久久| 可以免费看黄片的视频| 男女香蕉一区二区| 看看小穴| 欧美日韩中文亚洲v在线综合| 欧美亚洲首页| 亚州高清色综合| 性爱综合网| 人人贴人人摸| 亚洲久9| 色www精品视频在线观看| 六月丁香啪啪| 郑州宾馆老熟女露脸啪啪| 四虎影视欧美| 青青草玖玖爱| 久久久久久久久久久久久久久乱码| 国产女人操逼视频| 中文字幕欧美日韩三级| 中文字幕在线第二页| 久久av网| 日日操天天操| a v网站在线播放| 色网站导航大全| 青青草在线视频播放器| 中文字幕AV片| 欧美色图中文字幕| 久久性爱视频| 精品人妻美妇91job| 人人贴人人摸| 91精品国产91久久青草| 亚洲自拍小说| 亚洲在钱| 九九九久久久久| 丁香五月天婷婷姐| 日韩久久三区| 亚洲成人综合在线| 强奸乱伦麻豆| 久久直播国产| 91精品微拍福利| 欧美人体性爱互联网第一页婷婷日本| 精品国产乱码久久久影院| 婷婷美人网| 亚洲美女30b| 久久精品免费| 国产精品国产自产拍高清AV| 久久免费精彩视频| 99久久网站| 中文自拍欧美影视| 伊人女女资源在线观看| 日韩精品在线观看观看| 免费黄色片。| 人人看人人爰人人操| 国产精品视频91久久| 欧美日韩999| 丰满人妻一区二区三区大胸懂色 | 久久人人爽爽人人爽人人片αV| 亚洲av噜噜噜噜噜噜| 超碰95| 日韩性爱小视频| 欧美乱伦专区| 黄色香蕉视频网站一区| 免费看片黄| 日本免费一级AAA大片器| 国产女同视频在线播放| 欧美探花网| 国产网红精品| 亚洲黄网在哪免费看| 97最新在线播放视频| 六月激情婷婷| 懂色综合久久久| 偷拍网站久久男女男| 亚洲91网。| 91麻豆一二三区| 四季av一区二区凹凸精品小说| 精久久久| 日韩无码一区二区三区| 伊人网免费视频| 99久国产精品午夜性色福利| 久久久久亚洲精品| 国产有码一区| 亚洲日韩东京热一区| 日韩国产九九精品一区二区三区毛片| 不卡六六在线91| 欧美劲爆第一页| a亚洲欧美色欲| 日本成人A片免费看| 国产成人精品日本视频| 蜜桃久久综合视频| 操操操操操操| 九七人妻在线| 欧美一二三| 五月天激情小说| 天美欧美国产| 久久久久ab| 亚洲AV不卡在线观看| 久九色| 午夜无遮挡男女啪啪视频| 久久久久久国产精品免费网站| 第一高清av中文字幕| 亚洲色堂免费视频| 日日嗨AV一区二区夜夜| 久久国产精品m码| 91深夜夜| 欧美熟女少妇| 91女优在线观看| 亚州综合在线| 无码高清专| 久草精品热视| 夜夜骑日日| 国产AAAAAABBBBB| 牛黄色久午久| 亚洲免费97免费| 久久婷婷成人综合色怡春院| av绯色| 欧美老熟另类| 色约约一区=区三区| 黄色人人| 精品久久久久瑟瑟| 久久亚洲一区女同性恋中文字幕| 日韩操逼性鲍| 欧插网站| 麻豆AV一区二区天美传媒| 欧美精品成人在线播放| 强奸少妇AV导航网| 91国产丝袜白虎| 综合操逼| 午夜福利在线视频1000| 亚洲色综合| 精品少妇一区二区三区在线视频| 久久久久久久久久久久久久久久9| 亚洲色图 欧美| 综合一区中亚洲国产成人综合精品 | 泰国AV在线观看| 春色91| 国模精品一区二区三区苹果色戒| 国产精品天干天干综合网麻豆 | 欧美精品第3页| 亚洲丝袜二区在线| 国产精品亚洲一区二区三区四区| 日本免费中文字幕在线| 婷婷久久五月| 精品人妻高清麻豆av| 欧美大香蕉专区网| 日本中文字幕一区| 久久av一级av少妇av高潮| 猛猛干| 天天综合青苹果| 国产福利影视| 久久精品女同亚洲女同13| 国产色精品午夜大片| 碰超人人在线一区二区三区| 国产高清精品一区二区三区毛片 | 国产尹人在线视频免费| 国产不卡的视频| 全免费a敌肛交毛片免费| 国产日韩欧美| 久久免费精品视频免一| 综合情欲网| 91黑人无码激情在线| 91亚洲黄色网| 屌逼麻豆| 国产肏逼网站| 亚洲男人的天堂AV| 一区不卡在线观看av| 97一区二区三区视频| 中文字幕91页| 亚洲精品乱码久久久久久蜜桃麻豆| 摸奶性爱视频网站在线免费播放| 精品一区二区3区| 精品国产三级av韩国在线| 亚洲色图a| 国产 热久久久久国产精品| 女人天堂网| 狠狠狠狠狠干| CCYY草草影院地址入口| 美日韩在线不卡人妻| 国产人妖视频一区在线观看| 97久久久久久久久久| 激情AV| 日韩视频中文字幕| 蜜臀久久99精品| 国产成人无码高清| 日本女人久久久| 欧州激情视频在线一区二区| 十八禁的黄污污免费网站| 久久宗合97| 91久青| 国产麻豆福利av在线播放| 2019男人的天堂| 日本三级小说中文字幕| 国产AV久久野战精品| 大香蕉淫人| 啊啊啊啊二区好大| 啊视频在线| 毛片久久| 自拍第一页| 蜜桃久久久久久久| 精品成人av一区二区三区在线| 91色香| 国产精品久久久999| 天天日少妇逼AV| 蜜乳av一区二区| 欧美激情专区| 热的中文 热的有码 热的国产| 日韩一级二级| 天天躁日日躁XXXXYY| 尤物av网站免费在线播放| 亚洲乱熟女一区二区| 大香蕉 222| 九九碰九九爱97超碰| 园内精品自拍视频在线播放| 国产AV中文| 日本黄色天堂| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 女优视频第10页| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日本不卡一区二区三区| 国产精品天美传媒| 日本中文字幕在线视频| 国产日产精品久久快鸭的功能介绍| 91久| 97日韩欧美亚洲| 天天摸天天舔天天操| 国产强奸超碰AV| 熟女AV一区| 九九久久99| 亚洲AV在线资源| 欧美一区二区三区大综合| 九九Av| 成人免费不卡在线视频| 国内精品a| 91春色| 亚洲熟女综合网| 婷婷五月天色网| 裸体美女久久久| 久久亚洲不卡一区二区三区| 综合网,亚洲,欧美| 天天日少妇逼AV| 国产第11页| 久久人人爽爽爽人久久久| 嗯啊不要在线观看嗯啊| 9久热| 国产白丝在线| 色婷婷亚洲婷婷| 99操视频| 狠狠干综合| 超碰在线国产| 青娱乐日韩无码| 99久久精品国产高潮| 日韩亚洲Av人人夜夜澡人人爽| 岛国片国产成人亚洲播放| 免费αV在线视频| 国产精品久久久久久亚洲色欲| 久久久性| 超碰97人妻免费在线| 超碰在线人妻中文字幕| 自拍内地三级在线观看| 东北少妇高潮zzzz| 欧美日韩午夜精品一区二区三区| 国产精品人妻无码久久久老鸭窝 | 亚洲国产成人精品999| 国产中出内射一区二区| 精品无码一区二区三区色欲| 成人av性爱电影在线观看| 精品人妻免费观看| 亚洲国产精品99久久久| 精品一区二区成人| 中国探花熟女| 亚洲天堂综合AV| 国产白嫩精品久久| 久久中日麻豆| 久久9精品网站| 国产精品一区二区三区四区五区| 97在线观看免费视频| 98人妻精品一区二区色欲| 中国少妇XXXX做受| 国产 三级自拍| 男人的天堂不卡一区二区| 欧美内射少妇| 中文一区二区| 好爽视频在线观看视频| 成人性爱免费播放| 九月丁香综合网| 国产人妻精品久久久一区二区三区 | 青青草色AV| 色吧91| 亚洲精品尤物yw在线影院| 国产激情在线观看| www老逼91| 久久机热| 日本操逼视频免费| 福利伊人玖玖国产| 日本在线不卡123| 搞中出视频在线观看| 99热婷婷一区二区三| 男女做爰猛烈动高潮A片免费应用| 国产精品久久久久久片| 东京热男人的天堂网| 日本淫穴在线| 少妇久久久久久| 婷婷午夜成人色中色| 亚洲丝袜色| 丝袜亚洲91| 中文字幕丰满子伦无码专区在线视频最新| xxxx网站亚洲精品| 另类图片五月天| 91丨精品丨国产丨丝袜| 一起草在线视频| 草莓精品视频| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 自拍视频一区在线观看| 青青草视频这里只有精品| 久久99深爱久久99精品| 欧美精品宗合| 99色综合| 精久久久| 国产欧美日韩一区二区三区| 国语人妻精彩刺激| 欧美特黄视频网站| 性爱乱伦视频免费| 天美av在线观看| 国产激情在线| 国产精品久久久久久 百度| 色爱欲亚洲| 久久久内射良家| 人摸人人操人| 夜夜夜久久| 欧美综合色图片| 亚洲AV无码AV吞精久久久久 | 黄总AV色图| 欧美人妻少妇| 婷婷五月色| 伊人9| 久久精品国产亚洲AV嘿嘿| 欧美少妇第一页| 中文字幕99999| 亚州伊人色综台| 凹凸 69堂 在线播放| 91三级理论片播放器| 日韩78m视频| 国产美女自拍AV| 大香蕉色网| 富女玩鸭子一级毛片| 偷拍 精品 另类 四区| www欧美91| 激情五月天综合网| 深喉吞精| 午夜精品久久久久久久男人的天堂| 亚洲熟女少妇免费视频| 国产强上视频在线观看| 国产欧洲精品亚洲午夜拍精品| 久久精品日韩| 天天射夜夜| 亚洲一欧洲中文字幕在线| 亚洲素人网| 无码人妻丰满热妇又大又粗| 日本黄色XXX| 在线观看综合精品亚洲| 欧美色91| 久久久久久人妻| 天天亚洲| 免费看污网站| 99re免费视频精品全部| 天堂在线一区二区| 国语国产操逼伊人AV网| 国产精品乱码久久久、久久| 国产精品亚洲美女久久久久| 中文字幕一区二区无码成人 | 久操免费观看| 在线啊啊啊啊| 国产精品分类在线观看| baiduhicn.com。| 久草福利在线资源站| 秘书高跟黑色丝袜国产91在线| 99热这里是精品| 蜜臀一区二区三区在线 | 男人天堂网站| 神马午夜久久久| 国产精品视频白浆免费| 国产午夜精品一区二区三区牛牛| 女人爽到高潮久久久| 强奸乱伦AV一天堂网| 久污| 99re视频在线观看这里只有精品| 九九九九精品九九九九| 亚洲综合图文| 亚洲aV性爱| 性天堂| 操91| 婷婷五月天在线观看| 91色人妻| 欧美97免费| 蜜臀久久99精品久久久久免费观| 亚洲欧美综合区自拍另类| 久久久女人| 成人日韩中文字幕| 曰韩无码777| 人人模人人看| 99这里只有精品| 亚洲天堂另类小说男人| 99热这里只有精品地址| 极品色| 日日AAvv| 第45页一区二区| 久久久久9| 伦激情人妻另类人妻| 超碰精品97| 丁香婷婷激情五月天无毒不卡 | 久草草一二三四区久久| 婷婷五月天社区| 涩涩这里只有精品视频| 精品亚洲天堂| 久久久91福利姬| 校园春色综合色| 天天日少妇逼AV| 色乱二区| 国产操伦| 国产在线播放成人免费| 伊人久大| 亚洲限制级| 青青草原狼av| 99re在线观看| www黄片免费看com| 色欲三区| 国产成人欧美精品在线| 欧美日韩一二三| 国产欧洲精品亚洲午夜拍精品| 精品人妻一区二区免费蜜桃| 首页亚洲国产高跟丝袜诱惑视频| 青娱乐国产盛宴视频| 高清国产无码av| 国产精品国产精品国产| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 浪人综合网| 美女操逼A A| 婷婷超| 日本加勒比无码专区| 久久久九| 九99久久| 国产AV人人夜夜澡人人爽麻豆| 伊人青青草久久| 91视频观看网站| 久久一区无码| 天天肏美女| 午夜激情床戏激情| 欧苏综合色综合| 婷婷六月色| 激情综合五| 天天干天天爽| 啪啪啪综合网| 亚洲激情AV| 99热思思| 欧美日韩超碰在线| 久久极品伊人| 盗摄 精品 另类 一区| 97人人干| 日韩精品一二三四| 嗯嗯嗯好爽| 丰满欧美少妇| 欧中日成人免费影视| 日韩久久超碰色| 自拍欧美| 足交视频老司机| 99精品丰满人妻无码| 婷婷激情五月综合| 淫纸中9区| 91 丝袜在线播放| 神马久久久久| 日产欧美电影一区二区三区| 性无码专区2020| 人人 操人人 操人人| 亚洲1区2区三区高清中文字幕|