jetson_nano_yolov5

Jetson Nano 的初始化

1. 安装镜像系统

Jetson Nano 的各个组件所对应的位置

image-20220323094903676.png

2. 安装jetson-stats工具

使用jetson-stats工具来实时监控系统的各项性能和各种指标,官网链接为

https://github.com/rbonghi/jetson_stats

安装命令如下:

sudo -H pip3 install -U jetson-stats

如果没有pip3就使用如下命令:

sudo apt-get install  python3-pip

安装完成后,reboot你的系统后,使用jtop命令就可以运行了

sudo jtop

3. 查看cuda版本和相关信息

先进入控制栏查看cuda目录

cd /usr/local/cuda/bin

./nvcc -V

将nvcc添加到环境变量

sudo vim ~/.bashrc #进入目录的末尾添加如下几行

# Add this to your .bashrc file
export CUDA_HOME=/usr/local/cuda

# Adds the CUDA compiler to the PATH
export PATH=$CUDA_HOME/bin:$PATH

# Adds the libraries
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

其中有一段会让你输入下载的目标目录,按照喜好选择

然后编译

source ~/.bashrc
nvcc -V # 来查看cuda的版本信息

4. 测试官方demo

Jetson Nano Yolov5 部署手册

1. Yolov5的版本选择

Yolov5的官网:

​ pytorch版本

ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com)

选择YOLOv5 v6.1

2. Conda 管理虚拟环境

下载方式

wget -c https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-aarch64.sh
bash Anaconda3-2021.05-Linux-aarch64.sh


/home/ysc/anaconda3/bin

使用conda 来管理虚拟环境,

下载方法:

conda创建环境和删除环境的操作

conda create -n name python=xx -y  # 创建环境,并指定python版本
conda remove -n name --all  # 彻底删除
conda activate name   #  激活环境

创建虚拟环境

conda create -n yolo python=3.6
conda activate yolo
which python
which pip
  • which python

结果如下

/home/lishun/下载/data/app/anconda/envs/yolo/bin/python

  • which pip

结果如下

/home/lishun/下载/data/app/anconda/envs/yolo/bin/pip

显示虚拟环境列表

conda env list

3. torch和torchvision的选择

torch 版本: pytorch-1.9.0-py36

torchviosion 版本: torchvision-0.10.0

3.1. 下载pytorch-1.9.0-py36

本地或者网络获取

https://nvidia.box.com/shared/static/h1z9sw4bb1ybi0rm3tu8qdj8hs05ljbm.whl?spm=a2c6h.12873639.article-detail.17.b4bd7194M2LZsU&file=h1z9sw4bb1ybi0rm3tu8qdj8hs05ljbm.whl

wget https://nvidia.box.com/shared/static/h1z9sw4bb1ybi0rm3tu8qdj8hs05ljbm.whl -O torch-1.9.0-cp36-cp36m-linux_aarch64.whl  # 从网上下载

sudo apt-get install libopenblas-base libopenmpi-dev  #安装

pip3 install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple

pip3 install numpy==1.19.3 torch-1.9.0-cp36-cp36m-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev

3.2. 安装torchvision-0.10.0

我们同样可以从git上获取到相关的版本

wget https://github.com/pytorch/vision/archive/refs/tags/v0.10.0.tar.gz #下载torchvision-0.10.0的源码

gzip -d v0.10.0.tar.gz

tar -xvf v0.10.0.tar

cd v0.10.0/

export BUILD_VERSION=0.10.0

sudo "填写witch python的地址" setup.py install
# 编译的时间比较长,请耐心等待

#这里我们使用的是conda创建的环境,那么想要把torcvision编译到我们创建的环境,又想要使用sudo权限,就要这样运行命令!因为编译安装的时候,存在需要sudo权限的操作,别问我为什么知道,因为我编译了好几次。

3.3. 测试pytorch和torchvision

# 验证pytorch
import torch
print(torch.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
print('cuDNN version: ' + str(torch.backends.cudnn.version()))
a = torch.cuda.FloatTensor(2).zero_()
print('Tensor a = ' + str(a))
b = torch.randn(2).cuda()
print('Tensor b = ' + str(b))
c = a + b
print('Tensor c = ' + str(c))


# 验证torchvision
import torchvision
print(torchvision.__version__)

验证pytorch结果

image-20231123194719007

验证torchvision 结果

image-20231123194616530

4. 下载Yolov5并查看所需库

  • 下面的所有操作一行代码就能实现:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --verbose
也能看到安装的进度

4.1. 下载yolo相关的文件

建议提前准备好文件夹来存放yolo文件

wget https://github.com/ultralytics/yolov5/archive/refs/tags/v6.1.tar.gz
gzip -d v6.1.tar.gz
tar -xvf v6.1.tar
cd yolov5-6.1/
vim requirements.txt

在需要安装的依赖包文件中,我们可以看到Base、Logging、Export、Extras等组件列表

最核心的就是Base

内部包含:

  • matplotlib>=3.2.2
  • numpy>=1.18.5
  • opencv-python>=4.1.2
  • Pillow>=7.1.2
  • PyYAML>=5.3.1
  • requests>=2.23.0
  • scipy>=1.4.1
  • torch>=1.7.0
  • torchvision>=0.8.1
  • tqdm>=4.41.0

然后就是其他组件

  • tensorboard>=2.4.1
  • pandas>=1.1.4
  • seaborn>=0.11.0
  • thop # FLOPs computation

来查看当前环境有哪些包

pip list

4.2.下载yolo所需的相关库并编译matplotlib

在安装matplotlib之前要先安装一些组件,不然会报错,matplotlib安装起来比较麻烦,编译需要一些时间,请耐心等待

sudo apt-get install libfreetype6-dev
sudo apt-get install pkg-config

pip3 install matplotlib PyYAML requests seaborn tqdm tensorboard thop  -i https://mirrors.aliyun.com/pypi/simple/      # 使用国内的镜像源,下载更快

成功

image-20231123201016015

4.3.opencv

opencv下降和编译巨花费时间,请耐心等待(大约2h)

pip install opencv-python==4.5.5.64 -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose

# --verbose 追踪安装过程,会显示编译进度,至少有一个盼头

运行效果如下,(多少还是有些盼头了)

image-20231123201727374

成功编译:

5. 运行yolov5

如果没设置代理,建议在官网下载权重文件,导入到当前目录下

# 执行预测代码
python detect.py --weights yolov5n.pt --source data/images/bus.jpg

结果如下:

image-20231123223549879

img

YOLOv5训练和使用手册

作为yolov5训练学习手册,记录本人使用yolo过程中遇到的一些问题

1. 出现了torch和torchvision的错误

错误出现的原因是torch-cuda和torchvision-cuda没配对

一定要cuda版本对应相应的cuda版本!!

拿cpu跑100轮费时间6hours

2. 如何训练

参考链接:

  1. 目标检测—教你利用yolov5训练自己的目标检测模型_路 blog . csdn . net / didiaopao / category _113216-CSDN博客
  2. 目标检测—利用labelimg制作自己的深度学习目标检测数据集_目标检测利用labeling制作-CSDN博客
# 训练集的目录结构
- VOCdevkit
    - images
        - train
        - val
    - labels
        - train
        - val
        

Pytorch与ONNX

1. 什么是ONNX?

1.1下载

pip install onnxruntime -i https://mirrors.aliyun.com/pypi/simple/

2.怎么查看ONNX文件的输入输出

import onnxruntime

def main(onnx_model_path):
    # 创建ONNX运行时的InferenceSession
    ort_session = onnxruntime.InferenceSession(onnx_model_path)

    # 打印模型的输入和输出节点
    print("Model input nodes:")
    for node in ort_session.get_inputs():
        print("  ", node.name, node.shape)

    print("\nModel output nodes:")
    for node in ort_session.get_outputs():
        print("  ", node.name, node.shape)

if __name__ == "__main__":
    path = './yolov8n.onnx'
    main(path)

3.ONNX基础

遇到的问题

1. 安装torchvision的时候

编译过程,出现了卡住的情况

报错如下:

gcc -pthread -B /home/lishun/下载/data/app/anconda/envs/yolo/compiler_compat -Wl,–sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DWITH_CUDA -I/home/lishun/下载/vision-0.10.0/torchvision/csrc -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include/torch/csrc/api/include -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include/TH -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/lishun/下载/data/app/anconda/envs/yolo/include/python3.6m -c /home/lishun/下载/vision-0.10.0/torchvision/csrc/ops/roi_pool.cpp -o build/temp.linux-aarch64-3.6/home/lishun/下载/vision-0.10.0/torchvision/csrc/ops/roi_pool.o -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE=”_gcc” -DPYBIND11_STDLIB=”_libstdcpp” -DPYBIND11_BUILD_ABI=”_cxxabi1011” -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=1 -std=c++14
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++

报错的原因
GPT的回答:
你看到的警告表明选项-Wstrict-prototypes适用于C/ObjC,而不适用于C++。当在C++编译中使用一个本来是为C代码设计的命令行选项时,就会出现这种警告。

在你的情况下,似乎在你的编译命令中包含了这个选项:
-Wstrict-prototypes
为了解决这个警告,你可以移除或替换掉这个选项,因为它对C++代码不适用。如果你需要对C++代码进行严格的原型检查,你可以在C文件中使用-Wstrict-prototypes,在C++文件中使用-Wstrict-prototypes -Wstrict-prototypes。

在你提供的编译命令中,不清楚为什么会包含这个选项,因为它通常用于检查C代码中的函数原型,而你的源文件(roi_pool.cpp)是一个C++文件。

因此,你可以尝试移除这个特定的选项,看看是否解决了警告:
解决方法:
gcc -pthread -B /home/lishun/下载/data/app/anconda/envs/yolo/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DWITH_CUDA -I/home/lishun/下载/vision-0.10.0/torchvision/csrc -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include/torch/csrc/api/include -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include/TH -I/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/lishun/下载/data/app/anconda/envs/yolo/include/python3.6m -c /home/lishun/下载/vision-0.10.0/torchvision/csrc/ops/roi_pool.cpp -o build/temp.linux-aarch64-3.6/home/lishun/下载/vision-0.10.0/torchvision/csrc/ops/roi_pool.o -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE="_gcc" -DPYBIND11_STDLIB="_libstdcpp" -DPYBIND11_BUILD_ABI="_cxxabi1011" -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=1 -std=c++14

放置不管也可以的,不影响使用的

或者去这位老哥的帖子去看看
https://stackoverflow.com/questions/8106258/cc1plus-warning-command-line-option-wstrict-prototypes-is-valid-for-ada-c-o

2.在安装torchvision目录下进入python并且调用torchvision

python

import torchvision

报错如下:(警告)

/home/lishun/下载/vision-0.10.0/torchvision/init.py:26: UserWarning: You are importing torchvision within its own root folder (/home/lishun/下载/vision-0.10.0).This is not expected to work and may give errors. Please exit the torchvision project source and relaunch your python interpreter.
warnings.warn(message.format(os.getcwd()))

GPT回答:
这个警告表明你在torchvision项目的根文件夹中(/home/lishun/下载/vision-0.10.0)导入了torchvision模块。这可能导致问题,因为在同一个项目中直接导入可能引起命名空间的混淆。

为了解决这个问题,你可以按照警告中的建议,在退出torchvision项目源码目录后,重新启动你的 Python 解释器。换句话说,确保你在导入 torchvision 之前不在 torchvision 项目的根文件夹中。

解决方法:

不在torchvision目录下执行该命令

3. 安装opencv后编译卡死?

Linux编译opencv需要很长的时间,我们可能认为他卡死了,用下列方法就能追踪他的安装过程了

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose

4. opencv-python编译到最后失败

报错如下:

cmake-install/share/opencv4/lbpcascades/lbpcascade_silverware.xml
Copying files from CMake output
creating directory _skbuild/linux-aarch64-3.6/cmake-install/cv2
copying _skbuild/linux-aarch64-3.6/cmake-install/python/cv2/python-3/cv2.abi3.so -> _skbuild/linux-aarch64-3.6/cmake-install/cv2/cv2.abi3.so
copying _skbuild/linux-aarch64-3.6/cmake-install/python/cv2/init.py -> _skbuild/linux-aarch64-3.6/cmake-install/cv2/init.py
copying _skbuild/linux-aarch64-3.6/cmake-install/python/cv2/load_config_py2.py -> _skbuild/linux-aarch64-3.6/cmake-install/cv2/load_config_py2.py
copying _skbuild/linux-aarch64-3.6/cmake-install/python/cv2/load_config_py3.py -> _skbuild/linux-aarch64-3.6/cmake-install/cv2/load_config_py3.py
copying _skbuild/linux-aarch64-3.6/cmake-install/python/cv2/config.py -> _skbuild/linux-aarch64-3.6/cmake-install/cv2/config.py
copying _skbuild/linux-aarch64-3.6/cmake-install/python/cv2/config-3.py -> _skbuild/linux-aarch64-3.6/cmake-install/cv2/config-3.py
Traceback (most recent call last):
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py”, line 363, in
main()
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py”, line 345, in main
json_out[‘return_val’] = hook(**hook_input[‘kwargs’])
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py”, line 262, in build_wheel
metadata_directory)
File “/tmp/pip-build-env-wj3dpx0y/overlay/lib/python3.6/site-packages/setuptools/build_meta.py”, line 231, in build_wheel
wheel_directory, config_settings)
File “/tmp/pip-build-env-wj3dpx0y/overlay/lib/python3.6/site-packages/setuptools/build_meta.py”, line 215, in _build_with_temp_dir
self.run_setup()
File “/tmp/pip-build-env-wj3dpx0y/overlay/lib/python3.6/site-packages/setuptools/build_meta.py”, line 268, in run_setup
self).run_setup(setup_script=setup_script)
File “/tmp/pip-build-env-wj3dpx0y/overlay/lib/python3.6/site-packages/setuptools/build_meta.py”, line 158, in run_setup
exec(compile(code, file, ‘exec’), locals())
File “setup.py”, line 535, in
main()
File “setup.py”, line 309, in main
cmake_source_dir=cmake_source_dir,
File “/tmp/pip-build-env-wj3dpx0y/overlay/lib/python3.6/site-packages/skbuild/setuptools_wrap.py”, line 683, in setup
cmake_install_dir,
File “setup.py”, line 448, in _classify_installed_files_override
raise Exception(“Not found: ‘%s’” % relpath_re)
Exception: Not found: ‘python/cv2/py.typed’
Building wheel for opencv-python (pyproject.toml) … error
ERROR: Failed building wheel for opencv-python
Failed to build opencv-python
ERROR: Could not build wheels for opencv-python, which is required to install pyproject.toml-based projects

gpt对于回答:

这个错误信息表明在尝试编译安装 opencv-python 时出现了问题。具体而言,它报告了一个找不到文件 'python/cv2/py.typed' 的异常。

查阅了博客之后发现可能得原因是
opencv版本太高了,无法和python3.6配合使用

解决方法:

pip install opencv-python==4.5.5.64 -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose

运行结果如下

image-20231123220925290

5.执行yolo的预测语句报错

执行这句话

python detect.py --weights yolov5n.pt --source data/images/bus.jpg

报错如下

CONTRIBUTING.md detect.py export.py LICENSE README.md setup.cfg tutorial.ipynb val.py
data Dockerfile hubconf.py models requirements.txt train.py utils
(yolo) lishun@lishun-desktop:~/yolo/yolov5-6.1$ python detect.py –weights yolov5n.pt –source data/images/bus.jpg
Matplotlib is building the font cache; this may take a moment.
Downloading https://ultralytics.com/assets/Arial.ttf to /home/lishun/.config/Ultralytics/Arial.ttf…
Traceback (most recent call last):
File “detect.py”, line 42, in
from models.common import DetectMultiBackend
File “/home/lishun/yolo/yolov5-6.1/models/common.py”, line 27, in
from utils.plots import Annotator, colors, save_one_box
File “/home/lishun/yolo/yolov5-6.1/utils/plots.py”, line 65, in
class Annotator:
File “/home/lishun/yolo/yolov5-6.1/utils/plots.py”, line 67, in Annotator
check_pil_font() # download TTF if necessary
File “/home/lishun/yolo/yolov5-6.1/utils/plots.py”, line 60, in check_pil_font
return ImageFont.truetype(str(font), size)
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 797, in truetype
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 794, in freetype
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 198, in init
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/_util.py”, line 19, in getattr
File “/home/lishun/yolo/yolov5-6.1/utils/plots.py”, line 56, in check_pil_font
return ImageFont.truetype(str(font) if font.exists() else font.name, size)
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 797, in truetype
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 794, in freetype
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 198, in init
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/_util.py”, line 19, in getattr
File “/home/lishun/下载/data/app/anconda/envs/yolo/lib/python3.6/site-packages/Pillow-10.1.0-py3.6-linux-aarch64.egg/PIL/ImageFont.py”, line 48, in
ImportError: cannot import name ‘_imagingft’

gpt 的回答如下

看起来你在运行 YOLOv5 的检测脚本 (detect.py) 时遇到了与 Pillow 库相关的问题。错误具体涉及到 Pillow 库中 _imagingft 模块的导入。

解决方法:

卸载重装

1.先删除pillow
pip3 uninstall pillow

2.重新安装pillow并且加上些参数
pip3 install pillow --no-cache-dir

6.opencv摄像头成功调用但是终端不显示画面

问题描述::

opencv成功调用了摄像头,但是终端直接卡死,也不显示画面

可能原因分析:

  1. 没加sudo,没访问摄像头的权限
  2. 没加全局utf-8编码
  3. opencv存在问题,需要重新编译
# 解决方法
sudo python

可以成功调用

但是又出现新的问题:

sudo python 指向的的python是

​ /usr/bin/python

但是conda中yolo的python环境是

/home/lishun/下载/data/app/anconda/envs/yolo/bin/python

解决方法,重新搭建吧,没解决

总结

github