В нашем руководстве вы узнаете, как получить модель свёрточной нейронной сети для поиска ключевых точек объекта на изображении. В качестве объекта исследования нами были выбраны автомобильные номера. Представленное руководство также может быть использовано для поиска других объектов.
Это руководство является дополнение к публикции "Локализация объектов на изображении методом свёрточных нейронных сетей", с которой вы можете ознакомиться: http://www.azoft.ru/blog/lokalizaciya-obektov-na-izobrazhenii-metodom-svyortochnyx-nejronnyx-setej/
2. В нашем руководстве вы узнаете, как
получить модель свёрточной нейронной
сети для поиска ключевых точек объекта
на изображении. В качестве объекта
исследования нами были выбраны
автомобильные номера. Представленное
руководство также может быть
использовано для поиска других объектов.
О проекте
1. Выбор изображений для обучения сети.
2. Разметка ключевых точек.
3. Аугментация.
4. Упаковка наборов данных в формат HDF5.
5. Обучение свёрточной нейронной сети.
6. Выводы.
7. Базовые источники.
План
rnd.azoft.com
3. rnd.azoft.com 1. Выбор изображений для обучения
1. Выбор изображений для обучения
Необходимо взять набор данных из оригинальных (неаугментированных) изображений
общим числом от нескольких сотен до нескольких тысяч. Чем больше, тем лучше.
4. 2. Разметка ключевых точек
2. Разметка ключевых точек
Если ключевые точки на оригинальном изображении не размечены, то необходимо их разметить. То есть
сохранить координаты ключевых точек изображений в **.txt или **.csv файл. Каждой координате
соответствуют два значения по оси абсцисс и по оси ординат.
ВАЖНО! Если вы решили размечать несколько ключевых точек, то размечайте их в одной последовательности.
Например, при разметке автомобильного номера вы разметили первой точкой — левый верхний угол номера,
второй точкой — правый верхний угол, третьей точкой — левый нижний угол, четвертой точкой — правый
нижний угол номера. В дальнейшем вам следует сохранять последовательность разметки.
rnd.azoft.com
5. rnd.azoft.com 3. Аугментация
3. Аугментация
Для хорошего обучения необходимо иметь набор данных с количеством от нескольких тысяч до десятков
тысяч изображений. Если оригинального набора данных недостаточно, то необходимо сделать
аугментацию изображений.
ВАЖНО! Прежде чем делать аугментацию, разбейте выборку на тренировочную и валидационную.
Чтобы в последующем не оказалось так, что изображения, полученные путем аугментации из одного, оказались и
в тестовой, и в валидационной выборке. Если это не сделать, то отследить переобучение модели будет весьма
тяжело.
6. rnd.azoft.com 3. Аугментация
Методы, которые можно использовать для аугментации:
●
Поворот относительно центра;
●
Искажение перспективы;
●
Изменение масштаба;
●
Сдвиги;
●
Соль и перец;
●
Размытие и увеличение резкости;
●
Эрозия и дилатация.
7. rnd.azoft.com 4. Упаковка наборов данных в формат HDF5
4. Упаковка наборов данных в формат HDF5
Для того чтобы подавать набор данных в Caffe, необходимо упаковать этот набор в формат HDF5.
Значения пикселей следует нормализовать от 0 до 1. А значения размеченных координат следует
нормализовать от -1 до 1.
ВАЖНО:
●
Если производилась аугментация изображений, то изображения в HDF5 файле должны следовать в
случайном порядке.
●
После упаковки проверьте HDF5 файл при помощи утилиты HDF5 Viewer. Данные о пикселях должны быть
от 0 до 1, координаты должны быть от -1 до 1, а изображения должны быть не искажены.
10. rnd.azoft.com 5. Обучение свёрточной нейронной сети
5. Обучение свёрточной нейронной сети
Для обучения рекомендуется использовать метод оптимизации ADAM.
Входной слой должен выглядеть так: layer {
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
hdf5_data_param {
source: "/home/user/caffe/examples/regression/regression_train.txt"
batch_size: 256
}
}
11. rnd.azoft.com 5. Обучение свёрточной нейронной сети
Количество выходов на выходном слое должно быть
равно количеству значений, описывающих координаты.
Следует использовать слой ошибки EuclideanLoss.
layer {
name: "ipout"
type: "InnerProduct"
bottom: "ip01"
top: "ipout"
inner_product_param {
num_output: 8
weight_filler {
type: "msra"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "loss"
type: "EuclideanLoss"
bottom: "ipout"
bottom: "label"
top: "loss"
}
12. Обучить качественную и быструю сеть с
нескольких попыток представляется
маловероятным. У нас ушло около 20
попыток, прежде чем мы получили
удовлетворительный результат. Если у вас
есть какие-то вопросы по идее, реализации
или коду, будем рады ответить на них в
коментариях под статьёй.
Выводы
За основу были взяты работы:
1. Using convolutional neural nets to detect facial keypoints
2. Сaffe-regression examples ,Kaggle face keypoint detection
Базовые источники
rnd.azoft.com
Читайте подробный обзор проекта по локализации объектов на изображении
методом свёрточных нейронных сетей.