我目前正在微调一个ssd mobilenet v2模型,以提高人体检测能力。在

我的ssd_mobilenet_v2_coco_配置代码是:# SSD with Mobilenet v2 configuration for MSCOCO dataset.

# Users should configure the fine_tune_checkpoint field in the train config as

# well as the label_map_path and input_path fields in the train_input_reader and

# eval_input_reader. Search for "PATH_TO_BE_CONFIGURED" to find the fields that

# should be configured.

model {

ssd {

num_classes: 1

box_coder {

faster_rcnn_box_coder {

y_scale: 10.0

x_scale: 10.0

height_scale: 5.0

width_scale: 5.0

}

}

matcher {

argmax_matcher {

matched_threshold: 0.5

unmatched_threshold: 0.5

ignore_thresholds: false

negatives_lower_than_unmatched: true

force_match_for_each_row: true

}

}

similarity_calculator {

iou_similarity {

}

}

anchor_generator {

ssd_anchor_generator {

num_layers: 6

min_scale: 0.2

max_scale: 0.95

aspect_ratios: 1.0

aspect_ratios: 2.0

aspect_ratios: 0.5

aspect_ratios: 3.0

aspect_ratios: 0.3333

}

}

image_resizer {

fixed_shape_resizer {

height: 300

width: 300

}

}

box_predictor {

convolutional_box_predictor {

min_depth: 0

max_depth: 0

num_layers_before_predictor: 0

use_dropout: false

dropout_keep_probability: 0.8

kernel_size: 3

box_code_size: 4

apply_sigmoid_to_scores: false

conv_hyperparams {

activation: RELU_6,

regularizer {

l2_regularizer {

weight: 0.00004

}

}

initializer {

truncated_normal_initializer {

stddev: 0.03

mean: 0.0

}

}

batch_norm {

train: true,

scale: true,

center: true,

decay: 0.9997,

epsilon: 0.001,

}

}

}

}

feature_extractor {

type: 'ssd_mobilenet_v2'

min_depth: 16

depth_multiplier: 1.0

use_depthwise: true

conv_hyperparams {

activation: RELU_6,

regularizer {

l2_regularizer {

weight: 0.00004

}

}

initializer {

truncated_normal_initializer {

stddev: 0.03

mean: 0.0

}

}

batch_norm {

train: true,

scale: true,

center: true,

decay: 0.9997,

epsilon: 0.001,

}

}

}

loss {

classification_loss {

weighted_sigmoid {

}

}

localization_loss {

weighted_smooth_l1 {

}

}

hard_example_miner {

num_hard_examples: 3000

iou_threshold: 0.99

loss_type: CLASSIFICATION

max_negatives_per_positive: 3

min_negatives_per_image: 3

}

classification_weight: 1.0

localization_weight: 1.0

}

normalize_loss_by_num_matches: true

post_processing {

batch_non_max_suppression {

score_threshold: 1e-8

iou_threshold: 0.6

max_detections_per_class: 100

max_total_detections: 100

}

score_converter: SIGMOID

}

}

}

train_config: {

batch_size: 24

optimizer {

rms_prop_optimizer: {

learning_rate: {

exponential_decay_learning_rate {

initial_learning_rate: 0.004

decay_steps: 800720

decay_factor: 0.95

}

}

momentum_optimizer_value: 0.9

decay: 0.9

epsilon: 1.0

}

}

fine_tune_checkpoint: "D:/Databases/Coco/cctv/tf/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt"

fine_tune_checkpoint_type: "detection"

# Note: The below line limits the training process to 200K steps, which we

# empirically found to be sufficient enough to train the pets dataset. This

# effectively bypasses the learning rate schedule (the learning rate will

# never decay). Remove the below line to train indefinitely.

num_steps: 200000

data_augmentation_options {

random_horizontal_flip {

}

}

data_augmentation_options {

ssd_random_crop {

}

}

}

train_input_reader: {

tf_record_input_reader {

input_path: "D:/Code/Image/cctvmodel/tfrecordfinalALL/train2.record"

}

label_map_path: "D:/Code/Image/cctvmodel/label_map.pbtxt"

}

eval_config: {

num_examples: 8000

# Note: The below line limits the evaluation process to 10 evaluations.

# Remove the below line to evaluate indefinitely.

max_evals: 10

}

eval_input_reader: {

tf_record_input_reader {

input_path: "D:/Code/Image/cctvmodel/tfrecordfinalALL/test2.record"

}

label_map_path: "D:/Code/Image/cctvmodel/label_map.pbtxt"

shuffle: false

num_readers: 1

}

配置文件已设置为重新培训。要运行配置文件,我使用以下代码:

^{pr2}$

对于微调,我指的是tutorial 1。它指出,要微调模型,需要执行以下操作:

1)创建目标检测训练管道.config文件:修改/path/to/pretrainedModels/faster_rcnn_resnet50_lowproposals_coco_2017_11_08/pipeline.config中的一个,只需更改num_classes, fine_tune_checkpoint, num_steps, label_map_path and tf_record_input_reader/input_path.

2)为from_detection_checkpoint设置正确的值。如果要从预先训练的对象检测模型进行微调,请将其设置为true;如果是从分类预先训练的模型进行微调,则将其设置为false。在

3)使用以下命令进行培训:From the tensorflow/models/research/ directory

python object_detection/train.py \

--logtostderr \

--train_dir=${PATH_TO_TRAIN_DIR} \

--pipeline_config_path=${PATH_TO_YOUR_PIPELINE_CONFIG}

我注意到许多教程与上面列出的非常相似。然而,该指令似乎并没有充分说明最佳微调过程。如果要考虑如何在Keras中进行微调的话,它的安静、灵活和精致。在

例如,on如何声明需要冻结的图层,并指定应训练哪些图层子集。另外,对于SSD移动网v2,由于模型不同,哪一个是最佳条件。在大多数情况下,上层被冻结,最后5层被微调。在

也就是说,我们是否添加了一个dropout层等等,但是,如何使用配置文件来实现这一点呢。在

需要设置哪些附加参数来优化微调?在

也就是说,还有一个例子通过python笔记本tutorial 3进行微调。哪种方式是最好的?在

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐