【图像分类】基于OpenVINO实现PyTorch ResNet50图像分类

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主

🍻本文由virobotics(仪酷智能)原创首发

🥳欢迎大家关注✌点赞👍收藏⭐留言📝

前言

Hello,大家好,我是virobotics(仪酷智能),一个深耕于LabVIEW和人工智能领域的开发工程师。

前面博文给大家介绍了OpenVINO工具包及具体的安装,今天我们一起来看一下,如何使用LabVIEW OpenVINO工具包实现resnet50的推理部署。


一、ResNet简介

1.1 ResNet概念及特点

ResNet在2015名声大噪,何恺明推出的ResNet在ISLVRC和COCO上横扫所有选手,获得冠军,而且影响了2016年DL在学术界和工业界的发展方向。ResNet在网络结构上做了大创新,而不再是简单的堆积层数,它对每层的输入做一个reference, 学习形成残差函数, 而不是学习一些没有reference的函数。这种残差函数更容易优化,能使网络层数大大加深。

我们知道,在计算机视觉里,特征的"等级"随增网络深度的加深而变高,研究表明,网络的深度是实现好的效果的重要因素。然而梯度弥散/爆炸成为训练深层次的网络的障碍,导致无法收敛。有一些方法可以弥补,如归一初始化,各层输入归一化,使得可以收敛的网络的深度提升为原来的十倍。然而,虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差, 如下图。 这种deep plain net收敛率十分低下。

1.2 ResNet完整结构

ResNet比起VGG19这样的网络深很多,但是运算量是少于VGG19等的。如下图所示为其完整结构:

1.3 ResNet50 网络模型

ResNet50是ResNet中的一种, ResNet50 网络中包含了 49 个卷积层、一个全连接层。如图下图所示,ResNet50网络结构可以分成七个部分,第一部分不包含残差块,主要对输入进行卷积、正则化、激活函数、最大池化的计算。第二、三、四、五部分结构都包含了残差块,图中的绿色图块不会改变残差块的尺寸,只用于改变残差块的维度。在ResNet50网络结构中 ,残差块都有三层卷积,那网络总共有1+3×(3+4+6+3)=49个卷积层,加上最后的全连接层总共是 50 层,这也是ResNet50 名称的由来。网络的输入为 224×224×3,经过前五部分的卷积计算,输出为 7×7×2048,池化层会将其转化成一个特征向量,最后分类器会对这个特征向量进行计算并输出类别概率。

二、环境搭建

2.1 部署本项目时所用环境

  • 操作系统:Windows10
  • python:3.6及以上
  • LabVIEW:2018及以上 64位版本
  • AI视觉工具包:techforce_lib_opencv_cpu-1.0.0.98.vip【1.0.0.98及以上版本均可】
  • OpenVINO工具包:virobotics_lib_openvino-1.0.0.9.vip【1.0.0.9及以上版本均可】

2.2 LabVIEW工具包下载及安装


三、LabVIEW OpenVINO实现resnet50图像分类

3.1 模型获取及转换为onnx

  • 安装pytorch和torchvision
  • 获取torchvision中的模型:resnet50(我们获取预训练好的模型):
python 复制代码
original_model = models.resnet50(pretrained=True)
  • 转onnx
python 复制代码
def get_pytorch_onnx_model(original_model):
    # define the directory for further converted model save
    onnx_model_path = "A:\\code\\pytorch\\image_classfier"
    # define the name of further converted model
    onnx_model_name = "resnet50.onnx"

    # create directory for further converted model
    os.makedirs(onnx_model_path, exist_ok=True)

    # get full path to the converted model
    full_model_path = os.path.join(onnx_model_path, onnx_model_name)

    # generate model input
    generated_input = Variable(
        torch.randn(1, 3, 224, 224)
    )

    # model export into ONNX format
    torch.onnx.export(
        original_model,
        generated_input,
        full_model_path,
        verbose=True,
        input_names=["input"],
        output_names=["output"],
        opset_version=11
    )

    return full_model_path

完整获取模型及转换python代码如下:

python 复制代码
import os
import torch
import torch.onnx
from torch.autograd import Variable
from torchvision import models


def get_pytorch_onnx_model(original_model):
    # define the directory for further converted model save
    onnx_model_path = "A:\\code\\pytorch\\image_classfier"
    # define the name of further converted model
    onnx_model_name = "resnet50.onnx"

    # create directory for further converted model
    os.makedirs(onnx_model_path, exist_ok=True)

    # get full path to the converted model
    full_model_path = os.path.join(onnx_model_path, onnx_model_name)

    # generate model input
    generated_input = Variable(
        torch.randn(1, 3, 224, 224)
    )

    # model export into ONNX format
    torch.onnx.export(
        original_model,
        generated_input,
        full_model_path,
        verbose=True,
        input_names=["input"],
        output_names=["output"],
        opset_version=11
    )

    return full_model_path


def main():
    # initialize PyTorch MobileNetV2
    original_model = models.resnet50(pretrained=True)

    # get the path to the converted into ONNX PyTorch model
    full_model_path = get_pytorch_onnx_model(original_model)
    print("PyTorch resnet50 model was successfully converted: ", full_model_path)


if __name__ == "__main__":
    main()

3.2 LabVIEW OpenVINO调用 resnet50实现图像分类(openvino_resnet.vi.vi)

ImageNet (image-net.org),本课程使用到的模型是基于ILSVRC的1000种物体分类模型,如下图所示为在LabVIEW中部署ResNet50实现图像分类,使用OpenVINO实现加速。 ==注意:请将整个项目工程放置到不含有中文的路径中,否则会出现无法运行的情况。==

运行结果如下,可以看到可以准确分类,因为我们调用的模型为与训练模型,所以只能分类1000种,如需更多分类,可以重新训练模型。

四、项目源码

如需源码,可查看blog.csdn.net/virobotics/...


总结

以上就是今天要给大家分享的内容,希望对大家有用。我们下篇文章见~

如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299。进群请备注:LabVIEW机器视觉

如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

相关推荐
guoji77884 分钟前
安全与对齐的深层博弈:Gemini 3.1 Pro 安全护栏与对抗测试深度拆解
人工智能·安全
实在智能RPA12 分钟前
实在 Agent 和通用大模型有什么不一样?深度拆解 AI Agent 的感知、决策与执行逻辑
人工智能·ai
独隅16 分钟前
PyTorch 模型部署的 Docker 配置与性能调优深入指南
人工智能·pytorch·docker
lihuayong23 分钟前
OpenClaw 系统提示词
人工智能·prompt·提示词·openclaw
黑客说37 分钟前
AI驱动剧情,解锁无限可能——AI游戏发展解析
人工智能·游戏
踩着两条虫43 分钟前
AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库
android·前端·vue.js·人工智能·低代码·系统架构·rxjava
小仙女的小稀罕1 小时前
听不清重要会议录音急疯?这款常见AI工具听脑AI精准转译
开发语言·人工智能·python
reesn1 小时前
qwen3.5 0.8B纠正任务实践
人工智能·语言模型
实在智能RPA1 小时前
实在Agent 制造业落地案例:探寻工业大模型从实验室走向车间的实战路径
人工智能·ai