微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于使用vgg16

如何解决用于使用vgg16

我正在尝试实施反卷积特征金字塔网络 dfpn的目的是将低级特征图与高级特征图进行集成。 请阅读https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0203897部分反卷积特征金字塔网络下的文章。dfpn的输出将在分类网络和回归网络的卷积层之后使用。但是我得到的损失值很差,尤其是对于bBox回归。

我的代码

def generate_dfpn(self):
        self.training_parameters1=[]
        #first step
        self.shape1=tf.shape(self.base_net.conv5_3)
        self.shape2=tf.shape(self.base_net.conv3_3)
        self.deconv1=tf.image.resize(images=self.base_net.conv5_3,size=tf.shape(self.base_net.conv3_3)[1:3])
        self.shape3=tf.shape(self.deconv1)
        #self.conv1=tf.layers.conv2d(inputs=self.deconv1,filters=16,kernel_size=(3,3),padding='same',activation=tf.nn.relu)
        kernel1 = tf.Variable(tf.truncated_normal([3,3,512,256],dtype=tf.float32,stddev=1e-2),name='weights')
        dimensions=[3,256]
        self.conv1= tf.nn.Conv2d(self.deconv1,filters=kernel1,strides=[1,1,1],padding = 'SAME')
        biases = tf.Variable(tf.constant(0.0,shape=dimensions[-1:],dtype=tf.float32),trainable=True,name='biases')
        self.output1 = tf.nn.bias_add(self.conv1,biases)
        self.output1=tf.cond(self.is_training,lambda:tf.keras.layers.Batchnormalization(scale=False,trainable=True)(self.conv1),trainable=False)(self.conv1))
        self.output1=tf.nn.relu(self.output1)
        self.shape4=tf.shape(self.output1)
        self.training_parameters1 += [kernel1,biases]
         
        #second step
        
        self.output2=tf.cond(self.is_training,lambda:tf.keras.layers.Batchnormalization(trainable=True)(self.base_net.conv3_3),lambda:tf.keras.layers.Batchnormalization(trainable=False)(self.base_net.conv3_3))
        self.shape5=tf.shape(self.output2)
        self.output2=tf.keras.layers.Concatenate()([self.output1,self.output2])

        self.deconv2=tf.image.resize_nearest_neighbor(images=self.output2,size=tf.shape(self.base_net.conv2_2)[1:3])
        kernel2 = tf.Variable(tf.truncated_normal([3,256,128],name='weights')
        dimensions2=[3,128]                                          
        self.conv2= tf.nn.Conv2d(self.deconv2,filters=kernel2,padding = 'SAME')
        biases2 = tf.Variable(tf.constant(0.0,shape=dimensions2[-1:],name='biases')
        self.output3=tf.cond(self.is_training,trainable=True)(self.conv2),trainable=False)(self.conv2))
        self.output3=tf.nn.relu(self.output3)
        self.training_parameters1 += [kernel2,biases2]
        #self.shape2=tf.shape(self.output3)
        #add weights of conv layers to the var_list of the minimizer
        #self.base_net.training_parameters += [kernel1,kernel2]

        #third step
        self.output4=tf.cond(self.is_training,lambda:tf.keras.layers.Batchnormalization(trainable=True)(self.base_net.conv2_2),lambda:tf.keras.layers.Batchnormalization(trainable=False)(self.base_net.conv2_2))
        self.output4=tf.keras.layers.Concatenate()([self.output3,self.output4])
        self.shape7=tf.shape(self.output4)

         #fourth step (pooling)
        self.max_pool = tf.nn.max_pool(self.output4,ksize=[1,2,4,padding ='SAME',name='max_pool')
        self.avg_pool = tf.nn.avg_pool(self.output4,name='avg_pool')
        self.dfpn_layer=tf.keras.layers.Concatenate()([self.max_pool,self.avg_pool])
        self.shape_dfpn_layer=tf.shape(self.dfpn_layer)[1:3]
        self.base_net.output_map=self.dfpn_layer
        self.base_net.shape_output_map=self.shape_dfpn_layer
        #self.base_net.shape_output_map1=tf.shape(self.max_pool)
        self.base_net.shape_output_map1=tf.shape(self.dfpn_layer)


以及vgg16代码

# conv1_1 
        self.conv1_1,param = self.conv_layer(images,name_of_scope="conv1_1",dimensions=[3,64])
        self.parameters += param
        
            
        # conv1_2
        self.conv1_2,param = self.conv_layer(self.conv1_1,name_of_scope="conv1_2",64,64])
        self.parameters += param
            
        # pool1
        self.pool1 = tf.nn.max_pool(self.conv1_2,padding = 'SAME',name='pool1')
        
        # conv2_1
        self.conv2_1,param = self.conv_layer(self.pool1,name_of_scope="conv2_1",128])
        self.parameters += param           
        
        # conv2_2 
        self.conv2_2,param = self.conv_layer(self.conv2_1,name_of_scope="conv2_2",128,128])
        self.parameters += param    
            
        # pool2
        self.pool2 = tf.nn.max_pool(self.conv2_2,name='pool2')
        
        # conv3_1
        self.conv3_1,param = self.conv_layer(self.pool2,name_of_scope="conv3_1",256])
        self.parameters += param 
                
        # conv3_2
        self.conv3_2,param = self.conv_layer(self.conv3_1,name_of_scope="conv3_2",256])
        self.parameters += param 
                
        # conv3_3
        self.conv3_3,param = self.conv_layer(self.conv3_2,name_of_scope="conv3_3",256])
        self.parameters += param 
                    
        # pool3
        self.pool3 = tf.nn.max_pool(self.conv3_3,padding='SAME',name='pool3')
        
        # conv4_1
        self.conv4_1,param = self.conv_layer(self.pool3,name_of_scope="conv4_1",512])
        self.parameters += param 
                    
        # conv4_2
        self.conv4_2,param = self.conv_layer(self.conv4_1,name_of_scope="conv4_2",512])
        self.parameters += param 
            
        # conv4_3
        self.conv4_3,param = self.conv_layer(self.conv4_2,name_of_scope="conv4_3",512])
        self.parameters += param 

        # pool4
        self.pool4 = tf.nn.max_pool(self.conv4_3,ksize= [1,name='pool4')
        
        # conv5_1
        self.conv5_1,param = self.conv_layer(self.pool4,name_of_scope="conv5_1",512])
        self.parameters += param 
                   
        # conv5_2 
        self.conv5_2,param = self.conv_layer(self.conv5_1,name_of_scope="conv5_2",512])
        self.parameters += param 
        
        # conv5_3
        self.conv5_3,param = self.conv_layer(self.conv5_2,name_of_scope="conv5_3",512])
        self.parameters += param 
            
        # pool5
        self.pool5 = tf.nn.max_pool(self.conv5_3,name='pool5')

        ## shape 
        self.shape_conv5_3 = tf.shape(self.conv5_3)[1:3]

我使用vgg16的conv5_3作为输出特征图来创建类和回归网络。现在我使用dfpn的输出。 [步骤1]通过预先训练的模型初始化VGG-16网络。

对于i = 1最大化Do

[第二步]将调整大小后的图像发送到VGG-16网络以进行正向传播计算。

[第三步] DFPN用于将较低的特征图与顶层的特征图集成。

[第四步]根据输出特征生成新颖的锚框。

[第五步]基于顶级特征计算分类和回归损失函数

[第六步]执行Erpn的反向传播。

结束

那么dfpn的输出是否被视为顶级功能,或者这是我需要更改的问题?

如果您能帮助我,我将非常感谢。 预先感谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?