# 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次。