社交网站制作,免费注册邮箱,我做的网站平台百度搜不到,做外贸需要关注的网站有什么好处在对数据或特征的处理中#xff0c;为了避免输入图像或特征#xff0c;经过resize等等操作#xff0c;改变了目标特征的尺度信息#xff0c;一般会引入一些操作#xff0c;比如#xff1a; 
在特征维度#xff0c;加入SPP#xff08;空间金字塔池化#xff09;#x…在对数据或特征的处理中为了避免输入图像或特征经过resize等等操作改变了目标特征的尺度信息一般会引入一些操作比如 
在特征维度加入SPP空间金字塔池化这样不同大小的输入图像经过该层的处理输出大小都保持了一致在输入图像阶段也可以先采用pad的操作补齐输入图像避免变形 
本文就是借鉴yolo系列对输入图像前处理的一个操作对不同大小的图像先经过长边等比例resize后pad到一样大小的尺寸。 
具体的操作代码如下 
import cv2
import numpy as np
import matplotlib.pyplot as plt
import xml.etree.ElementTree as ETdef parse_xml(path):tree  ET.parse(path)root  tree.findall(object)class_list  []boxes_list  []for sub in root:xmin  float(sub.find(bndbox).find(xmin).text)xmax  float(sub.find(bndbox).find(xmax).text)ymin  float(sub.find(bndbox).find(ymin).text)ymax  float(sub.find(bndbox).find(ymax).text)boxes_list.append([xmin, ymin, xmax, ymax])class_list.append(sub.find(name).text)return class_list, np.array(boxes_list).astype(np.int32)def letterbox(img, new_shape(640, 640), color(114, 114, 114), autoTrue, scaleFillFalse, scaleupTrue, stride32):用于将输入的图像进行长边resize和填充以满足一定的约束条件。函数的输入参数包括im输入的图像可以是任意尺寸和通道数的numpy数组。new_shape目标尺寸可以是一个整数或一个元组。如果是一个整数则表示将图像resize成一个正方形如果是一个元组则表示将图像resize成指定的宽度和高度。color填充颜色可以是一个整数或一个元组。如果是一个整数则表示使用灰度值为该整数的像素进行填充如果是一个元组则表示使用RGB颜色值进行填充。auto是否启用自动计算填充大小。如果为True则会根据指定的stride值计算最小的填充大小以满足长宽比和stride倍数的约束条件如果为False则会根据指定的scaleFill和scaleup参数计算填充大小。scaleFill是否启用拉伸填充。如果为True则会拉伸图像以填满目标尺寸如果为False则会根据指定的scaleup参数决定是否缩放图像。scaleup是否允许放大图像。如果为True则允许将输入图像放大到目标尺寸如果为False则只能将输入图像缩小到目标尺寸。stridestride值用于计算最小填充大小。# Resize image to a 32-pixel-multiple rectangle https://github.com/ultralytics/yolov3/issues/232shape  img.shape[:2]  # current shape [height, width]if isinstance(new_shape, int):new_shape  (new_shape, new_shape)# Scale ratio (new / old)r  min(new_shape[0] / shape[0], new_shape[1] / shape[1])   # 短边ratioif not scaleup:  # only scale down, do not scale up (for better test mAP)r  min(r, 1.0)# Compute paddingratio  r, r  # width, height ratiosnew_unpad  int(round(shape[1] * r)), int(round(shape[0] * r))dw, dh  new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh paddingif auto:  # minimum rectangledw, dh  np.mod(dw, 64), np.mod(dh, 64)  # wh paddingelif scaleFill:  # stretchdw, dh  0.0, 0.0new_unpad  (new_shape[1], new_shape[0])ratio  new_shape[1] / shape[1], new_shape[0] / shape[0]  # width, height ratiosdw / 2  # divide padding into 2 sidesdh / 2if shape[::-1] ! new_unpad:  # resizeimg  cv2.resize(img, new_unpad, interpolationcv2.INTER_LINEAR)top, bottom  int(round(dh - 0.1)), int(round(dh  0.1))left, right  int(round(dw - 0.1)), int(round(dw  0.1))img  cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, valuecolor)  # add borderreturn img, ratio, (dw, dh)def main(imgPath, drawBox_flag  True):xmlPath  imgPath[:-3]  xmlprint(xmlPath, imgPath)img  cv2.imread(imgPath)labels, boxes  parse_xml(xmlPath)print(labels, boxes)img2, ratio, pad  letterbox(img.copy(), new_shape(512, 512), autoFalse, scaleupTrue)sample1  img.copy()    # origin imagesample2  img2.copy()   # after letterbox imageprint(sample1.shape, sample2.shape)if drawBox_flag:new_boxes  np.zeros_like(boxes)new_boxes[:, 0]  ratio[0] * boxes[:, 0]  pad[0]  # pad widthnew_boxes[:, 1]  ratio[1] * boxes[:, 1]  pad[1]  # pad heightnew_boxes[:, 2]  ratio[0] * boxes[:, 2]  pad[0]new_boxes[:, 3]  ratio[1] * boxes[:, 3]  pad[1]print(new_boxes)for box in boxes:cv2.rectangle(sample1, (box[0], box[1]), (box[2], box[3]), (255, 0, 0), 1)for box_n in new_boxes:cv2.rectangle(sample2, (box_n[0], box_n[1]), (box_n[2], box_n[3]), (0, 255, 0), 1)plt.subplot(121)plt.imshow(sample1)plt.subplot(122)plt.imshow(sample2)plt.show()# cv2.imwrite(rF:\labelImg\1.jpg, sample1)# cv2.imwrite(rF:\labelImg\2.jpg, sample2)if __name__  __main__:imgPath  rF:\labelImg\catDog.jpgmain(imgPath, drawBox_flagTrue)展示结果如下 上面图像的尺寸比较的大超过了512大小。而低于小于512大小的图像是如何的呢 scaleup是否允许放大图像。 如果为True则允许将输入图像放大到目标尺寸如果为False则只能将输入图像缩小到目标尺寸。 当scaleupFalse时如下可以发现原始图像并没有被放大而是直接pad操作了。这是因为为scaleupFalse时只能将输入图像缩小到目标尺寸无法先放大操作 而当scaleupTrue时如下就发现他是先放大然后再进行pad操作 可以发现 
scaleup设定为False时候只会对大于new shape的图像进行缩放pad当为True时就不在only scale down, do not scale up了适用的范围更广。注释里面说是为了better test mAP。 文章转载自: http://www.morning.tcxk.cn.gov.cn.tcxk.cn http://www.morning.pdgqf.cn.gov.cn.pdgqf.cn http://www.morning.fpyll.cn.gov.cn.fpyll.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn http://www.morning.kxnjg.cn.gov.cn.kxnjg.cn http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.bfjyp.cn.gov.cn.bfjyp.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn http://www.morning.zbkwj.cn.gov.cn.zbkwj.cn http://www.morning.ktskc.cn.gov.cn.ktskc.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.sxlrg.cn.gov.cn.sxlrg.cn http://www.morning.tjwfk.cn.gov.cn.tjwfk.cn http://www.morning.knpbr.cn.gov.cn.knpbr.cn http://www.morning.zxgzp.cn.gov.cn.zxgzp.cn http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn http://www.morning.rdng.cn.gov.cn.rdng.cn http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn http://www.morning.dhxnr.cn.gov.cn.dhxnr.cn http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn http://www.morning.mxlmn.cn.gov.cn.mxlmn.cn http://www.morning.bttph.cn.gov.cn.bttph.cn http://www.morning.fwjfh.cn.gov.cn.fwjfh.cn http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.rkjb.cn.gov.cn.rkjb.cn http://www.morning.bwkhp.cn.gov.cn.bwkhp.cn http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn http://www.morning.ndngj.cn.gov.cn.ndngj.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.nssjy.cn.gov.cn.nssjy.cn http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn http://www.morning.stflb.cn.gov.cn.stflb.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn http://www.morning.nhbhc.cn.gov.cn.nhbhc.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.xxwhz.cn.gov.cn.xxwhz.cn http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn http://www.morning.dqrpz.cn.gov.cn.dqrpz.cn http://www.morning.kcdts.cn.gov.cn.kcdts.cn http://www.morning.dmlgq.cn.gov.cn.dmlgq.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.pswzc.cn.gov.cn.pswzc.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.bby45.cn.gov.cn.bby45.cn http://www.morning.dcccl.cn.gov.cn.dcccl.cn http://www.morning.pctsq.cn.gov.cn.pctsq.cn http://www.morning.rfycj.cn.gov.cn.rfycj.cn http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn http://www.morning.rdpps.cn.gov.cn.rdpps.cn http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn http://www.morning.ddjp.cn.gov.cn.ddjp.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.wrkhf.cn.gov.cn.wrkhf.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.brbmf.cn.gov.cn.brbmf.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.cnlmp.cn.gov.cn.cnlmp.cn http://www.morning.pcshb.cn.gov.cn.pcshb.cn http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com http://www.morning.lqpzb.cn.gov.cn.lqpzb.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.zttjs.cn.gov.cn.zttjs.cn http://www.morning.lskyz.cn.gov.cn.lskyz.cn http://www.morning.gqfbh.cn.gov.cn.gqfbh.cn http://www.morning.lsbjj.cn.gov.cn.lsbjj.cn http://www.morning.spghj.cn.gov.cn.spghj.cn http://www.morning.wplbs.cn.gov.cn.wplbs.cn