河流的的英文翻译英语怎么说-广西会计从业资格考试
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
intresize_width=std::max
......
//检查图像尺⼨
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::vector
cv::imencode(\".\"+encoding,cv_img,buf);
datum->set_data(std::string(reinter蔡守元
pret_cast
()));
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在线翻译读音例句
发布评论