以VOC数据集为例

在voc文件夹打开终端

python voc_label.py

打开voc2007,打开终端(把生成的labels文件下的txt文件移至图片目录)

mv lables/*.txt JPEGImages/

pycharm打开yolov5文件,复制一份coco128.yaml

终端运行

cp data/coco128.yaml data/garbage.yaml

在复制后的文件修改类别和类别名称

复制models 中的yolov5s.yaml文件

cp models/yolov5s.yaml models/garbage_yolov5.yaml

在复制后的文件中修改类别

训练模型

python train.py --weights yolov5s.pt --cfg models/garbage_yolov5.yaml --data/gatbage.yaml --epoch 10 --batch-size 8

完成后将best.pt文件进行wts转换

wts文件转换

git clone https://github.com/wang-xinyu/tensoorrtx.git

将文件tensorrtx/yolov5/gen_wts.py复制到yolov5文件下

在yolov5文件下打开终端

执行生成yolov5s.wts文件

python gen_wts.py --weights best.pt

在nano上将wts文件转换为yolov5s.engine

cd /home/mx/xj_main/yolo_trt
mkdir build
cp ./name.wts /home/mx/xj_main/yolo_trt
cd /home/mx/xj_main/yolo_trt/build
cmake..	
make
sudo ./yolov5 -s name.wts name.engine s #尺寸根据实际训练的尺寸调整

错误:

运行yolov5-5.0出现AttributeError: Can‘t get attribute ‘SPPF‘ 正确解决方法

将下面代码加到model/common.py里面             

import warnings
class SPPF(nn.Module):
    # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
    def __init__(self, c1, c2, k=5):  # equivalent to SPP(k=(5, 9, 13))
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * 4, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
 
    def forward(self, x):
        x = self.cv1(x)
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')  # suppress torch 1.9.0 max_pool2d() warning
            y1 = self.m(x)
            y2 = self.m(y1)
            return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

用DeepStream部署(nano)

克隆项目

git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git

进入Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo/目录下

修改nvdsparsebbox_Yolo.cpp文件中的类型数量

static const int NUM_CLASSES_YOLO = 2;

更改自己 的模型类型数量

保存编译

make

返回上级目录,进入Yolov5-in-Deepstream-5.0/Deepstream 5.0/

将生成的.engine文件和libmyplugins.so放到目录下

修改DeepStream处理流程配置文件deepstream_app_config_yoloV5.txt      

         

...
 
[source0]
#Type - 1=CameraV4L2(usb摄像头) 2=URI(文件) 3=MultiURI
type=1
camera-width=2560
camera-height=720
camera-fps-n=30
camera-fps-d=1
 
...
 
 
[streammux]
...
width=1344
height=376
...
 
[primary-gie]
...
model-engine-file=best.engine
...
 
[tracker]
enable=0
tracker-width=512
tracker-height=320
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_klt.so
 
...

修改[source0],改为用摄像头实时跑识别,需要加上长宽和帧率设置。

[streammux]显示窗口改为1344*376

[primary-gie]修改权重路径

[tracker]改为deepstream5.1的地址

修改config_infer_primary_yoloV5.txt

...
 
model-engine-file=best.engine
 
...
 
num-detected-classes=2
 
...
 
custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so
 
...

                             

修改权重路径

修改识别类型数量,原本为80

修改编译文件路径

注意,文件里还有个labels文件路径的配置

labelfile-path=labels.txt

文件夹里是没有labels                                    .txt的,补上labels.txt标签类型文件

执行命令运行DeepStream

LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐