EfficientNet环境搭建&网络修改

引子

在深度学习CV领域,最初2012年突破的就是图像分类,发展这么多年,基本上已经没有什么进展了。此篇作为之前EfficientNet项目应用的总结,现在整理下,OK,让我们开始吧。

一、EfficientNet安装

1、pytorch版本网址:GitHub - lukemelas/EfficientNet-PyTorch: A PyTorch implementation of EfficientNet and EfficientNetV2 (coming soon!)

2、pip install efficientnet_pytorch

二、特征提取网络修改

1、修改EfficientNet原始代码model.py中extract_features函数如下图:

新增红框中pool层,修改特征输出维度,重新训练,训练log如下:

2、pth模型转onnx

import torch
from efficientnet_pytorch import EfficientNet
import torch.nn as nn

net_path=r'efficientnet-b0_1.pth'
model=torch.load(net_path)

model.set_swish(memory_efficient=False)
model.eval()
    
input_names = ["input"]
output_names = ["output"]
onnx_names= "NonplateColor.onnx"
dynamic = True
if dynamic:
    dummy_input = torch.randn(1, 3, 224, 224, device='cuda')
    dynamic_axes = {"input":{0:"batch_size"},"output":{0:"batch_size"}}
    torch.onnx.export(  model, 
                        dummy_input, 
                        onnx_names, 
                        verbose=False, 
                        input_names=input_names, 
                        output_names=output_names,
                        dynamic_axes=dynamic_axes,
                        do_constant_folding= True,
                        opset_version=10,
                        )   
else:   
    dummy_input = torch.randn(1, 3, 224, 224, device='cuda')
    torch.onnx.export(model, dummy_input, onnx_names, verbose=True, input_names=input_names, output_names=output_names)

3、onnx模型删减网络层

import onnx

onnx_model = onnx.load("EfficientNetType1115.onnx")
graph = onnx_model.graph
node  = graph.node

# 909节点为要删除的Conv节点
old_scale_node = node[254]
old_scale_node1 = node[255]
old_scale_node2 = node[256]
# 删除旧节点
graph.node.remove(old_scale_node)  
graph.node.remove(old_scale_node1)
graph.node.remove(old_scale_node2)
# 上一节点
gap_node = node[253]
# 连接输出
gap_node.output[0] = 'output'

# 修改输出维度
for output in onnx_model.graph.output:
    d = output.type.tensor_type.shape.dim
    # d[0].dim_value= 'batch_size'
    d[1].dim_value = 1280

# 保存新的模型
onnx.checker.check_model(onnx_model)
onnx.save(onnx_model, 'out.onnx')

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要养家的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值