1.导出bmodel模型命令格式
python3 -m bmnetp --model=model.pt --net_name=detect --target=BM1684 --outdir=detect --shapes="[1,416,416,3]" --opt=2 --cmp=true --dyn=true --enable_profile=true
2. bmodel模型输出个数与pt模型输出个数不一致
示例代码:
def forward(self, input_img):
with torch.no_grad():
hm, box = self.model(input_img)
sigmoid_heatmap = hm.sigmoid()
tlrb = torch.exp(box)
pool_hm = nn.functional.max_pool2d(sigmoid_heatmap, kernel_size=3, padding=1, stride=1)
return sigmoid_heatmap, tlrb, pool_hm
上述代码导出的pt模型将有3个输出:sigmoid_heatmap, tlrb, pool_hm
。
在pt模型转bmodel过程中,其bmetp转换工具将sigmoid_heatmap
当做输入,而从导致bmodel模型只有两个输出tlrb, pool_hm
,推理引擎也只能识别出两个输出tlrb, pool_hm
,而结点sigmoid_heatmap
依旧存在,但是无法通过结点的名字来获取其中的tensor。
bitmain的推理引擎只能获取输出结点的tensor,而无法获取到中间结点的tensor。**
对上述代码做以下改动:
def forward(self, input_img):
with torch.no_grad():
hm, box = self.model(input_img)
sigmoid_heatmap = hm.sigmoid()
sigmoid_hm = hm.sigmoid()
tlrb = torch.exp(box)
pool_hm = nn.functional.max_pool2d(sigmoid_hm, kernel_size=3, padding=1, stride=1)
return sigmoid_heatmap, tlrb, pool_hm
上述代码导出的pt模型将有3个输出:sigmoid_heatmap, tlrb, pool_hm
。
生成的bmodel模型也有3个输出:sigmoid_heatmap, tlrb, pool_hm
。