SqueezeNet сверточная нейронная сеть
SqueezeNet является сверточной нейронной сетью, которая имеет глубину 18 слоев. Предварительно обученную версию сети можно загрузить более чем на миллион изображений из базы данных ImageNet [1]. Предварительно обученная сеть может классифицировать изображения в 1000 категорий объектов, таких как клавиатура, мышь, карандаш и многие животные. В результате сеть узнала представления богатых функций для широкой области значений изображений. Эта функция возвращает сеть 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, принадлежащих пяти различным классам (прописная буква, cube, игральные карты, отвертка и факел).
unzip("MerchData.zip");
Откройте SqueezeNet в Deep Network Designer
Откройте Deep Network Designer с SqueezeNet.
deepNetworkDesigner(squeezenet);
Deep Network Designer отображает представление масштабирования всей сети на панели Designer.
Исследуйте сетевой график. Для масштабирования мышью используйте колесо прокрутки Ctrl +. Для панорамирования используйте клавиши со стрелами или удерживайте за колесо прокрутки и перетащите мышь. Выберите слой для просмотра его свойств. Отмените выбор всех слоев, чтобы просмотреть сводные данные по сети на панели свойств.
Импорт данных
Чтобы загрузить данные в Deep Network Designer, на вкладке Data, выберите Import Data > Import Image Data. Откроется диалоговое окно Импорт изображений (Import Image Data).
В списке Источник данных выберите Папка. Нажмите кнопку Обзор и выберите извлеченную папку MerchData.
Разделите данные на 70% обучающих данных и 30% валидационных данных.
Задайте операции увеличения для выполнения с обучающими изображениями. В этом примере примените случайное отражение в оси X, случайное вращение из области значений [ -90,90 ] степеней и случайное перемасштабирование из области значений [1,2]. Увеличение количества данных помогает предотвратить сверхподбор кривой сети и запоминание точных деталей обучающих изображений.
Щелкните Импорт, чтобы импортировать данные в Deep Network Designer.
Визуализация данных
Используя Deep Network Designer, можно визуально просмотреть распределение данных обучения и валидации на вкладке Данные. Вы также можете просмотреть случайные наблюдения и их метки как простую проверку перед обучением. Можно увидеть, что в этом примере в наборе данных пять классов.
Редактирование сети для передачи обучения
Сверточные слои сети извлекают изображение, функции последний выучиваемый слой и конечный слой классификации используют для классификации входа изображения. Эти два слоя, 'conv10'
и 'ClassificationLayer_predictions'
в SqueezeNet содержат информацию о том, как объединить функции, которые сеть извлекает в вероятности классов, значение потерь и предсказанные метки. Чтобы переобучить предварительно обученную сеть для классификации новых изображений, замените эти два слоя новыми слоями, адаптированными к новому набору данных.
В большинстве сетей последний слой с усвояемыми весами является полносвязным слоем. В некоторых сетях, таких как SqueezeNet, последний обучаемый слой является конечным сверточным слоем. В этом случае замените сверточный слой на новый сверточный слой с количеством фильтров, равным количеству классов.
На панели Designer перетащите мышью новую convolution2dLayer
на холст. Чтобы соответствовать исходному сверточному слою, задайте FilterSize
на 1,1
. Изменение NumFilters
к количеству классов в новых данных, в этом примере, 5
.
Измените скорости обучения так, чтобы обучение было быстрее в новом слое, чем в переданных слоях, путем установки WeightLearnRateFactor
и BiasLearnRateFactor
на 10
. Удалите последний 2-D сверточный слой и соедините вместо этого новый слой.
Замените слой выхода. Прокрутка до конца библиотеки слоев и перетаскивание нового classificationLayer
на холст. Удалите исходный выходной слой и соедините новый слой.
Проверяйте сеть
Чтобы убедиться, что ваша отредактированная сеть готова к обучению, нажатие кнопки Analyze и убедитесь, что анализатор Нейронной сети для глубокого обучения сообщает о нулевых ошибках.
Обучите сеть
Задайте опции обучения. Выберите вкладку Обучение и нажмите Опции обучения.
Установите начальную скорость обучения на небольшое значение, чтобы замедлить обучение в перенесенных слоях.
Укажите частоту валидации, чтобы точность данных валидации вычислялась один раз в каждую эпоху.
Задайте небольшое количество эпох. Эпоха - это полный цикл обучения на целом наборе обучающих данных. Для передачи обучения не нужно тренироваться на столько эпох.
Задайте размер мини-пакета, то есть сколько изображений использовать в каждой итерации. Чтобы гарантировать использование всего набора данных в каждую эпоху, установите размер мини-пакета, чтобы равномерно разделить количество обучающих выборок.
В данном примере установите InitialLearnRate на 0.0001
, ValidationFrequency для 5
, и MaxEpochs, чтобы 8
. Поскольку наблюдений 55, установите значение MiniBatchSize 11
.
Чтобы обучить сеть с заданными опциями обучения, нажмите кнопку Закрыть и затем щелкните Обучить.
Deep Network Designer позволяет визуализировать и контролировать процесс обучения. Затем можно отредактировать опции обучения и при необходимости переобучить сеть.
Экспорт результатов и генерация кода MATLAB
Чтобы экспортировать сетевую архитектуру с обученными весами, на вкладке Обучение выберите Экспорт > Экспорт обученной сети и результатов. Deep Network Designer экспортирует обученную сеть как переменную trainedNetwork_1
и обучающую информацию как переменную trainInfoStruct_1
.
trainInfoStruct_1
trainInfoStruct_1 = struct with fields:
TrainingLoss: [1×40 double]
TrainingAccuracy: [1×40 double]
ValidationLoss: [3.3420 NaN NaN NaN 2.1187 NaN NaN NaN NaN 1.4291 NaN NaN NaN NaN 0.8527 NaN NaN NaN NaN 0.5849 NaN NaN NaN NaN 0.4678 NaN NaN NaN NaN 0.3967 NaN NaN NaN NaN 0.3875 NaN NaN NaN NaN 0.3749]
ValidationAccuracy: [20 NaN NaN NaN 30 NaN NaN NaN NaN 55.0000 NaN NaN NaN NaN 65 NaN NaN NaN NaN 85 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.3749
FinalValidationAccuracy: 95
Можно также сгенерировать код MATLAB, который воссоздает сеть и используемые опции обучения. На вкладке Обучение выберите Экспорт > Сгенерировать код для обучения. Исследуйте код MATLAB, чтобы узнать, как программно подготовить данные к обучению, создать сетевую архитектуру и обучить сеть.
Классификация нового изображения
Загрузите новое изображение для классификации с помощью обученной сети.
I = imread("MerchDataTest.jpg");
Deep Network Designer изменяет размер изображений во время обучения, чтобы соответствовать размеру входа сети. Чтобы просмотреть размер входа сети, перейдите на панель 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 обучен на более чем миллионе изображений и может классифицировать изображения в 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила представления богатых функций для широкой области значений изображений. Сеть принимает изображение как вход и выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.
Передача обучения обычно используется в применениях глубокого обучения. Можно взять предварительно обученную сеть и использовать ее как начальная точка для изучения новой задачи. Подстройка сети с передачей обучения обычно намного быстрее и проще, чем обучение сети со случайным образом инициализированными весами с нуля. Можно быстро перенести выученные функции в новую задачу с помощью меньшего количества обучающих изображений.
Загрузка данных
Разархивируйте и загружайте новые изображения как image datastore. imageDatastore
автоматически помечает изображения на основе имен папок и сохраняет данные как ImageDatastore
объект. image 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
Замена конечных слоев
Сверточные слои сети извлекают изображение, функции последний выучиваемый слой и конечный слой классификации используют для классификации входа изображения. Эти два слоя, 'conv10'
и 'ClassificationLayer_predictions'
в SqueezeNet содержат информацию о том, как объединить функции, которые сеть извлекает в вероятности классов, значение потерь и предсказанные метки. Чтобы переобучить предварительно обученную сеть для классификации новых изображений, замените эти два слоя новыми слоями, адаптированными к новому набору данных.
Извлеките график слоев из обученной сети.
lgraph = layerGraph(net);
Найдите имена двух слоев, которые нужно заменить. Вы можете сделать это вручную или использовать вспомогательную функцию findLayersToReplace
для автоматического поиска этих слоев.
[learnableLayer,classLayer] = findLayersToReplace(lgraph); [learnableLayer,classLayer]
ans = 1×2 Layer array with layers: 1 'conv10' Convolution 1000 1×1×512 convolutions with stride [1 1] and padding [0 0 0 0] 2 'ClassificationLayer_predictions' Classification Output crossentropyex with 'tench' and 999 other classes
В большинстве сетей последний слой с усвояемыми весами является полносвязным слоем. В некоторых сетях, таких как SqueezeNet, последний обучаемый слой является сверточным слоем 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, но изображения в хранилищах данных изображений имеют различные размеры. Используйте хранилище данных дополненных изображений, чтобы автоматически изменить размер обучающих изображений. Задайте дополнительные операции увеличения для выполнения на обучающих изображениях: случайным образом разверните обучающие изображения вдоль вертикальной оси и случайным образом переведите их до 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™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). В противном случае trainNetwork
использует центральный процессор. Можно также задать окружение выполнения с помощью '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
Измените размер изображения на вход сети.
I = imresize(I,sz(1:2)); figure imshow(I)
Классификация изображения с помощью classify
.
label = classify(net,I)
label = categorical
bell pepper
Отобразите изображение и результат классификации вместе.
figure imshow(I) title(label)
Этот пример использует:
Этот пример показывает, как извлечь признаки выученного изображения из предварительно обученной сверточной нейронной сети и использовать эти функции для обучения классификатора изображений. Редукция данных является самым простым и быстрым способом использования репрезентативной степени предварительно обученных глубоких сетей. Для примера можно обучить машину опорных векторов (SVM), используя fitcecoc
(Statistics and Machine Learning Toolbox™) на извлеченных функциях. Поскольку редукция данных требуется только один проход через данные, это хорошая начальная точка, если у вас нет графический процессор, чтобы ускорить обучение сети с.
Загрузка данных
Разархивируйте и загружайте образцы изображений как image datastore. imageDatastore
автоматически помечает изображения на основе имен папок и сохраняет данные как ImageDatastore
объект. image 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 обучен на более чем миллионе изображений и может классифицировать изображения по 1000 категориям объектов, например, клавиатуре, мыши, карандашу и многим животным. В результате модель получила богатые представления функций для широкой области значений изображений.
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
- Предварительно обученная сверточная нейронная сеть SqueezeNetDAGNetwork
объектПредварительно обученная сверточная нейронная сеть SqueezeNet, возвращенная как DAGNetwork
объект.
lgraph
- Неотученная архитектура сверточной нейронной сети SqueezeNetLayerGraph
объектНеобученная архитектура сверточной нейронной сети SqueezeNet, возвращенная в качестве LayerGraph
объект.
[1] ImageNet. http://www.image-net.org
[2] Iandola, Forrest N., Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. SqueezeNet: точность уровня AlexNet с 50-кратным меньшим количеством параметров и размером модели < 0,5 МБ ". Препринт, представленный 4 ноября 2016 года. https://arxiv.org/abs/1602.07360 .
[3] Иандола, Форрест Н. «SqueezeNet». https://github.com/forresti/SqueezeNet.
Для генерации кода загружайте сеть, передав squeezenet
функции в coder.loadDeepLearningNetwork
(MATLAB Coder). Для примера: net = coder.loadDeepLearningNetwork('squeezenet')
.
Для получения дополнительной информации смотрите Загрузку предварительно обученных сетей для генерации кода (MATLAB Coder).
Синтаксис squeezenet('Weights','none')
не поддерживается для генерации кода.
Указания и ограничения по применению:
Для генерации кода можно загрузить сеть с помощью синтаксиса net = squeezenet
или путем прохождения squeezenet
функции в coder.loadDeepLearningNetwork
(Кодер графического процессора). Для примера: net = coder.loadDeepLearningNetwork('squeezenet')
.
Для получения дополнительной информации смотрите Загрузку предварительно обученных сетей для генерации кода (GPU Coder).
Синтаксис squeezenet('Weights','none')
не поддерживается для генерации кода GPU.
DAGNetwork
| Deep Network Designer | densenet201
| googlenet
| inceptionresnetv2
| inceptionv3
| layerGraph
| plot
| resnet101
| resnet18
| resnet50
| trainNetwork
| vgg16
| vgg19
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.