使用numpy实现caffe/AlexNet图像分类器的前向检测功能

虽然卷积神经网络之前已存,但AlexNet网络的实现加快了卷积深度神经网络的发展,这一点让AlexNet居功至伟。与之前的一篇LeNet的前向检测的计算相比,AlexNet网络的前向计算要复杂得多,共有五个卷积层和三个全连接层。还有两个额外的Local Response Normalization的运算,以进一步增强神经网络的准确度,用numpy实现起来也颇费周折。本文提到的相关Python代码可在https://github.com/LinkYe/LearnDeep上获得。

首先,笔者缺少环境训练AlexNet,模型文件是caffe官网下载的:http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel。执行alexnet-weight.py将该模型文件重写为NPZ文件,在创建AlexNetCM对象时读取它:

读取的五个卷积核需要进行翻转,这一点在上一篇文章也提到过,这里使用了flipReverse()方法。之后为AlexNetCM类实现了卷积/池化/LRN等方法,最后着重是前向检测的运算过程: 

 与LeNet的前向检测运算相比,AlexNet网络的运算的卷积有很多的不同。其一是卷积的过程可能会分成两组,如图中的ngroup=2,还有第一层卷积的步长为4,如图中的stride=4。另外,后面四个卷积层的模式是SAME,即输入的图像大小与卷积的输出大小是相同的,因此指定了padLen为非零。

为了测试我们的AlexNetCM类的功能,在命令行执行python3 -i caffe-AlexNet.py,会对一张图片调用AlexNetCM及caffe检测,对比结果;详细的实现可参见caffe-AlexNet.py的最后五十多行。下面是笔者对一张图片的检测结果: 

 

令人惊诧的是,结果完全相同!这很让人欣慰——不过,由于LRN的性能很低,笔者实现的前向检测需要几十秒的时间才能完成。在上图执行完成后,可以手动输入detect_img进行检测。至此通过“重复造车”,我们基于numpy实现了AlexNet网络的前向检测的运算,进一步加深了对卷积深度神经网络的理解。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值