基于caffe的CNN_训练+预测_思考记录(2)

在对数据集进行预处理并且制作完成之后,便要开始训练数据集了,一般情况下CNN的搭建都是参考业内大牛的网络,或者在大牛的网络上进行细微的修改,所以对于大多数CNN使用者来说,搭建网络并非主要任务,最重要的是如何使用网络。当数据集输入然后输出网络时,对于数据集图片,最关心的问题便是输入输出的图片尺度大小,因为网络的输入与输出端对图片有着严格的要求,并且在整个网络训练和预测过程中,还会对图片进行尺度的变化,所以就大多数项目的要求来看,输入和输出网络的理想状态便是黑盒状态,即对于使用者来说,无需关注网络所要求的尺寸,只要知道输入与输出的尺度是否满足项目需求就可以。这就要求在网络的前端和后端要对图片进行合理而有效的缩放,以适应网络的要求以及项目的需求。


还是以我的人群密度估计项目为例。CNN是参考onoro教授在2016年eccv上写的一篇文章,网络的输入要求图片尺度为72×72,其中虽然经过了几个卷积层,但是卷积层的kernel_size和pad大小刚好抵消,所以经过卷积层的图片尺度并没有发生改变。但是在其中两个卷积层之后分别跟随有一个池化层,其kernel_size均为2,经过此两个池化层图片的长和宽均缩小为原来的四倍,即输出featuremap成为18×18。就项目的黑盒要求来看,自然是要求输入为158×238的图片,输出为158×238的人群密度图,这就必须要对CNN的输入端和输出端的图片进行适当的预处理和后续处理。


首先来看输入,因为数据集UCSD的尺度为158×238,所以需要对数据集图片进行分块,使得子块大小为72×72,才能满足输入网络的尺度要求。分块时不仅仅要对数据集图片进行分块,还要对以人群密度真值图为基础的标签进行分块,同时要使得分块的标准在图片和标签上完全相同,这样才能在训练和预测时一一匹配,以便后续的拼接。


关于分块,有两种分块方式,一种为等距离分块,另一种为随机分块。因为考虑到要尽可能地将图片和标签全方位地覆盖到,所以采取等距离全覆盖分块,使得整幅图片和标签上的每一处都能够在分块所产生的子块中找到,从而减少因为随机分块而导致的数据集图片和标签缺失部分的现象。


因为CNN使得图片在输入端和输出端的尺度不同,而标签是要与图片在经过网络后输出的featuremap比较的,首先要保证尺度相同,所以在对数据集图片和标签分块之后,还要对标签进行reshape,使其符合网络输出featuremap的尺度大小,这样才能作出有效的比较,进而在训练时才能保证在比较结束后,使得比较结果对下一次迭代起到参考和调整的作用。


在所有数据集图片通过CNN之后,即训练结束之后,输出得到则是众多18×18的featuremap图,与我们所想要的整体图片的密度图还相去甚远,所以接下来要做的首先是要将这些18×18的featuremap恢复到72×72的大小。最简单的一种关于图片缩放的方法便是,缩小时进行抽值,放大时进行插值。


在将featuremap恢复大小之后,接下来便是要按照当初分块时所对应的分块坐标点对于reshape后的featuremap进行重新排列组合,使其恢复到原始图像大小,最终得到的才是我们想要的关于输入整体图片的人群密度图。


CNN网络对于输入输出数据图片有着严格的尺度要求,只有预先对数据集进行图片尺度的预处理,才能保证网络的正常运行。其次,还要在图片输出网络后,对得到的featuremap进行后续的处理。特别是在回归问题的时候,因为此类问题多数情况下输出的featuremap便是我们最终所要的回归目标的一部分,只有对其进行正确的后续处理,才能得到我们最终想要的结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值