DBNet.pytorch icon indicating copy to clipboard operation
DBNet.pytorch copied to clipboard

导出onnx时遇到错误

Open TD-wzw opened this issue 3 years ago • 16 comments

(A$1V9_RX) WWKF~L5GSUHI

TD-wzw avatar Aug 19 '21 02:08 TD-wzw

@TD-wzw hello ,铁子我也是在转mobilev3 为backbone时碰到了这个问题,但是resnet18 就没事,这个问题你解决了吗?

19ethan avatar Sep 15 '21 08:09 19ethan

@TD-wzw hello ,铁子我也是在转mobilev3 为backbone时碰到了这个问题,但是resnet18 就没事,这个问题你解决了吗?

你给原来那个激活函数换一下子换成这样就行 `class Hsigmoid(nn.Module): def init(self, inplace=True): super(Hsigmoid, self).init() self.inplace = inplace

def forward(self, x):
    return F.relu6(x + 3., inplace=self.inplace) / 6.`

TD-wzw avatar Sep 15 '21 08:09 TD-wzw

@TD-wzw 这个时relu-6算子的问题吧,我解决了,但是解决后该问题还在,你是处理了这个就好了吗?

19ethan avatar Sep 15 '21 08:09 19ethan

这个解决完事儿了 我上边报的错是因为原来的Hsigmoid函数用到了threshold,换一种实现方式就行了,换成我上边发的那种

TD-wzw avatar Sep 15 '21 08:09 TD-wzw

relu6算子不报错,报错的是threshold,把mobilenetv3网络结构里边的Hsigmoid改了就行

TD-wzw avatar Sep 15 '21 08:09 TD-wzw

哦,我明白了,谢谢,那就是我只是解决了,relu6 的问题,我这里relu -6 也报错了 class HSwish(nn.Module): def relu6(self,x,inplace=True): return torch.clamp(x,0,6) def forward(self, x): out = x * self.relu6(x + 3, inplace=True) / 6 return out

19ethan avatar Sep 15 '21 08:09 19ethan

relu6我没报过错,唯一报错的地方就是这个,直接用F.relu6就没毛病

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

@TD-wzw 铁子是class HardSigmoid(nn.Module): 这个类吧,你贴给我的是class HSwish(nn.Module)

19ethan avatar Sep 15 '21 09:09 19ethan

要不你再仔细瞅瞅我给你贴的是啥?

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

Hsigmoid HSwish 它俩像么?

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

奥我错了哈哈哈,你说实现方式呗

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

你看一下 https://github.com/MhLiao/DB/blob/master/backbones/mobilenetv3.py 这个是原作者的dbnet,我照着它来的

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

不是,你下下来的是对的,因为我把那个函数名改了,作者写的是叫HardSigmoid,我写的就是叫HSigmoid,他俩一个意思 我就直接给你从开头说到最后得了 1.我的错出在HardSigmoid这个函数,因为它用了F.threshold() 2.解决问题时候参照了一下dbnet原作者的backbone代码,把HardSigmoid换成他那种写法问题就解决了 3.我是直接粘贴复制他的激活函数,他用什么名我就用什么名,和这个项目的激活名不一样,但东西是一个东西

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

我看了看原作者的他不是使用hardsigmoid ,是用了一个近似hardswish 的替代了?

19ethan avatar Sep 15 '21 09:09 19ethan

mobilenetv3就是一个backbone,激活函数你可以随意换,哪怕你用relu或者啥都没人管你,原作者的backbone也是网上开源的一个mobilenetv3,每个人写法不一样,如果你想用原汁原味的mobilentv3直接去看论文,论文里激活函数用啥你就用啥

TD-wzw avatar Sep 15 '21 09:09 TD-wzw

好的,明白了,谢谢铁子!

19ethan avatar Sep 15 '21 09:09 19ethan