• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: SSD  抽取权重  VOC  

资源简介

SSD检测网络抽取权重,用于生成更好的预训练模型,加快收敛速度。

资源截图

代码片段和文件信息

# coding:utf-8
import numpy as np
import sys

caffe_root=‘/home/mx/caffe/‘
sys.path.insert(0caffe_root+‘python‘)
import caffe

caffe.set_device(0)
caffe.set_mode_gpu() # 使用GPU模式

voc_deploy=‘/home/mx/tempfile/net_surgery/deploy_voc.prototxt‘ # 21类的deploy文件
voc_caffemodel=‘/home/mx/tempfile/net_surgery/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel‘ # 21类的caffemodel文件
kitti_deploy=‘/home/mx/tempfile/net_surgery/deploy_kitti.prototxt‘ # 4类的deploy文件

voc_net=caffe.Net(voc_deployvoc_caffemodelcaffe.TEST) # 从caffemodel加载参数
kitti_net=caffe.Net(kitti_deploycaffe.TEST) # 参数由系统初始化

# 需要修改的层,从21类中挑出4类使用
change_layer=[‘conv4_3_norm_mbox_conf‘‘fc7_mbox_conf‘‘conv6_2_mbox_conf‘‘conv7_2_mbox_conf‘‘conv8_2_mbox_conf‘‘conv9_2_mbox_conf‘]

# 定义字典,层名和输入通道数对应起来,有两种类型,prior_box=4 or 6
name_channel_84={‘conv4_3_norm_mbox_conf‘:512‘conv8_2_mbox_conf‘:256‘conv9_2_mbox_conf‘:256}
name_channel_126={‘fc7_mbox_conf‘:1024‘conv6_2_mbox_conf‘:512‘conv7_2_mbox_conf‘:256}

for name in voc_net.params.keys():
    if(name not in change_layer):
        if(name==‘conv4_3_norm‘):
            kitti_net.params[name][0].data[...] = voc_net.params[name][0].data # 单独处理conv4_3_norm
        else:
            kitti_net.params[name][0].data[...] = voc_net.params[name][0].data
            kitti_net.params[name][1].data[...] = voc_net.params[name][1].data

# 处理mbox_conf的卷积层参数,首先是prior_box=4的三个层
for namechannel in name_channel_84.items():
    weight=voc_net.params[name][0].data # 暂存卷积核权重
    bias=voc_net.params[name][1].data # 暂存偏置项
    w=np.zeros((16channel33)) # 目标维度是(16channel33),初始化为全0
    b=np.zeros((16)) # 偏置项是一维矩阵
    # 按照voc的类别顺序,依次提取背景(0)、自行车(2)、汽车(7)、行人(15)的卷积核权重和偏置项
    for i in [0123]:
        w[4 * i ...] = weight[21 * i ...]
        w[1 + 4 * i ...] = weight[2 + 21 * i ...]
        w[2 + 4 * i ...] = weight[7 + 21 * i ...]
        w[3 + 4 * i ...] = weight[15 + 21 * i ...]
        b[4 * i] = bias[21 * i]
        b[1 + 4 * i] = bias[2 + 21 * i]
        b[2 + 4 * i] = bias[7 + 21 * i]
        b[3 + 4 * i] = bias[15 + 21 * i]
    # 存入到kitti_net的对应层
    kitti_net.params[name][0].data[...]=w
    kitti_net.params[name][1].data[...]=b

# 处理mbox_conf的卷积层参数,首然后是prior_box=6的三个层
for namechannel in name_channel_126.items():
    weight=voc_net.params[name][0].data 
    bias=voc_net.params[name][1].data 
    w=np.zeros((24channel33)) 
    b=np.zeros((24)) 
    for i in [012345]:
        w[4 * i ...] = weight[21 * i ...]
        w[1 + 4 * i ...] = weight[2 + 21 * i ...]
        w[2 + 4 * i ...] = weight[7 + 21 * i ...]
        w[3 + 4 * i ...] = weight[15 + 21 * i ...]
        b[4 * i] = bias[21 * i]
        b[1 + 4 * i] = bias[2 + 21 * i]
        b[2 + 4 * i] = bias[7 + 21 * i]
        b[3 + 4 * i] = bias[15 + 21 * i]
    kitti_net.params[name][0].data[...]=w
    kitti_net.params[name][1].data[...]=b

print(‘all the parameters have been wrote.‘)

# 保存caffemodel文件到本地目录
# 使用该模型作为预训练模型,可加快训练速度,精度也有一定提升
kitti_net.save(‘/home/mx/tempfile/net_surgery/V

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3525  2018-01-26 13:25  convert_caffemodel_ch.py
     文件       24528  2017-04-23 06:46  deploy_kitti.prototxt
     文件       24539  2016-12-19 12:01  deploy_voc.prototxt

评论

共有 条评论