假定我们的需求是额外的增加一个多类别信息,并且与之前已有的类别共用同一个bounding box,修改如下:
1、数据读取层:
(1) lib/datasets/pascal_voc.py
① __init__函数 需要在41行之后增加需求类别及index
② _load_pascal_annotation函数 需要在163行之后增加类别定义并在for循环内将其转换为与原始类别相同的信息
(2) lib/datasets/imdb.py
create_roidb_from_box_list函数 需要在241行之后增加需求输出
2、proposal及anchor层:
(1) proposal_target_layer.py
①proposal_target_layer函数 需要在44行及55行增加需求输出
②_sample_rois函数 需要在109行、140行及142行之后增加需求输出
(2) anchor_target_layer.py
_compute_targets函数 需要在161行修改assert条件
3、roi层:
(1) minibatch.py
get_minibatch函数 需要在46行后增加需求输出
4、训练函数:
(1) train_val.py
train_model函数 需要在283及293行增加需求输出
5、网络定义层:- 需要修改的最多
(1) network.py
① _proposal_target_layer函数 需要在187行增加需求的输出
② _build_network函数 需要在257行增加需求的输出,并在return中修改
③ _add_losses函数 需要在309行之后增加需求输出的损失定义,可按照RCNN分类损失定义,并在315行增加相应损失。
④ _region_classification函数 需要在372行之后增加需求输出网络定义
⑤ create_architecture函数 需要在421行增加需求输出
⑥ train_step函数 需要在491行增加需求输出
⑦ train_step_with_summary函数 需要在503行增加需求输出