В последний раз, когда я использовал Faster R-CNN для обучения сети VGG-16, чтобы повысить точность распознавания, я использовал сеть ResNet, чтобы еще раз обучить ее на тех же данных.
Основной процесс аналогичен обучению сети VGG-16, вы можете обратиться кТренируйте быстрее модель VGG-16 R-CNN с собственными данными
1. Обучение сети
(1) Загрузите файл prototxt ResNet-50.
в моемGithubФайлы, которые я использовал, можно скачать выше, но, конечно, вы можете использовать другую структуру сети ResNet.
(2) Изменение соответствующих документов
1. cd $FRCN_ROOT/lib/rpn/generate_anchors.py
# 在 37 行:
def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2**np.arange(3, 6)):
# 修改为:
def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2**np.arange(1, 6)):
2. cd $FRCN_ROOT/lib/rpn/anchor_target_layer.py
# 在 28 行:
anchor_scales = layer_params.get('scales', (8, 16, 32))
# 修改为:
anchor_scales = layer_params.get('scales', (2, 4, 8, 16, 32))
3. cd $FRCN_ROOT/lib/rpn/proposal_layer.py
# 在 29 行:
anchor_scales = layer_params.get('scales', (8, 16, 32))
# 修改为:
anchor_scales = layer_params.get('scales', (2, 4, 8, 16, 32))
4. pascal_voc.py、imdb.py、train.prototxt、test.prototxt、.pt文件
Измененная ссылка дляТренируйте быстрее модель VGG-16 R-CNN с собственными данными.
5.Поскольку мы используем якоря 5 масштабов, предыдущие 9 якорей становятся 3*5=15.
Исправлятьprototxt 和 pt文件
, замените 18 на 30.
layer {
name: "rpn_cls_score"
type: "Convolution"
bottom: "rpn/output"
top: "rpn_cls_score"
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
convolution_param {
num_output: 30 # 2(bg/fg) * 9(anchors) ///将 18 换成 30
kernel_size: 1 pad: 0 stride: 1
weight_filler { type: "gaussian" std: 0.01 }
bias_filler { type: "constant" value: 0 }
}
(3) Загрузите модель ImageNet
Загрузите файлы предварительной подготовки ImageNet:ResNet-50.v2.caffemodel
(4) Очистить кеш
Удалить файлы кеша:$FRCN_ROOT/data/VOCdevkit2007/annotations_cache/annots.pkl
и$FRCN_ROOT/data/cache
внизpkl
документ
Если кэш не очищается, может появиться сообщение об ошибке.
(5) Начать обучение
Обратитесь к тренировочной команде VGG16:cd $FRCN_ROOT
./experiments/scripts/faster_rcnn_end2end.sh 0 ResNet-50 pascal_voc
==Примечание. Третий параметр «ResNet-50» должен соответствовать имени вашей папки, например, мой файл в$FRCN_ROOT/models/pascal_voc/ResNet-50
внутри, поэтому мой третий параметр — это имя моего каталога. ==
Так как сеть ResNet-50 глубже, то и время обучения занимает больше времени.Каждая итерация занимает около 0.5с.У меня ушло около 10 часов на обучение этой сети,но эффект будет лучше чем у VGG 16,в основном для небольших весы, обнаружение объектов более точное.
Вот AP каждого типа, когда я тренируюсь: