人脸识别任务中,做蒸馏训练小网络时,发现测试蒸馏后的网络的千分点frr、万分点frr都是0,说明对于所有输入,网络的输出相同了。因此需要可视化caffemodel的权重确认是否模型失效(推测模型权重接近0)。
- 需要明确的:
Caffe主要处理两种形式的数据流:
1. 第一种数据流,图像和标签在网络上的传输,随着网络的传输,它们转化更高层次的表示,最终以得分或者概率值的形式输出。
2. 第二种数据流,主要保存各个网络层的参数,比如卷积层的weights和bias. 这些值是随着的网络的训练过程不断变化的。
这两种数据流虽然说角色不一样,但是都是以blob的形式进行保存和处理的。本篇博文只对网络中的第二种数据流进行可视化(由于是在python的虚拟环境下测试的,需要的tcl库有问题,所以目前只是将相应的数值进行输出并没有通过matpyplotlib包进行可视化显示)
- 工具准备
1、配置好caffe的python接口(在caffe-master下:make pycaffe或使用protoc 工具手动编译caffe-master/python/proto生成caffe的python接口(ptotoc --python_out=. caffe.proto))
2、需要的相关python包都装好(我是通过创建python虚拟环境安装的(pipenv))
- 需要的代码主体
#编译好pycaffe,加载好caffe的python接口
import os,sys
import matplotlib.pyplot as plt
#import numpy as np
caffe_root = '/home/spark/caffe-master'
os.chdir(caffe_root)
caffe_python = caffe_root + '/python'
sys.path.insert(0,caffe_python)
import caffe
#设置caffe的运行模式为cpu,加载模型定义文件(注意这里使用deploy.prototxt)和模型权重文件
caffe.set_mode_cpu()
model_def = caffe_root + "/examples/Distill_Experimet/check_model/deploy.prototxt"
model_weights = caffe_root + "/examples/Distill_Experimet/model/fit_method/stage2/res50_stu_1_b_0.5_iter_160000.caffemodel"
#将网络和模型进行加载,并使用测试模式(不执行dropout)
net = caffe.Net(model_def, #模型结构
model_weights, #模型参数
caffe.TEST) #测试模式
print(net.params['stage2_unit4_conv1'][0].data)#打印卷积核的参数
print(net.params['stage2_unit4_conv1'][0].data.shape)#打印卷积核的shape
#print(net.params['conv0'][1].data) 打印偏执参数
#print(net.params['conv0'][1].data.shape) 打印偏执shape
- 权重和权重shape可视化的结果
[[[[ 2.85918195e-05 7.31788459e-05 -4.35399299e-04]
[-1.97530710e-04 1.56638598e-05 1.88119244e-04]
[-3.87767970e-04 -3.53787880e-04 -5.74383477e-04]]
[[-6.24565466e-04 2.72265635e-04 -4.74647386e-04]
[-9.88911197e-05 2.18531772e-04 -6.25106914e-04]
[ 2.18421439e-04 1.76478730e-04 -1.07452412e-04]]
...
[[ 1.78139060e-04 1.11633490e-04 2.23182389e-04]
[ 2.26858610e-04 -4.85154189e-04 -5.52502868e-04]
[ 8.36784893e-05 7.53474742e-05 7.75686232e-04]]
[[-3.92734277e-04 -8.61052395e-05 8.78248306e-04]
[-6.60601945e-04 4.92856379e-05 -2.42564056e-04]
[-3.64533480e-05 3.49401264e-04 3.64219100e-04]]]]
(128, 128, 3, 3)
可见权重参数在e-4和e-5量级(基本接近于0),所以模型失效了。
而可视化正确分类的model权重数值在e-2,e-3左右。