Недавно я изучаю модель Faster R-CNN, Чтобы понять структуру сети, набор данных PascalVOC используется для расширения категорий сети (всего 20 категорий). Процесс делится на: подготовка данных ==> изменение связанного файла ==> обучение сети ==> тестирование
1. Подготовка данных
(1) Загрузите набор данных:
Официальное зеркало набора данных веб-сайта:Семья P Eddie.com/projects/ Боюсь… Паскаль набор данных VOCИмеются изображения, необходимые для обучения, соответствующие файлы аннотаций (xml) и текстовые файлы (txt) с указанием положительных и отрицательных образцов, которые размещаются в главном каталоге JPEGImage, Annotations и ImageSets в каталоге VOC2007 или VOC2012 соответственно.
(2) Маркировка данных:
Целью этого тренинга является расширение 3 категорий на основе первоначальных 20 категорий, а именно чашка, окно, стаканы. Инструменты маркировки используют LabelImage :адрес загрузки гитхаб
Для запуска требуется безопасный PyQt и другие связанные зависимости.
После загрузки запустите файл LabelImage.py, интерфейс выглядит следующим образом:
«Открыть реж.»Указывает путь к файлу;"Изменить папку сохранения"Указывает путь к сохраненному файлу xlm. Общие сочетания клавиш по умолчанию:"ж"для рамы,"а"для предыдущего изображения,"д"для следующей картинки,"Ctrl + S"для сохранения xml-файла.
Если вы хотите изменить сочетания клавиш, вы можете открыть файл LabelImage.py и изменить его в следующем коде (от 213 до 276 строк):
...
openNextImg = action('&Next Image', self.openNextImg, //里面有快捷键的功能和快捷键
'd', 'next', u'Open Next') //第三个参数('d')就是快捷键,可以修改
openPrevImg = action('&Prev Image', self.openPrevImg,
'a', 'prev', u'Open Prev')
verify = action('&Verify Image', self.verifyImg,
'space', 'verify', u'Verify Image')
save = action('&Save', self.saveFile,
'ctrl+s'', 'save', u'Save labels to file', enabled=False)
...
После того, как каждая коробка будет нарисована, вам будет предложено выбрать категорию, к которой она принадлежит:
Если вы хотите изменить предварительно выбранную категорию, вы можете$LabelImage_ROOT/data
внутриpredefined_classes.txt
изменено в.
После маркировки данных необходимо создать четыре текстовых файла, а именно: class_train.txt, class_trainval.txt, class_val.txt и class_test.txt.
Формат контента следующий:
2008_000008 -1
2008_000015 -1
2008_000019 -1
2008_000023 -1
2008_000028 -1
2008_000033 1
2008_000036 -1
2008_000037 1
2008_000041 -1
2008_000045 -1
2008_000053 -1
2008_000060 -1
...
(3) Адрес хранения данных:
После подготовки данных, jpg файлы помещаются в \py-faster-rcnn\data\VOCdevkit2007\VOC2007\JPEGImage\ xml в \py-faster-rcnn\data\VOCdevkit2007\VOC2007\Annotations\ txt в \py-faster-rcnn\data\VOCdevkit2007\VOC2007\ImageSets\Main\ Обратите внимание, что каждой категории в txt соответствуют файлы train, val, trainval и test.Чтобы сделать это в соответствии с исходным форматом данных, вам нужно сгенерировать его самостоятельно.
2. Обучение сети
Перед началом обучения необходимо изменить некоторые сетевые файлы и загрузить предварительно обученную модель ImageNet.
(1) Измените соответствующие файлы конфигурации
1. cd $FRCN_ROOT/lib/datasets
,Исправлятьpascal_voc .py
, добавьте свой собственный класс
self._classes = ('__background__', # always index 0
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor', 'cup', 'window', 'glasses')
2. cd $FRCN_ROOT/lib/datasets
,Исправлятьimdb.py
,
существуетboxes[:, 2] = widths[i] - oldx1 -1
Добавьте три строки после него, как показано ниже:
...
boxes[:, 2] = widths[i] - oldx1 -1
for b in range(len(boxes)):
if boxes[b][2] < boxes[b][0]:
boxes[b][0] = 0
...
3.Исправлятьtrain.prototxt
иtest.prototxt
Замените все 21 на 24, это число равно количеству категорий + фон = 23 + 1, и измените его в соответствии с количеством категорий. Затем замените все 84 на 96. Это число (количество категорий + фон) × 4 = 96, которое также изменяется в соответствии с вашей собственной категорией.
4.изменить все.pt
документ
Как и выше, замените все 21 на 24 и все 84 на 96.
(2) Загрузите модель ImageNet
При обучении необходимо использовать предварительно обученную модель ImageNet, поэтому необходимо подготовить:cd $FRCN_ROOT
Запустите файл сценария:./data/scripts/fetch_imagenet_models.sh
Возможно, для загрузки потребуется перевернуть стену или скорость загрузки будет низкой. Вы можете скачать его онлайн.
(3) Очистить кеш
Удалить файлы кеша:
$FRCN_ROOT/data/VOCdevkit2007/annotations_cache/annots.pkl
$FRCN_ROOT/data/cache
pkl-файл под
Если кэш не очищается, может появиться сообщение об ошибке.
(4) Начать обучение
Убедившись, что все шаги подготовки выполнены правильно, можно приступать к обучению. Команда выглядит следующим образом:
cd $FRCN_ROOT
./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [dataset]
Первый параметр указывает GPU, используемый для обучения, второй указывает, какую сеть обучать, здесь используется VGG16, а третий — указанный набор данных, здесь pascal_voc
Например:
./experiments/scripts/faster_rcnn_end2end.sh 0 VGG16 pascal_voc
Каждая итерация обучения занимает около 0,2 с, 70 000 итераций, снимок создается каждые 10 000 раз.Обучение занимает около 4 часов.Обученная сеть сохраняется в:
$FRCN_ROOT/output/faster_rcnn_end2end/voc_2007_trainval
(5) Проблемы, возникающие при обучении
Я все еще сталкиваюсь с различными ошибками во время обучения.Я суммировал проблемы, с которыми я столкнулся, следующим образом, для справкиПроблемы, возникающие при обучении и тестировании моделей Faster R-CNN.
3. Тестовая сеть
После завершения обучения сети, если есть тестовый набор, он автоматически запустит тест и, наконец, выведет среднюю точность (AP) и среднее AP всех классов:
==В дополнение к обучению модели VGG16 я также обучил еще один ResNet-50.При обучении ResNet-50 я изменил масштаб сгенерированных якорей, добавил два маленьких якоря и улучшил точность обнаружения.AP для сравнения . ==
Можно обнаружить, что AP всех категорий остаточной сети улучшилась, а некоторые категории значительно улучшились:
Вверху: mAP сети VGG16 Внизу: mAP сети ResNet-50
Поскольку в официальном файле нет файла обучения сети ResNet, вы можете обратиться кТренируйте быстрее модель ResNet-50 R-CNN с собственными данными.