Auxillary changes (CVPR-21 submit tip)

pull/42/head
Joseph 2020-11-22 23:07:07 +05:30
parent 68da418854
commit d601bbe750
34 changed files with 99475 additions and 48 deletions

View File

@ -1,20 +1,23 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/10_p_10_base_20_FC/model_final.pth"
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/base_10/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_train', )
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (12000, 16000)
MAX_ITER: 18000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/10_p_10_base_20_FC"
OUTPUT_DIR: "./output/iOD/base_10"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 0
CUR_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 10
SEED: 9999

View File

@ -12,6 +12,7 @@ SOLVER:
STEPS: (48000,52000)
MAX_ITER: 54000
WARMUP_ITERS: 100
CHECKPOINT_PERIOD: 1000
OUTPUT_DIR: "./output/iOD/10_p_10_incr_ft"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False

View File

@ -1,20 +1,23 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/10_p_10_incr_with_unk_wo_cls_ft/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/10_p_10_ft_10_per_class/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trn_ft', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (48000,52000)
MAX_ITER: 54000
STEPS: (32000,34000)
MAX_ITER: 36000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/10_p_10_incr_with_unk_wo_cls_ft"
OUTPUT_DIR: "./output/iOD/10_p_10_ft_10_per_class"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 10
CUR_INTRODUCED_CLS: 10
CUR_INTRODUCED_CLS: 10
SEED: 9999

View File

@ -1,18 +1,20 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/10_p_10_incr_with_unk_wo_cls/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/10_p_10/model_0009999.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_train', )
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (32000, 34000)
MAX_ITER: 36000
STEPS: (22000, 24000)
MAX_ITER: 26000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/10_p_10_incr_with_unk_wo_cls"
OUTPUT_DIR: "./output/iOD/10_p_10"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: True
ENABLE_CLUSTERING: False
@ -20,4 +22,5 @@ OWOD:
CUR_INTRODUCED_CLS: 10
CLUSTERING:
START_ITER: 20000
UPDATE_MU_ITER: 3100
UPDATE_MU_ITER: 3100
SEED: 9999

View File

@ -0,0 +1,23 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/base_10/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (12000, 16000)
MAX_ITER: 18000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/base_15"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 0
CUR_INTRODUCED_CLS: 15
SEED: 9999

View File

@ -0,0 +1,23 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/15_p_5_ft/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trn_ft', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (32000,34000)
MAX_ITER: 36000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/15_p_5_ft"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 15
CUR_INTRODUCED_CLS: 5
SEED: 9999

View File

@ -0,0 +1,26 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/15_p_5/model_0009999.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (22000, 24000)
MAX_ITER: 20000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/15_p_5"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: True
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 15
CUR_INTRODUCED_CLS: 5
CLUSTERING:
START_ITER: 20000
UPDATE_MU_ITER: 3100
SEED: 9999

View File

@ -0,0 +1,23 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/base_10/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (12000, 16000)
MAX_ITER: 18000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/base_19"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 0
CUR_INTRODUCED_CLS: 19
SEED: 9999

View File

@ -0,0 +1,23 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/19_p_1_ft/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trn_ft', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (32000,34000)
MAX_ITER: 36000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/19_p_1_ft"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 19
CUR_INTRODUCED_CLS: 1
SEED: 9999

View File

@ -0,0 +1,26 @@
_BASE_: "../../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/19_p_1/model_0009999.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (22000, 24000)
MAX_ITER: 20000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/19_p_1"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: True
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 19
CUR_INTRODUCED_CLS: 1
CLUSTERING:
START_ITER: 20000
UPDATE_MU_ITER: 3100
SEED: 9999

View File

@ -5,8 +5,6 @@ MODEL:
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
POSITIVE_FRACTION: 0.25
NMS_THRESH_TEST: 0.4
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:

View File

@ -0,0 +1,30 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/base_19/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/10_p_10_ft/model_0024999.pth"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/iOD/base_10/model_final.pth"
ROI_HEADS:
# NUM_CLASSES: 21 # 0-19 Known class; 20 -> Unknown; 21 -> Background.
NUM_CLASSES: 21
# NMS_THRESH_TEST: 0.2
# SCORE_THRESH_TEST: 0.001
ROI_BOX_HEAD:
CLS_AGNOSTIC_BBOX_REG: True
DATASETS:
TRAIN: ('voc_2007_trainval', )
TEST: ('voc_2007_test', )
SOLVER:
STEPS: (32000, 34000)
MAX_ITER: 36000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/iOD/10_p_10_test"
OWOD:
ENABLE_THRESHOLD_AUTOLABEL_UNK: True
ENABLE_CLUSTERING: False
PREV_INTRODUCED_CLS: 15
CUR_INTRODUCED_CLS: 5
CLUSTERING:
START_ITER: 20000
UPDATE_MU_ITER: 3100
SEED: 9999

View File

@ -2,7 +2,7 @@ _BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_baseline/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_10/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_ft', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
@ -10,7 +10,7 @@ SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 74000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_ft_baseline"
OUTPUT_DIR: "./output/t2_ft_10"
OWOD:
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20

View File

@ -0,0 +1,20 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_10/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_ft_10', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 74000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_ft_10"
OWOD:
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
CLUSTERING:
START_ITER: 18000

View File

@ -0,0 +1,20 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_100/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_ft_20', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 74000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_ft_100"
OWOD:
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
CLUSTERING:
START_ITER: 18000

View File

@ -0,0 +1,20 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_200/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_ft_200', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 74000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_ft_200"
OWOD:
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
CLUSTERING:
START_ITER: 18000

View File

@ -0,0 +1,20 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_400/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_ft_400', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 74000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_ft_400"
OWOD:
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
CLUSTERING:
START_ITER: 18000

View File

@ -0,0 +1,20 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft_50/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_ft_50', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 74000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_ft_50"
OWOD:
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
CLUSTERING:
START_ITER: 18000

View File

@ -2,7 +2,7 @@ _BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_ENABLE_CLUSTERING/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2_ft/model_final.pth"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t2/model_final.pth"
DATASETS:
TRAIN: ('t2_voc_coco_2007_train', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )

View File

@ -0,0 +1,22 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
DATASETS:
TRAIN: ('t2_voc_coco_2007_val_with_known_and_unk', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (50000, 60000)
MAX_ITER: 50000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t2_train_with_unk"
OWOD:
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
PREV_INTRODUCED_CLS: 20
CUR_INTRODUCED_CLS: 20
CLUSTERING:
ITEMS_PER_CLASS: 20
START_ITER: 18000
UPDATE_MU_ITER: 3000
MOMENTUM: 0.99
Z_DIMENSION: 128

View File

@ -0,0 +1,18 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
DATASETS:
TRAIN: ('t3_voc_coco_2007_val_with_known_and_unk', )
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (110000, 112000)
MAX_ITER: 50000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t3_train_with_unk"
OWOD:
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
PREV_INTRODUCED_CLS: 40
CUR_INTRODUCED_CLS: 20
CLUSTERING:
START_ITER: 74000

View File

@ -0,0 +1,18 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
DATASETS:
TRAIN: ('t4_voc_coco_2007_val_with_known_and_unk', )
TEST: ('voc_coco_2007_test', )
SOLVER:
STEPS: (155500, 156500)
MAX_ITER: 50000
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t4_train_with_all"
OWOD:
ENABLE_CLUSTERING: False
ENABLE_THRESHOLD_AUTOLABEL_UNK: False
PREV_INTRODUCED_CLS: 60
CUR_INTRODUCED_CLS: 20
CLUSTERING:
START_ITER: 116500

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -46,14 +46,15 @@ T4_CLASS_NAMES = [
UNK_CLASS = ["unknown"]
# Change this accodingly for each task t*
# known_classes = list(itertools.chain(VOC_CLASS_NAMES, T2_CLASS_NAMES, T3_CLASS_NAMES, T4_CLASS_NAMES))
# train_files = ['/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t4_train.txt','/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t3_train.txt','/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t2_train.txt','/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t1_train.txt']
known_classes = list(itertools.chain(VOC_CLASS_NAMES, T2_CLASS_NAMES))
train_files = ['/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t2_train.txt','/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t1_train.txt']
known_classes = list(itertools.chain(VOC_CLASS_NAMES))
train_files = ['/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/train.txt']
# known_classes = list(itertools.chain(VOC_CLASS_NAMES))
# train_files = ['/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/train.txt']
annotation_location = '/home/fk1/workspace/OWOD/datasets/VOC2007/Annotations'
dest_file = '/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/train_ft_1.txt'
items_per_class = 50
items_per_class = 20
dest_file = '/home/fk1/workspace/OWOD/datasets/VOC2007/ImageSets/Main/t2_ft_' + str(items_per_class) + '.txt'
file_names = []
for tf in train_files:

View File

@ -217,12 +217,20 @@ def register_all_pascal_voc(root):
("voc_2012_val", "VOC2012", "val"),
("t1_voc_coco_2007_train", "VOC2007", "t1_train"),
("t1_voc_coco_2007_val_with_known_and_unk", "VOC2007", "t1_train_with_unk"),
("t2_voc_coco_2007_val_with_known_and_unk", "VOC2007", "t2_train_with_unk"),
("t3_voc_coco_2007_val_with_known_and_unk", "VOC2007", "t3_train_with_unk"),
("t4_voc_coco_2007_val_with_known_and_unk", "VOC2007", "t4_train"),
("t1_voc_coco_2007_known_test", "VOC2007", "t1_known_test"),
("voc_coco_2007_test", "VOC2007", "all_task_test"),
("voc_coco_2007_val", "VOC2007", "all_task_val"),
("t1_voc_coco_2007_ft", "VOC2007", "t1_ft"),
("t2_voc_coco_2007_train", "VOC2007", "t2_train"),
("t2_voc_coco_2007_ft", "VOC2007", "t2_ft"),
("t2_voc_coco_2007_ft_10", "VOC2007", "t2_ft_10"),
("t2_voc_coco_2007_ft_20", "VOC2007", "t2_ft_20"),
("t2_voc_coco_2007_ft_50", "VOC2007", "t2_ft_50"),
("t2_voc_coco_2007_ft_200", "VOC2007", "t2_ft_200"),
("t2_voc_coco_2007_ft_400", "VOC2007", "t2_ft_400"),
("t3_voc_coco_2007_train", "VOC2007", "t3_train"),
("t3_voc_coco_2007_ft", "VOC2007", "t3_ft"),
("t4_voc_coco_2007_train", "VOC2007", "t4_train"),

View File

@ -7,6 +7,7 @@ import xml.etree.ElementTree as ET
from typing import List, Tuple, Union
from fvcore.common.file_io import PathManager
import itertools
import logging
from detectron2.data import DatasetCatalog, MetadataCatalog
from detectron2.structures import BoxMode
@ -44,7 +45,7 @@ VOC_CLASS_NAMES = [
]
T2_CLASS_NAMES = [
"truck", "traffic light", "fire hydrant", "stop sign", "parking meter",
"?", "traffic light", "fire hydrant", "stop sign", "parking meter",
"bench", "elephant", "bear", "zebra", "giraffe",
"backpack", "umbrella", "handbag", "tie", "suitcase",
"microwave", "oven", "toaster", "sink", "refrigerator"
@ -87,8 +88,13 @@ def load_voc_instances(dirname: str, split: str, class_names: Union[List[str], T
anno_file = os.path.join(annotation_dirname, fileid + ".xml")
jpeg_file = os.path.join(dirname, "JPEGImages", fileid + ".jpg")
with PathManager.open(anno_file) as f:
tree = ET.parse(f)
try:
with PathManager.open(anno_file) as f:
tree = ET.parse(f)
except:
logger = logging.getLogger(__name__)
logger.info('Not able to load: ' + anno_file + '. Continuing without aboarting...')
continue
r = {
"file_name": jpeg_file,

View File

@ -328,8 +328,14 @@ def parse_rec(filename, known_classes):
"aeroplane", "diningtable", "motorbike",
"pottedplant", "sofa", "tvmonitor"
]
with PathManager.open(filename) as f:
tree = ET.parse(f)
try:
with PathManager.open(filename) as f:
tree = ET.parse(f)
except:
logger = logging.getLogger(__name__)
logger.info('Not able to load: ' + filename + '. Continuing without aboarting...')
return None
objects = []
for obj in tree.findall("object"):
obj_struct = {}
@ -416,10 +422,16 @@ def voc_eval(detpath, annopath, imagesetfile, classname, ovthresh=0.5, use_07_me
lines = f.readlines()
imagenames = [x.strip() for x in lines]
imagenames_filtered = []
# load annots
recs = {}
for imagename in imagenames:
recs[imagename] = parse_rec(annopath.format(imagename), tuple(known_classes))
rec = parse_rec(annopath.format(imagename), tuple(known_classes))
if rec is not None:
recs[imagename] = rec
imagenames_filtered.append(imagename)
imagenames = imagenames_filtered
# extract gt objects for this class
class_recs = {}

View File

@ -618,7 +618,7 @@ class FastRCNNOutputLayers(nn.Module):
storage = get_event_storage()
c_loss = 0
if storage.iter == self.clustering_start_iter :
if storage.iter == self.clustering_start_iter:
items = self.feature_store.retrieve(-1)
for index, item in enumerate(items):
if len(item) == 0:

View File

@ -831,7 +831,7 @@ class Visualizer:
x,
y,
text,
size=font_size * self.output.scale,
size=25,
family="sans-serif",
bbox={"facecolor": "black", "alpha": 0.8, "pad": 0.7, "edgecolor": "none"},
verticalalignment="top",
@ -842,7 +842,7 @@ class Visualizer:
)
return self.output
def draw_box(self, box_coord, alpha=0.5, edge_color="g", line_style="-"):
def draw_box(self, box_coord, alpha=0.6, edge_color="g", line_style="-"):
"""
Args:
box_coord (tuple): a tuple containing x0, y0, x1, y1 coordinates, where x0 and y0
@ -869,7 +869,7 @@ class Visualizer:
height,
fill=False,
edgecolor=edge_color,
linewidth=linewidth * self.output.scale,
linewidth=20,
alpha=alpha,
linestyle=line_style,
)

84
run.sh
View File

@ -9,7 +9,87 @@
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52127' --resume --config-file ./configs/OWOD/t3/t3_train_baseline_only_frcnn.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52133' --resume --config-file ./configs/OWOD/iOD/10_p_10/next_10_train_with_unk_det.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52133' --resume --config-file ./configs/OWOD/iOD/10_p_10/ft.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52134' --resume --config-file ./configs/OWOD/iOD/10_p_10/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52133' --resume --config-file ./configs/OWOD/iOD/10_p_10/ft.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52134' --resume --config-file ./configs/OWOD/iOD/10_p_10/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52125' --config-file ./configs/OWOD/iOD/10_p_10/base_10_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#cp -r /home/fk1/workspace/OWOD/output/iOD/base_10 /home/fk1/workspace/OWOD/output/iOD/10_p_10
# current running
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52126' --resume --config-file ./configs/OWOD/iOD/10_p_10/next_10_train_with_unk_detection.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/10_p_10 /home/fk1/workspace/OWOD/output/iOD/10_p_10_ft_10_per_class
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52127' --resume --config-file ./configs/OWOD/iOD/10_p_10/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52127' --config-file ./configs/OWOD/t2/t2_train_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52128' --config-file ./configs/OWOD/t3/t3_train_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52129' --config-file ./configs/OWOD/t4/t4_train_with_all_knowns.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
# Last one is not done.
## 15 + 5
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52125' --config-file ./configs/OWOD/iOD/15_p_5/base_15_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/base_15 /home/fk1/workspace/OWOD/output/iOD/15_p_5
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52126' --resume --config-file ./configs/OWOD/iOD/15_p_5/next_5_train_with_ud.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/15_p_5 /home/fk1/workspace/OWOD/output/iOD/15_p_5_ft
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52127' --resume --config-file ./configs/OWOD/iOD/15_p_5/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#
## 19 + 1
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52128' --config-file ./configs/OWOD/iOD/19_p_1/base_19_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/base_19 /home/fk1/workspace/OWOD/output/iOD/19_p_1
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52129' --resume --config-file ./configs/OWOD/iOD/19_p_1/next_1_train_with_ud.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/19_p_1 /home/fk1/workspace/OWOD/output/iOD/19_p_1_ft
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52130' --resume --config-file ./configs/OWOD/iOD/19_p_1/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52129' --config-file ./configs/OWOD/t4/t4_train_with_all_knowns.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52126' --resume --config-file ./configs/OWOD/iOD/15_p_5/next_5_train_with_ud.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/15_p_5 /home/fk1/workspace/OWOD/output/iOD/15_p_5_ft
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52127' --resume --config-file ./configs/OWOD/iOD/15_p_5/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52129' --resume --config-file ./configs/OWOD/iOD/19_p_1/next_1_train_with_ud.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#cp -r /home/fk1/workspace/OWOD/output/iOD/19_p_1 /home/fk1/workspace/OWOD/output/iOD/19_p_1_ft
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52130' --resume --config-file ./configs/OWOD/iOD/19_p_1/ft_with_unk.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52127' --resume --config-file ./configs/OWOD/t2/t2_ft_10.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52128' --resume --config-file ./configs/OWOD/t2/t2_ft_50.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52129' --resume --config-file ./configs/OWOD/t2/t2_ft_200.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
#
#python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52137' --resume --config-file ./configs/OWOD/t2/t2_ft_400.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52137' --resume --config-file ./configs/OWOD/t2/t2_ft_20.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01

View File

@ -43,6 +43,51 @@ def plot_tsne(X, label, total_num_classes):
plt.savefig('tsne.png')
def plot_tsne_indiv(X, label, total_num_classes):
n_components = 2
# perplexities = [5, 30, 50, 100, 150]
perplexities = list(range(10, 150, 10))
for i, perplexity in enumerate(perplexities):
__, ax = plt.subplots()
t0 = time()
tsne = manifold.TSNE(n_components=n_components, init='random',
random_state=0, perplexity=perplexity)
Y = tsne.fit_transform(X)
t1 = time()
print("circles, perplexity=%d in %.2g sec" % (perplexity, t1 - t0))
# ax.set_title("Perplexity=%d" % perplexity)
#
# sc = ax.scatter(Y[:, 0], Y[:, 1], c=label, cmap="plasma")
# palette = sns.color_palette(None, total_num_classes)
# palette = sns.color_palette("flare", as_cmap=True)
flatui = ['#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', \
'#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#fabebe', \
'#008080', '#e6beff', '#9a6324', '#fffac8', '#800000', \
'#aaffc3', '#808000', '#ffd8b1', '#000075', '#808080', \
'#3498db']
# sns.set_palette(flatui)
sns.scatterplot(x=Y[:, 0], y=Y[:, 1], hue=label, ax=ax, legend='full', palette=flatui)
# sns.scatterplot(x=Y[:, 0], y=Y[:, 1], hue=label, ax=ax, legend='full', palette='colorblind')
ax.xaxis.set_major_formatter(NullFormatter())
ax.yaxis.set_major_formatter(NullFormatter())
ax.axis('tight')
# plt.legend(handles=sc.legend_elements()[0], labels=range(total_num_classes))
# plt.legend(handles=sc.legend_elements()[0], labels=['0', '1'])
# plt.show()
# plt.legend(fontsize='xx-large', ncol=2, handleheight=2.4, labelspacing=0.05)
plt.legend(ncol=6)
plt.savefig('tsne_' + str(perplexity) + '.png')
plt.pause(0.0001)
plt.clf()
maxlen_queue = 100
total_num_classes = 22
@ -50,21 +95,38 @@ queues = [deque(maxlen=maxlen_queue) for _ in range(total_num_classes)]
source_dir = '/home/fk1/workspace/OWOD/output/features'
files = os.listdir(source_dir)
for i, file in enumerate(files):
path = os.path.join(source_dir, file)
features, classes = torch.load(path)
for f, c in zip(features, classes):
queues[c.detach().cpu().numpy()].append(f.detach().cpu().numpy())
# files = os.listdir(source_dir)
# for i, file in enumerate(files):
# path = os.path.join(source_dir, file)
# features, classes = torch.load(path)
# for f, c in zip(features, classes):
# if c == 80:
# c = 20
# queues[c].append(f.detach().cpu().numpy())
# elif c == 81:
# c = 21
# queues[c].append(f.detach().cpu().numpy())
# elif c <= total_num_classes:
# queues[c.detach().cpu().numpy()].append(f.detach().cpu().numpy())
# if i%100 == 0:
# print('Processing ' + str(i))
# # if i == 2:
# # break
#
# torch.save(queues, os.path.join(source_dir,'queues_tsne.pkl'))
queues = torch.load(os.path.join(source_dir,'queues_tsne.pkl'))
# if i == 2:
# break
x = []
y = []
for i, queue in enumerate(queues):
if i == 20:
continue
if i == 21:
i = 20
for item in queue:
x.append(item)
y.append(i)
print('Going to plot')
plot_tsne(x, y, total_num_classes)
plot_tsne_indiv(x, y, total_num_classes)

View File

@ -0,0 +1,93 @@
import cv2
import os
import torch
from torch.distributions.weibull import Weibull
from torch.distributions.transforms import AffineTransform
from torch.distributions.transformed_distribution import TransformedDistribution
from detectron2.utils.logger import setup_logger
setup_logger()
from detectron2.config import get_cfg
from detectron2.engine import DefaultPredictor
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog
def create_distribution(scale, shape, shift):
wd = Weibull(scale=scale, concentration=shape)
transforms = AffineTransform(loc=shift, scale=1.)
weibull = TransformedDistribution(wd, transforms)
return weibull
def compute_prob(x, distribution):
eps_radius = 0.5
num_eval_points = 100
start_x = x - eps_radius
end_x = x + eps_radius
step = (end_x - start_x) / num_eval_points
dx = torch.linspace(x - eps_radius, x + eps_radius, num_eval_points)
pdf = distribution.log_prob(dx).exp()
prob = torch.sum(pdf * step)
return prob
def update_label_based_on_energy(logits, classes, unk_dist, known_dist):
unknown_class_index = 80
cls = classes
lse = torch.logsumexp(logits[:, :10], dim=1)
for i, energy in enumerate(lse):
p_unk = compute_prob(energy, unk_dist)
p_known = compute_prob(energy, known_dist)
# print(str(p_unk) + ' -- ' + str(p_known))
if torch.isnan(p_unk) or torch.isnan(p_known):
continue
if p_unk > p_known:
cls[i] = unknown_class_index
return cls
# Get image
fnum = '451953'
file_name = '000000' + fnum
im = cv2.imread("/home/fk1/workspace/OWOD/datasets/VOC2007/JPEGImages/" + file_name + ".jpg")
model = '/home/fk1/workspace/OWOD/output/t1_THRESHOLD_AUTOLABEL_UNK/model_final.pth'
# model = '/home/fk1/workspace/OWOD/output/t1_clustering_with_save/model_final.pth'
# model = '/home/fk1/workspace/OWOD/output/old/t1_20_class/model_final.pth'
cfg_file = '/home/fk1/workspace/OWOD/configs/OWOD/t1/t1_test.yaml'
# Get the configuration ready
cfg = get_cfg()
cfg.merge_from_file(cfg_file)
cfg.MODEL.WEIGHTS = model
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.27
# cfg.MODEL.ROI_HEADS.NUM_CLASSES = 21
predictor = DefaultPredictor(cfg)
outputs = predictor(im)
print('Before' + str(outputs["instances"].pred_classes))
param_save_location = os.path.join('/home/fk1/workspace/OWOD/output/t1_clustering_val/energy_dist_' + str(20) + '.pkl')
params = torch.load(param_save_location)
unknown = params[0]
known = params[1]
unk_dist = create_distribution(unknown['scale_unk'], unknown['shape_unk'], unknown['shift_unk'])
known_dist = create_distribution(known['scale_known'], known['shape_known'], known['shift_known'])
instances = outputs["instances"].to(torch.device("cpu"))
dev =instances.pred_classes.get_device()
classes = instances.pred_classes.tolist()
logits = instances.logits
classes = update_label_based_on_energy(logits, classes, unk_dist, known_dist)
classes = torch.IntTensor(classes).to(torch.device("cuda"))
outputs["instances"].pred_classes = classes
print(classes)
print('After' + str(outputs["instances"].pred_classes))
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
v = v.draw_instance_predictions(outputs['instances'].to('cpu'))
img = v.get_image()[:, :, ::-1]
cv2.imwrite('output_' + file_name + '.jpg', img)