河流的的英文翻译英语怎么说-广西会计从业资格考试


2023年4月5日发(作者:二十一世纪学生英文报)

深度学习(5)数据处理-resize

深度学习(5)数据预处理-resize

resize由来与发展

对输⼊图像进⾏⼤⼩调整,为什么要这样做呢?

因为图像输⼊,是转为向量(矩阵)输⼊的,向量的纬度⼀般是固定的,所以要进⾏⼤⼩调整

输⼊向量维数=输⼊层节点数

举例,假如训练输⼊的是⼀张张图⽚,每张图⽚对应⼀个矩阵,在这个矩阵⾥⾯,将每⾏看作⼀个向量,这个向量的列数是固定的

older(32,[None,32,32,3])

这个函数接收输⼊的⼤⼩就是32*32pixel,当然你可以指定其他的⼤⼩,那么在数据预处理的时候,就需要先将图⽚整理成这样的⼤⼩

⼏何变换的⼀个常规操作是要把图⽚的⼤⼩resize到相同尺⼨,便于统⼀处理。同时也是要考虑到机器的配置,图⽚越⼤在进⾏运算处理时

要求的配置就越⾼,常规情况下我们会把图⽚resize到500以下进⾏处理。很多预训练模型的图⽚size⼤⼩为2992993(Xception、

InceptionV3…)、2242243(VGG16、ResNet50…)。

将输⼊图像resize到⼀个固定的尺⼨这件事贯穿了DL在⽬标检人之初性本善全文 三字经 测领域的始终:

1.在r-cnn刚提出的阶段,由于⽹络结构的限制,进⼊全连接层的输⼊维度必须是固定的,那么⼀个最简单的解决⽅案就是把

输⼊图像归⼀化到固定的尺⼨,得到输出后反变换回去。这种resize的做法实际上是为了适应卷积神经⽹络的⼀种让步。

2.随着⼈们对检测精度的追求,⼤家开始关注resize所带来的损失。不论是sppnet还是roipooling,他们都致⼒于将任意维度

的特征图转化成固定的维度以适应全连接的输⼊,这⼀思路从理论上解除了整个检测⽹络对输⼊的尺⼨依赖,这也是fastr-

cnn的⼀个改进点,从此输⼊图像可以是任意宽⾼。

3.然⽽各路算法在使⽤gpu做加速的过程中遇到了新的问题,每⼀个batch的计算必须拥有相同的size,这是算法本⾝之外的⼀

个限制,但这个限制却成为了并⾏加速计算的拦路虎。yolo的作者针对这个情况,在不改变原始图像宽⾼⽐的前提下进⾏了

resize操作,具体的国家为什么禁止研究易经 做法是对不符合原图⽐例的区域进⾏padding。

现在很多的检测⽹络都不使⽤全连接层,就是考虑到图像输⼊尺⼨不⼀致的问题,从⽽构建全卷积⽹络!对于全卷积⽹络,输⼊图⽚的

尺度可以为任意的,相当于滑动窗⼝绳字组词语 检测,但为什么很多算法要在测试阶段也变成统⼀尺⼨呢?这就是考虑训练阶段的问题,由于现在

训练集的图⽚可能⼤⼩也不⼀致,⽽batch的读取⽅式就限制了必须保持训练图像尺⼨的⼀致性,所以最终⽹络的感受野也就限定了那

个尺度范围内,从⽽在测试时不能直接使⽤原图像,还是要进⾏相同的缩放操作!

但对于超⼤分辨率的图⽚,但⽬标却很⼩,如kaggle的卫星图船舶检测,上述操作就不太管⽤了,这时候就要考虑到对图像进⾏切割,分别

送到现在的神经⽹络,所以还是看你的数据怎么训练的!

resize的⽅式

对于图⽚尺⼨变化时的插值算法:

INTER_NEAREST-最近邻插补

INTER_LINEAR-双线性插值(默认⽅法)

INTER_AREA-像素⾯积相关重采样,图⽚由⼤resize⼩时效果较好

INTER_CUBIC-双三次插值,图⽚由⼩resize⼤时效果较好

INTER_LANCZOS4-兰索斯插值

img=(img_path)#读进来的为BGR

img=or(img,_BGR2RGB)#BGR转RGB

img4=(img,(500,500))#默认⽤INTER_LINEAR插值算法

(img4)

img5=(img,(500,500),interpolation=_AREA)

(img5)

其实改变效果很明显,特别是在春花秋月夜 图⽚处理任务中发现怎么样改变模型都提⾼不了效果时,不妨回过头来查看下插值算法有没有⽤好。

不同插值算法对训练结果的影响

很多时候在resize图⽚的时候,插值算法会影响到结果的训练结果的好坏。

pillow⽂档⾥给出了其各个插值算法的使⽤情况和优劣。

上表中Performance应该是速度表现的意思,越简单的插值算法速度越快但效果不会很理想。

下⽂档是对于图⽚缩⼩和放⼤均能保持较⾼的图⽚质量的S插值算法仞字组词语 :

img_size=500

img3=((img_size,im思绪万千 g_size),S)

img3

以上不同插值算法的选⽤对图⽚resize时质量的影响是巨⼤的。如果不注意到这个点,直接将很⼤的图⽚resize到较⼩的尺⼨后进⾏训练,

图⽚其实已经丢失掉了很多特征,最终的效果⾃然不会很好。

caffe数据转换成lmdb中的resize

caffe,将数据转换为lmdb/leveldb的convert_源码可见,是使⽤ReadImageToDatum函数读⼊图⽚,根据输⼊参数可

知,输出为resize后的图像

......

DEFINE_int32(resize_width,0,\"Widthimagesareresizedto\");//图像宽度重置

DEFINE_int32(resize_height,0,\"Heightimagesareresizedto\");//图像⾼度重置

......

//设置图像的长度,宽度

intresize_height=std::max(0,FLAGS_resize_height);

intresize_width=std::max(0,FLAGS_resize_width);

......

//检查图像尺⼨

if(check_size){

if(!data_size_initialized){

data_size=ls()*()*();

data_size_initialized=true;

}else{

conststd::string&data=();

CHECK_EQ((),data_size)<<\"Incorrectdatafieldsize\"

<<();

}

}

ReadImageToDatum函数:

读⼊图像到Datum

boolReadImageToDatum(conststring&filename,constintlabel,

constintheight,constintwidth,constboolis_color,

conststd::string&encoding,Datum*datum){

cv::Matcv_img=ReadImageToCVMat(filename,height,width,is_color);

if(cv_){

if(()){

if((cv_ls()==3)==is_color&&!height&&!width&&

matchExt(filename,encoding))

returnReadFileToDatum(filename,label,datum);

std::vectorbuf;

cv::imencode(\".\"+encoding,cv_img,buf);

datum->set_data(std::string(reinter蔡守元 pret_cast(&buf[0]),

()));

datum->set_label(label);

datum->set_encoded(true);

returntrue;

}

CVMatToDatum(cv_img,datum);//cvmat转为Datum格式

datum->set_label(label);

returntrue;

}else{

returnfalse;

}

}

ReadImageToDatum函数⼜是调⽤ReadImageToCVMat函数读⼊图像和resize的宽⾼进⾏缩放的

ReadImageToCVMat函数:

以cvMat格式读⼊图像

cv::MatReadImageToCVMat(conststring&filename,//is_color为1读⼊彩⾊图像,0灰度图

constintheight,constintwidth,constboolis_col离凰全文免费阅读凌雪薇 or){

//height,width都不为0则把图像resize到height*width

cv::Matcv_img;

intcv_read_flag=(is_color?CV_LOAD_IMAGE_COLOR:

CV_LOAD_IMAGE_GRAYSCALE);

cv::Matcv_img_origin=cv::imread(filename,cv_read_flag);//读⼊图像

if(!cv_img_){

LOG(ERROR)<<\"Couldnotopenorfindfile\"<

returncv_img_origin;

}

if(height>0&&width>0){

cv::resize(cv_img_origin,cv_img,cv::Size(width,height));

}else{

cv_img=cv_img_origin;

}

returncv_img;

}

可以看出caffe底层是使⽤opencv的默认双线性差值的resize⽅法,通过⽐较可知opencv的resize属性只有area后的图像质量较好,保存

信息较为丰富,不会失去边缘信息,因此改resize⽅式,重新make,使⽤area属性的caffe。

不同resize的影响(总)

不同的resize⽅式对最终的结果有⼀定的影响,尤其是⽤随机图⽚评估时会更加明显。

.

看似⽤的是同⼀个神经⽹络,同⼀个训练集,但在输⼊的处理上仍然会有各种不同。⽐如Inception要求299x299,你可以直接⽤

ImageMagick将原始图⽚处理成299x299再输⼊,也可以⽤OpenCV读⼊图⽚后再转成299x299,还可以直接⽤深度学习框架

(TensorFlow/Caffe)进⾏resize。甚⾄同⼀种⽅法也可能有各种不同的参数控制,⽐如最邻近插值、双线性插值、双⽴⽅插值等。

通过不同的resize⽅法训练出来的⽹络参数,或者同⼀张图⽚不同⽅法resize后预测的输出,数值是存在差异的。如果使⽤的是质

量较低的⼤规模数据集,差异可能会⾮常明显。

不同的resize⽅式对最终结果的影响⽆法确定。

.

换种说法,这可能是个⽞学。这算是⼀个经验总结,就不多讲了。也就是说,某种resize⽅式有时可能让结果变好,有时也可能让结

果变差。

训练、评估和线上预测时统⼀图⽚处理⽅式有⼀些好处。

.

有的公司在训练神经⽹络时使⽤⼀种框架,上线时使⽤另⼀种框架;或者训练时采取⼀种输⼊,上线时采取另⼀种输⼊。都会导致线上

服务的预测结果跟评估结果不⼀致,导致排查问题较为复杂。

.

有时候为了性能考虑,必须在客户端完成图⽚处理,resize成较⼩图⽚后再传给服务端。⽽客户端往往使⽤的不同的库,⽐如iOS可

以使⽤CoreGraphics库或者UIKit库,Android的Bitmap库,这些库在服务端是基本上⽆法使⽤的。这时候就需要要知道这可能

会导致线上效果与评估结果有不⼀致的可能,并且采取⼀定的措施来消减这样的不同。

综上,这⼀问题⾄今为⽌并没有⼈尝试去完美的解决,⽽更多的是在理论与⼯程,精度的速度上做取舍和权衡。

得到的都是侥幸,失去才是⼈⽣!

钱到⽤时⽅恨少,点赞不够吃不饱,⼿有余⾹请点赞,您要赏点我不敢!

更多推荐

resize是什么意思ize在线翻译读音例句