FCN代码解析

本文作者分享了自己在理解FCN(全卷积网络)过程中遇到的困惑和解决之道,包括solve.py文件中训练步数的问题、seg_tests中语义分割和几何分割的解读,以及surgery.py中全连接层到全卷积层转化的实现。虽然在score.py的评估指标部分存在理解难度,但作者鼓励读者面对未知代码要耐心调试,以揭示其工作原理。

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

网上有许多FCN网络的安装和训练教程,但却没有代码解读的详细教程,这让我这种刚刚入门深度学习的萌新不知所措;为了弄清楚FCN,不知走了多少弯路,想把它记录下来,给自己看看,也希望能帮助到那些和我一样刚刚入门的人。
以下只是小弟的一些拙见,若有错误与不足欢迎指出~
话不多说,上代码:


首先是solve.py文件,fcn没有用sh脚本去写训练文件,应该是和他自己写的surgery.py和score.py有关;里面有两个问题我希望有大牛可以帮忙解决:
1. for _ in range(50):
solver.step(2000)
发现设置完这个以后solver.prototxt中设置的 max_iter失效;
2. score.seg_tests(solver, False, test, layer=’score_sem’, gt=’sem’)
score.seg_tests(solver, False, test, layer=’score_geo’, gt=’geo’)
语义分割和几何分割的解读

#solve.py

import caffe
import surgery, score

import numpy as np
import os                  #os模块封装了操作系统的目录和文件操作
import sys

try:
    import setproctitle
    setproctitle.setproctitle(os.path.basename(os.getcwd()#获得当前路径)#返回最后的文件名)
    #比如os.getcwd()获得的当前路径为/home/zhangrf/fcn,则os.path.basename()为fcn;
    #setproctitle是用来修改进程入口名称,如C++中入口为main()函数
except:
    pass

weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'                   #用来fine-tune的FCN参数
vgg_weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'               #训练好的VGGNet参数
vgg_proto = '../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt' #VGGNet模型

# init
#caffe.set_device(int(sys.argv[1]))
#获取命令行参数,其中sys.argv[0]为文件名,argv[1]为紧随其后的那个参数
caffe.set_device(0) #GPU型号
caffe.set_mode_gpu() #用GPU模式运行

#solver.net.copy_from(weights)
solver = caffe.SGDSolver('solver.prototxt') #调用SGD(随即梯度下降)Solver方法,solver.prototxt为所需参数
vgg_net = caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN) #vgg_net是原来的VGGNet模型(包括训练好的参数)
surgery.transplant(solver.net,vgg_net) #FCN模型(参数)与原来的VGGNet模型之间的转化
del vgg_net #删除VGGNet模型  


# surgeries
interp_layers = [k for k in solver.net.params.keys() if 'up' in k] #interp_layers为upscore层
surgery.interp(solver.net, interp_layers) #将upscore层中每层的权重初始化为双线性内核插值。

# scoring
test = np.loadtxt('../data/sift-flow/test.txt', dtype=str) #载入测试图片信息

for
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值