MCNN多层神经网络论文笔记
复现过程:
首先当然是准备数据集,我没有用论文作者的shanghaitech数据集,准备了malldataset数据集,反正都是大同小异啦。这篇文章的label有一点区别的就是它不是像很多分类的问题一样是0 1 啥的,而是整张图像,这还是我第一次遇到这样的问题,还是蛮新鲜的。
然后参见人群密度估计之MCNN密度图的生成,在MATLAB上写了程序:
clear;
load('perspective_roi.mat');
load('mall_gt.mat'); m=480;n=640;
m=m/4;
n=n/4;
mask = imresize(roi.mask,0.25); %图像缩小4倍
for i=1:2000 %2000幅图像
gt = frame{i}.loc; %第一个frame结构体的loc字段
gt = gt/4;
d_map = zeros(m,n);
for j=1:size(gt,1)
ksize = ceil(25/sqrt(pMapN(floor(gt(j,2)),1)));
ksize = max(ksize,7);
ksize = min(ksize,25);
radius = ceil(ksize/2);
sigma = ksize/2.5;
h = fspecial('gaussian',ksize,sigma);
x_ = max(1,floor(gt(j,1)));
y_ = max(1,floor(gt(j,2))); if (x_-radius+1<1)
for ra = 0:radius-x_-1
h(:,end-ra) = h(:,end-ra)+h(:,1);
h(:,1)=[];
end
end
if (y_-radius+1<1)
for ra = 0:radius-y_-1
h(end-ra,:) = h(end-ra,:)+h(1,:);
h(1,:)=[];
end
end
if (y_-radius+1<1)
for ra = 0:radius-y_-1
h(end-ra,:) = h(end-ra,:)+h(1,:);
h(1,:)=[];
end
end
if (x_+ksize-radius>n)
for ra = 0:x_+ksize-radius-n-1
h (:,1+ra) = h(:,1+ra)+h(:,end);
h(:,end) = [];
end
end
if(y_+ksize-radius>m)
for ra = 0:y_+ksize-radius-m-1
h (1+ra,:) = h(1+ra,:)+h(end,:);
h(end,:) = [];
end
end
d_map(max(y_-radius+1,1):min(y_+ksize-radius,m),max(x_-radius+1,1):min(x_+ksize-radius,n))...
= d_map(max(y_-radius+1,1):min(y_+ksize-radius,m),max(x_-radius+1,1):min(x_+ksize-radius,n))...
+ h;
end
map0_255 = Normalize(d_map)
% %方法1,保存为图片,再转为LMDB
% %把数组A中的数转换成字符串表示形式
str=num2str(i,'./density/seq_%06d.jpg');
%imwrite(d_map,str);
imshow( map0_255);
%方法2,直接转为HDF5
% trainLabels=permute(d_map,[2 1]);
% str=num2str(i,'./density_map/seq_%06d.h5');
% h5create(str,'/label',size(trainLabels),'Datatype','double');
% h5write(str,'/label',trainLabels); end 最后得到的图像规到0-255后输出为:
而d_map中的数据大致是,d_map是0-1之间的数值
对d_map中的数值分析可以得知,就算归到0-255,数值依然很小,所以,成黑白状态。
说明:在pMapN中存的是透视变化的加权值,Roi表示在图像中定义的ROI区域,mask掩码可以实现只对ROI区域操作。
我用的深度学习框架是caffe。提取label是整个实验完成的第一关,前面说了,这个实验比较特殊,label是整张图像。一开始考虑用hdf5传输数据,然而事实证明速度太慢,所以就考虑用两个lmdb,一个装数据,另一个装label,只需要模仿着tools/convert_imageset.cpp 写一个data和label分开存放到两个LMDB里的代码,训练的时候用两个data layer读两个LMDB。
这里为了加速模型的收敛,我进行了减均值和归一化操作。由于数据集只有2000,并不像imagenet那样的大数据,为了提高泛化能力,适应不同的数据集,我这里的均值没有取2000个图片的均值,而是直接设置为127.5,归一化则除以128。
最终的测试程序如下:
- clear;clc;
- addpath('/home/caffe/matlab');
- caffe.reset_all();
- caffe.set_device(0);
- caffe.set_mode_gpu();
- model = 'deploy.prototxt';
- weights = 'network.caffemodel';
- net = caffe.Net(model, weights, 'test');
- cropImg=imread('IMG_12.jpg'); //cropImg是图像裁剪
- cropImg = cropImg(:, :, [3, 2, 1]);
- cropImg = permute(cropImg, [2, 1, 3]); //permute(多维数组,[维数的组合])
- cropImg = single(cropImg);
- cropImg=imresize(cropImg,[480 640]);
- cropImg=(cropImg-127.5)/128;
- res = net.forward({cropImg});
- figure,imshow(cropImg,[]);
- figure,imagesc(res{1,1});
- count = sum(sum(res{1,1}))
- caffe.reset_all();
贴几个效果图:
MCNN多层神经网络论文笔记的更多相关文章
- 基于3D卷积神经网络的人体行为理解(论文笔记)(转)
基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)
ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在dee ...
- 【论文笔记】Progressive Neural Networks 渐进式神经网络
Progressive NN Progressive NN是第一篇我看到的deepmind做这个问题的.思路就是说我不能忘记第一个任务的网络,同时又能使用第一个任务的网络来做第二个任务. 为了不忘记之 ...
- 论文笔记(1):Deep Learning.
论文笔记1:Deep Learning 2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...
- 论文笔记(2):A fast learning algorithm for deep belief nets.
论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...
- 论文笔记:Mastering the game of Go with deep neural networks and tree search
Mastering the game of Go with deep neural networks and tree search Nature 2015 这是本人论文笔记系列第二篇 Nature ...
- 论文笔记之:Visual Tracking with Fully Convolutional Networks
论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015 CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...
- Deep Learning论文笔记之(八)Deep Learning最新综述
Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...
随机推荐
- 第二章 函数和window对象
1.什么是函数函数相当于Java中的方法,每一个函数可以做一件事情,但是不属于某一个类 2.使用函数的好处:使代码模块化,功能分工明确,方便调用,思路功能清晰 3.函数的分类:(1)系统函数:系统提前 ...
- 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!
擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...
- Python记录13:软件开发目录规范
软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...
- Eclipse Error Reporting Welcome to the Eclipse Error Reporting Service.Do you want to help Eclipse? Enable Disable
在开发的时候,使用Eclipse IDE,提示如下信息, 这是Eclipse的错误报告,如果不想发送,可以关闭掉,关闭方法: 选择Preferences -> General -> Err ...
- Django框架详细介绍---模板系统
Django模板系统 官方文档: https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#std:templatetag-for 1 ...
- 怎样才能提交一个让开发人员拍手叫好的bug单
怎样才能提交一个让开发人员拍手叫好的bug单 软件测试人员写得最多的文档就是测试用例和BUG,现在测试用例和BUG都没有标准的模板,每个公司使用的缺陷管理工具都有可能不一样,如果你换了一家公司就有可能 ...
- .net core webapi+vue 跨域访问
最近在做一个前后端分离的示例,以下代码完美解决跨域的问题 一.后端服务 1.首先我们建一个.net core webapi的项目 2.项目引用Microsoft.AspNetCore.Cors 包 3 ...
- PHP5.6 Dockerfile
FROM centos COPY ["src","/src"] RUN groupadd -g 1000 www \ && useradd -u ...
- 剑指offer(54)字符流中第一个不重复的数字
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- shell-awk详细笔记
shell # var="hexiaoqiang" # ${var//PATTERN/SUBSTI}:查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部替 ...