异想天开

What's the true meaning of light, Could you tell me why

【记录】 fasterrcnn 训练识别水印

日期:2020-04-28 22:22:45
  
最后更新日期:2020-05-06 21:10:08
思路先将水印制作成png图, 利用opencv贴图到coco数据集上,coco数据集的图片大小基本适中,大多为800x700左右大小。 这里选用了18种水印,注意识别的类别数为水印数18加1。
这里采用了改写coco数据集的方式,实际更简单是可以直接用coco的数据集读写。 修改
coco/VGG16/faster_rcnn_end2end/train.prototx 类别个数。
[code lang="cpp"]
layer {
name: 'input-data'
type: 'Python'
top: 'data'
top: 'im_info'
top: 'gt_boxes'
python_param {
module: 'roi_data_layer.layer'
layer: 'RoIDataLayer'
param_str: "'num_classes': 81" => param_str: "'num_classes': 19"
}
}

layer {
name: 'roi-data'
type: 'Python'
bottom: 'rpn_rois'
bottom: 'gt_boxes'
top: 'rois'
top: 'labels'
top: 'bbox_targets'
top: 'bbox_inside_weights'
top: 'bbox_outside_weights'
python_param {
module: 'rpn.proposal_target_layer'
layer: 'ProposalTargetLayer'
param_str: "'num_classes': 81" => param_str: "'num_classes': 19"
}
}

layer {
name: "cls_score"
type: "InnerProduct"
bottom: "fc7"
top: "cls_score"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 81 => num_output: 19
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "bbox_pred"
type: "InnerProduct"
bottom: "fc7"
top: "bbox_pred"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 324 => num_output: 76
weight_filler {
type: "gaussian"
std: 0.001
}
bias_filler {
type: "constant"
value: 0
}
}
}
[/code]
训练集大小: 19491, 大概每个类别1000张。 RTX 2070s 8GB显存, 训练耗时6个小时10w次迭代。 训练效果, 每个类别随机抽查10张图, 验证边框以及分类准确性。 类别预测准确性基本是100%,边框预测准确性几个类别边框差了一点点。
有两种可能, 一种是由于把输入大小缩放到最大为400x668。
第二种可能就是输入图,贴图的边框不准确, 这里第一种可能性大一点。 在输入的边框,上下左右加5个像素,测试集合正确性提高了, 但是误识率也变高了。 怀疑是提取了不必要的特征导致。
Intel(R) Core(TM) i5-5200U cpu@2.2GHz 4核, 使用三个线程,ncnn预测速度为150s。尝试将边框提议的数量减少为160个左右,从而加快预测速度。目前rpn的提议的边框为300个左右。