github倉庫
- 所需:
- 安裝了Ubuntu20系統(tǒng)的RK3588
- 安裝了Ubuntu18的電腦或者虛擬機
Anaconda教程
YOLOv5教程
經(jīng)過上面兩個教程之后,你應該獲取了自己的best.pt
文件
- 將
models/yolo.py
文件中的class
類下的forward
函數(shù)由:
def forward(self, x):
z = [] # inference output
for i in range(self.nl):
x[i] = self.m[i](x[i]) # conv
bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
if not self.training: # inference
if self.dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:
self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)
if isinstance(self, Segment): # (boxes + masks)
xy, wh, conf, mask = x[i].split((2, 2, self.nc + 1, self.no - self.nc - 5), 4)
xy = (xy.sigmoid() * 2 + self.grid[i]) * self.stride[i] # xy
wh = (wh.sigmoid() * 2) ** 2 * self.anchor_grid[i] # wh
y = torch.cat((xy, wh, conf.sigmoid(), mask), 4)
else: # Detect (boxes only)
xy, wh, conf = x[i].sigmoid().split((2, 2, self.nc + 1), 4)
xy = (xy * 2 + self.grid[i]) * self.stride[i] # xy
wh = (wh * 2) ** 2 * self.anchor_grid[i] # wh
y = torch.cat((xy, wh, conf), 4)
z.append(y.view(bs, self.na * nx * ny, self.no))
return x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x)
改為:
def forward(self, x):
z = [] # inference output
for i in range(self.nl):
x[i] = self.m[i](x[i]) # conv
return x
- 將
export.py
文件中的run
函數(shù)下的語句:
shape = tuple((y[0] if isinstance(y, tuple) else y).shape) # model output shape
改為:
shape = tuple((y[0] if isinstance(y, tuple) else y)) # model output shape
- 將你訓練模型對應的
run/train/
目錄下的exp/weighst/best.pt
文件移動至與export.py
同目錄下 - 保證工作目錄位于yolov5主文件夾,在控制臺執(zhí)行語句:
cd yolov5
python export.py --weights best.pt --img 640 --batch 1 --include onnx --opset 12
- 然后在主文件夾下出現(xiàn)了一個
best.onnx
文件,在Netron中查看模型是否正確 - 點擊左上角菜單->Properties…
- 查看右側(cè)
OUTPUTS
是否出現(xiàn)三個輸出節(jié)點,是則ONNX模型轉(zhuǎn)換成功。 - 如果轉(zhuǎn)換好的
best.onnx
模型不是三個輸出節(jié)點,則不用嘗試下一步,會各種報錯。
-
我使用的是
VMWare
虛擬機安裝的Ubuntu18.04
系統(tǒng),注意,不是在RK3588
上,是在你的電腦或者虛擬機上操作這一步驟。 -
rknn-toolkit2-1.4.0
所需python
版本為3.6
所以需要安裝Miniconda
來幫助管理。 -
安裝
Miniconda for Linux
- 進入到下載得到的
Miniconda3-latest-Linux-x86_64.sh
所在目錄chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh
- 提示什么都一直同意,直到安裝完畢。
- 安裝成功后,重新打開終端。
- 如果安裝成功,終端最前面應該會有一個
(base)
- 安裝失敗的去參考別的
Miniconda3
安裝教程。 - 創(chuàng)建虛擬環(huán)境:
conda create -n rknn3.6 python=3.6
- 激活虛擬環(huán)境:
conda activate rknn3.6
- 激活成功時,終端最前面應該會有一個
(rknn3.6)
- 進入到下載得到的
-
下載
rknn-toolkit2-1.4.0
- 到Ubuntu,下載
源代碼
下的RK356X/RK3588 RKNN SDK
- 進入百度網(wǎng)盤:
RKNN_SDK-> RK_NPU_SDK_1.4.0
下載rknn-toolkit2-1.4.0
- 下載到Ubuntu后,進入
rknn-toolkit2-1.4.0
目錄pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl
- 等待安裝完畢檢查是否安裝成功:
python from rknn.api import RKNN
- 如果沒有報錯則成功。
- 如果報錯:
- 1.是否處于
rknn3.6
虛擬環(huán)境下; - 2.
pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl
是否報錯; - 3.
pip install
報錯的時候,提示缺什么就用pip install
或者sudo apt-get install
安裝什么;
- 1.是否處于
- 到Ubuntu,下載
-
上述所需都安裝并且驗證成功,則開始下一步。文章來源:http://www.zghlxwxcb.cn/news/detail-463236.html
-
將
best.onnx
模型轉(zhuǎn)換為best.rknn
模型文章來源地址http://www.zghlxwxcb.cn/news/detail-463236.html- 進入轉(zhuǎn)換目錄:
cd examples/onnx/yolov5
- 最好是復制一份
test.py
出來進行修改:cp test.py ./mytest.py
- 將一開始定義的文件進行修改,這是我修改之后的:
ONNX_MODEL = 'best.onnx' #待轉(zhuǎn)換的onnx模型 RKNN_MODEL = 'best.rknn' #轉(zhuǎn)換后的rknn模型 IMG_PATH = './1.jpg' #用于測試圖片 DATASET = './dataset.txt' #用于測試的數(shù)據(jù)集,內(nèi)容為多個測試圖片的名字 QUANTIZE_ON = True #不修改 OBJ_THRESH = 0.25 #不修改 NMS_THRESH = 0.45 #不修改 IMG_SIZE = 640 #不修改 CLASSES = ("person") #修改為你所訓練的模型所含的標簽
- 將
if __name__ == '__main__':
中的語句:rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]])
- 修改為
rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')
- 想要程序執(zhí)行完,展示推理效果,將以下語句:
# cv2.imshow("post process result", img_1) # cv2.waitKey(0) # cv2.destroyAllWindows()
- 注釋打開:
cv2.imshow("post process result", img_1) cv2.waitKey(0) cv2.destroyAllWindows()
- 終端執(zhí)行:
python mytest.py
- 運行完展示效果,以及文件夾中出現(xiàn)
best.rknn
則該步驟成功。
- 進入轉(zhuǎn)換目錄:
- 在
RKNN3588
的Ubuntu20
系統(tǒng)上安裝Miniconda
,需要注意的是,RKNN3588
的Ubuntu20
系統(tǒng)為aarch
架構(gòu)因此下載的Miniconda
版本和之前有所不同,需要選擇對應的aarch
版本。 aarchMiniconda下載
- 安裝不再贅述。
- 創(chuàng)建虛擬環(huán)境,因為在
RK3588
上要用到rknn-toolkit-lite2
所以需要安裝python3.7
:- conda create -n rknnlite3.7 python=3.7
- conda activate rknnlite3.7
- 下載
rknn-toolkit-lite2
到RK3588
,也就是下載rknn-toolkit2-1.4.0
,不再贅述。 - 安裝
rknn-toolkit-lite2
- 進入
rknn-toolkit2-1.4.0/rknn-toolkit-lite2
目錄pip install packages/rknn_toolkit_lite2-1.4.0-cp37-cp37m-linux_aarch64.whl
- 等待安裝完畢
- 測試是否安裝成功:
python from rknnlite.api import RKNNLite
- 不報錯則成功
- 進入
- 在
example
文件夾下新建一個test
文件夾 - 在其中放入你轉(zhuǎn)換成功的
best.rknn
模型以及文章開頭github
倉庫下的detect.py
文件 -
detect.py
文件中需要修改的地方:- 定義
RKNN_MODEL = 'best.rknn' #你的模型名稱 IMG_PATH = './1.jpg' #測試圖片名 CLASSES = ("cap") #標簽名
-
if __name__ == '__main__':
:capture = cv2.VideoCapture(11) #其中的數(shù)字為你Webcam的設備編號
- 關(guān)于設備編號,在終端中運行:
v4l2-ctl --list-devices
- 打印出的
Cam
之類的字眼對應的/dev/video11
中的11就是你的設備編號。
- 關(guān)于設備編號,在終端中運行:
- 定義
- 運行腳本:
python detect.py
- 部署完成。
到了這里,關(guān)于yolov5模型(.pt)在RK3588(S)上的部署(實時攝像頭檢測)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!