From 96994f17794b7df06525bdeec554fcc85018dedf Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Tue, 9 Mar 2021 11:27:13 +0800 Subject: [PATCH 01/11] Update cityscapes.py --- core/data/dataloader/cityscapes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/data/dataloader/cityscapes.py b/core/data/dataloader/cityscapes.py index 7d5de71b3..5d7a67744 100644 --- a/core/data/dataloader/cityscapes.py +++ b/core/data/dataloader/cityscapes.py @@ -37,7 +37,7 @@ class CitySegmentation(SegmentationDataset): BASE_DIR = 'cityscapes' NUM_CLASS = 19 - def __init__(self, root='../datasets/citys', split='train', mode=None, transform=None, **kwargs): + def __init__(self, root='/content/data, split='train', mode=None, transform=None, **kwargs): super(CitySegmentation, self).__init__(root, split, mode, transform, **kwargs) # self.root = os.path.join(root, self.BASE_DIR) assert os.path.exists(self.root), "Please setup the dataset using ../datasets/cityscapes.py" From a82df1e65461094bff1b1715278fe000351a936f Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Tue, 9 Mar 2021 14:20:37 +0800 Subject: [PATCH 02/11] Update cityscapes.py --- core/data/dataloader/cityscapes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/data/dataloader/cityscapes.py b/core/data/dataloader/cityscapes.py index 5d7a67744..8aae5b429 100644 --- a/core/data/dataloader/cityscapes.py +++ b/core/data/dataloader/cityscapes.py @@ -37,7 +37,7 @@ class CitySegmentation(SegmentationDataset): BASE_DIR = 'cityscapes' NUM_CLASS = 19 - def __init__(self, root='/content/data, split='train', mode=None, transform=None, **kwargs): + def __init__(self, root='/content/data', split='train', mode=None, transform=None, **kwargs): super(CitySegmentation, self).__init__(root, split, mode, transform, **kwargs) # self.root = os.path.join(root, self.BASE_DIR) assert os.path.exists(self.root), "Please setup the dataset using ../datasets/cityscapes.py" From e4eb3ae3cda3c864eea7c4d6b55ebfc05e949daf Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Wed, 10 Mar 2021 11:25:21 +0800 Subject: [PATCH 03/11] Update train.py --- scripts/train.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/scripts/train.py b/scripts/train.py index 43acf084e..7860d875d 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -24,6 +24,10 @@ from core.utils.score import SegmentationMetric +from torch.utils.tensorboard import SummaryWriter +# 定义该次实验名称 +writer = SummaryWriter('/content/drive/MyDrive/deeplabv3/log/mytest') + def parse_args(): parser = argparse.ArgumentParser(description='Semantic Segmentation Training With Pytorch') # model and dataset @@ -147,6 +151,7 @@ def __init__(self, args): val_sampler = make_data_sampler(val_dataset, False, args.distributed) val_batch_sampler = make_batch_data_sampler(val_sampler, args.batch_size) + #数据增强修改点 self.train_loader = data.DataLoader(dataset=train_dataset, batch_sampler=train_batch_sampler, num_workers=args.workers, @@ -155,12 +160,12 @@ def __init__(self, args): batch_sampler=val_batch_sampler, num_workers=args.workers, pin_memory=True) - - # create network + + # create network 初始化网络 BatchNorm2d = nn.SyncBatchNorm if args.distributed else nn.BatchNorm2d self.model = get_segmentation_model(model=args.model, dataset=args.dataset, backbone=args.backbone, aux=args.aux, jpu=args.jpu, norm_layer=BatchNorm2d).to(self.device) - + # resume checkpoint if needed if args.resume: if os.path.isfile(args.resume): @@ -180,6 +185,8 @@ def __init__(self, args): if hasattr(self.model, 'exclusive'): for module in self.model.exclusive: params_list.append({'params': getattr(self.model, module).parameters(), 'lr': args.lr * 10}) + + #optimizer修改点 self.optimizer = torch.optim.SGD(params_list, lr=args.lr, momentum=args.momentum, @@ -239,14 +246,18 @@ def train(self): "Iters: {:d}/{:d} || Lr: {:.6f} || Loss: {:.4f} || Cost Time: {} || Estimated Time: {}".format( iteration, max_iters, self.optimizer.param_groups[0]['lr'], losses_reduced.item(), str(datetime.timedelta(seconds=int(time.time() - start_time))), eta_string)) - + ###AAA1 + writer.add_scalar('loss', losses_reduced.item(), iteration) + writer.add_scalar('Learn rate', self.optimizer.param_groups[0]['lr'], iteration) + if iteration % save_per_iters == 0 and save_to_disk: save_checkpoint(self.model, self.args, is_best=False) if not self.args.skip_val and iteration % val_per_iters == 0: - self.validation() + self.validation(iteration) self.model.train() - + + save_checkpoint(self.model, self.args, is_best=False) total_training_time = time.time() - start_time total_training_str = str(datetime.timedelta(seconds=total_training_time)) @@ -254,7 +265,7 @@ def train(self): "Total training time: {} ({:.4f}s / it)".format( total_training_str, total_training_time / max_iters)) - def validation(self): + def validation(self,iteration): # total_inter, total_union, total_correct, total_label = 0, 0, 0, 0 is_best = False self.metric.reset() @@ -273,7 +284,10 @@ def validation(self): self.metric.update(outputs[0], target) pixAcc, mIoU = self.metric.get() logger.info("Sample: {:d}, Validation pixAcc: {:.3f}, mIoU: {:.3f}".format(i + 1, pixAcc, mIoU)) - + ###AAA2 + writer.add_scalar('mIOU', mIoU, iteration) + writer.add_scalar('pixAcc', pixAcc, iteration) + new_pred = (pixAcc + mIoU) / 2 if new_pred > self.best_pred: is_best = True From 17c672797d6e604748ef0e5e09f3ae003d10e47b Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Wed, 10 Mar 2021 14:52:22 +0800 Subject: [PATCH 04/11] Update train.py --- scripts/train.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scripts/train.py b/scripts/train.py index 7860d875d..f8d06cce4 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -26,7 +26,8 @@ from torch.utils.tensorboard import SummaryWriter # 定义该次实验名称 -writer = SummaryWriter('/content/drive/MyDrive/deeplabv3/log/mytest') +tang_log_dir='/content/drive/MyDrive/deeplabv3/log/mytest' + def parse_args(): parser = argparse.ArgumentParser(description='Semantic Segmentation Training With Pytorch') @@ -216,7 +217,10 @@ def train(self): save_per_iters = self.args.save_epoch * self.args.iters_per_epoch start_time = time.time() logger.info('Start training, Total Epochs: {:d} = Total Iterations {:d}'.format(epochs, max_iters)) - + + ###tang3 + writer = SummaryWriter(tang_log_dir) + self.model.train() for iteration, (images, targets, _) in enumerate(self.train_loader): iteration = iteration + 1 @@ -287,7 +291,7 @@ def validation(self,iteration): ###AAA2 writer.add_scalar('mIOU', mIoU, iteration) writer.add_scalar('pixAcc', pixAcc, iteration) - + writer.flush() new_pred = (pixAcc + mIoU) / 2 if new_pred > self.best_pred: is_best = True From 866207f9f5dcd6f82203cb86f7891be39d2cb6ce Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Wed, 10 Mar 2021 15:23:30 +0800 Subject: [PATCH 05/11] Update train.py --- scripts/train.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/train.py b/scripts/train.py index f8d06cce4..e23701600 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -26,8 +26,8 @@ from torch.utils.tensorboard import SummaryWriter # 定义该次实验名称 -tang_log_dir='/content/drive/MyDrive/deeplabv3/log/mytest' - +tang_log_dir=input() +writer = SummaryWriter(tang_log_dir) def parse_args(): parser = argparse.ArgumentParser(description='Semantic Segmentation Training With Pytorch') @@ -219,7 +219,7 @@ def train(self): logger.info('Start training, Total Epochs: {:d} = Total Iterations {:d}'.format(epochs, max_iters)) ###tang3 - writer = SummaryWriter(tang_log_dir) + self.model.train() for iteration, (images, targets, _) in enumerate(self.train_loader): From fa4c9888376bb78f2d3301fe2719552f89e26a01 Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Wed, 10 Mar 2021 20:47:32 +0800 Subject: [PATCH 06/11] Update train.py --- scripts/train.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/train.py b/scripts/train.py index e23701600..b17ad6215 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -26,8 +26,8 @@ from torch.utils.tensorboard import SummaryWriter # 定义该次实验名称 -tang_log_dir=input() -writer = SummaryWriter(tang_log_dir) + +writer = SummaryWriter("/content/drive/MyDrive/deeplabv3/log/resnet152/tang1") def parse_args(): parser = argparse.ArgumentParser(description='Semantic Segmentation Training With Pytorch') From 12f4e4ef4d0302abe78deace5b10bbb74ab3d876 Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Fri, 12 Mar 2021 16:13:12 +0800 Subject: [PATCH 07/11] Update train.py --- scripts/train.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/train.py b/scripts/train.py index b17ad6215..ae899703d 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -27,7 +27,7 @@ from torch.utils.tensorboard import SummaryWriter # 定义该次实验名称 -writer = SummaryWriter("/content/drive/MyDrive/deeplabv3/log/resnet152/tang1") +writer = SummaryWriter("/content/log") def parse_args(): parser = argparse.ArgumentParser(description='Semantic Segmentation Training With Pytorch') From ef4e7e31cd27b5edaef4fa64693a0192cfce5abb Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Sat, 13 Mar 2021 09:50:49 +0800 Subject: [PATCH 08/11] Update train.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 加入每次val后自动保存功能 --- scripts/train.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/train.py b/scripts/train.py index ae899703d..8c96b31db 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -102,6 +102,11 @@ def parse_args(): help='run validation every val-epoch') parser.add_argument('--skip-val', action='store_true', default=False, help='skip validation during training') + + ###AAAAA网盘保存路径 + parser.add_argument('--dirtang', type=str, default=None, + help='input the dir of train info ') + args = parser.parse_args() # default settings for epochs, batch_size and lr @@ -134,7 +139,12 @@ class Trainer(object): def __init__(self, args): self.args = args self.device = torch.device(args.device) - + + + ####AAAA我定义的命令 + self.cmd_tang1='cp -f ~/.torch/models/* ' +args.dirtang+'/pth' #临时保存命令 + self.cmd_tang2='cp -f /content/log/* ' +args.dirtang+'/log' + # image transform input_transform = transforms.Compose([ transforms.ToTensor(), @@ -259,6 +269,11 @@ def train(self): if not self.args.skip_val and iteration % val_per_iters == 0: self.validation(iteration) + + #AAAAA + os.system(str(self.cmd_tang1)) + os.system(str(self.cmd_tang2)) #val之后保存到云盘 + self.model.train() From 88ab8facf8b3a1e713c73ec6065808182f147510 Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Sat, 13 Mar 2021 09:54:22 +0800 Subject: [PATCH 09/11] Update train.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除临时output释放内存 --- scripts/train.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/train.py b/scripts/train.py index 8c96b31db..9deb98c09 100644 --- a/scripts/train.py +++ b/scripts/train.py @@ -241,6 +241,9 @@ def train(self): outputs = self.model(images) loss_dict = self.criterion(outputs, targets) + + ###AAA + del outputs #减少内存消耗 losses = sum(loss for loss in loss_dict.values()) From 9f11467258d1f40a97c9b67ae9777a6849b17162 Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Sat, 13 Mar 2021 10:36:25 +0800 Subject: [PATCH 10/11] Update deeplabv3_plus.py --- core/models/deeplabv3_plus.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/models/deeplabv3_plus.py b/core/models/deeplabv3_plus.py index 9b5a70355..4a9902a06 100644 --- a/core/models/deeplabv3_plus.py +++ b/core/models/deeplabv3_plus.py @@ -84,7 +84,7 @@ def forward(self, x): size = x.size()[2:] c1, c3, c4 = self.base_forward(x) outputs = list() - x = self.head(c4, c1) + x = self.head(c4, c1) #跳级融合 x = F.interpolate(x, size, mode='bilinear', align_corners=True) outputs.append(x) if self.aux: From 3944ac97b4ca00c68ce32ed25503b54443ba051e Mon Sep 17 00:00:00 2001 From: FUTUREEEEEE <52389798+FUTUREEEEEE@users.noreply.github.com> Date: Sat, 13 Mar 2021 11:09:07 +0800 Subject: [PATCH 11/11] Update deeplabv3.py --- core/models/deeplabv3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/models/deeplabv3.py b/core/models/deeplabv3.py index 98d0c02a3..83c973356 100644 --- a/core/models/deeplabv3.py +++ b/core/models/deeplabv3.py @@ -58,7 +58,7 @@ def forward(self, x): class _DeepLabHead(nn.Module): def __init__(self, nclass, norm_layer=nn.BatchNorm2d, norm_kwargs=None, **kwargs): super(_DeepLabHead, self).__init__() - self.aspp = _ASPP(2048, [12, 24, 36], norm_layer=norm_layer, norm_kwargs=norm_kwargs, **kwargs) + self.aspp = _ASPP(2048, [6, 12, 18], norm_layer=norm_layer, norm_kwargs=norm_kwargs, **kwargs) self.block = nn.Sequential( nn.Conv2d(256, 256, 3, padding=1, bias=False), norm_layer(256, **({} if norm_kwargs is None else norm_kwargs)),