海思3516EV200开发--yolov5测试

一、训练yolov5模型,转onnx

1、下载yolov5:https://github.com/ultralytics/yolov5

2、创建虚拟环境,安装依赖库

conda create -n yolov5-6.1 python=3.7
conda activate yolov5-6.1

进入yolov5目录,注释 requirements.txt 文件中的 torch、torchvision 行,取消 coremltools、onnx、onnx-simplifier、scikit-learn 行前面的注释,安装依赖库,并在pytorch中安装合适的pytorch版本

pip install -r requirements.txt
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.2 -c pytorch

3、修改训练参数和模型结构(以yolov5s-6.1为例)

    a、创建data/xxx.yaml文件,确认训练数据路径、类别数目、类别名;
    b、修改models/yolov5s.yaml文件中类别数目与data/xxx.yaml文件类别数目相同;
    c、修改models/yolov5s.yaml中的网络结构,将focus层修改为conv层(caffe不支持focus层),并设置stride为2,如不修改在进行onnx转caffe时会报以下错误:

Traceback (most recent call last):
  File "convertCaffe.py", line 159, in <module>
    convertToCaffe(graph, prototxt_path, caffemodel_path, exis_focus=True, focus_concat_name="Concat_40", focus_conv_name="Conv_41")
  File "convertCaffe.py", line 83, in convertToCaffe
    layer = converter_fn(node, graph, err)
  File "/home/lcat/Projects/yolov5_onnx2caffe/onnx2caffe/_operators.py", line 505, in _convert_resize
    height_scale = scales[2]
IndexError: index 2 is out of bounds for axis 0 with size 0

修改后的yolov5s.yaml文件内容如下:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# parameters
nc: 2  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  #[[-1, 1, Focus, [64, 3]],  # 0-P1/2
  [[-1, 1, Conv, [64, 3, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   #[-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [-1, 1, nn.ConvTranspose2d, [256,256,2,2]],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   #[-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [-1, 1, nn.ConvTranspose2d, [128,128,2,2]],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

4、模型训练,修改 train.py 相关训练参数并开始训练

--weights            ROOT / 'yolov5s.pt'
--cfg                ROOT / 'models/yolov5s.yaml'
--data               ROOT / 'data/xxx.yaml'
--epochs             200         
--batch-size         8
--imgsz              384
--workers            0
python train.py

5、模型导出,修改 export.py 相关导出参数并导出onnx模型

--data               ROOT / 'data/xxx.yaml'
--weights            需要转换的.pt模型路径
--imgsz              [384, 384]
python export.py

6、模型简化

python -m onnxsim yolov5s.onnx yolov5s-sim.onnx

二、下载安装caffe,onnx转caffe

 1、miniconda创建caffe环境

conda create -n caffe python=3.6
conda activate caffe
pip install pip -U
pip install numpy

2、安装caffe

sudo apt install git
sudo git clone https://github.com/Wulingtian/yolov5_caffe.git

安装caffe-gpu

conda install -c anaconda caffe-gpu

安装onnx

conda install -c conda-forge onnx

安装onnxruntime

conda install -c conda-forge onnxruntime

2、下载yolov5_onnx2caffe,转换为caffe

(1)修改yolov5的 models/yolo.py 文件中的forward函数,如不修改可能会报 keyerror:xxx 错误,修改后的内容如下:

#    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.onnx_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)

#                y = x[i].sigmoid()
#                if self.inplace:
#                    y[..., 0:2] = (y[..., 0:2] * 2 - 0.5 + self.grid[i]) * self.stride[i]  # xy
#                    y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
#                else:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953
#                    xy = (y[..., 0:2] * 2 - 0.5 + self.grid[i]) * self.stride[i]  # xy
#                    wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
#                    y = torch.cat((xy, wh, y[..., 4:]), -1)
#                z.append(y.view(bs, -1, self.no))

#        return x if self.training 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[0],x[1],x[2]

(2)onnx转caffe

git clone https://github.com/Wulingtian/yolov5_onnx2caffe.git

进入yolov5_onnx2caffe目录,修改convertCaffe.py中的模型路径

  • onnx_path:需要转换的onnx模型
  • prototxt_path:转换为caffe的prototxt保存路径
  • caffemodel_path:转换为caffe的caffemodel保存路径
python convertCaffe.py

三、下载安装opencv

1、下载:https://opencv.org/releases/

2、安装

(1)编译

unzip opencv-4.7.0.zip
cd opencv-4.7.0
mkdir build
cd build
sudo apt install cmake
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_ENABLE_NONFREE=True ..
sudo make -j8
sudo make install

(2)配置环境

a、修改etc/bash.bashrc

sudo vim /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
sudo updatedb
source /etc/bash.bashrc

报错:sudo: updatedb: command not found

解决:sudo apt install mlocate 

b、修改动态库

sudo vim /etc/ld.so.conf.d/opencv.conf 
# 在末尾添加
/usr/local/lib 
# 更新
sudo ldconfig

(3)检查是否安装成功

pkg-config --modversion opencv4     #查看版本号
pkg-config --libs opencv4           #查看libs库

(4)程序测试

进入~/opencv-4.7.0/samples/cpp/example_cmake$ 目录,执行以下命令:

mkdir build
cd ./build
cmake ..
make
./opencv_example

四、下载安装cuda

1、在cuda官网选择合适版本进入下载页面,本文选择 CUDA Toolkit 11.7.0

下载地址:https://developer.nvidia.com/cuda-toolkit-archive

2.依次选择【Linux】->【x86_64】->【Ubuntu】->【22.04(选择自己的ubuntu版本号)】->【deb(local)】

3、下拉复制框中代码进行安装

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda-repo-ubuntu2204-11-7-local_11.7.0-515.43.04-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-7-local_11.7.0-515.43.04-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

在用apt-get安装软件包的时候遇到E: Sub-process /usr/bin/dpkg returned an error code (1)问题,解决方法如下:

cd /var/lib/dpkg/
sudo mv info/ info_bak          # 现将info文件夹更名
sudo mkdir info                 # 再新建一个新的info文件夹
sudo apt-get update             # 更新
sudo apt-get -f install         # 修复
sudo mv info/* info_bak/        # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
sudo rm -rf info                # 把自己新建的info文件夹删掉
sudo mv info_bak info           # 把以前的info文件夹重新改回名

4、配置cuda path

vim ~/.bashrc

在文件末尾加入: 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
source ~/.bashrc        # 更新环境变量配置
nvcc -V                 # 查看cuda的版本号

安装cuda2:

1、下载: http://​https://developer.nvidia.com/cuda-toolkit-archive​ 

2、执行官方下载安装命令进行安装

wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
sudo sh cuda_11.7.0_515.43.04_linux.run

执行sudo sh cuda_11.7.0_515.43.04_linux.run之后,选择Continue

输入accept

点击空格,取消安装驱动,然后选择Install

安装完成

3、配置环境变量

输入以下命令打开文件

gedit ~/.bashrc

在文件结尾输入以下语句,保存并关闭文档

export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

输入以下命令

source ~/.bashrc

4、查看cuda信息

nvcc -V

五、下载安装cuDNN

 1、下载: https://developer.nvidia.com/rdp/cudnn-download 

2、安装

(1)查看 Installation Guide 

(2)安装Zlib

sudo apt-get install zlib1g

(3)在下载文件目录下解压并安装

tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include 
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

(4)验证是否安装成功

sudo cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

六、caffe模型推理

1、下载 yolov5_caffe:

git clone https://github.com/Wulingtian/yolov5_caffe.git

2、修改 yolov5_caffe/tools/caffe_yolov5s.cpp 参数

INPUT_W                模型输入宽度
INPUT_H                模型输入高度
NUM_CLASS              模型有多少个类别
NMS_THRESH             做非极大值抑制的阈值
CONF_THRESH            类别置信度
prototxt_path          caffe模型的prototxt路径
caffemodel_path        caffe模型的caffemodel路径
pic_path               测试图片路径

3、定位到yolov5_caffe目录下,执行以下命令

make all -j8
cd build
./tools/caffe_yolov5s

执行 make all -j8 命令

报错1:

make: protoc: No such file or directory

解决1:

protoc --version
sudo apt install protobuf-compiler

 报错2:

./include/caffe/solver.hpp:3:10: fatal error: boost/function.hpp: No such file or directory

解决2:

sudo apt update
sudo apt install libboost-all-dev

报错3:

./include/caffe/common.hpp:5:10: fatal error: gflags/gflags.h: No such file or directory

解决3:

sudo apt install libgflags-dev

 报错4:

./include/caffe/common.hpp:6:10: fatal error: glog/logging.h: No such file or directory

解决4:

sudo apt install libgoogle-glog-dev

报错5:

./include/caffe/util/device_alternate.hpp:34:10: fatal error: cublas_v2.h: No such file or directory

解决5:

a、找到文件路径

find /usr/local/ -name cublas_v2.h

b、添加路径到配置文件

vim ~/.bashrc
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/cuda-11.7/targets/x86_64-linux/include

报错6:

./include/caffe/util/cudnn.hpp:5:10: fatal error: cudnn.h: No such file or directory

解决6:安装cudnn

错误7:

./include/caffe/util/mkl_alternate.hpp:14:10: fatal error: cblas.h: No such file or directory

解决7:

sudo apt install libatlas-base-dev

报错8:

src/caffe/layers/hdf5_data_layer.cu:10:10: fatal error: hdf5.h: No such file or directory

解决8:

sudo apt-get install libhdf5-serial-dev

报错9:

src/caffe/layers/image_data_layer.cpp:2:10: fatal error: opencv2/core/core.hpp: No such file or directory

解决9:

  • 52
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值