# object_divide **Repository Path**: edwinjiang703/object_divide ## Basic Information - **Project Name**: object_divide - **Description**: 基于Slim框架下的VGG-16来进行FCN 8S的物体分割实验 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-07-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # object_divide #### 项目介绍 物体分割实验
一 代码说明
1 convert_fcn_dataset.py 将VOCVOC2012的图片数据集转换成TFRecord格式。 生成两个文件。fcn_train.record和fcn_val.record。每个大约400MBMB
2 train.py 模型训练文件。添加了部分代码。实现了FCN 8S的功能。生成的feature map大小是原图的八分之一。信息量增大。易于进行实例分割
3 val__img.jpg. 原图文件
val__prediction.jpg 预测的图片文件
val__prediction_crfed.jpg. 经过优化边缘的图片文件
二 实现FCN 8S部分代码说明: #对pool的第三层进行一次分类操作
pool3_feature = end_points['vgg_16/pool3'] with tf.variable_scope('vgg_16/fc8'): aux_logits_8s = slim.conv2d(pool3_feature,number_of_classes,[1,1], activation_fn=None, weights_initializer = tf.zeros_initializer, scope='conv_pool3')
#对前面生成的32*32的feature map进行2倍的上采样,变成和pool3进行分类后一样的大小。 都是64*64
upsampled_logits = tf.nn.conv2d_transpose(upsampled_logits,upsample_filter_tensor_x2, output_shape=tf.shape(aux_logits_8s), strides=[1,2,2,1], padding='SAME')
#将pool3层分类后的feature map加上新生成的fearture map得到新的feature map,大小是64*64
upsampled_logits = upsampled_logits+aux_logits_8s
#对上述网络进行8倍的上采样
upsample_filter_np_x8 = bilinear_upsample_weights(upsample_factor, #改为8 number_of_classes)
upsample_filter_tensor_x8 = tf.Variable(upsample_filter_np_x8, name='vgg_16/fc8/t_conv_x8') upsampled_logits = tf.nn.conv2d_transpose(upsampled_logits, upsample_filter_tensor_x8, output_shape=upsampled_logits_shape, strides=[1, upsample_factor, upsample_factor, 1], padding='SAME')
三 FCN理解:
FCN 8S 是在VGG网络预训练模型的基础上加以改造,提升最后输出层的feature map大小,由之前的32分之1变成原图的8分之1. 这样即利用了预训练模型的权重,减少了训练时间,同时提高了feature的大小,使得能够适应物体分割这样的场景。
1 代替原来的最后一层的全联接,用7*7的卷积进行计算。这样可以接受输入端任意图片的大小。
2 先对pooling 4这一层进行分类,然后把VGG网络原始的最终输出进行一次反卷积,再将它们进行相加得到一个新的输出。之后再对pooling 3这一层进行分类,然后把上一步生成的新的输出进行一次反卷积操作,把这里个操作得到的结果再进行相加得到一个新的输出。 最后对这个新的输出进行双线性插值以及一个8倍的反卷积得到最终的结果
四 训练体会:
实验下来,有些图片的分割效果还行。比如val_1600_prediction_crfed.jpg,val_1200_prediction_crfed.jpg,val_800_prediction_crfed.jpg.
但是有的效果就不好。比如val_1000_img.jpg 对应的val_1000_prediction_crfed.jpg就不行。原因是不是因为这个图片在训练集没有语义分类的标签造成的.或者是训练的次数少。本次测试设定的次数是1500次。