From c7d0f7d78969f62c7102528e3e9ea1d85b42d4f7 Mon Sep 17 00:00:00 2001 From: TsungChinHanKen <> Date: Sun, 21 Mar 2021 20:20:01 -0400 Subject: [PATCH 01/10] evaluation assessment --- evaluation_assessment.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 evaluation_assessment.md diff --git a/evaluation_assessment.md b/evaluation_assessment.md new file mode 100644 index 0000000..56feb05 --- /dev/null +++ b/evaluation_assessment.md @@ -0,0 +1,2 @@ +1. What the difference evaluation options are and what they mean. + From efccb3145ad4af46cbbaf932bde5d1a5968eb238 Mon Sep 17 00:00:00 2001 From: Tsung-Chin Han <39634122+TsungChinHanKen@users.noreply.github.com> Date: Sun, 21 Mar 2021 20:21:29 -0400 Subject: [PATCH 02/10] Update evaluation_assessment.md --- evaluation_assessment.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/evaluation_assessment.md b/evaluation_assessment.md index 56feb05..5894e0c 100644 --- a/evaluation_assessment.md +++ b/evaluation_assessment.md @@ -1,2 +1,7 @@ -1. What the difference evaluation options are and what they mean. +1. The difference evaluation options: +- a. + + + +2. From 0ac4ada2cfcc45c58371806eb5280bc403dc8325 Mon Sep 17 00:00:00 2001 From: Tsung-Chin Han <39634122+TsungChinHanKen@users.noreply.github.com> Date: Sun, 21 Mar 2021 20:22:20 -0400 Subject: [PATCH 03/10] Update evaluation_assessment.md --- evaluation_assessment.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/evaluation_assessment.md b/evaluation_assessment.md index 5894e0c..58c1787 100644 --- a/evaluation_assessment.md +++ b/evaluation_assessment.md @@ -1,7 +1,6 @@ 1. The difference evaluation options: -- a. - - +- a. Land cover classification -- image classificaiton. +- b. Semantic Segmentation -- assigning a class label to every pixel of the input image. 2. From 1c1c83cbb95154395d57253573cd2d357c377bf2 Mon Sep 17 00:00:00 2001 From: Tsung-Chin Han <39634122+TsungChinHanKen@users.noreply.github.com> Date: Sun, 21 Mar 2021 20:32:20 -0400 Subject: [PATCH 04/10] Update evaluation_assessment.md --- evaluation_assessment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evaluation_assessment.md b/evaluation_assessment.md index 58c1787..62c6134 100644 --- a/evaluation_assessment.md +++ b/evaluation_assessment.md @@ -1,6 +1,6 @@ 1. The difference evaluation options: -- a. Land cover classification -- image classificaiton. -- b. Semantic Segmentation -- assigning a class label to every pixel of the input image. +> - a. Land cover classification -- image classificaiton. +> - b. Semantic Segmentation -- assigning a class label to every pixel of the input image. 2. From 632453acc072b3b04c3e5f9bf3e1c036cd991649 Mon Sep 17 00:00:00 2001 From: Tsung-Chin Han <39634122+TsungChinHanKen@users.noreply.github.com> Date: Sun, 21 Mar 2021 21:23:20 -0400 Subject: [PATCH 05/10] Update evaluation_assessment.md --- evaluation_assessment.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/evaluation_assessment.md b/evaluation_assessment.md index 62c6134..1ada0f8 100644 --- a/evaluation_assessment.md +++ b/evaluation_assessment.md @@ -4,3 +4,16 @@ 2. +3. tmp +> a. SEN12MS - Supervised Learning Benchmark - Classification + +| Backbone | Land Type | Modalitities | Bactch size | Epochs | Accuracy (%) | Macro-F1 (%) | Micro-F1 (%) | +|---|---|---|---|---|---|---|---| +|DenseNet|single-label|_s1s2|64|100|51.16|50.78|62.90| +|DenseNet|single-label|_s2|64|100|54.41|52.32|64.74| +|ResNet50|single-label|_RGB|64|100|45.11|45.16|58.98| +|ResNet50|single-label|_s1s2|64|100|45.52|53.21|64.66| +|ResNet50|single-label|_s2|64|100|57.33|53.39|66.35| +|ResNet50|multi-label|_RGB|64|100|89.86|47.57|66.51| +|ResNet50|multi-label|_s1s2|64|100|91.22|57.46|71.40| +|ResNet50|multi-label|_s2|64|100|90.62|56.14|69.88| From 137c0bd40f0ad1130b513c7d8895f9a61c8dc0df Mon Sep 17 00:00:00 2001 From: Colorado Reed Date: Thu, 25 Mar 2021 19:12:58 -0700 Subject: [PATCH 06/10] test init for adding layer work for ResNet.py --- classification/models/ResNet.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/classification/models/ResNet.py b/classification/models/ResNet.py index fb011ba..7deb131 100644 --- a/classification/models/ResNet.py +++ b/classification/models/ResNet.py @@ -131,7 +131,14 @@ def __init__(self, mocoModel, n_inputs = 12, numCls = 17): resnet = models.resnet50(pretrained=False) resnet.load_state_dict(mocoModel["state_dict"]) - self.conv1 = nn.Conv2d(n_inputs, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) + # new add following moco -- (testing) + self.conv1 = nn.Sequential( + nn.Conv2d(n_inputs, 3, kernel_size=1, stride=1, bias=False) + nn.BatchNorm2d(3), + nn.ReLU(inplace=True) + ) + + # self.conv1 = nn.Conv2d(n_inputs, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) self.encoder = nn.Sequential( self.conv1, resnet.bn1, From 8342eed8cc6749bf9b11e7d591c17f3d9b840608 Mon Sep 17 00:00:00 2001 From: TsungChinHanKen <> Date: Thu, 25 Mar 2021 23:54:51 -0400 Subject: [PATCH 07/10] update the moco conv1 matching layer in ResNet --- classification/models/ResNet.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/classification/models/ResNet.py b/classification/models/ResNet.py index fb011ba..ff20e5e 100644 --- a/classification/models/ResNet.py +++ b/classification/models/ResNet.py @@ -131,7 +131,14 @@ def __init__(self, mocoModel, n_inputs = 12, numCls = 17): resnet = models.resnet50(pretrained=False) resnet.load_state_dict(mocoModel["state_dict"]) - self.conv1 = nn.Conv2d(n_inputs, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) + # new add following to match moco conv1 layer -- (testing) + self.conv1 = nn.Sequential( + nn.Conv2d(n_inputs, 3, kernel_size=1, stride=1, bias=False), + nn.BatchNorm2d(3), + nn.ReLU(inplace=True) + ) + + # self.conv1 = nn.Conv2d(n_inputs, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) self.encoder = nn.Sequential( self.conv1, resnet.bn1, From dbb31a2793ca572aafcd8a1931a8ce46c66ce858 Mon Sep 17 00:00:00 2001 From: TsungChinHanKen <> Date: Fri, 26 Mar 2021 00:22:28 -0400 Subject: [PATCH 08/10] init the matching conv1 layer in ResNet follows moco conv1 --- classification/models/ResNet.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/classification/models/ResNet.py b/classification/models/ResNet.py index 540c2f7..c45c247 100644 --- a/classification/models/ResNet.py +++ b/classification/models/ResNet.py @@ -131,15 +131,9 @@ def __init__(self, mocoModel, n_inputs = 12, numCls = 17): resnet = models.resnet50(pretrained=False) resnet.load_state_dict(mocoModel["state_dict"]) -<<<<<<< HEAD - # new add following to match moco conv1 layer -- (testing) + # (testing) -- match the layer adding from moco's conv1 layer in ResNet self.conv1 = nn.Sequential( nn.Conv2d(n_inputs, 3, kernel_size=1, stride=1, bias=False), -======= - # new add following moco -- (testing) - self.conv1 = nn.Sequential( - nn.Conv2d(n_inputs, 3, kernel_size=1, stride=1, bias=False) ->>>>>>> 137c0bd40f0ad1130b513c7d8895f9a61c8dc0df nn.BatchNorm2d(3), nn.ReLU(inplace=True) ) From 38f472af76d8187c402b99a39ddd2c47e9eb186b Mon Sep 17 00:00:00 2001 From: TsungChinHanKen <> Date: Fri, 26 Mar 2021 01:42:53 -0400 Subject: [PATCH 09/10] add moco adjusted resnet in the test.py as well --- classification/test.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/classification/test.py b/classification/test.py index 26643a6..561cb1b 100644 --- a/classification/test.py +++ b/classification/test.py @@ -13,7 +13,7 @@ from dataset import SEN12MS, ToTensor, Normalize from models.VGG import VGG16, VGG19 -from models.ResNet import ResNet50, ResNet101, ResNet152 +from models.ResNet import ResNet50, ResNet101, ResNet152, Moco from models.DenseNet import DenseNet121, DenseNet161, DenseNet169, DenseNet201 from metrics import MetricTracker, Precision_score, Recall_score, F1_score, \ F2_score, Hamming_loss, Subset_accuracy, Accuracy_score, One_error, \ @@ -24,7 +24,8 @@ model_choices = ['VGG16', 'VGG19', 'ResNet50','ResNet101','ResNet152', - 'DenseNet121','DenseNet161','DenseNet169','DenseNet201'] + 'DenseNet121','DenseNet161','DenseNet169','DenseNet201', + 'Moco'] label_choices = ['multi_label', 'single_label'] # ------------------------ define and parse arguments ------------------------- @@ -158,7 +159,12 @@ def main(): elif config['model'] == 'DenseNet169': model = DenseNet169(n_inputs, numCls) elif config['model'] == 'DenseNet201': - model = DenseNet201(n_inputs, numCls) + model = DenseNet201(n_inputs, numCls) + + # add moco adjusted model - conv1 layer part + elif config['model'] == 'Moco': + model = Moco(n_inputs, numCls) + else: raise NameError("no model") From b2b05dfbf903ecc0d15ab464a2e24b8e9e936225 Mon Sep 17 00:00:00 2001 From: TsungChinHanKen <> Date: Fri, 26 Mar 2021 13:49:13 -0400 Subject: [PATCH 10/10] update the con1x1 block layer --- classification/main_train.py | 6 +++++- classification/models/ResNet.py | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/classification/main_train.py b/classification/main_train.py index 9190e57..63ed0ff 100644 --- a/classification/main_train.py +++ b/classification/main_train.py @@ -222,10 +222,14 @@ def main(): model = DenseNet169(n_inputs, numCls) elif args.model == 'DenseNet201': model = DenseNet201(n_inputs, numCls) + elif args.model == 'DenseNet201': + model = DenseNet201(n_inputs, numCls) elif args.model == 'Moco': pt_path = os.path.join(args.pt_dir, f"{args.pt_name}_{args.pt_type}_converted.pth") assert os.path.exists(pt_path) model = Moco(torch.load(pt_path), n_inputs, numCls) + # model = Moco(n_inputs, numCls) + else: raise NameError("no model") @@ -271,7 +275,7 @@ def main(): # ----------------------------- executing Train/Val. # train network - wandb.watch(model, log="all") + # wandb.watch(model, log="all") for epoch in range(start_epoch, args.epochs): print('Epoch {}/{}'.format(epoch, args.epochs - 1)) diff --git a/classification/models/ResNet.py b/classification/models/ResNet.py index c45c247..1709c02 100644 --- a/classification/models/ResNet.py +++ b/classification/models/ResNet.py @@ -132,14 +132,16 @@ def __init__(self, mocoModel, n_inputs = 12, numCls = 17): resnet.load_state_dict(mocoModel["state_dict"]) # (testing) -- match the layer adding from moco's conv1 layer in ResNet - self.conv1 = nn.Sequential( + self.Conv1x1Block = nn.Sequential( nn.Conv2d(n_inputs, 3, kernel_size=1, stride=1, bias=False), nn.BatchNorm2d(3), nn.ReLU(inplace=True) ) # self.conv1 = nn.Conv2d(n_inputs, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) + self.conv1 = nn.Conv2d(3, 64, kernel_size=(256, 256), stride=(2, 2), padding=(3, 3), bias=False) self.encoder = nn.Sequential( + self.Conv1x1Block, self.conv1, resnet.bn1, resnet.relu,