本文主要是介绍deep learning: heat Map,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
reference: http://blog.csdn.net/liyaohhh/article/details/50990927
图像的heatMap是什么,一副图片的heatmap可以帮助我们在上面检测到想要的object,如下左图所示:
可以直接的看到,人脸的的区域有红色区域,这个时候呢用sliding window在图片上进行检测,对于每一个窗口里面的object进行识别,就是检测这个window里面的object是不是红色的区域,是的话就是检测的到的人脸啦。这里我们首先看一下我们程序的结果: 右上方的图片最后的那个区域就是哦我们想要的,那个红色的区域就是我们想要的。
具体的做法就是先在classification net上进行pre-train,之后去掉softmax层,改全部的fc层改成卷积层,如何该呢,参考这个链接,代码如下:
- def convert_full_conv(model_net,model_params,model_net_fc,model_params_fc):
- //原有的全连接层
- params = ['fc6', 'fc7']
- params_fc = ['fc6-conv', 'fc7-conv']
- //加载原有的classification net
- net = caffe.Net(model_net, model_params, caffe.TEST)
- //提取fc层中的最后的两个fc层作为一个字典{layerName:(c*w*h,b)}
- fc_params = {pr: (net.params[pr][0].data, net.params[pr][1].data) for pr in params}
- //加载fc-conv net
- net_fc = caffe.Net(model_define_fc, model_weight, caffe.TEST)
- //fc-conv参数
- conv_params = {pr: (net_fc.params[pr][0].data, net_fc.params[pr][1].data) for pr in params_fc}
- //把fc层的后面的三个参数flat,也就是相乘
- for pr, pr_conv in zip(params, params_fc):
- conv_params[pr_conv][0].flat = fc_params[pr][0].flat
- conv_params[pr_conv][1][...] = fc_params[pr][1]
- net_fc.save(model_weight_fc)
- print 'convert done!'
- return net_fc
之后把原来的那张图片输入网络,就会得到最终的heatmap,之所以有那么多的heatmap是因为对图片进行了不同程度的放缩。
这篇关于deep learning: heat Map的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!