# 导出模型、添加预处理和部分后处理 tutorials
## 一、导出模型
由于原代码是训练代码,如果直接导出模型,会把完整的带有模板分支和搜索分支的模型导出,这样并不是one-shot的推理。
因此我们要导出3个模型,分别是模板分支、搜索分支、neck_head。(虽然backbone是共享参数,但是openvino建议我们最好固定模型shape,因此我们还是分成两个模型,不使用动态shape)
源码中的 [forward函数](https://github.com/researchmm/LightTrack/blob/main/lib/models/super_model_DP.py#L133) ,修改为
```python
def forward(self, zf, xf):
# Batch Normalization before Corr
zf, xf = self.neck(zf, xf)
# Point-wise Correlation
feat_dict = self.feature_fusor(zf, xf)
# supernet head
oup = self.head(feat_dict)
# 添加部分后处理,方便C++端部署
# 分类分支增加 压缩维度+sigmoid
cls_score = nn.functional.sigmoid(torch.squeeze(oup['cls']))
# 回归分支增加 压缩维度
bbox_pred = torch.squeeze(oup['reg'])
return cls_score, bbox_pred
```
#### 1 导出模板分支
```python
net = models.LightTrackM_Subnet('back_04502514044521042540+cls_211000022+reg_100000111_ops_32', 16)
net = load_pretrain(net, '../snapshot/LightTrackM/LightTrackM.pth')
dummy_input = (
torch.randn(1, 3, 128, 128),
)
torch.onnx.export(
net.features,
dummy_input,
args.output_path,
verbose=True,
opset_version=11,
input_names=["z"],
output_names=["zf"],
)
print('----------finished exporting onnx-----------')
print('----------start simplifying onnx-----------')
model_sim, flag = onnxsim.simplify('./z_feature.onnx')
if flag:
onnx.save(model_sim, './z_feature.onnx')
print("---------simplify onnx successfully---------")
else:
print("---------simplify onnx failed-----------")
```
#### 2 导出搜索分支
```python
net = models.LightTrackM_Subnet('back_04502514044521042540+cls_211000022+reg_100000111_ops_32', 16)
net = load_pretrain(net, '../snapshot/LightTrackM/LightTrackM.pth')
dummy_input = (
torch.randn(1, 3, 256, 256),
)
torch.onnx.export(
net.features,
dummy_input,
args.output_path,
verbose=True,
opset_version=11,
input_names=["x"],
output_names=["xf"],
)
print('----------finished exporting onnx-----------')
print('----------start simplifying onnx-----------')
model_sim, flag = onnxsim.simplify('./x_feature.onnx')
if flag:
onnx.save(model_sim, './x_feature.onnx')
print("---------simplify onnx successfully---------")
else:
print("---------simplify onnx failed-----------")
```
#### 3 导出neck_head
```python
net = models.LightTrackM_Subnet('back_04502514044521042540+cls_211000022+reg_100000111_ops_32', 16)
net = load_pretrain(net, '../snapshot/LightTrackM/LightTrackM.pth')
dummy_input = (
torch.randn(1, 96, 8, 8),
torch.randn(1, 96, 16, 16),
)
torch.onnx.export(
net,
dummy_input,
args.output_path,
verbose=True,
opset_version=11,
input_names=["zf", "xf"],
output_names=["cls", "reg"],
)
print('----------finished exporting onnx-----------')
print('----------start simplifying onnx-----------')
model_sim, flag = onnxsim.simplify('./neck_head.onnx')
if flag:
onnx.save(model_sim, './neck_head.onnx')
print("---------simplify onnx successfully---------")
else:
print("---------simplify onnx failed-----------")
```
完整代码在 [tools/export_onnx.py](../tools/export_onnx.py)
## 二、添加预处理
OpenVINO 支持将预处理融入到模型当中,提高速度,方便部署。
#### 1 转换模型
我们首先把上一步得到的3个 ONNX 模型转换成 OpenVINO 模型:
```bash
mo --input_model z_feature.onnx --data_type FP16 --output_dir ./new_ir_models
mo --input_model x_feature.onnx --data_type FP16 --output_dir ./new_ir_models
mo --input_model neck_head.onnx --data_type FP16 --output_dir ./new_ir_models
```
#### 2 添加预处理
模板分支和搜索分支进行相同的预处理。
输入格式 `NHWC` 转为 `NCHW` ;
数据格式 `unsigned char(int8)` 转为 `float32` ;
颜色通道 `BGR` 转为 `RGB` ;
三个通道除以均值 $[123.675, 116.28, 103.53]$ ;
减标准差 $[58.395, 57.12, 57.375]$ 。
```python
# 通过OpenVINO预处理器将预处理功能集成到模型中
z_ppp = PrePostProcessor(z_feature_model)
z_ppp.input().tensor() \
.set_element_type(Type.u8) \
.set_color_format(ColorFormat.BGR) \
.set_layout(Layout('NHWC'))
z_ppp.input().model().set_layout(Layout('NCHW'))
z_ppp.output().tensor().set_element_type(Type.f32)
z_ppp.input().preprocess() \
.convert_element_type(Type.f32) \
.convert_color(ColorFormat.RGB) \
.mean([123.675, 116.28, 103.53]) \
.scale([58.395, 57.12, 57.375])
z_feature_model = z_ppp.build()
# 使用预处理保存模型
serialize(z_feature_model, 'z_feature.xml', 'z_feature.bin')
```
完整代码在 [tools/save_ir.py](../tools/save_ir.py)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕设&课设&项目&实训-基于 Intel OpenVINO Toolkit 部署 LightTrack 跟踪算法,包含 Python 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
毕设&课设&项目&实训-基于 Intel OpenVINO Toolkit 部署 LightTrack 跟踪算法.zip (618个子文件)
bag.avi 997KB
z_feature.bin 2.37MB
x_feature.bin 2.37MB
head.bin 1.36MB
Tracker.cpp 12KB
main.cpp 4KB
.gitignore 142B
Tracker.hpp 498B
0231.jpg 23KB
0228.jpg 23KB
0224.jpg 23KB
0229.jpg 23KB
0227.jpg 23KB
0237.jpg 23KB
0222.jpg 23KB
0226.jpg 23KB
0219.jpg 23KB
0232.jpg 23KB
0233.jpg 23KB
0225.jpg 23KB
0270.jpg 22KB
0236.jpg 22KB
0220.jpg 22KB
0218.jpg 22KB
0205.jpg 22KB
0234.jpg 22KB
0221.jpg 22KB
0230.jpg 22KB
0242.jpg 22KB
0269.jpg 22KB
0191.jpg 22KB
0223.jpg 22KB
0206.jpg 22KB
0235.jpg 22KB
0255.jpg 22KB
0256.jpg 22KB
0202.jpg 22KB
0190.jpg 22KB
0173.jpg 22KB
0271.jpg 22KB
0204.jpg 22KB
0294.jpg 22KB
0268.jpg 22KB
0257.jpg 22KB
0200.jpg 22KB
0203.jpg 22KB
0254.jpg 22KB
0217.jpg 22KB
0265.jpg 22KB
0186.jpg 22KB
0170.jpg 22KB
0238.jpg 22KB
0199.jpg 22KB
0311.jpg 22KB
0252.jpg 22KB
0297.jpg 22KB
0244.jpg 22KB
0215.jpg 22KB
0276.jpg 21KB
0212.jpg 21KB
0239.jpg 21KB
0208.jpg 21KB
0189.jpg 21KB
0243.jpg 21KB
0259.jpg 21KB
0250.jpg 21KB
0263.jpg 21KB
0273.jpg 21KB
0264.jpg 21KB
0181.jpg 21KB
0179.jpg 21KB
0287.jpg 21KB
0296.jpg 21KB
0169.jpg 21KB
0280.jpg 21KB
0187.jpg 21KB
0166.jpg 21KB
0323.jpg 21KB
0180.jpg 21KB
0144.jpg 21KB
0310.jpg 21KB
0106.jpg 21KB
0168.jpg 21KB
0211.jpg 21KB
0298.jpg 21KB
0295.jpg 21KB
0266.jpg 21KB
0216.jpg 21KB
0209.jpg 21KB
0279.jpg 21KB
0140.jpg 21KB
0175.jpg 21KB
0172.jpg 21KB
0176.jpg 21KB
0267.jpg 21KB
0275.jpg 21KB
0262.jpg 21KB
0174.jpg 21KB
0165.jpg 21KB
0192.jpg 21KB
共 618 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功