ios部署yolov5

本文档详细介绍了将YOLOv5模型转换为ONNX格式,并使用NCNN进行移动端部署的步骤。首先,通过检测脚本验证权重文件的正确性,然后利用export.py将pt模型转换为onnx,再用monnxsim简化模型。在转换过程中可能会遇到不支持的slice step问题。最后,展示了YoloV5类的定义,包括模型结构、类标签和输出层信息,适用于iOS平台的物体检测应用。
摘要由CSDN通过智能技术生成

参考网址:https://github.com/cmdbug/YOLOv5_NCNN

 

这里这三个输出层的名称,每一个人转出来的不一定一样。

 

结构查看:  https://netron.app/

 

查看best.pt转换生成的param文件结构,然后修改

标签名,类名,输出层

//
//  YoloV5.hpp
//  YOLOv5NCNN
//
//  Created by WZTENG on 2020/7/6.
//  Copyright © 2020 TENG. All rights reserved.
//

#ifndef YoloV5_hpp
#define YoloV5_hpp

#include <stdio.h>
#include "ncnn/ncnn/net.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <UIKit/UIImage.h>
#import <functional>

namespace yolocv {
    typedef struct {
        int width;
        int height;
    }YoloSize;
}

typedef struct {
    std::string name;
    int stride;
    std::vector<yolocv::YoloSize> anchors;
}YoloLayerData;

typedef struct BoxInfo {
    float x1;
    float y1;
    float x2;
    float y2;
    float score;
    int label;
}BoxInfo;

class YoloV5 {
public:
    YoloV5(bool useGPU);
    ~YoloV5();
    std::vector<BoxInfo> dectect(UIImage *image, float threshold, float nms_threshold);
    //改成自己的类别
    std::vector<std::string> labels{"person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light",
        "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow",
        "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee",
        "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard",
        "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple",
        "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch",
        "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone",
        "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear",
        "hair drier", "toothbrush"};
    
//    std::vector<std::string> labels{"sender", "receiver"};

private:
    static std::vector<BoxInfo> decode_infer(ncnn::Mat &data, int stride, const yolocv::YoloSize& frame_size, int net_size, int num_classes, const std::vector<yolocv::YoloSize>& anchors, float threshold);
    static void nms(std::vector<BoxInfo>& result, float nms_threshold);
    
    ncnn::Net* Net;
    int input_size = 640;
    int num_class = 80;  // 修改成自己的类别
    std::vector<YoloLayerData> layers{  // 根据param文件去改
        {"394", 32, {{116, 90}, {156, 198}, {373, 326}}},
        {"375", 16, {{30, 61}, {62, 45}, {59, 119}}},
        {"output", 8, {{10, 13}, {16, 30}, {33, 23}}},
    };
    
public:
    static YoloV5 *detector;
    static bool hasGPU;
    static bool toUseGPU;
    
};


#endif /* YoloV5_hpp */

 

附:宏观思路

ONNX转换NCNN部署到移动端

第一步:测试训练好的权重文件能否正常检测图片

python detect.py --source xxx --weights yolov5s.pt --conf 0.25

 

第二步: 转换pt模型文件到 onnx模型

python models/export.py --weights yolov5s.pt --img  640  --batch 1

 

第三步: 简化模型

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

 

附:如果提示

Unsupported slice step !

Unsupported slice step !

Unsupported slice step

 

引用\[1\]:Yolov5是一个目标检测算法,可以将其移植到iOS平台上运行。你可以通过以下步骤来进行部署: 1. 首先,你需要安装Cocoapods,可以使用以下命令进行安装: ``` brew install cocoapods ``` 或者 ``` sudo gem install cocoapods ``` 2. 下载Yolov5的代码包,并解压。你可以从链接\[1\]中下载。 3. 进入解压后的目录,使用以下命令进行环境准备: ``` sudo chmod -R 777 yolov5-ios-tensorflow-lite-main pod install ``` 4. 完成环境准备后,会生成一个名为ObjectDetection.xcworkspace的文件。打开该文件。 5. 在Xcode中编译和运行项目。 需要注意的是,Yolov5iOS平台上的运行效果可能一般,可能需要对模型进行优化。在下载的代码包中,有两个模型文件yolov5n-fp16.tflite和yolov5s-fp16.tflite,你可以尝试使用自己训练模型转换为tflite模型来进行测试。\[1\] 如果你需要更详细的部署步骤和说明,可以参考链接\[2\]和\[3\]中的文章。 #### 引用[.reference_title] - *1* [Mac M1移植YoloV5ios运行](https://blog.csdn.net/pocean2012/article/details/126081677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Yolov5手机端部署](https://blog.csdn.net/qq_33031419/article/details/127396652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值