Средство чтения изображений BrainScript
ВНИМАНИЕ! Мы по-прежнему поддерживаем этот формат чтения, но он не рекомендуется. Используйте новый формат чтения: Understanding-and-Extending-Reader.
Средство чтения изображений можно использовать для чтения изображений и применения некоторых преобразований, таких как случайное обрезка, масштабирование, горизонтальное перелистывание и другие. Он принимает в качестве входного простого текстового файла, где каждая строка содержит сопоставление с разделием табуляции между файлом изображения (например, 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 среде символы Юникода в именах файлов не поддерживаются (все символы должны быть стандартными 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(центр)) * 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
яркость. Например, если альфа-канал 0.2
будет выбран случайным образом (равномерное распределение) от 0.8
1.2
.contrastRadius
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, из входных данных.