本节为您带来 norm_type配置说明 及 transformer说明 的介绍, 为您介绍norm_type相关参数、相关计算公式的说明与解析,图片缩放裁剪时使用的各个transformer的概念、参数说明及示例。
6.7.1. norm_type配置说明
6.7.1.1. 参数说明解析
norm_type 参数讲解
参数作用:此参数为在模型中添加的输入数据预处理方法。
参数取值范围及说明:
no_preprocess 表示不添加任何数据预处理。
data_mean 表示提供减均值预处理。
data_scale 表示提供乘scale系数预处理。
data_mean_and_scale 表示提供先减均值再乘scale系数前处理。
注意
当输入节点多于一个时,设置的节点顺序需要与 input_name 中的顺序严格保持一致。
mean_value 参数讲解
参数作用:此参数表示指定预处理方法的图像减去的均值。
使用说明:当 norm_type 取值为 data_mean_and_scale 或 data_mean 时需要配置该参数。
参数说明:
当只有一个输入节点时,仅需要配置一个数值,表示所有通道都减去这个均值。
当有多个节点时,提供与通道数量一致的数值(这些数值以空格分隔开),表示每个通道都会减去不同的均值。
注意
配置的输入节点数量必须与 norm_type 配置的节点数量一致。
如果存在某个节点不需要 mean 处理,则为该节点配置 'None'。
scale_value 参数讲解
参数作用:此参数表示指定预处理方法的数值scale系数。
使用说明:当 norm_type 取值为 data_mean_and_scale 或 data_scale 时需要配置该参数。
参数说明:
当只有一个输入节点时,仅需要配置一个数值,表示所有通道都乘以这个系数。
当有多个节点时,提供与通道数量一致的数值(这些数值以空格分隔开),表示每个通道都会乘以不同的系数。
注意
配置的输入节点数量必须与 norm_type 配置的节点数量一致。
如果存在某个节点不需要 scale 处理,则为该节点配置 'None'。
6.7.1.2. 计算公式及示例说明
6.7.1.2.1. 模型训练时的数据标准化处理计算公式
yaml文件中的mean和scale参数与训练时的mean、std需要进行换算。

6.7.1.2.2. 模型推理时的计算公式
通过对yaml配置文件中的配置参数,决定是否加入HzPreprocess节点。 当配置mean/scale时,做模型转换时,会在输入端新增一个HzPreprocess节点,HzPreprocess节点可以理解为对输入数据做了一个conv操作。

注意
在yaml中添加mean/scale后,就不需要在前处理内添加MeanTransformer和ScaleTransformer了。
在yaml中添加mean/scale,会将参数放入到HzPreprocess节点内,HzPreprocess节点为BPU 节点。
6.7.2. 图片处理transformer说明
本章节将对您在进行图片缩放裁剪时使用的各个transformer的概念及参数进行说明,并为您提供参考使用示例,方便您进行tranformer操作。
在文档内容开始阅读前,以下内容请您注意:
注意
图像数据为三维数据,但地平线提供的transformer默认第一维为N维,会对数据以第一维拆分循环处理,所以如果您需要对图像做处理,请提供四维数据。
6.7.2.1. AddTransformer
说明:
对输入图片中的所有像素值做增加value的操作。该transformer会在输出时, 将数据格式转为float32。
参数:
value: 对每个像素做增加的数值, 注意value的取值可以为负数, 如 -128。
使用举例:
6.7.2.2. MeanTransformer
说明:
对输入图片中的所有像素值做减去mean_value的操作。
参数:
means:对每个像素做增加的数值, 注意value的取值可以为负数, 如 -128。
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”], 默认 “CHW”。
使用举例:
6.7.2.3. ScaleTransformer
说明:
对输入图片中的所有像素值做乘以data_scale系数的操作。
参数:
scale_value: 需要乘以的系数,如0.0078125 或者1/128。
使用举例:
6.7.2.4. NormalizeTransformer
说明:
用于对输入图片进行归一化的操作。该transformer会在输出时, 将数据格式转为float32。
参数:
std:输入的第一张图片,需要除以的数值。
使用举例:
6.7.2.5. TransposeTransformer
说明:
用于做layout转换的操作。
参数:
order:对输入图片做layout转换后的顺序(顺序与原有的layout顺序有关)。如:HWC的顺序为0,1,2,需要转为CHW时,order为(2,0,1)。
使用举例:
6.7.2.6. HWC2CHWTransformer
说明:
用于将NHWC转换为NCHW的操作。
参数:不涉及。
使用举例:
6.7.2.7. CHW2HWCTransformer
说明:
用于将NCHW转换为NHWC的操作。
参数:不涉及。
使用举例:
6.7.2.8. CenterCropTransformer
说明:
以直接截断取值的方式从图片中心裁剪出一个正方形的图片的操作。该transformer会在输出时, 将数据格式转为float32。当data_type的值为uint8时,输出为uint8。
参数:
crop_size:中心裁剪的正方形的边长size。
data_type:输出结果的类型,取值范围为[“float”, “uint8”]。
使用举例:
6.7.2.9. PILCenterCropTransformer¶
说明:
使用PIL的方式从图片中心裁剪出一个正方形的图片的操作。该transformer会在输出时, 将数据格式转为float32。
参数:
size: 中心裁剪的正方形的边长size。
使用举例:
6.7.2.10. LongSideCropTransformer
说明:
用于做长边裁剪的操作。该 transformer 会在输出时, 将数据格式转为float32。
当宽度比高度的数值大时,会裁剪出一个中心以高度大小为准的正方形,如宽100,高70,裁剪之后大小为70*70。
当高度比宽度的数值大时,会裁剪出一个中心以宽度大小不变,高度为差值的一半+宽度 的长方形,如宽70,高100,裁剪之后大小为 70*(100-70)/2+70 ,即70* 85大小的长方形。
参数:不涉及。
使用举例:
6.7.2.11. PadResizeTransformer
说明:
使用填充的方式做图像放大的操作。该 transformer 会在输出时, 将数据格式转为float32。
参数:
target_size:目标大小,值为元组,如(240,240)。
pad_value:填充到数组中的值,默认值为127。
pad_position:填充的位置,取值范围为[“boundary”, “bottom_right”],默认值为 “boundary”。
使用举例:
6.7.2.12. ResizeTransformer
说明:
用于调整图像大小的操作。
参数:
target_size:目标大小,值为元组,如(240,240)。(240,240):前一个240代表高度为240,后一个240代表宽度为240。
mode:图片处理模式,取值范围为(“skimage”,”opencv”),默认值为 “skimage”。
method:插值的方法,此参数仅在mode为skimage时生效。取值范围为0-5,默认值为1,其中:
0代表Nearest-neighbor;
1代表Bi-linear(default);
2代表Bi-quadratic;
3代表Bi-cubic;
4代表Bi-quartic;
5代表Bi-quintic。
data_type:输出的类型,取值范围为(uint8,float),默认为float类型。当被设置为uint8时,输出类型为uint8 ,其他情况为float32。
interpolation:插值的方法,此参数仅在mode为opencv时生效。默认为空,取值范围为(opencv的插值方式), 目前interpolation仅支持为空或opencv中的INTER_CUBIC两种插值方法,当interpolation为空时,默认使用INTER_LINEAR方式。
以下为opencv中支持的插值方式及说明(目前未支持的插值方式将在后续迭代中逐步支持):
INTER_NEAREST,最近邻插值;
INTER_LINEAR,双线性插值,当interpolation为空时,默认使用这种方法。
INTER_CUBIC,双三次插值4x4像素邻域内的双立方插值。
INTER_AREA,使用像素面积关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。
INTER_LANCZOS4,8x8邻域的Lanczos插值。
INTER_LINEAR_EXACT,位精确双线性插值。
INTER_NEAREST_EXACT,位精确最近邻插值。这将产生与PIL、scikit-image或Matlab中的最近邻方法相同的结果。
INTER_MAX,插值代码的掩码。
WARP_FILL_OUTLIERS,标志,填充所有目标图像像素。如果其中一些对应于源图像中的异常值,则将它们设置为零。
WARP_INVERSE_MAP,标志,逆变换。
使用举例:
6.7.2.13. PILResizeTransformer
说明:
使用PIL库做调整图像大小的操作。
参数:
size:目标大小,值为元组,如(240,240)。
interpolation:指定插值的方式,取值范围:(Image.NEAREST,Image.BILINEAR,Image.BICUBIC,Image.LANCZOS), 默认值为Image.BILINEAR。
Image.NEAREST:最近邻采样;
Image.BILINEAR:线性插值;
Image.BICUBIC:三次样条插值;
Image.LANCZOS:高质量下采样滤波器。
使用举例:
6.7.2.14. ShortLongResizeTransformer
说明:
按照原比例对输入图片进行缩放的操作,新图片的大小与设置的参数有关。操作方式如下:
先以short_size的大小除以原图片的宽和高里最小值,以这个值为缩放比例系数。
当缩放比例系数乘以原图片的宽和高中的最大值,得到的结果大于long_size的数值时,缩放比例系数将变更为long_size除以原图片的宽和高中的最大值。
使用opencv中的resize方法,根据上方得到的缩放比例系数重新裁剪图片。
参数:
short_size:预期裁剪后的短边的长度。
long_size:预期裁剪后的长边的长度。
include_im:默认值为True,设置为True时, 会在返回时除了返回处理后的图片, 还会返回原图片。
使用举例:
6.7.2.15. PadTransformer
说明:
通过用目标大小的size值除以输入图片宽或者高里的最大值为系数,然后使用这个系数乘以原有的宽高,resize图片。 然后根据新图片的大小,除以size_divisor后向上取整后,再乘以size_divisor,为新的宽高,生成新的图片的操作。
参数:
size_divisor:大小除数 ,默认值为128。
target_size:目标大小,默认值为512。
使用举例:
6.7.2.16. ShortSideResizeTransformer
说明:
根据期望的短边的长度,使用现在的长短边的比例,中心裁剪出新的图片大小的操作。
参数:
short_size:预期的短边的长度。
data_type:输出结果的类型,取值范围为(“float”,”uint8”),默认取值”float32”, 以 float32 类型输出,设置为uint8时,输出类型将为uint8。
interpolation:指定插值的方式,取值范围为 opencv 中采用的插值方式,默认为空。
目前interpolation仅支持为空或opencv中的INTER_CUBIC两种插值方法,当interpolation为空时,默认使用INTER_LINEAR方式。
以下为opencv中支持的插值方式及说明(目前未支持的插值方式将在后续迭代中逐步支持):
INTER_NEAREST,最近邻插值;
INTER_LINEAR,双线性插值,当interpolation为空时,默认使用这种方法。
INTER_CUBIC,双三次插值4x4像素邻域内的双立方插值。
INTER_AREA,使用像素面积关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。
INTER_LANCZOS4,8x8邻域的Lanczos插值。
INTER_LINEAR_EXACT,位精确双线性插值。
INTER_NEAREST_EXACT,位精确最近邻插值。这将产生与PIL、scikit-image或Matlab中的最近邻方法相同的结果。
INTER_MAX,插值代码的掩码。
WARP_FILL_OUTLIERS,标志,填充所有目标图像像素。如果其中一些对应于源图像中的异常值,则将它们设置为零。
WARP_INVERSE_MAP,标志,逆变换。
使用举例:
6.7.2.17. PaddedCenterCropTransformer
说明:
使用填充的方式对图片中心进行裁剪的操作。
注意
仅适用于EfficientNet-lite相关实例模型。
计算方式为:
计算系数,int((float( image_size ) / ( image_size + crop_pad ))。
计算中心size的大小, 系数 * np.minimum( 原始图片的高度, 原始图片的宽度 ))。
根据计算出来的size大小,做中心裁剪。
参数:
image_size:图片的大小,默认值为224。
crop_pad:中心填充的大小,默认值为32。
使用举例:
6.7.2.18. BGR2RGBTransformer
说明:
将输入格式由BGR转成RGB的操作。
参数:
data_format:数据格式,取值范围为(CHW,HWC),默认值为CHW。
使用举例:
6.7.2.19. RGB2BGRTransformer
说明:
将输入格式由RGB转成BGR的操作。
参数:
data_format:数据格式,取值范围为(CHW,HWC),默认值为CHW。
使用举例:
6.7.2.20. RGB2GRAYTransformer
说明:
将输入格式由RGB转成GRAY的操作。
参数:
data_format:输入的layout类型,取值范围(“CHW”,”HWC”),默认为”CHW”。
使用举例:
6.7.2.21. BGR2GRAYTransformer
说明:
将输入格式由 BGR 转成 GRAY 的操作。
参数:
data_format:输入的layout类型,取值范围 [“CHW”,”HWC”],默认值为”CHW”。
使用举例:
6.7.2.22. RGB2GRAY_128Transformer
说明:
输入格式由RGB转成GRAY_128的操作。GRAY_128取值范围为(-128,127)。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。
使用举例:
6.7.2.23. RGB2YUV444Transformer
说明:
将输入格式由RGB转成YUV444的操作。
参数:
data_format:输入的layout类型,取值范围为[“CHW”, “HWC”],默认值为”CHW”,此项为必填项。
使用举例:
6.7.2.24. BGR2YUV444Transformer
说明:
将输入格式由BGR转成YUV444的操作。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为 “CHW”,此项为必填项。
使用举例:
6.7.2.25. BGR2YUV444_128Transformer
说明:
将输入格式由BGR转成YUV444_128的操作。YUV444_128取值范围为(-128,127)。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为 “CHW”,此项为必填项。
使用举例:
6.7.2.26. RGB2YUV444_128Transformer
说明:
将输入格式由RGB转成YUV444_128的操作。YUV444_128取值范围为(-128,127)。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。
使用举例:
6.7.2.27. BGR2YUVBT601VIDEOTransformer
说明:
将输入格式由BGR转成YUV_BT601_Video_Range的操作。
YUV_BT601_Video_Range,某些摄像头输入数据都是YUV BT601(Video Range)格式的,取值范围为16~235,该transformer就是适配这种格式的数据产生的。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。
使用举例:
6.7.2.28. RGB2YUVBT601VIDEOTransformer
说明:
将输入格式由RGB转成YUV_BT601_Video_Range的操作。
YUV_BT601_Video_Range,某些摄像头输入数据都是YUV BT601(Video Range)格式的,取值范围为16~235,该transformer就是适配这种格式的数据产生的。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”,此项为必填项。
使用举例:
6.7.2.29. YUVTransformer
说明:
将输入格式转成YUV444的操作。
参数:
color_sequence:颜色序列,此项为必填项。
使用举例:
6.7.2.30. ReduceChannelTransformer
说明:
将C通道缩减为单通道的操作。该transformer主要是针对于C通道,如shape为1*3*224*224 改为1*1*224*224。 使用时layout一定要和data_format值对齐,避免造成删错通道。
参数:
data_format:输入的layout类型,取值范围为[“CHW”, “HWC”],默认值为”CHW”。
使用举例:
6.7.2.31. BGR2NV12Transformer
说明:
将输入格式由BGR转成NV12的操作。
参数:
data_format:输入的layout类型,取值范围为[“CHW”,”HWC”],默认值为”CHW”。
cvt_mode:cvt模式,取值范围为(rgb_calc,opencv),默认值为rgb_calc。
rgb_calc,采用mergeUV的方式处理图片;
opencv,采用opencv的方式处理图片。
使用举例:
6.7.2.32. RGB2NV12Transformer
说明:
将输入格式由RGB转成NV12的操作。
参数:
data_format:输入的 layout 类型,取值范围 [“CHW”, “HWC”], 默认值为”CHW”。
cvt_mode:cvt模式,取值范围为(rgb_calc,opencv),默认值为rgb_calc。
rgb_calc,采用mergeUV的方式处理图片;
opencv,采用opencv的方式处理图片。
使用举例:
6.7.2.33. NV12ToYUV444Transformer
说明:
将输入格式由NV12转成YUV444的操作。
参数:
target_size:目标大小,值为元组,如(240,240)。
yuv444_output_layout:yuv444输出的layout,取值范围为(HWC,CHW),默认值为”HWC”。
使用举例:
6.7.2.34. WarpAffineTransformer
说明:
用于做图像仿射变换的操作。
参数:
input_shape:输入的shape值。
scale:乘以的系数。
使用举例:
6.7.2.35. F32ToS8Transformer
说明:
用于做输入格式从float32转换为int8的操作。
参数:不涉及。
使用举例:
6.7.2.36. F32ToU8Transformer
说明:
用于做输入格式从float32转换为uint8的操作。
参数:不涉及。
使用举例: