你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
BrainScript 图像读取器
警告:我们仍然支持此读取器格式,但它已被弃用。 请使用新的读取器格式: 了解和扩展读取器。
图像读取器可用于读取图像,并应用一些特定于图像的转换,例如随机裁剪、缩放、水平翻转等。 它采用简单的文本文件,其中每行都包含图像文件之间的制表符分隔映射 (,例如 JPEG、PNG 等) 和基于 0 的标签。 例如:
/home/user/data/train/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train/n01440764/n01440764_10027.JPEG<tab>0
ImageReader 支持“...”映射文件中的语法。 如果存储在映射文件中的文件路径以“...”开头,则为“...”替换为映射文件本身的目录。
例如,如果文件 C:\work\CNTK\data\train.map 包含
...\images\img1.png 1
...\images\img2.png 2
...\images\img3.png 3
然后,读取器将读取文件,就像指定了以下绝对路径一样:
C:\work\CNTK\data\images\img1.png 1
C:\work\CNTK\data\images\img2.png 2
C:\work\CNTK\data\images\img3.png 3
由于一些图像数据集可能非常大, (例如数百万个图像) ,因此将这些映像放入容器中有时很有用。 映像读取器当前支持一种容器类型:ZIP 文件。 在这种情况下,建议使用 STORE 压缩模式,因为它提供对.zip文件内容的最快访问,此外,图像通常不需要压缩。 例如, (记下.zip文件名末尾的 @ 符号) :
/home/user/data/train.zip@/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train.zip@/n01440764/n01440764_10027.JPEG<tab>0
/home/user/data/train_01.zip@/n01534433/n01534433_7285.JPEG<tab>0
/home/user/data/train/n01534433/n01534433_7285.JPEG<tab>0
请注意,可以混合和匹配容器和文件,但建议限制容器数量以提高性能,例如将所有映像放入单个 (或少量) .zip文件。
另请注意,在Windows环境中,不支持文件名中的 Unicode 字符 (所有字符都应是标准 ASCII) 。 此限制来自图像读取器所依赖的 OpenCV 库。
以下示例演示了以下 ImageReader
用法:
reader=[
readerType=ImageReader
file=$ConfigDir$/train_map.txt
randomize=Auto
features=[
# Below are the required parameters.
width=224
height=224
channels=3
# Below are the optional parameters.
# Possible values: Center, RandomSide, RandomArea, MultiView10. Default: Center
cropType=RandomSide
# Horizontal random flip, will be enabled by default if cropType=Random
#hflip=0
# Crop scale side ratio. Examples: sideRatio=0.9, sideRatio=0.7:0.9.
sideRatio=0.875
# Crop scale ratio jitter type.
# Possible values: None, UniRatio. Default: None
jitterType=UniRatio
# Interpolation to use when scaling image to width x height size.
# Possible values: nearest, linear, cubic, lanczos. Default: linear.
interpolations=Linear
# Aspect ratio jitter radius. Default is 1.0 (crop square).
aspectRatio=0.75:1.0
# Brightness, contrast and color jittering. Default is 0.0 (no effect).
brightnessRadius=0.2
contrastRadius=0.2
saturationRadius=0.4
# Intensity jittering: enabled if file is specified and intensityStdDev > 0.
# The file stores 1x3 vector (eigenvalues) and 3x3 matrix (eigenvectors) in OpenCV XML format.
intensityFile="$ConfigDir$/ImageNet1K_intensity.xml"
# StdDev for intensity jittering. Default is 0.0.
intensityStdDev=0.1
# Mean subtraction: enabled if file is specified.
# The file stores mean values for each pixel in OpenCV matrix XML format.
meanFile=$ConfigDir$/ImageNet1K_mean.xml
]
labels=[
labelDim=1000
]
]
有极少数必需的参数,例如width
height
,以及channels
配置图像转换的多个可选参数。
裁剪转换
cropType
指定裁剪图像的哪个部分,当前可以是Center
,RandomSide
RandomArea
也可以Multiview10
。 RandomSide
通常在 RandomArea
训练 Center
期间使用,而通常在测试期间使用。 随机裁剪是一种常用的数据扩充技术,用于改进 DNN 的通用化。 MultiView10
通常用于测试/评估阶段并启用 10 视图图像评估: (4 个 (角) + 1 (center) ) * 2 (原始 + 水平翻转) = 10。
水平翻转转换
hflip
参数指定图像是否在水平方向随机翻转。 水平翻转是另一种流行的数据扩充技术,如果图像显示垂直对称性,例如,与许多现实世界对象一样,则应使用。
缩放转换
sideRatio
指定最终图像维度的比率,例如 width
,或 height
,与从图像拍摄的随机裁剪的大小。 例如,比率 224 / 256 = 0.875 表示大小为 224 的裁剪将从图像重新缩放到 256 (实现详细信息: ImageReader
采用裁剪,然后重新缩放,而不是以其他方式) 。
若要启用缩放抖动 (另一种流行的数据扩充技术) ,请使用冒号分隔的值,这意味着 sideRatio=0.875:0.466
224 裁剪将从随机缩放的图像中随机缩放为 [256, 480] 范围的大小。
areaRatio
指定最终图像区域与原始图像的比率。 例如,0.5 的比率意味着裁剪窗口区域大约是原始图像的一半。 然后,裁剪的窗口将缩放为 224x224。 sideRatio
(与 cropType=RandomSide
) 一起指定, (areaRatio
与 cropType=RandomArea
) 一起指定,互斥。
aspectRatio
允许一个应用纵横比随机抖动。 例如,值为 0.2 表示图像的纵横比可以随机更改, (统一分布) 为原始图像的 80% 到 120%。
颜色抖动转换
brightnessRadius
并允许 contrastRadius
应用亮度和对比度抖动。 这些转换将以下公式应用于图像的每个像素: Yij = alpha * Xij + beta
其中 alpha
是对比度调整和 beta
- 亮度。 例如,如果为 contrastRadius
0.2
alpha,则将随机选择 (统一分布) 。0.8
1.2
brightnessRadius
随机选择值作为图像平均值的比例,例如,brightnessRadius
等于0.2
随机选择值。-0.2 * mean
0.2 * mean
saturationRadius
允许应用饱和随机抖动。 例如,图像的 0.3
饱和度值可以从原始图像的 70% 更改为 130%。
intensityFile
并允许 intensityStdDev
应用基于 PCA 的强度抖动,如 本文所述。
intensityFile
是包含 OpenCV XML 格式特征值和特征函数的文件的路径。 intensityStdDev
指定特征值随机系数的标准偏差。
平均减法转换
meanFile
参数是 OpenCV XML 矩阵格式的文件的路径,其中包含整个数据集的每像素平均值。 例如,对于文件大小 224x224x3
的输入层,文件将包含将在训练 (或从输入图像测试) 期间减去的150528条目。 可以使用其他几种方法(例如 Mean
节点甚至仅从输入中减去一些固定值(如 128)来实现相同的或类似效果。