Skip to content

Commit

Permalink
Finish README.md file
Browse files Browse the repository at this point in the history
Co-authored-by: bmezaris <[email protected]>
  • Loading branch information
marios1861 and bmezaris committed Dec 1, 2022
1 parent c05eb99 commit 939c2bc
Show file tree
Hide file tree
Showing 26 changed files with 309 additions and 235 deletions.
10 changes: 7 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
/scripts/pc2/
/scripts/pc3/
/.idea/
.idea/
images/heatmaps/
dataset/ILSVRC2012_img_train
dataset/ILSVRC2012_img_val
snapshots/data/
*.pyc
venv/
267 changes: 154 additions & 113 deletions README.md

Large diffs are not rendered by default.

Binary file added images/232.JPEG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/885.JPEG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ numpy~=1.23.2
opencv_python~=4.6.0.66
Pillow~=9.2.0
scikit_learn~=1.1.2
torch~=1.12.1+cu113
torchvision~=0.13.1+cu113
torch~=1.12.1
torchvision~=0.13.1
tqdm~=4.64.0
12 changes: 6 additions & 6 deletions scripts/bash scripts/experiment_script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@ cd ../

CUDA_VISIBLE_DEVICES=0 python train_script.py \
--img-dir=$IMGDIR \
--restore-dir=$RESTORE \
--restore-from=$RESTORE \
--train-list=${TRAIN:=VGG16_train.txt} \
--num-workers=4 \
--model=${MODEL:=vgg16} \
--version"${VERSION:="TAME"}" \
--version="${VERSION:="TAME"}" \
--layers="${LAYERS:="features.16 features.23 features.30"}" \
--wd=${WD:=5e-4} \
--max-lr=${MLR:=1e-2} \
--epoch=${EPOCHS:=8} \
--batch-size=${BSIZE:=8} \
--batch-size=${BSIZE:=32}


CUDA_VISIBLE_DEVICES=0 python eval_script.py \
--val-dir=$VALDIR \
--restore-dir=$RESTORE \
--restore-from=$RESTORE \
--test-list=${TEST:="Evaluation_2000.txt"} \
--num-workers=4 \
--model=${MODEL:="vgg16"} \
--version${VERSION:="TAME"} \
--version=${VERSION:="TAME"} \
--layers="${LAYERS:="features.16 features.23 features.30"}" \
--start-epoch=1 \
--end-epoch=${EPOCHS:=8}
--end-epoch=${EPOCHS:=32}


exit 0
Expand Down
13 changes: 13 additions & 0 deletions scripts/bash scripts/get_mask_ResNet-50.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/sh

(
cd ../
name=$1
label=$2

CUDA_VISIBLE_DEVICES=0 python masked_print.py \
--model=resnet50 \
--layers="layer2 layer3 layer4" \
--name=${name:="162_166.JPEG"} \
--label=${label:="162"}
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ name=$1
label=$2

CUDA_VISIBLE_DEVICES=0 python masked_print.py \
--restore-dir=''\
--name=${name:="162_166.JPEG"} \
--label=${label:="162"}
)
2 changes: 1 addition & 1 deletion scripts/bash scripts/lr_finder.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ CUDA_VISIBLE_DEVICES=0 python lr_finder.py \
--layers="${LAYERS:="features.16 features.23 features.30"}" \
--wd=${WD:=5e-4} \
--version="${VERSION:="TAME"}" \
--batch-size=${BSIZE:=8} \
--batch-size=${BSIZE:=32} \

exit 0
)
22 changes: 22 additions & 0 deletions scripts/bash scripts/lr_finder_Generic.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/sh

(
. pc_info.sh

export MODEL=resnet50
export LAYERS="layer2 layer3 layer4"
export TRAIN=ResNet50_train.txt

export BSIZE=32

# export VERSION="TAME"
# export WD=
# export LAYERS=
# export RESTORE=
# export TEST="Validation_2000.txt"


. lr_finder.sh

exit 0
)
3 changes: 1 addition & 2 deletions scripts/bash scripts/lr_finder_ResNet-50.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ export MODEL=resnet50
export LAYERS="layer2 layer3 layer4"
export TRAIN=ResNet50_train.txt

export EPOCHS=8
export BSIZE=32

# export BSIZE=8
# export VERSION="TAME"
# export WD=
# export LAYERS=
Expand Down
3 changes: 1 addition & 2 deletions scripts/bash scripts/lr_finder_VGG-16.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
(
. pc_info.sh

export EPOCHS=8
export BSIZE=32

# export BSIZE=8
# export VERSION="TAME"
# export WD=
# export LAYERS=
Expand Down
4 changes: 2 additions & 2 deletions scripts/bash scripts/pc_info.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/sh

export IMGDIR="../../dataset/ILSVRC2012_img_train"
export VALDIR="../../dataset/ILSVRC2012_img_val"
export IMGDIR="dataset/ILSVRC2012_img_train"
export VALDIR="dataset/ILSVRC2012_img_val"
2 changes: 1 addition & 1 deletion scripts/bash scripts/train_eval_Generic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ export TRAIN=ResNet50_train.txt

export MLR=1e-4
export EPOCHS=8
export BSIZE=32

# export BSIZE=8
# export VERSION="TAME"
# export WD=
# export LAYERS=
Expand Down
4 changes: 2 additions & 2 deletions scripts/bash scripts/train_eval_ResNet-50.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ export LAYERS="layer2 layer3 layer4"
export TRAIN=ResNet50_train.txt

export MLR=1e-4
export EPOCHS=8
export EPOCHS=4
export BSIZE=32

# export BSIZE=8
# export VERSION="TAME"
# export WD=
# export LAYERS=
Expand Down
4 changes: 2 additions & 2 deletions scripts/bash scripts/train_eval_VGG-16.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
(
. pc_info.sh

export MLR="1e-3"
export MLR=1e-3
export EPOCHS=8
export BSIZE=32

# export BSIZE=8
# export VERSION="TAME"
# export WD=
# export LAYERS=
Expand Down
20 changes: 11 additions & 9 deletions scripts/eval_script.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# checked, should be working correctly

import argparse
import json
import os

import numpy as np
import torch
import torch.nn.functional as F
import torchvision.models as models
from tqdm import tqdm

from composite_models import Generic
import metrics
from avg_meter import AverageMeter
from load_data import data_loader
from model_prep import model_prep
from restore import restore
from utilities import metrics
from utilities.avg_meter import AverageMeter
from utilities.composite_models import Generic
from utilities.load_data import data_loader
from utilities.model_prep import model_prep
from utilities.restore import restore

# Paths
os.chdir('../')
Expand All @@ -34,10 +34,10 @@ def get_arguments():
parser.add_argument("--batch-size", type=int, default=1)
parser.add_argument("--input-size", type=int, default=256)
parser.add_argument("--crop-size", type=int, default=224)
parser.add_argument("--dataset", type=str, default='imagenet')
parser.add_argument("--num-workers", type=int, default=0)
parser.add_argument("--model", type=str, default='vgg16')
parser.add_argument("--version", type=str, default='TAME')
parser.add_argument("--version", type=str, default='TAME',
choices=['TAME', 'Noskipconnection', 'NoskipNobatchnorm', 'Sigmoidinfeaturebranch'])
parser.add_argument("--layers", type=str, default='features.16 features.23 features.30')
parser.add_argument("--global-counter", type=int, default=0)
parser.add_argument("--start-epoch", type=int, default=1)
Expand All @@ -55,6 +55,8 @@ def get_model(args):

def main():
args = get_arguments()
print('Running parameters:\n')
print(json.dumps(vars(args), indent=4))

args.test_list = os.path.join(ROOT_DIR, 'datalist', 'ILSVRC', args.test_list)

Expand Down
93 changes: 47 additions & 46 deletions scripts/lr_finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import torchvision.models as models
from tqdm.auto import tqdm

from composite_models import Generic
from load_data import data_loader
from utilities.composite_models import Generic
from utilities.load_data import data_loader

# Paths
from utilities.model_prep import model_prep
Expand Down Expand Up @@ -37,7 +37,8 @@ def get_arguments():
parser.add_argument("--model", type=str, default='vgg16')
parser.add_argument("--layers", type=str, default='features.16 features.23 features.30')
parser.add_argument("--wd", type=float, default=5e-4)
parser.add_argument("--version", type=str, default='TAME')
parser.add_argument("--version", type=str, default='TAME',
choices=['TAME', 'Noskipconnection', 'NoskipNobatchnorm', 'Sigmoidinfeaturebranch'])
return parser.parse_args()


Expand Down Expand Up @@ -77,56 +78,56 @@ def find_lr(args, init_value=1e-8, final_value=10., beta=0.999):
batch_num = 0
losses = []
lrs = []
try:
tq_loader = tqdm(trn_loader,
unit='batches',
bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt} [ETA: {remaining}, {rate_fmt}{postfix}]')
for idx, data in enumerate(tq_loader):
batch_num += 1
# As before, get the loss for this mini-batch of inputs/outputs
inputs, labels = data
inputs, labels = inputs.cuda(), labels.cuda()
optimizer.zero_grad()

logits = net(inputs, labels)
masks = net.get_a(labels.long())
loss, a, b, c = net.get_loss(logits, labels, masks)

# Compute the smoothed loss
avg_loss = beta * avg_loss + (1-beta) * loss.item()
smoothed_loss = avg_loss / (1 - beta**batch_num)
# Stop if the loss is exploding
if batch_num > 1 and smoothed_loss > 4 * best_loss:
return lrs, losses
# Record the best loss
if smoothed_loss < best_loss or batch_num == 1:
best_loss = smoothed_loss
losses.append(smoothed_loss)
postfix = {'Current Loss': smoothed_loss, 'Min Loss': best_loss,
'Current LR': lr}

tq_loader.set_postfix(postfix)

lrs.append(lr)
# Do the SGD step
loss.backward()
optimizer.step()
# Update the lr for the next step
lr *= mult

optimizer.param_groups[0]['lr'] = lr
optimizer.param_groups[1]['lr'] = 2 * lr

finally:
return lrs, losses

tq_loader = tqdm(trn_loader,
unit='batches',
bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt} [ETA: {remaining}, {rate_fmt}{postfix}]')
for idx, data in enumerate(tq_loader):
batch_num += 1
# As before, get the loss for this mini-batch of inputs/outputs
inputs, labels = data
inputs, labels = inputs.cuda(), labels.cuda()
optimizer.zero_grad()

logits = net(inputs, labels)
masks = net.get_a(labels.long())
loss, a, b, c = net.get_loss(logits, labels, masks)

# Compute the smoothed loss
avg_loss = beta * avg_loss + (1-beta) * loss.item()
smoothed_loss = avg_loss / (1 - beta**batch_num)
# Stop if the loss is exploding
if batch_num > 1 and smoothed_loss > 4 * best_loss:
return lrs, losses
# Record the best loss
if smoothed_loss < best_loss or batch_num == 1:
best_loss = smoothed_loss
losses.append(smoothed_loss)
postfix = {'Current Loss': smoothed_loss, 'Min Loss': best_loss,
'Current LR': lr}

tq_loader.set_postfix(postfix)

lrs.append(lr)
# Do the SGD step
loss.backward()
optimizer.step()
# Update the lr for the next step
lr *= mult

optimizer.param_groups[0]['lr'] = lr
optimizer.param_groups[1]['lr'] = 2 * lr

return lrs, losses


def main():
args = get_arguments()
print('Running parameters:\n')
print(json.dumps(vars(args), indent=4))
args.train_list = os.path.join(ROOT_DIR, 'datalist', 'ILSVRC', args.train_list)
os.makedirs(data_dir, exist_ok=True)
lrs, losses = find_lr(args)

json_dir = os.path.join(args.data_dir, f'{args.model}_{args.version}_{args.batch_size}.json')

with open(json_dir, mode='x') as loss_samples_file:
Expand Down
12 changes: 6 additions & 6 deletions scripts/masked_print.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@
snapshot_dir = os.path.join(ROOT_DIR, 'snapshots')
img_dir = os.path.join(ROOT_DIR, 'images')


def get_arguments():
parser = argparse.ArgumentParser(description='Generate mask for a given image-label pair with a given model')
parser.add_argument("--snapshot_dir", type=str, default=snapshot_dir)
parser.add_argument("--restore-dir", type=str, default='')
parser.add_argument("--restore-from", type=str, default='')
parser.add_argument("--model", type=str, default='vgg16')
parser.add_argument("--version", type=str, default='TAME')
parser.add_argument("--version", type=str, default='TAME',
choices=['TAME', 'Noskipconnection', 'NoskipNobatchnorm', 'Sigmoidinfeaturebranch'])
parser.add_argument("--layers", type=str, default='features.16 features.23 features.30')
parser.add_argument("--name", type=str, default='162_166.JPEG')
parser.add_argument("--label", type=int, default=162)
Expand Down Expand Up @@ -75,7 +77,7 @@ def main():
im = tsfm_val(img).unsqueeze(0).cuda()
img = tsfm(img)
img_name = os.path.splitext(img_name)
img.save(os.path.join(heatmap_dir, f"{img_name[0]}_{label}{img_name[1]}"))
img.save(os.path.join(heatmap_dir, f"{img_name[0]}{img_name[1]}"))
# to take care of png imgs
im = im[:, 0:3, :, :]

Expand All @@ -87,7 +89,7 @@ def main():
cam_map = model.get_c(label)
cam_map = metrics.normalizeMinMax(cam_map)
cam_map = F.interpolate(cam_map.unsqueeze(0), size=(224, 224), mode='bilinear', align_corners=False)
cam_map = metrics.drop_Npercent(cam_map, 0)
# cam_map = metrics.drop_Npercent(cam_map, 0)
opencvImage = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
mask = np.array(cam_map.squeeze().cpu().numpy() * 255, dtype=np.uint8)
mask = cv2.applyColorMap(mask, cv2.COLORMAP_JET)
Expand All @@ -99,5 +101,3 @@ def main():

if __name__ == '__main__':
main()


Loading

0 comments on commit 939c2bc

Please sign in to comment.