Сверточная нейронная сеть SqueezeNet
SqueezeNet является сверточной нейронной сетью, которая является 18 слоями глубоко. Можно загрузить предварительно обученную версию сети, обученной больше чем на миллионе изображений от базы данных ImageNet [1]. Предварительно обученная сеть может классифицировать изображения в 1 000 категорий объектов, таких как клавиатура, мышь, карандаш и многие животные. В результате сеть изучила богатые представления функции для широкого спектра изображений. Эта функция возвращает сеть SqueezeNet v1.1, которая имеет подобную точность к SqueezeNet v1.0, но требует меньшего количества операций с плавающей точкой на предсказание [3]. Сеть имеет входной размер изображений 227 227. Для большего количества предварительно обученных сетей в MATLAB® смотрите Предварительно обученные Глубокие нейронные сети.
Можно использовать classify
классифицировать новые изображения с помощью сети SqueezeNet. Для примера смотрите, Классифицируют Изображение Используя SqueezeNet.
Можно переобучить сеть SqueezeNet, чтобы выполнить новую задачу с помощью передачи обучения. Для примера смотрите, что Интерактивная Передача обучения Использует SqueezeNet.
возвращает сеть SqueezeNet, обученную на наборе данных ImageNet. Этот синтаксис эквивалентен net
= squeezenet('Weights','imagenet'
)net = squeezenet
.
возвращает нетренированную архитектуру сети SqueezeNet.lgraph
= squeezenet('Weights','none'
)
Загрузите предварительно обученную сеть SqueezeNet.
net = squeezenet
net = DAGNetwork with properties: Layers: [68×1 nnet.cnn.layer.Layer] Connections: [75×2 table]
Эта функция возвращает DAGNetwork
объект.
SqueezeNet включен в Deep Learning Toolbox™. Чтобы загрузить другие сети, используйте функции, такие как googlenet
заставить ссылки загружать предварительно обученные сети с Add-On Explorer.
В этом примере показано, как подстроить предварительно обученную сеть SqueezeNet, чтобы классифицировать новый набор изображений. Этот процесс называется передачей обучения и обычно намного быстрее и легче, чем обучение новой сети, потому что можно применить изученные функции к новой задаче с помощью меньшего числа учебных изображений. Чтобы подготовить сеть к передаче обучения в интерактивном режиме, используйте Deep Network Designer.
Извлеките данные
В рабочей области извлеките набор данных MathWorks Merch. Это - небольшой набор данных, содержащий 75 изображений товаров MathWorks, принадлежа пяти различным классам (дно, куб, игра в карты, отвертка и факел).
unzip("MerchData.zip");
Откройте SqueezeNet в Deep Network Designer
Открытый Deep Network Designer.
deepNetworkDesigner
Выберите SqueezeNet из списка предварительно обученных сетей и нажмите Open.
Deep Network Designer отображает уменьшивший масштаб представление целой сети в панели Разработчика.
Исследуйте сетевой график. Чтобы увеличить масштаб с мышью, используйте колесо Ctrl+scroll. К панорамированию используйте клавиши со стрелками, или удерживайте колесико прокрутки и перетащите мышь. Выберите слой, чтобы просмотреть его свойства. Отмените выбор всех слоев, чтобы просмотреть сетевые сводные данные в панели Свойств.
Импортируйте данные
Чтобы загрузить данные в Deep Network Designer, на вкладке Data, нажимают Import Data. Диалоговое окно Import Data открывается.
В списке Источников данных выберите Folder. Нажмите Browse и выберите извлеченную папку MerchData.
Разделите данные на 70% обучающих данных и 30%-х данных о валидации.
Задайте операции увеличения, чтобы выполнить на учебных изображениях. В данном примере примените случайное отражение в оси X, случайное вращение из области значений [-90,90] степени и случайное перемасштабирование из области значений [1,2]. Увеличение данных помогает препятствовать тому, чтобы сеть сверхсоответствовала и запомнила точные детали учебных изображений.
Нажмите Import, чтобы импортировать данные в Deep Network Designer.
Визуализируйте данные
Используя Deep Network Designer, можно визуально смотреть распределение данных об обучении и валидации в панели Данных. Вы видите, что в этом примере существует пять классов в наборе данных.
Сеть редактирования для передачи обучения
Сверточные слои сетевого извлечения отображают функции что последний learnable слой и итоговое использование слоя классификации, чтобы классифицировать входное изображение. Эти два слоя, 'conv10'
и 'ClassificationLayer_predictions'
в SqueezeNet содержите информацию о том, как сочетать функции, которые сеть извлекает в вероятности класса, значение потерь и предсказанные метки. Чтобы переобучить предварительно обученную сеть, чтобы классифицировать новые изображения, замените эти два слоя на новые слои, адаптированные к новому набору данных.
В большинстве сетей последний слой с learnable весами является полносвязным слоем. В некоторых сетях, таких как SqueezeNet, последний learnable слой является итоговым сверточным слоем вместо этого. В этом случае замените сверточный слой на новый сверточный слой с количеством фильтров, равных количеству классов.
В панели Разработчика перетащите новый convolutional2dLayer
на холст. Чтобы совпадать с исходным сверточным слоем, установите FilterSize
к 1,1
. Измените NumFilters
к количеству классов в новых данных, в этом примере, 5
.
Измените скорости обучения так, чтобы изучение было быстрее в новом слое, чем в переданных слоях путем установки, устанавливает WeightLearnRateFactor
и BiasLearnRateFactor
к 10. Удалите последний 2D сверточный слой и соедините свой новый слой вместо этого.
Замените выходной слой. Прокрутите в конец Библиотеки Слоя и перетащите новый classificationLayer
на холст. Удалите исходный выходной слой и соедините свой новый слой вместо этого.
Проверяйте сеть
Чтобы убедиться ваша отредактированная сеть готова к обучению, нажмите Analyze и обеспечьте Нейронной сети для глубокого обучения нулевые ошибки отчетов Анализатора.
Обучение сети
Задайте опции обучения. Выберите вкладку Training и нажмите Training Options.
Установите InitialLearnRate
к маленькому значению, чтобы замедлить изучение в переданных слоях.
Задайте ValidationFrequency
так, чтобы точность на данных о валидации была вычислена один раз в эпоху.
Задайте небольшое количество эпох. Эпоха является полным учебным циклом на целом обучающем наборе данных. Для передачи обучения вы не должны обучаться для как много эпох.
Задайте мини-пакетный размер, то есть, сколько изображений, чтобы использовать в каждой итерации. Гарантировать целый набор данных используется в течение каждой эпохи, установите мини-пакетный размер равномерно делить количество обучающих выборок.
В данном примере установите InitialLearnRate
к 0.0001
, ValidationFrequency
к 5
, и MaxEpochs
к 8
. Как существует 55 наблюдений, установите MiniBatchSize
к 11.
Чтобы обучить сеть с заданными опциями обучения, нажмите Close и затем нажмите Train.
Deep Network Designer позволяет вам визуализировать и контролировать процесс обучения. Можно затем отредактировать опции обучения и переобучить сеть при необходимости.
Экспортируйте результаты и сгенерируйте код MATLAB
Чтобы экспортировать сетевую архитектуру с обученными весами, на вкладке Training, выбирают Export> Export Trained Network и Results. Deep Network Designer экспортирует обучивший сеть как переменную trainedNetwork_1
и учебная информация как переменная trainInfoStruct_1
.
trainInfoStruct_1
trainInfoStruct_1 = struct with fields:
TrainingLoss: [1×40 double]
TrainingAccuracy: [1×40 double]
ValidationLoss: [4.8267 NaN NaN NaN 2.1034 NaN NaN NaN NaN 1.2332 NaN NaN NaN NaN 0.6614 NaN NaN NaN NaN 0.4312 NaN NaN NaN NaN 0.2878 NaN NaN NaN NaN 0.2472 NaN NaN NaN NaN 0.2647 NaN NaN NaN NaN 0.2893]
ValidationAccuracy: [10 NaN NaN NaN 10 NaN NaN NaN NaN 40 NaN NaN NaN NaN 80 NaN NaN NaN NaN 90 NaN NaN NaN NaN 95 NaN NaN NaN NaN 95 NaN NaN NaN NaN 95 NaN NaN NaN NaN 95]
BaseLearnRate: [1×40 double]
FinalValidationLoss: 0.2893
FinalValidationAccuracy: 95
Можно также сгенерировать код MATLAB, который воссоздает сеть и используемые опции обучения. На вкладке Training выберите Export> Generate Code for Training. Исследуйте код MATLAB, чтобы изучить, как программно подготовить данные к обучению, создать сетевую архитектуру и обучить сеть.
Классифицируйте новое изображение
Загрузите новое изображение, чтобы классифицировать использование обучившего сеть.
I = imread("MerchDataTest.jpg");
Deep Network Designer изменяет размер изображений во время обучения совпадать с сетевым входным размером. Чтобы просмотреть сетевой входной размер, перейдите к Разработчику, разделяют на области и выбирают imageInputLayer
(первый слой). Эта сеть имеет входной размер 227 227.
Измените размер тестового изображения, чтобы совпадать с сетевым входным размером.
I = imresize(I, [227 227]);
Классифицируйте тестовое изображение с помощью обучившего сеть.
[YPred,probs] = classify(trainedNetwork_1,I); imshow(I) label = YPred; title(string(label) + ", " + num2str(100*max(probs),3) + "%");
В этом примере показано, как подстроить предварительно обученную сверточную нейронную сеть SqueezeNet, чтобы выполнить классификацию на новом наборе изображений.
SqueezeNet был обучен на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила богатые представления функции для широкого спектра изображений. Сеть берет изображение в качестве входа и выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.
Передача обучения обычно используется в применении глубокого обучения. Можно взять предварительно обученную сеть и использовать ее в качестве начальной точки, чтобы изучить новую задачу. Подстройка сети с передачей обучения обычно намного быстрее и легче, чем обучение сети со случайным образом инициализированными весами с нуля. Можно быстро передать изученные функции новой задаче с помощью меньшего числа учебных изображений.
Загрузка данных
Разархивируйте и загрузите новые изображения как datastore изображений. imageDatastore
автоматически помечает изображения на основе имен папок и хранит данные как ImageDatastore
объект. Datastore изображений позволяет вам сохранить большие данные изображения, включая данные, которые не умещаются в памяти, и эффективно считать пакеты изображений во время обучения сверточной нейронной сети.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
Разделите данные на наборы данных обучения и валидации. Используйте 70% изображений для обучения и 30% для валидации. splitEachLabel
разделяет images
datastore в два новых хранилища данных.
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');
Этот очень небольшой набор данных теперь содержит 55 учебных изображений и 20 изображений валидации. Отобразите некоторые демонстрационные изображения.
numTrainImages = numel(imdsTrain.Labels);
idx = randperm(numTrainImages,16);
I = imtile(imds, 'Frames', idx);
figure
imshow(I)
Загрузите предварительно обученную сеть
Загрузите предварительно обученную нейронную сеть SqueezeNet.
net = squeezenet;
Используйте analyzeNetwork
отобразить интерактивную визуализацию сетевой архитектуры и подробной информации о слоях сети.
analyzeNetwork(net)
Первый слой, изображение ввело слой, требует входных изображений размера 227 227 3, где 3 количество цветовых каналов.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Замените последние слои
Сверточные слои сетевого извлечения отображают функции что последний learnable слой и итоговое использование слоя классификации, чтобы классифицировать входное изображение. Эти два слоя, 'conv10'
и 'ClassificationLayer_predictions'
в SqueezeNet содержите информацию о том, как сочетать функции, которые сеть извлекает в вероятности класса, значение потерь и предсказанные метки. Чтобы переобучить предварительно обученную сеть, чтобы классифицировать новые изображения, замените эти два слоя на новые слои, адаптированные к новому набору данных.
Извлеките график слоев из обучившего сеть.
lgraph = layerGraph(net);
Найдите, что имена этих двух слоев заменяют. Можно сделать это вручную, или можно использовать функцию поддержки findLayersToReplace
найти эти слои автоматически.
[learnableLayer,classLayer] = findLayersToReplace(lgraph); [learnableLayer,classLayer]
ans = 1x2 Layer array with layers: 1 'conv10' Convolution 1000 1x1x512 convolutions with stride [1 1] and padding [0 0 0 0] 2 'ClassificationLayer_predictions' Classification Output crossentropyex with 'tench' and 999 other classes
В большинстве сетей последний слой с learnable весами является полносвязным слоем. В некоторых сетях, таких как SqueezeNet, последний learnable слой является сверточным слоем 1 на 1 вместо этого. В этом случае замените сверточный слой на новый сверточный слой с количеством фильтров, равных количеству классов. Чтобы учиться быстрее в новых слоях, чем в переданных слоях, увеличьте WeightLearnRateFactor
и BiasLearnRateFactor
значения сверточного слоя.
numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5
newConvLayer = convolution2dLayer([1, 1],numClasses,'WeightLearnRateFactor',10,'BiasLearnRateFactor',10,"Name",'new_conv'); lgraph = replaceLayer(lgraph,'conv10',newConvLayer);
Слой классификации задает выходные классы сети. Замените слой классификации на новый без меток класса. trainNetwork
автоматически устанавливает выходные классы слоя в учебное время.
newClassificatonLayer = classificationLayer('Name','new_classoutput'); lgraph = replaceLayer(lgraph,'ClassificationLayer_predictions',newClassificatonLayer);
Обучение сети
Сеть требует входных изображений размера 227 227 3, но изображения в хранилищах данных изображений имеют различные размеры. Используйте увеличенный datastore изображений, чтобы автоматически изменить размер учебных изображений. Задайте дополнительные операции увеличения, чтобы выполнить на учебных изображениях: случайным образом инвертируйте учебные изображения вдоль вертикальной оси, и случайным образом переведите их до 30 пикселей горизонтально и вертикально. Увеличение данных помогает препятствовать тому, чтобы сеть сверхсоответствовала и запомнила точные детали учебных изображений.
pixelRange = [-30 30]; imageAugmenter = imageDataAugmenter( ... 'RandXReflection',true, ... 'RandXTranslation',pixelRange, ... 'RandYTranslation',pixelRange); augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ... 'DataAugmentation',imageAugmenter);
Чтобы автоматически изменить размер изображений валидации, не выполняя дальнейшее увеличение данных, используйте увеличенный datastore изображений, не задавая дополнительных операций предварительной обработки.
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
Задайте опции обучения. Для передачи обучения сохраните функции от ранних слоев предварительно обученной сети (переданные веса слоя). Чтобы замедлить изучение в переданных слоях, установите начальную скорость обучения на маленькое значение. На предыдущем шаге вы увеличили факторы скорости обучения для сверточного слоя, чтобы ускорить изучение в новых последних слоях. Эта комбинация настроек скорости обучения приводит к быстрому изучению только в новых слоях и более медленном изучении в других слоях. При использовании обучение с переносом вы не должны обучаться для как много эпох. Эпоха является полным учебным циклом на целом обучающем наборе данных. Задайте мини-пакетный размер, чтобы быть 11 так, чтобы в каждую эпоху вы рассмотрели все данные. Программное обеспечение подтверждает сеть каждый ValidationFrequency
итерации во время обучения.
options = trainingOptions('sgdm', ... 'MiniBatchSize',11, ... 'MaxEpochs',7, ... 'InitialLearnRate',2e-4, ... 'Shuffle','every-epoch', ... 'ValidationData',augimdsValidation, ... 'ValidationFrequency',3, ... 'Verbose',false, ... 'Plots','training-progress');
Обучите сеть, которая состоит из переданных и новых слоев. По умолчанию, trainNetwork
использует графический процессор, если вы доступны (требует Parallel Computing Toolbox™, и CUDA® включил графический процессор с, вычисляют возможность 3.0 или выше). В противном случае это использует центральный процессор. Можно также задать среду выполнения при помощи 'ExecutionEnvironment'
аргумент пары "имя-значение" trainingOptions
.
netTransfer = trainNetwork(augimdsTrain,lgraph,options);
Классифицируйте изображения валидации
Классифицируйте изображения валидации с помощью подстроенной сети.
[YPred,scores] = classify(netTransfer,augimdsValidation);
Отобразите четыре демонстрационных изображения валидации с их предсказанными метками.
idx = randperm(numel(imdsValidation.Files),4); figure for i = 1:4 subplot(2,2,i) I = readimage(imdsValidation,idx(i)); imshow(I) label = YPred(idx(i)); title(string(label)); end
Вычислите точность классификации на набор валидации. Точность является частью меток, которые сеть предсказывает правильно.
YValidation = imdsValidation.Labels; accuracy = mean(YPred == YValidation)
accuracy = 1
Для советов на улучшающейся точности классификации смотрите Советы Глубокого обучения и Приемы.
Считайте, измените размер и классифицируйте использование изображений SqueezeNet.
Во-первых, загрузите предварительно обученную модель SqueezeNet.
net = squeezenet;
Считайте изображение с помощью imread
.
I = imread('peppers.png');
figure
imshow(I)
Предварительно обученная модель требует, чтобы размер изображения совпал с входным размером сети. Определите входной размер сети с помощью InputSize
свойство первого слоя сети.
sz = net.Layers(1).InputSize
sz = 1×3
227 227 3
Обрежьте изображение к входному размеру сети. В качестве альтернативы можно изменить размер изображения с помощью imresize
.
I = I(1:sz(1),1:sz(2),1:sz(3)); figure imshow(I)
Классифицируйте изображение с помощью classify
.
label = classify(net,I)
label = categorical
bell pepper
Покажите изображение и результат классификации вместе.
figure imshow(I) title(label)
Этот пример использует:
В этом примере показано, как извлечь изученные функции изображений из предварительно обученной сверточной нейронной сети и использовать те функции, чтобы обучить классификатор изображений. Извлечение признаков является самым легким и самым быстрым способом использовать представительную степень предварительно обученных глубоких сетей. Например, можно обучить машину опорных векторов (SVM) с помощью fitcecoc
(Statistics and Machine Learning Toolbox™) на извлеченных функциях. Поскольку извлечение признаков только требует одного прохода через данные, это - хорошая начальная точка, если у вас нет графического процессора, чтобы ускорить сетевое обучение с.
Загрузка данных
Разархивируйте и загрузите демонстрационные изображения как datastore изображений. imageDatastore
автоматически помечает изображения на основе имен папок и хранит данные как ImageDatastore
объект. Datastore изображений позволяет вам сохранить большие данные изображения, включая данные, которые не умещаются в памяти. Разделите данные в 70%-е обучение и 30% тестовых данных.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); [imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
Этот очень небольшой набор данных теперь имеет 55 учебных изображений и 20 изображений валидации. Отобразите некоторые демонстрационные изображения.
numImagesTrain = numel(imdsTrain.Labels);
idx = randperm(numImagesTrain,16);
I = imtile(imds, 'Frames', idx);
figure
imshow(I)
Загрузите предварительно обученную сеть
Загрузите предварительно обученную сеть SqueezeNet. SqueezeNet обучен больше чем на миллионе изображений и может классифицировать изображения в 1 000 категорий объектов, например, клавиатуры, мыши, карандаша и многих животных. В результате модель изучила богатые представления функции для широкого спектра изображений.
net = squeezenet;
Анализируйте сетевую архитектуру.
analyzeNetwork(net)
Первый слой, изображение ввело слой, требует входных изображений размера 227 227 3, где 3 количество цветовых каналов.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Извлеките функции изображений
Сеть создает иерархическое представление входных изображений. Более глубокие слои содержат высокоуровневые функции, созданное использование более низких функций уровня более ранних слоев. Чтобы получить представления функции обучения и тестовых изображений, используйте activations
на глобальном среднем слое 'pool10'
объединения. Чтобы получить более низкое представление уровня изображений, используйте более ранний слой в сети.
Сеть требует входных изображений размера 227 227 3, но изображения в хранилищах данных изображений имеют различные размеры. Чтобы автоматически изменить размер обучения и тестовых изображений, прежде чем они будут введены к сети, создайте увеличенные хранилища данных изображений, задайте желаемый размер изображения и используйте эти хранилища данных в качестве входных параметров к activations
.
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest); layer = 'pool10'; featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows'); featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
Извлеките метки класса из обучения и тестовых данных.
YTrain = imdsTrain.Labels; YTest = imdsTest.Labels;
Подходящий классификатор изображений
Используйте функции, извлеченные из учебных изображений как переменные предикторы, и соответствуйте машине опорных векторов (SVM) мультикласса с помощью fitcecoc
(Statistics and Machine Learning Toolbox).
mdl = fitcecoc(featuresTrain,YTrain);
Классифицируйте тестовые изображения
Классифицируйте тестовые изображения с помощью обученной модели SVM и функций, извлеченных из тестовых изображений.
YPred = predict(mdl,featuresTest);
Отобразите четыре демонстрационных тестовых изображения с их предсказанными метками.
idx = [1 5 10 15]; figure for i = 1:numel(idx) subplot(2,2,i) I = readimage(imdsTest,idx(i)); label = YPred(idx(i)); imshow(I) title(label) end
Вычислите точность классификации на набор тестов. Точность является частью меток, которые сеть предсказывает правильно.
accuracy = mean(YPred == YTest)
accuracy = 1
Этот SVM имеет высокую точность. Если точность высоко достаточно не использует извлечение признаков, то попробуйте передачу обучения вместо этого.
net
— Сверточная нейронная сеть Pretrained SqueezeNetDAGNetwork
объектПредварительно обученная сверточная нейронная сеть SqueezeNet, возвращенная как DAGNetwork
объект.
lgraph
— Нетренированная архитектура сверточной нейронной сети SqueezeNetLayerGraph
объектНетренированная архитектура сверточной нейронной сети SqueezeNet, возвращенная как LayerGraph
объект.
[1] ImageNet. http://www.image-net.org
[2] Iandola, Форрест Н., ханьцы Песни, Метью В. Москевич, Халид Ашраф, Уильям Дж. Далли и Курт Койцер. "SqueezeNet: точность AlexNet-уровня с 50x меньше параметров и <размер модели на 0,5 Мбайта". Предварительно распечатайте, представленный 4 ноября 2016. https://arxiv.org/abs/1602.07360.
[3] Iandola, Форрест Н. "SqueezeNet". https://github.com/forresti/SqueezeNet.
Для генерации кода загрузите сеть путем передачи squeezenet
функционируйте к coder.loadDeepLearningNetwork
. Например: net = coder.loadDeepLearningNetwork('squeezenet')
.
Для получения дополнительной информации смотрите Предварительно обученные сети Загрузки для Генерации кода (MATLAB Coder).
Синтаксис squeezenet('Weights','none')
не поддержан для генерации кода.
Указания и ограничения по применению:
Для генерации кода можно загрузить сеть при помощи синтаксиса net = squeezenet
или путем передачи squeezenet
функционируйте к coder.loadDeepLearningNetwork
. Например: net = coder.loadDeepLearningNetwork('squeezenet')
.
Для получения дополнительной информации смотрите Предварительно обученные сети Загрузки для Генерации кода (GPU Coder).
Синтаксис squeezenet('Weights','none')
не поддержан для генерации кода графического процессора.
DAGNetwork
| Deep Network Designer | alexnet
| densenet201
| googlenet
| inceptionresnetv2
| inceptionv3
| layerGraph
| plot
| resnet101
| resnet18
| resnet50
| trainNetwork
| vgg16
| vgg19
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.