其他
【他山之石】Pytorch转ONNX-实战篇(tracing机制)
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
地址:https://www.zhihu.com/people/li-jiao-qiao-tiao-shui-guan-jun
01
tracing的机制
c = torch.matmul(a, b)
print("Blabla")
e = torch.matmul(c, d)
t1 = torch.matmul(a, b)
t2 = torch.matmul(c, d)
return t2
if bboxes.numel() == 0:
bboxes = multi_bboxes.new_zeros((0, 5))
labels = multi_bboxes.new_zeros((0, ), dtype=torch.long)
if torch.onnx.is_in_onnx_export():
raise RuntimeError('[ONNX Error] Can not record NMS '
'as it has not been executed this time')
return bboxes, labels
dets, keep = batched_nms(bboxes, scores, labels, nms_cfg)
02
利用tracing机制做优化
count_mat = img.new_zeros((batch_size, 1, h_img, w_img))
for h_idx in range(h_grids):
for w_idx in range(w_grids):
y1 = h_idx * h_stride
x1 = w_idx * w_stride
y2 = min(y1 + h_crop, h_img)
x2 = min(x1 + w_crop, w_img)
y1 = max(y2 - h_crop, 0)
x1 = max(x2 - w_crop, 0)
crop_img = img[:, :, y1:y2, x1:x2]
crop_seg_logit = self.encode_decode(crop_img, img_meta)
preds += F.pad(crop_seg_logit,
(int(x1), int(preds.shape[3] - x2), int(y1),
int(preds.shape[2] - y2)))
count_mat[:, :, y1:y2, x1:x2] += 1
assert (count_mat == 0).sum() == 0
if torch.onnx.is_in_onnx_export():
# cast count_mat to constant while exporting to ONNX
count_mat = torch.from_numpy(
count_mat.cpu().detach().numpy()).to(device=img.device)
count_mat = torch.from_numpy(count_mat.cpu().detach().numpy()).to(device=img.device)
即我们把算出来的count_mat从tensor转换成numpy,再转回tensor。
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
直播预告
“他山之石”历史文章
联邦学习:FedAvg 的 Pytorch 实现
PyTorch实现ShuffleNet-v2亲身实践
详解凸优化、图神经网络、强化学习、贝叶斯方法等四大主题
史上最全!近千篇机器学习&自然语言处理论文!都这儿了
训练时显存优化技术——OP合并与gradient checkpoint
详解凸优化、图神经网络、强化学习、贝叶斯方法等四大主题
浅谈数据标准化与Pytorch中NLLLoss和CrossEntropyLoss损失函数的区别
在C++平台上部署PyTorch模型流程+踩坑实录
libtorch使用经验
系统梳理 Tensorflow、PyTorch 等深度学习框架,洞悉 AI 底层原理和算法
深度学习模型转换与部署那些事(含ONNX格式详细分析)
如何支撑上亿类别的人脸训练?显存均衡的模型并行(PyTorch实现)
NLP高阶实战必读:一文走遍完整自然语言处理流程
PyTorch trick 集锦
分享、点赞、在看,给个三连击呗!