Additional rebuttal experiments

pull/42/head
Joseph 2021-03-01 10:33:20 +04:00
parent 68bcee285d
commit beb1c10d32
10 changed files with 55 additions and 21 deletions

View File

@ -5,9 +5,9 @@ python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52132' --conf
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52133' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.ITEMS_PER_CLASS 30 OUTPUT_DIR "./output/items_30"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52134' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.ITEMS_PER_CLASS 50 OUTPUT_DIR "./output/items_50"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52131' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.ITEMS_PER_CLASS 5 OUTPUT_DIR "./output/items_5"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52135' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MARGIN 1.0 OUTPUT_DIR "./output/margin_1"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52136' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MARGIN 5.0 OUTPUT_DIR "./output/margin_5"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52137' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MARGIN 15.0 OUTPUT_DIR "./output/margin_15"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52135' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MARGIN 1.0 OUTPUT_DIR "./output/margin_1"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52138' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MARGIN 20.0 OUTPUT_DIR "./output/margin_20"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52128' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MOMENTUM 0.7 OUTPUT_DIR "./output/momentum_0_7"
python tools/train_net.py --num-gpus 8 --dist-url='tcp://127.0.0.1:52129' --config-file ./configs/OWOD/t1/t1_train.yaml SOLVER.IMS_PER_BATCH 8 SOLVER.BASE_LR 0.01 OWOD.CLUSTERING.MOMENTUM 0.8 OUTPUT_DIR "./output/momentum_0_8"

View File

@ -1,13 +1,13 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_std_faster_rcnn/model_final.pth"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/margin_15/model_final.pth"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_only_thresh/model_final.pth"
# WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_clustering_with_save/model_final.pth"
ROI_HEADS:
POSITIVE_FRACTION: 0.25
NMS_THRESH_TEST: 0.5
SCORE_THRESH_TEST: 0.05
WEIGHTS: "/home/joseph/workspace/OWOD/output/models_backup/t1_clustering_with_save/model_final.pth"
# ROI_HEADS:
# POSITIVE_FRACTION: 0.25
# NMS_THRESH_TEST: 0.5
# SCORE_THRESH_TEST: 0.05
TEST:
DETECTIONS_PER_IMAGE: 50
DATASETS:
@ -17,7 +17,7 @@ SOLVER:
STEPS: (12000, 16000)
MAX_ITER: 18000
WARMUP_ITERS: 100
OUTPUT_DIR: "./output/t1_test_rerun"
OUTPUT_DIR: "./output/temp_3"
OWOD:
PREV_INTRODUCED_CLS: 0
CUR_INTRODUCED_CLS: 20

View File

@ -1,6 +1,6 @@
_BASE_: "../../Base-RCNN-C4-OWOD.yaml"
MODEL:
WEIGHTS: "/home/fk1/workspace/OWOD/output/t1_clustering_with_save/model_final.pth"
WEIGHTS: "/home/joseph/workspace/OWOD/output/models_backup/t1_clustering_with_save/model_final.pth"
DATASETS:
TRAIN: ('voc_coco_2007_val', ) # t1_voc_coco_2007_train, t1_voc_coco_2007_ft
TEST: ('voc_coco_2007_val', ) # voc_coco_2007_test
@ -8,11 +8,12 @@ SOLVER:
STEPS: (12000, 16000)
MAX_ITER: 500
WARMUP_ITERS: 0
OUTPUT_DIR: "./output/t1_clustering_val"
OUTPUT_DIR: "./output/temp_3"
OWOD:
PREV_INTRODUCED_CLS: 0
CUR_INTRODUCED_CLS: 20
COMPUTE_ENERGY: True
ENERGY_SAVE_PATH: 'energy'
SKIP_TRAINING_WHILE_EVAL: False
ENABLE_CLUSTERING: False
ENABLE_CLUSTERING: False
TEMPERATURE: 1.5

View File

@ -618,6 +618,8 @@ _C.OWOD.COMPUTE_ENERGY = False
_C.OWOD.ENERGY_SAVE_PATH = ''
_C.OWOD.SKIP_TRAINING_WHILE_EVAL = False
_C.OWOD.FEATURE_STORE_SAVE_PATH = ''
_C.OWOD.TEMPERATURE = 1.5
# ---------------------------------------------------------------------------- #
# Misc options

View File

@ -287,8 +287,8 @@ if __name__.endswith(".builtin"):
register_all_lvis(_root)
register_all_cityscapes(_root)
register_all_cityscapes_panoptic(_root)
# register_all_pascal_voc(_root)
register_all_pascal_voc(_root)
# register_all_pascal_voc('/home/joseph/workspace/OWOD/datasets')
# register_all_pascal_voc('/home/joseph/workspace/OWOD/datasets')
register_all_pascal_voc('/home/fk1/workspace/OWOD/datasets')
# register_all_voc_style_coco('/home/fk1/workspace/OWOD/datasets')
register_all_ade20k(_root)

View File

@ -45,7 +45,7 @@ VOC_CLASS_NAMES = [
]
T2_CLASS_NAMES = [
"?", "traffic light", "fire hydrant", "stop sign", "parking meter",
"truck", "traffic light", "fire hydrant", "stop sign", "parking meter",
"bench", "elephant", "bear", "zebra", "giraffe",
"backpack", "umbrella", "handbag", "tie", "suitcase",
"microwave", "oven", "toaster", "sink", "refrigerator"

View File

@ -178,11 +178,13 @@ class TrainerBase:
for h in self._hooks:
h.after_train()
def analyse_energy(self):
def analyse_energy(self, temp=1.5):
files = os.listdir(os.path.join(self.cfg.OUTPUT_DIR, self.cfg.OWOD.ENERGY_SAVE_PATH))
temp = self.cfg.OWOD.TEMPERATURE
logger = logging.getLogger(__name__)
logger.info('Temperature value: ' + str(temp))
unk = []
known = []
logger = logging.getLogger(__name__)
for id, file in enumerate(files):
path = os.path.join(self.cfg.OUTPUT_DIR, self.cfg.OWOD.ENERGY_SAVE_PATH, file)
@ -192,7 +194,7 @@ class TrainerBase:
logger.info('Not able to load ' + path + ". Continuing...")
continue
num_seen_classes = self.cfg.OWOD.PREV_INTRODUCED_CLS + self.cfg.OWOD.CUR_INTRODUCED_CLS
lse = torch.logsumexp(logits[:, :num_seen_classes], dim=1)
lse = temp * torch.logsumexp(logits[:, :num_seen_classes] / temp, dim=1)
# lse = torch.logsumexp(logits[:, :-2], dim=1)
for i, cls in enumerate(classes):
@ -213,10 +215,17 @@ class TrainerBase:
logger.info('Fitting Weibull distribution...')
wb_dist_param = []
start_time = time.time()
wb_unk = Fit_Weibull_3P(failures=unk, show_probability_plot=False, print_results=False)
logger.info("--- %s seconds ---" % (time.time() - start_time))
wb_dist_param.append({"scale_unk": wb_unk.alpha, "shape_unk": wb_unk.beta, "shift_unk": wb_unk.gamma})
start_time = time.time()
wb_known = Fit_Weibull_3P(failures=known, show_probability_plot=False, print_results=False)
logger.info("--- %s seconds ---" % (time.time() - start_time))
wb_dist_param.append(
{"scale_known": wb_known.alpha, "shape_known": wb_known.beta, "shift_known": wb_known.gamma})

View File

@ -110,6 +110,16 @@ class PascalVOCDetectionEvaluator(DatasetEvaluator):
cls[i] = self.unknown_class_index
return cls
def update_labels_based_on_softmax(self, logits, classes, thresold=0.9):
cls = classes
if len(logits) <= 0:
return cls
scores = torch.max(torch.nn.functional.softmax(logits[:, :self.num_seen_classes], dim=1), dim=1)[0]
for i, s in enumerate(scores):
if s < thresold:
cls[i] = self.unknown_class_index
return cls
def process(self, inputs, outputs):
for input, output in zip(inputs, outputs):
image_id = input["image_id"]
@ -118,7 +128,8 @@ class PascalVOCDetectionEvaluator(DatasetEvaluator):
scores = instances.scores.tolist()
classes = instances.pred_classes.tolist()
logits = instances.logits
classes = self.update_label_based_on_energy(logits, classes)
# classes = self.update_label_based_on_energy(logits, classes)
classes = self.update_labels_based_on_softmax(logits, classes)
for box, score, cls in zip(boxes, scores, classes):
if cls == -100:
continue

View File

@ -842,7 +842,7 @@ class Visualizer:
)
return self.output
def draw_box(self, box_coord, alpha=0.6, edge_color="g", line_style="-"):
def draw_box(self, box_coord, alpha=0.5, 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=20,
linewidth=15,
alpha=alpha,
linestyle=line_style,
)

13
run.sh
View File

@ -92,4 +92,15 @@
#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
#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
#
#python tools/train_net.py --num-gpus 4 --dist-url='tcp://127.0.0.1:52133' --config-file ./configs/OWOD/t1/t1_val.yaml SOLVER.IMS_PER_BATCH 4 SOLVER.BASE_LR 0.01 OWOD.TEMPERATURE 2 OUTPUT_DIR "./output/temp_2"
#
#python tools/train_net.py --num-gpus 4 --eval-only --config-file ./configs/OWOD/t1/t1_test.yaml SOLVER.IMS_PER_BATCH 4 SOLVER.BASE_LR 0.005 OUTPUT_DIR "./output/temp_2"
python tools/train_net.py --num-gpus 4 --dist-url='tcp://127.0.0.1:52133' --config-file ./configs/OWOD/t1/t1_val.yaml SOLVER.IMS_PER_BATCH 4 SOLVER.BASE_LR 0.01 OWOD.TEMPERATURE 1.5 OUTPUT_DIR "./output/temp_1p5"
python tools/train_net.py --num-gpus 4 --eval-only --config-file ./configs/OWOD/t1/t1_test.yaml SOLVER.IMS_PER_BATCH 4 SOLVER.BASE_LR 0.005 OUTPUT_DIR "./output/temp_1p5"