Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。

2024-06-13 10:38

本文主要是介绍Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇博客对你有点用的话,记得给我点赞,我会更加乐于分享的。

前言

以下是我个人遇到的一些困惑,以及自己的理解和一些验证,稍微记录一下,仅供参考。
首先,我觉得,输入大小肯定是可以调的,只不过相应的每一层网络的参数都要做调整,调整后结果如何,没有验证,我这里验证只修改了输入size和输入层的一些参数,conv1之后的网络参数都不变。

我不要你觉得,我要我觉得,照我说的做..........
  1. Alexnet默认的输入227x227,最初关于224x224和227x227有过困惑,现在不困惑了,网络里面就是227x227,据说224x224可能是写paper时候的手误?还是后来对网络又做了调整?世纪之谜…
  2. 按我说的做,输入就用227x227。一般情况下用默认的227x227就行了,我也训练过自己的数据,也测试过,效果OK的。
  3. 但是,有些时候总想着能不能改变一下输入,但又不想全部每个层的参数都修改。所以就想着能不能只改一下输入层。于是在网上搜到这篇博客,也是这个思路,大家可以去看下,作者写的还是比较清晰易懂的,点个赞 。https://blog.csdn.net/ldsyou2015/article/details/60350556
  4. 我的目标是想把输入的size修改成偶数。但是按照公式来算的话,从输入 n x n到conv1层55x55x96。比如n x n=60x60,那么kernel_size就只能取偶数了。

引用
在这里插入图片描述

  1. 但是呢,kernel_size取偶数有很多弊端,就像知乎这里描述的一样https://www.zhihu.com/question/51603070。不过这些描述一般都是理论说一下偶数核的弊端,没有明说到底会造成多么严重的后果。所以还是想着自己验证一下。
  2. 我是用Alexnet做的二分类。
    train_val.prototxt如下,输入改成60x60,stride 1,kernel_size 6。

在这里插入图片描述
比对一下,就是这几处修改一下,再重新训练模型。
在这里插入图片描述

deploy.prototxt输入修改成60x60,stride 1,kernel_size 6。
在这里插入图片描述

修改之后重新训练,得到caffemodel,然后自己写了测试代码,测试结果和输入227x227的做个比对:
在这里插入图片描述

从表格记录结果来看,输入修改成60x60,stride 1,kernel_size 6之后,得到的模型准确率可以认为完全不能用,当然也可能与输入分辨率下降有关,但不至于这么差。

我的测试代码也放在这里,对比测试时候其他都未改变,只是修改了caffemodel和deploy.prototxt两个文件。

#encoding=utf8
import sys 
sys.path.append('./python')
sys.path.append('./python/caffe')import caffe 
import numpy as np 
import cv2 
import argparseimport matplotlib.pyplot as pltcolor = {'common':'0', 'uniform':'1'}#root = '×××/caffe/'
caffe_model = './models/myAlexnet/myAlexnet_iter_60000.caffemodel'
deploy = './models/myAlexnet/deploy.prototxt'mean_file= './data/myAlexnet/myAlexnet_mean.npy' #mean.npy
def classifier(img, net):transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})transformer.set_transpose('data', (2,0,1))transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
#    transformer.set_raw_scale('data', 255)
#    transformer.set_channel_swap('data', (2,1,0))net.blobs['data'].data[...]= transformer.preprocess('data',img)out = net.forward()prob = out['prob']print probreturn np.argmax(prob)if __name__ == '__main__':testList = open('./data/myAlexnet/test_0.txt', 'r')caffe.set_mode_gpu()caffe.set_device(0)net = caffe.Net(deploy, caffe_model, caffe.TEST)count = 0for line in testList:      imagePath = line.split()[0]   label = line.split()[1]    path = './data/myAlexnet/test/'+imagePath    img = cv2.imread(path)print 'path:'+path#plt.imshow(img)#plt.axis('on')#plt.show()result = classifier(img, net)print '-------------------------------'#plt.imshow(img)#plt.axis('off')#plt.show()print 'result:{}'.format(str(result))print 'label:{}'.format(str(label))print '-------------------------------'if result == int(label):count = count+1Precession = count*1.0/68     #test pic num.test_0=68,test_1=71,test_all=139print 'Precession is {}'.format(str(Precession))

最终,我要说的:
这个对比测试,我认为只是验证了在Alexnet目标分类时,kernel_size如果取偶数,训练的模型效果极差,几乎不能用。
没错,我认为是kernel_size的问题。

这篇关于Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057066

相关文章

chart 完成拓扑图单节点拖拽不影响其他节点位置

就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头。 拖拽某个节点,只有关联到的线条会跟着变动其他的节点位置不变。 参考 https://gallery.echartsjs.com/editor.html?c=x8Fgri22P9 https://echarts.baidu.com/exa

【Python如何输入升高和体重判断你是偏胖还是偏瘦】

1、求体质指数得Python代码如下: # BMI(Body Mass Index)指数:简称体质指数,# 是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。# 常用指标:BMI<18.5 偏瘦 18.5<=MBI<=24 正常 MBI>24 偏胖# 计算公式:BMI=体重kg/身高的平方ma = eval(input("请输入你的体重(kg):")) # 输入体重b = e

网页脚本输入这么简单

如何在网页中进行脚本操作呢? 研究了一下,很简单,用google浏览器的Console直接操作javaScript。思路: Created with Raphaël 2.1.0 开始 输入(如何输入) 点击(如何点击) 结束 下面是,通过脚本刷直播屏的实现,直接在Console输入即可 var words=new Arra

海思3518平台的uboot 和 kernel烧写

############################# 3518 kernel & uboot 16Mflash  ######################################### 1、组件网络:                                                setenv serverip 1

输入url发生了什么

1.浏览器查询缓存,如果有缓存,则直接跳到第9步 2.浏览器询问操作系统服务器ip 3.操作系统做dns查询,返回ip地址给浏览器 4.浏览器打开对服务器的tcp连接(如果是https的话则更复杂) 5.浏览器通过tcp发送http请求 6.浏览器接收响应并且可能关掉Tcp连接,或者是重新使用连接处理新请求 7.浏览器检查响应是否为一个重定向(3xx结果状态码),或者是重新

C语言中的字符输入/输出和验证输入

在C语言中,字符输入/输出功能允许程序与用户进行交互,读取用户的输入信息并展示输出结果。同时,验证输入的作用在于确保用户输入的数据符合预期,以提高程序的稳定性和可靠性,防止无效输入引发的错误或异常行为,从而提供更好的用户体验。 基础概念 输入(Input):指的是向程序填充数据的过程,通常来源于用户输入、文件读取或其他外部数据源。 输出(Output):指的是将数据显示在屏幕上、打印机上或

C#界面动态布局 界面控件随着界面大小尺寸变化而变化

要想写一个漂亮的界面,光靠利用Anchor和Dock属性是远远不够的,我们需要用到相对布局,就是不管窗口大小怎么变化,控件相对父控件的相对位置保持不变。可惜c#里没有提供按照百分比布局。所以只能自己再resize()事件里调整控件位置。 首先在窗体的构造函数里保存父窗体的长宽,以及每个控件的X,Y坐标的相对位置:  int count = this.Controls.Count * 2 + 2;

嘉楠勘智CanMV-K230的大小核如何操作

摘要:嘉楠勘智CanMV-K230的帮助文档、例子模型说明中,一直在提“大核,小核”,还提到将文件复制到小核并解压,然后在大核中操作,本文介绍一下这两个“核”如何操作。 所需的硬件:CanMV-K230-V1.1,type-c数据线2根,带有hdmi接口的显示屏,hdmi数据线. 软件:win10,putty 操作步骤(小端) 第一步:将type-c数据线将CanMV-K230

如何减小iOS应用程序的大小

转自:http://mobile.51cto.com/hot-434754.htm 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速?本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装程序时)。 AD:51CTO学院:IT精品课程在线看! 本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一

颠覆多跳事实验证!Causal Walk 前门调整技术引领去偏新纪元

Causal Walk: Debiasing Multi-Hop Fact Verifcation with Front-Door Adjustment 论文地址: Causal Walk: Debiasing Multi-Hop Fact Verification with Front-Door Adjustment| Proceedings of the AAAI Conference