resnet152训练_Resnet-152的图像预处理

152层的 Resnet的图片输入尺寸为224*224,那对于大多数情况,图片的分辨率都是大于这个数值,那么该如何把图片的尺寸裁剪到这样一个尺寸,又如何进行数据增强呢?

第一,调整尺寸(Rescaling)

先将图片较短的那条边,随机缩放到[256,480]这样一个范围内。注意,此时的图片是等比例缩放的。举个例子,原始图片的尺寸为[1000,800,3],假设图片短边缩放到256,那么此时图片的尺寸即为[320,256,3],即图片的长宽比例是不变的。

第二,裁剪(Cropping)

将图片进行水平翻转,然后从原图片和翻转后的图片中,随机裁剪出224*224的图片。那到底裁几张呢?Resnet没有明说。。。我觉得还是看自己计算机的配置。因为从理论上来说,假设裁剪过后的图片尺寸为[256,256,3],如果按照步长为1,最多可以裁剪出(256-224)*(256-224) = 1024张,再加上水平翻转的图片,还要乘以个2,也就是2048张图片。一张图片扩展了2048倍,肯定是非常夸张了,那所以,我的做法是随机裁剪个10张,就差不多了。

第三,归一化(Normalizing)

具体做法就是对于整个训练集图片,每个通道分别减去训练集该通道平均值。

第四,颜色抖动(color shifting)

这里resnet 引用的是Alexnet 2012年提出的做法,对于每张图片,每个通道的数据先由二维转成一维(例如256*256*3,转成65536*3),再对该图片(65536*3)三个通道求出协方差矩阵(3*3),再求出协方差矩阵的特征向量p和特征值λ,最后按照下图这样一个公式进行转换进行变换, 这里α是一个服从均值为0,方差为0.1的随机变量(简单来说就是一个很小的随机数),[p1,p2,p3]是一个3*3的矩阵,[λ1,λ2,λ3]的转置是一个3*1的矩阵,最后矩阵相乘的结果也是个3*1的矩阵,刚好可以和原图片3个通道相加,这里执行的是python中的广播机制,即图片每个通道65536个像素点都加上同一个数。

这样就完成了颜色的随机抖动,不过我一直想不明白特征值乘以特征向量有着什么样的数学解释,如果您知道,请联系我(QQ380922457,知乎ID:梁航铭)

第五,测试方法

先抽取测试集图像的四个角以及中间的224×224部分,还包括镜像共有10个部分(Patch)结果,再对这10个输入的测试结果做平均作为我们对该测试集图片的最终测试结果。

代码如下

from random import normalvariate

import numpy as np

import os

from PIL import Image

from random import randint

IMAGE_PATH ="/Users/lianghangming/Desktop/"

# 等比例地把图片较短的一边缩放到区间[256,480]

def rescale(image):

w = image.size[0]

h = image.size[1]

sizeMax =480

sizeMin =256

random_size = randint(sizeMin,sizeMax)

if w < h:

return image.resize((random_size,round(h/w * random_size)))

else:

return image.resize((round(w/h * random_size),random_size))

# 随机裁剪图片

def random_crop(image):

w = image.size[0]

h = image.size[1]

size =224

new_left = randint(0,w - size)

new_upper = randint(0,h - size)

return image.crop((new_left,new_upper,size+new_left,size+new_upper))

# 水平翻转图片

def horizontal_flip(image):

returnimage.transpose(Image.FLIP_LEFT_RIGHT)

# 图片均值归一化

def nomalizing(image,mean_value,add_num):

image = np.array(image)

# image = image.astype(float)

for i in range(3):

add_num = add_num.astype(int)

image[:,:,i] = (image[:,:,i] - mean_value[i] + add_num[i])#/std[i]

return image

# 求整个训练集图片的均值

def mean(image_dir):

for file in os.listdir(image_dir):

iffile.endswith("jpg"):

file = os.path.join(image_dir,file)

image = np.array(Image.open(file))

image = np.reshape(image,[-1,3])

try:

image_array = np.concatenate((image_array,image),0)# 第一张图片不存在image_array

except:

image_array = image

mean_value = image_array.mean(0)

# std_value = image_array.std(0)

return mean_value

# 求整个训练集图片的PCA

def pca(image_dir,mean_value):

for file in os.listdir(image_dir):

iffile.endswith("jpg"):

file = os.path.join(image_dir,file)

image = np.array(Image.open(file))

image = np.reshape(image,[-1,3])

image = image.astype(float)

image -= mean_value# 零均值化

# image = image/255.0

try:

image_array = np.concatenate((image_array,image),0)# 第一张图片不存在image_array

except:

image_array = image

# 求协方差矩阵

image_cov = np.cov([image_array[:,0],image_array[:,1],image_array[:,2]])

lambd,p = np.linalg.eig(image_cov)

alpha0 = normalvariate(0,0.1)

alpha1 = normalvariate(0,0.1) alpha2 = normalvariate(0,0.1)

v = np.transpose((alpha0*lambd[0],alpha1*lambd[1],alpha2*lambd[2]))

add_num = np.dot(v,np.transpose(p))

return add_num

如有错误,欢迎指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重处理报表的坑

1.创建报表时&#xff0c;会记录符合条件的FileID 2.重处理报表时&#xff0c;不会根据条件去找符合条件的数据&#xff1b;而是根据原先的FileID去生成&#xff1b; 意味着新增了数据&#xff0c;原先的报表重处理也增加不了数据...必须要重新生成报表 转载于:https://www.cnb…

C 语言中,x += 5 == 4 是什么意思?

#讨论这个有意义吗&#xff1f;这个是在知乎上看到的一个问题&#xff0c;评论挺多的。其中有人提到&#xff0c;研究这个东西有什么用&#xff1f;编程的时候我们不能这么写的。我记得在大学的时候&#xff0c;我们的副院长给我们上课&#xff0c;就给我们提到&#xff0c;要习…

UEditor编辑器第一次赋值失败的解决方法

网上查了很多方式都不是很好用&#xff0c;最后想到了这样的处理方式 首先在js中定义一个全局变量 var ue null; 然后在初始化显示编辑器的时候js这样写 if (ue null) { ue new baidu.editor.ui.Editor(); ue.render(email_template); } ue.setContent("11111");…

linux命令deploy_Linux deploy 使用教程

Linux deploy是一个可以快速在Android设备上安装运行Linux操作系统的App&#xff0c;遵循GPLv3协议。我已经用了一段时间&#xff0c;讲讲我的使用经验&#xff0c;以下Linux deploy我简写为Ld。首先下载安装Ld&#xff0c;运行Ld后进入了一个全黑的界面&#xff0c;其实是个自…

一次深刻的面试经历

没有吐槽&#xff0c;没有埋怨&#xff0c;没有鸡汤&#xff0c;纯分享。近期我到某名牌房地产公司参加了一次面试&#xff0c;面试岗位是企划主管&#xff0c;我把面试经历跟大家简单分享一下。面试背景&#xff1a;我一直从事广告传媒工作&#xff0c;在工作中服务过不同的客…

帆软报表嵌入python程序_在线报表FineReport中如何进行嵌入式部署

2.部分复制也可以选择性的只复制必要性文件至已有工程中。必须复制的文件fr-server-7.1.jar&#xff1a;包含了报表服务的所有功能&#xff0c;必须拷贝至WEB-INF\lib下&#xff1b;fr-third-7.1.jar&#xff1a;包含了报表服务引用的第三方插件&#xff0c;必须拷贝至WEB-INF\…

android ——多线程编程

1、定义一个线程只需要新建一个类继承自Thread。然后重写run()方法&#xff0c;并在里面编写耗时逻辑即可&#xff1a; class MyThread extends Thread{public void run(){//处理具体的逻辑&#xff5d;&#xff5d; 启动的时候只需要new出MyThread的实例&#xff0c;然后调用它…

Linux内核设计的艺术

Linux内核设计的艺术这本书是我认为对Linux内核描述非常优秀的书籍。书籍中描述了内核启动的流程&#xff0c;内核运行的机理&#xff0c;内存管理&#xff0c;进程管理等等。#书籍目录第1章 从开机加电到执行main函数之前的过程11.1 启动BIOS&#xff0c;准备实模式下的中断向…

sklearn

文章目录机器学习机器怎样学习机器学习的两种方式用处监督学习三要素监督学习概念与数学形式统计学习三要素模型策略两大策略监督学习三大问题分类问题精确率与召回率标注问题回归问题无监督学习无监督学习主要方法无监督学习之聚类分析用途高斯混合模型密度分布估计协方差估计…

gtp6 linux 启动_Win10更新后导致双系统(LinuxWindows)开机引导失败出现grub rescue的修复办法...

Windows10更新有一定几率会破坏grub&#xff0c;找不到grub引导文件&#xff0c;所以我们要让它找到引导文件。当屏幕上提示&#xff1a;grub resume> 时。1、set命令查看当前grub引导指向哪个盘。grub resume> set显示结果&#xff0c;例如,cmdpath(hd0,gtp2)/EFI/parro…

Tomcat 在mac上(Idea)端口冲突解决办法

Port already in use: 1099 在mac上解决办法直接是找到占用1099端口的pid&#xff1b; 解决方式&#xff1a; lsof -i:1099 回车&#xff0c;之后会有pid&#xff0c;然后执行 kill (pid号) 最后问题就得到了解决&#xff01; 注意&#xff1a;有的时候kill不能将占用端口的pid…

调试LCD反被调戏了

相关文章调试&#xff0c;是一件有挑战的事情这篇文章的题目应该写做 - 我又被LCD艹了一个晚上。写个文档简单总结下#LCD显示的一些基本概念数字视频的基本概念源自于模拟视频。对于模拟视频我们可以这样理解&#xff1a;视频可以分解为若干个基本视点&#xff08;像素&#xf…

被LCD调戏睡不着了

好吧&#xff0c;我承认我不是因为被调戏睡不着的&#xff0c;我是因为今天晚上喝了一杯该死的咖啡&#xff0c;然后就睡不着了&#xff0c;这个点[3&#xff1a;40]在床上翻来覆去&#xff0c;刚开始我摸着楠哥的小腿&#xff0c;过了一会&#xff0c;觉得没意思了&#xff0c…

python 随机名言_如何用简易代码自动生成经典语录

“不要空想不可能的事情”“增加自己的幸福感”“我们最终将创造地面&#xff0c;并呵护它”“保持希望并学会放弃奇迹”上面所有引号内的句子都是由一段代码生成的&#xff0c;使用的程序由少于20行的python代码组成。当涉及到生成自然语言时&#xff0c;人们通常会想到使用高…

链家笔试2

链家笔试2 把m升水倒入n个相同的杯子(假设容器足够大)&#xff0c;允许有的容器是空的&#xff0c;共有多少种不同的倒法&#xff1f;&#xff08;用k表示&#xff09;5 1 1 和1 5 1 和1 1 5 是同一种倒法 输入&#xff1a; 第一行是测试数据的数目 x(0 < x < 20),以下每…

线性表、顺序表

文章目录线性表、顺序表线性表概念线性结构特点线性表概念两种分类顺序表代码遍历查找插入删除逆置链表&#xff08;用指针实现变长的先行存储结构&#xff09;特点习题线性表、顺序表 线性表概念 线性结构特点 存在唯一一个被称为“第一个”的数据元素存在唯一一个被称为“最…

lte 在网络覆盖方面应该注意哪些问题_LTE弱覆盖问题分析与优化

LTE弱覆盖问题分析与优化摘要&#xff1a;本文结合现网实际工作情况介绍了LTE弱覆盖的发现手段&#xff0c;LTE弱覆盖的成因&#xff0c;以及LTE弱覆盖的解决方法&#xff0c;总结相关经验&#xff0c;为LTE的规划建设提供参考依据。关键字&#xff1a;LTE弱覆盖、MR数据、站点…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(33)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(32) 上一回了开始对于drm_gem_handle_create_tail函数的解析,对于函数的注释和第一段代码进行了讲解,本回开始对于drm_gem_handle_create_tail函数的核心功能代码进行解析。为了便于理解,再次贴出drm…

Linux 5.7 将支持国产 RISC-V 芯片 K210

这是转载的一篇文章&#xff0c;文章主要内容是Linux合入了一个国产芯片k210的代码&#xff0c;虽然这个芯片不是很强大&#xff0c;但是对于学习来说非常有意义&#xff0c;而且&#xff0c;还有人在这个开发板上移植了Linux 0.11。今天早上我在查阅 Linux 内核邮件列表的时候…

动态路由选择协议(二)距离矢量路由选择协议

大多数的路由选择协议属于下面二者之一&#xff1a; 距离矢量&#xff08;distance vector&#xff09;和链路状态&#xff08;link state&#xff09;。 本篇学习的是距离矢量路由选择协议的基础。 大多数的距离矢量算法是R.E.Bellman、L.R.Ford和D.R.Fulkerson所做的工作为基…