2025/02更新
JetBot購買時安裝JetPack4.3,因為啟動GPU很耗電,所以直接使用變壓器供電,外接USB攝影機(/dev/video1),詳細軟體版本,執行jetson_release結果如下。
#jetson_release
- NVIDIA Jetson NANO/TX1
* Jetpack 4.3 [L4T 32.3.1]
* CUDA GPU architecture 5.3
- Libraries:
* CUDA 10.0.326
* cuDNN 7.6.3.28-1+cuda1
* TensorRT 6.0.1.10-1+cuda1
* Visionworks 1.6.0.500n
* OpenCV 4.1.1 compiled CUDA: YES
- Jetson Performance: inactive
Step1)從https://github.com/AlexeyAB/darknet.git下載程式碼,如以下指令。
$ mkdir yolov
$ cd yolov
$ git clone https://github.com/AlexeyAB/darknet.git
$ cd darknet
Step2)編譯產生執行檔darknet
編輯Makefile,Jetson nano計算能力為53,設定為compute_53,code=[sm_53,compute_53],刪除第39行前方的#字號即可
$ vi Makefile
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0
ZED_CAMERA_v2_8=0
......
以下刪除第39行前方的#字號即可
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]
接著執行make編譯產生執行檔darknet
$make
Step3)讓Jetson nano維持最大效能,jetson_clocks設定風扇速度最大
$ sudo nvpmodel -m 0
$ sudo jetson_clocks
以下步驟回復正常效能
$ sudo nvpmodel -m 1
$ sudo nano /sys/devices/pwm-fan/target_pwm,修改為0,表示風扇速度降低為0
#sudo jetson_clocks --show 查詢是否回復正常狀態
Step4)下載yolov4.weight
$ wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
Step5)辨識圖片,執行指令「./darknet detect cfg/yolov4.cfg yolov4.weights data/eagle.jpg」辨識圖片eagle.jpg,辨識結果自動儲存在preditions.jpg,如下圖。
Step6)辨識影片,以下執行需要Jetson Nano連接HDMI螢幕,或安裝遠端桌面程式,使用遠端桌面連線至JetBot,執行指令「./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights car.mp4 -out_filename car.avi」辨識影片car.mp4,辨識結果儲存到car.avi,如下圖。
影片來自於https://pixabay.com/videos/car-road-transportation-vehicle-2165/
Step7)以下執行需要Jetson Nano連接HDMI螢幕,或安裝遠端桌面程式,使用遠端桌面連線至JetBot,執行「darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -c 1 」開啟USB攝影機(dev/video1)進行即時辨識,「Ctrl+C」中斷執行。
(1)出現nvcc找不到錯誤
#nano ~/.bashrc
新增以下兩行
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
執行.bashrc
#source ~/.bashrc
(2)出現以下錯誤
./src/network_kernels.cu(721): error: identifier "cudaStreamCaptureModeGlobal" is undefined
編輯network_kernels.cu
#nano network_kernels.cu
第721行找到cudaStreamCaptureModeGlobal,整行前面加上//
//CHECK_CUDA(cudaStreamBeginCapture(stream0, cudaStreamCaptureModeGlobal));
#make clean
#make