torch转caffe

    xiaoxiao2022-07-07  202

     

     

    https://github.com/jacke121/brocolli

     

    https://blog.csdn.net/weixin_38501242/article/details/82624071

     

    这个好像靠谱:3年前:

    https://www.pytorchtutorial.com/pytorch-to-caffe/

     

    https://github.com/marvis/pytorch-caffe-darknet-convert

     

    注释是错的,不注释是对的:

    参考这个改的:https://github.com/kangnuli/pytorch2caffe/blob/c3659583fc5543ed34aadf7eadbfabc307f3a494/pytorch_to_caffe.py

    TypeError: _cat() got an unexpected keyword argument 'dim'

    这个就是参数名字错了,原来是dimension,改成dim就可以了

    def _cat(raw,inputs, dim=0): x=raw(inputs, dim) bottom_blobs=[] for input in inputs: bottom_blobs.append(log.blobs(input)) layer_name=log.add_layer(name='cat') top_blobs=log.add_blobs([x],name='cat_blob') layer=caffe_net.Layer_param(name=layer_name,type='Concat', bottom=bottom_blobs,top=top_blobs) layer.param.concat_param.axis =dim log.cnet.add_layer(layer) return x # def _cat(raw, inputs, dimension=0): # x = raw(inputs, dimension) # bottom_blobs = [] # for input in inputs: # bottom_blobs.append(log.blobs(input)) # layer_name = log.add_layer(name='cat') # top_blobs = log.add_blobs([x], name='cat_blob') # # layer = caffe_net.Layer_param(name=layer_name, type='Concat', # bottom=bottom_blobs, top=top_blobs) # layer.param.concat_param.axis = dimension # log.cnet.add_layer(layer) # return x def _interpolate(raw, input,size=None, scale_factor=None, mode='nearest', align_corners=None): # 定义的参数包括 scale,即输出与输入的尺寸比例,如 2;scale_h、scale_w, # 同 scale,分别为 h、w 方向上的尺寸比例;pad_out_h、pad_out_w,仅在 scale 为 2 时 # 有用,对输出进行额外 padding 在 h、w 方向上的数值;upsample_h、upsample_w,输 # 出图像尺寸的数值。在 Upsample 的相关代码中,推荐仅仅使用 upsample_h、 # upsample_w 准确定义 Upsample 层的输出尺寸,其他所有的参数都不推荐继续使用。 # for nearest _interpolate if mode != "nearest" or align_corners != None: raise NotImplementedError("not implement F.interpolate totoaly") x = raw(input,size , scale_factor ,mode) layer_name = log.add_layer(name='upsample') top_blobs = log.add_blobs([x], name='upsample_blob'.format(type)) layer = caffe_net.Layer_param(name=layer_name, type='Upsample', bottom=[log.blobs(input)], top=top_blobs) layer.upsample_param(size =(input.size(2),input.size(3)), scale_factor= scale_factor) log.cnet.add_layer(layer) return x # def _interpolate(raw,input, size=None, scale_factor=None, mode='nearest', align_corners=None): # raise NotImplementedError("The interpolate upsampling in pytorch cannot be implimented in caffe by This function, I'll try later. ") # # if mode=='bilinear': # x=raw(input, size, scale_factor, mode, align_corners) # else: # raise NotImplementedError("The interpolate upsampling only support bilinear in Caffe") # name=log.add_layer(name='interpolate') # log.add_blobs([x],name='interpolate_blob') # layer=caffe_net.Layer_param(name=name, type='Deconvolution', # bottom=[log.get_blobs(input)], top=[log.get_blobs(x)]) # # def bilinear_weight(shape): # weight = np.zeros(np.prod(shape), dtype='float32') # f = np.ceil(shape[3] / 2.) # c = (2 * f - 1 - f % 2) / (2. * f) # for i in range(np.prod(shape)): # x = i % shape[3] # y = (i / shape[3]) % shape[2] # weight[i] = (1 - abs(x / f - c)) * (1 - abs(y / f - c)) # return weight.reshape(shape) # kernel_size=2*scale_factor-scale_factor%2 # stride=scale_factor # pad=int(np.ceil((scale_factor-1)/2)) # channels=x.size(1) # weight=bilinear_weight([channels,1,kernel_size,kernel_size]) # layer.conv_param(channels,kernel_size,stride=stride,pad=pad,bias_term=False,groups=channels) # layer.add_data(weight) # log.cnet.add_layer(layer) # return x

     

    最新回复(0)