ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Keras-FCN 推理与评估教程:inference.py 与 evaluate.py 从零上手

Keras-FCN 推理与评估教程:inference.py 与 evaluate.py 从零上手 Keras-FCN 推理与评估教程inference.py 与 evaluate.py 从零上手【免费下载链接】Keras-FCNKeras-tensorflow implementation of Fully Convolutional Networks for Semantic SegmentationUnfinished项目地址: https://gitcode.com/gh_mirrors/ker/Keras-FCNKeras-FCN 是一个基于 Keras TensorFlow 的全卷积网络FCN语义分割实现它能把照片中的人物、车辆、物体逐像素地分类出来是图像分割入门的高质量开源项目。本文聚焦项目中最核心的两个脚本——inference.py模型推理与evaluate.py精度评估从环境准备、数据集配置、参数解读到结果分析手把手带零基础读者跑通 Keras-FCN 推理与评估全流程并看懂 mIoU、像素精度等关键评估指标。上面三张图直观展示了 Keras-FCN 推理的完整链路左侧是原始照片中间是人工标注的标准答案粉色为人物、绿色为自行车右侧则是模型推理输出的分割结果——模型已经学会用不同颜色把物体逐像素区分开。Keras-FCN 是什么一篇看懂全卷积网络语义分割语义分割是计算机视觉中的核心任务目标是为图像中的每一个像素预测类别标签。与只画一个框的目标检测不同分割要求输出与输入同尺寸的标签图因此精度要求更高。Keras-FCN 在models.py中内置了多种经典全卷积网络模型模型名称骨干网络特点FCN_Vgg16_32sVGG16经典 FCN-32s结构简单适合入门AtrousFCN_Vgg16_16sVGG16引入空洞卷积AtrousFCN_Resnet50_32sResNet50更深的特征提取网络AtrousFCN_Resnet50_16sResNet50项目当前表现最好的模型Atrous_DenseNet / DenseNet_FCNDenseNet密集连接结构需 keras-contrib 支持其中AtrousFCN_Resnet50_16s在增强版 Pascal VOC2012 数据集上达到了mIoU 0.661、像素精度约 0.9的成绩是复现和二次开发的首选。上图是 FCN_Vgg16_32s 的网络架构图Models/FCN_Vgg16_32s/model.png前半段是 VGG16 编码器通过卷积池化逐层压缩特征图后半段通过反卷积上采样把特征图恢复到原图分辨率实现像素级分类。项目根目录下还提供了Models/FCN_Resnet50_32s/model.png、Models/AtrousFCN_Resnet50_16s/model.png等架构图方便对照理解不同模型的差异。推理评估前的三步准备环境、数据与预训练权重第一步获取代码并安装依赖将仓库克隆到本地git clone https://gitcode.com/gh_mirrors/ker/Keras-FCN随后安装运行所需依赖主要包括keras、tensorflow、pillow、numpy、opencv-python等DenseNet 系列模型还需要 keras-contrib 的 densenet-atrous 分支。第二步准备 Pascal VOC 2012 数据集推理与评估脚本默认从~/.keras/datasets/VOC2012/VOCdevkit/VOC2012/读取数据其中两个目录最关键JPEGImages原始图片目录.jpgSegmentationClass分割标注目录.png评估时还需要一份验证集图片编号列表文件如combined_imageset_val.txt脚本会按列表逐张处理。第三步生成预训练权重权重文件需要放在Models/模型名/目录下。项目提供了迁移脚本可一键生成 ImageNet 预训练权重python utils/transfer_FCN.py这一步会调用utils/get_weights_path.py下载并转换预训练权重确保后续推理和评估时model.load_weights(checkpoint_path, by_nameTrue)能正常加载。使用 inference.py 跑通首次语义分割推理最简运行命令推理脚本以图片编号作为命令行参数直接运行即可python inference.py 2007_000129脚本会自动定位到Models/DenseNet_FCN/主函数中的默认模型加载checkpoint_weights.hdf5权重对 VOC2012 中编号为2007_000129的图片执行分割并弹窗显示结果。也可以一次传入多张图片编号python inference.py 2007_000129 2007_000491 2007_000871inference.py 关键参数详解推理逻辑封装在inference()函数中inference.py核心参数如下参数作用默认值/示例model_name模型名称须与 models.py 中的函数名一致AtrousFCN_Resnet50_16sweight_file权重文件名位于 Models/模型名/ 下checkpoint_weights.hdf5image_size模型输入尺寸不足部分自动补零(512, 512)image_list待推理的图片编号列表命令行传入data_dir原图所在目录.../JPEGImageslabel_dir标注目录用于读取调色板.../SegmentationClasssave_dir结果保存目录不传则只返回不落盘None推理流程原理解读inference.py的推理管线并不复杂核心步骤包括加载模型与权重通过globals()[model_name]动态创建对应网络再按名称加载权重并打印model.summary()供核对结构图像预处理把原图等比填充到image_size四周补零随后执行preprocess_input归一化前向预测model.predict输出每个像素属于各类别的概率用argmax取概率最大的类别作为该像素的标签后处理还原把预测图裁剪回原图尺寸并套用标注图的调色板result_img.palette label.palette最终得到与原图等大的彩色分割结果。使用 evaluate.py 一键评估语义分割精度训练完模型后如何量化它的分割效果直接运行python evaluate.pyevaluate.py会做两件事先用inference()对验证集全部图片完成推理并保存结果再调用calculate_iou()计算评估指标整个过程自动完成无需手工干预。evaluate.py 关键参数与数据集切换评估函数的核心参数在evaluate()中evaluate.py参数含义nb_classes类别总数VOC2012 为 2120 类物体 背景val_file_path验证集图片编号列表文件batch_size推理批大小默认 1data_dir / label_dir原图与标注目录脚本支持两种数据集配置通过主函数中的dataset变量切换VOC2012_BERKELEYPascal VOC2012 Berkeley 增强标注默认配置COCOMS COCO 实验性支持标注后缀为.npy。看懂评估结果IoU、meanIoU 与像素精度calculate_iou()会先构建一个nb_classes × nb_classes的混淆矩阵统计每个像素的真实类别与预测类别然后计算三个关键指标IoU交并比对每个类别计算 预测区域 ∩ 真实区域 与 预测区域 ∪ 真实区域 的面积比值越接近 1 说明该类别分割得越准meanIoU平均交并比所有类别 IoU 的平均值是语义分割最常用的综合指标Keras-FCN 的AtrousFCN_Resnet50_16s在 VOC2012 上约 0.66像素精度Pixel Accuracy预测正确的像素数占总像素数的比例。运行结束后终端会打印各类别 IoU、meanIOU与像素精度同时所有分割结果图会保存到Models/模型名/res/目录方便逐张人工检查分割效果。推理与评估常见问题排查指南找不到权重文件请先运行python utils/transfer_FCN.py或在train.py中完成训练确保Models/模型名/checkpoint_weights.hdf5存在GPU 显存不足inference.py已通过tf.GPUOptions(allow_growthTrue)开启显存按需增长若仍不足可调小image_size类别数不匹配切换数据集时务必同步修改nb_classesVOC 为 21COCO 为 91否则混淆矩阵会报无效条目标签 255 的处理VOC 标注中 255 代表忽略区域calculate_iou()会自动跳过无需担心结果与标注颜色不一致分割结果调色板取自label_dir中的标注图请确认标注目录路径正确。小结从训练到推理评估的完整工作流至此Keras-FCN 的完整工作流已经清晰python utils/transfer_FCN.py # 生成预训练权重 python train.py # 训练模型参数在 main 函数中调整 python inference.py 2007_000129 # 单张图片推理 python evaluate.py # 验证集批量评估输出 IoU / meanIoU项目关键文件路径整理如下模型定义models.pyFCN_Vgg16_32s、AtrousFCN_Resnet50_16s 等推理脚本inference.py评估脚本evaluate.py训练脚本train.py、train_coco.py工具模块utils/含 BilinearUpSampling、SegDataGenerator、loss_function 等模型权重与架构图Models/模型名/model.json、model.png从单张图片的快速推理到验证集上的批量评估inference.py与evaluate.py几乎覆盖了语义分割模型落地所需的全部环节。建议初学者先跑通AtrousFCN_Resnet50_16s的推理流程再逐步尝试替换数据集与模型相信很快就能在 Keras-FCN 上做出属于自己的语义分割 Demo。【免费下载链接】Keras-FCNKeras-tensorflow implementation of Fully Convolutional Networks for Semantic SegmentationUnfinished项目地址: https://gitcode.com/gh_mirrors/ker/Keras-FCN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表