自动驾驶-利用tensorflow实现fcn对图片语义分割

本文详细介绍了如何在TensorFlow中利用预训练的VGG16模型构建FCN,进行图像语义分割。通过1x1卷积、上采样和跳跃连接技术,解决道路分割问题,并探讨了训练过程中的超参数选择,包括batch_size、epoch和learning_rate。文章还展示了FCN模型的实际应用效果,并预告了后续关于过拟合和欠拟合的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一章介绍了FCN技术,本章将结合代码介绍FCN模型在tensorflow中的实现。
FCN模型分为编码和解码部分,其中编码部分使用卷积神经网络模型,主要处理对图像进行分类的问题,而实际上已经有很多性能良好的卷积神经网络网络模型例如AlexNet、VGG16和GoogLeNet。所以在搭建FCN模型时,可以直接利用tensorflow提供的接口使用已经训练好的模型,再用1x1卷积神经网络替换全连接层,结合上采样和跳跃连接对图像进行语义分割。
这里写图片描述

构造模型

加载VGG16

使用tf.save_model.loader.load加载vgg16模型,提取模型中第7层全连接层和第3、4层的池化层。

def load_vgg(sess, vgg_path):
    """
    Load Pretrained VGG Model into TensorFlow.
    :param sess: TensorFlow Session
    :param vgg_path: Path to vgg folder, containing "variables/" and "saved_model.pb"
    :return: Tuple of Tensors from VGG model (image_input, keep_prob, layer3_out, layer4_out, layer7_out)
    """
    #   Use tf.saved_model.loader.load to load the model and weights
    vgg_tag = 'vgg16'
    vgg_input_tensor_name = 'image_input:0'
    vgg_keep_prob_tensor_name = 'keep_prob:0'
    vgg_layer3_out_tensor_name = 'layer3_out:0'
    vgg_layer4_out_tensor_name = 'layer4_out:0'
    vgg_layer7_out_tensor_name = 'layer7_out:0'

    tf.saved_model.loader.load(sess, [vgg_tag], vgg_path)
    image_input = tf.get_default_graph().get_tensor_by_name(vgg_input_tensor_name)
    keep_prob = tf.get_default_graph().get_tensor_by_name(vgg_keep_prob_tensor_name)
    layer3_out = tf.get_default_graph().get_tensor_by_name(vgg_layer3_out_tensor_name)
    layer4_out = tf.get_default_graph().get_tensor_by_name(vgg_layer4_out_tensor_name)
    layer7_out = tf.get_default_graph().get_tensor_by_name(vgg_layer7_out_tensor_name)
    return image_input, keep_prob, layer3_out, layer4_out, layer7_out

构造解码器

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值