Skip to content

Commit 71f9680

Browse files
committed
Demo files for icassp and better benchmarking.
1 parent e783741 commit 71f9680

File tree

11 files changed

+225
-11
lines changed

11 files changed

+225
-11
lines changed

configs/benchmark/diffusercam.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,23 @@ algorithms: [
2323
# "ADMM",
2424

2525
## -- reconstructions trained on DiffuserCam measured
26-
"hf:diffusercam:mirflickr:U5+Unet8M",
26+
# "hf:diffusercam:mirflickr:U5+Unet8M",
2727
# "hf:diffusercam:mirflickr:Unet8M+U5",
2828
# "hf:diffusercam:mirflickr:TrainInv+Unet8M",
2929
# "hf:diffusercam:mirflickr:MMCN4M+Unet4M",
3030
# "hf:diffusercam:mirflickr:MWDN8M",
31-
"hf:diffusercam:mirflickr:Unet4M+U5+Unet4M",
31+
# "hf:diffusercam:mirflickr:Unet4M+U5+Unet4M",
3232
# "hf:diffusercam:mirflickr:Unet4M+TrainInv+Unet4M",
3333
# "hf:diffusercam:mirflickr:Unet2M+MMCN+Unet2M",
3434
# "hf:diffusercam:mirflickr:Unet2M+MWDN6M",
3535
# "hf:diffusercam:mirflickr:Unet4M+U10+Unet4M",
36-
"hf:diffusercam:mirflickr:Unet4M+U5+Unet4M_psfNN",
36+
# "hf:diffusercam:mirflickr:Unet4M+U5+Unet4M_psfNN",
3737

3838
# ## comparing UNetRes and Transformer, ADAMW optimizer
3939
# "hf:diffusercam:mirflickr:Transformer4M+U5+Transformer4M",
4040
# "hf:diffusercam:mirflickr:Transformer4M+U5+Transformer4M_psfNN",
4141
# "hf:diffusercam:mirflickr:U5+Transformer8M",
42+
"hf:diffusercam:mirflickr:U5+Unet8M_adamw",
4243
# "hf:diffusercam:mirflickr:Unet4M+U5+Unet4M_adamw",
4344
# "hf:diffusercam:mirflickr:Unet4M+U5+Unet4M_psfNN_adamw",
4445

configs/benchmark/diffusercam_fullres.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ algorithms: [
2323
# "ADMM",
2424

2525
# ## comparing LeADMM5 and SVDeconvNet, ADAMW optimizer
26+
"hf:diffusercam:mirflickr:U5+Unet12M_fullres",
2627
"hf:diffusercam:mirflickr:Unet6M+U5+Unet6M_fullres",
2728
"hf:diffusercam:mirflickr:Unet6M+U5+Unet6M_psfNN_fullres",
2829
"hf:diffusercam:mirflickr:SVDecon+UNet8M",

configs/demo_icassp2025.yaml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
defaults:
2+
- demo
3+
- _self_
4+
5+
6+
gamma: 2.2 # for plotting PSF
7+
8+
display:
9+
image_res: [-1,1100] # negative value to set according to other dimension
10+
vshift: -26
11+
12+
capture:
13+
legacy: True
14+
bayer: True
15+
rgb: True
16+
down: 4
17+
awb_gains: [2.0, 1.1]
18+
19+
recon:
20+
gamma: null
21+
downsample: 4
22+
dtype: float32
23+
use_torch: True
24+
torch_device: cuda:0
25+
algo: admm
26+
27+
fista:
28+
n_iter: 300
29+
30+
admm:
31+
n_iter: 10
32+
33+
postproc:
34+
# crop in percent to extract region of interest
35+
# set to null to skip
36+
crop_hor: [0.3, 0.75]
37+
crop_vert: [0.22, 0.7]

configs/recon/diffusercam.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# python scripts/recon/diffusercam.py
2+
defaults:
3+
- defaults
4+
- _self_
5+
6+
cache_dir: null
7+
idx: 0
8+
9+
# - Learned reconstructions: see "lensless/recon/model_dict.py"
10+
# --- UNetRes vs Restormer
11+
# model: U5+Unet8M_adamw
12+
# model: Unet4M+U5+Unet4M_adamw
13+
# model: Unet4M+U5+Unet4M_psfNN_adamw
14+
# model: U5+Transformer8M
15+
# model: Transformer4M+U5+Transformer4M
16+
# model: Transformer4M+U5+Transformer4M_psfNN
17+
# # --- SVDeconv vs LeADMM5
18+
# model: U5+Unet12M_fullres
19+
# model: Unet6M+U5+Unet6M_fullres
20+
# model: Unet6M+U5+Unet6M_psfNN_fullres
21+
# model: SVDecon+UNet8M
22+
model: Unet4M+SVDecon+Unet4M
23+
24+
# # -- for ADMM with fixed parameters
25+
# model: admm
26+
# n_iter: 100
27+
28+
device: cuda:0
29+
n_trials: 100 # to get average inference time
30+
save: True

configs/recon/digicam.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# python scripts/recon/digicam_mirflickr.py
1+
# python scripts/recon/digicam.py
22
defaults:
33
- defaults
44
- _self_
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
defaults:
2+
- telegram_demo
3+
- _self_
4+
5+
# for Telegram
6+
token: null
7+
setup_fp: icassp_setup.jpeg
8+
9+
# usernames and IP address
10+
rpi_username: null
11+
rpi_hostname: null
12+
13+
config_name: demo_icassp2025
14+
psf:
15+
fp: psf_voronoi_apr2025/voronoi_rgb.png
16+
downsample: 4
17+
18+
files:
19+
mnist:
20+
fp: data/original/mnist_3.png
21+
exposure: 0.05
22+
brightness: 100
23+
thumb:
24+
fp: data/original/thumbs_up.png
25+
exposure: 0.02
26+
brightness: 80
27+
face:
28+
fp: data/original/face.jpg
29+
exposure: 0.03
30+
brightness: 80
31+
tree:
32+
fp: data/original/tree.png
33+
exposure: 0.08
34+
brightness: 100
35+

lensless/recon/model_dict.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,15 @@
9090
"Unet4M+U5+Unet4M_ft_tapecam": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-ft-tapecam",
9191
"Unet4M+U5+Unet4M_ft_tapecam_post": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-ft-tapecam-post",
9292
"Unet4M+U5+Unet4M_ft_tapecam_pre": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-ft-tapecam-pre",
93-
# comparing with transformers, with ADAMW optimizer (rest with ADAM)
93+
# comparing with transformers, with ADAMW optimizer (below with ADAMW optimizer)
94+
"U5+Unet8M_adamw": "bezzam/diffusercam-mirflickr-unrolled-admm5-unet8M-adamw",
9495
"Unet4M+U5+Unet4M_adamw": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-adamw",
9596
"Unet4M+U5+Unet4M_psfNN_adamw": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-psfNN-adamw",
9697
"U5+Transformer8M": "bezzam/diffusercam-mirflickr-unrolled-admm5-transformer8M",
9798
"Transformer4M+U5+Transformer4M": "bezzam/diffusercam-mirflickr-transformer4M-unrolled-admm5-transformer4M",
9899
"Transformer4M+U5+Transformer4M_psfNN": "bezzam/difusercam-mirflickr-transformer4M-unrolled-admm5-transformer4M-psfNN",
99100
# (~11.6M param) comparing with SVDeconvNet, with ADAMW optimizer (full resolution images)
101+
"U5+Unet12M_fullres": "bezzam/diffusercam-mirflickr-unrolled-admm5-unet12M-fullres",
100102
"Unet6M+U5+Unet6M_fullres": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-fullres",
101103
"Unet6M+U5+Unet6M_psfNN_fullres": "bezzam/diffusercam-mirflickr-unet4M-unrolled-admm5-unet4M-psfNN-fullres",
102104
"SVDecon+UNet8M": "bezzam/diffusercam-mirflickr-svdecon-unet4M",

lensless/utils/dataset.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def print_available_datasets():
149149
)
150150

151151

152-
def get_dataset(dataset_name, split, cache_dir=None, **kwargs):
152+
def get_dataset(dataset_name, split, **kwargs):
153153
"""
154154
Get a dataset by name.
155155
@@ -159,8 +159,6 @@ def get_dataset(dataset_name, split, cache_dir=None, **kwargs):
159159
Name of the dataset from the available datasets in ``available_datasets``.
160160
split : str
161161
Split of the dataset to load (e.g. "train", "test").
162-
cache_dir : str
163-
Directory to cache the dataset. By default stored in ~/.cache/huggingface/datasets
164162
165163
Returns
166164
-------
@@ -177,7 +175,9 @@ def get_dataset(dataset_name, split, cache_dir=None, **kwargs):
177175
assert split in ["train", "test"], "Split should be 'train' or 'test'"
178176

179177
dataset_config = available_datasets[dataset_name]
180-
return HFDataset(split=split, cache_dir=cache_dir, **dataset_config, **kwargs)
178+
# replace dataset_config with anything from kwargs
179+
dataset_config.update(kwargs)
180+
return HFDataset(split=split, **dataset_config)
181181

182182

183183
class DualDataset(Dataset):

scripts/measure/analyze_image.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
import click
4141
import cv2
42+
import os
4243
import numpy as np
4344
import matplotlib.pyplot as plt
4445
from lensless.utils.image import rgb2gray, gamma_correction, resize
@@ -149,14 +150,14 @@ def analyze_image(fp, gamma, width, bayer, lens, lensless, bg, rg, plot_width, s
149150
ax.set_title("RGB")
150151
ax = pixel_histogram(img, ax=ax_rgb[1], nbits=nbits)
151152
ax.set_title("Histogram")
152-
fig_rgb.savefig("rgb_analysis.png")
153+
fig_rgb.savefig(os.path.join(os.path.dirname(fp), "rgb_analysis.png"))
153154

154155
img_grey = rgb2gray(img[None, ...])
155156
ax = plot_image(img_grey, gamma=gamma, normalize=True, ax=ax_gray[0])
156157
ax.set_title("Grayscale")
157158
ax = pixel_histogram(img_grey, ax=ax_gray[1], nbits=nbits)
158159
ax.set_title("Histogram")
159-
fig_gray.savefig("grey_analysis.png")
160+
fig_gray.savefig(os.path.join(os.path.dirname(fp), "grey_analysis.png"))
160161

161162
img_grey = img_grey.squeeze()
162163
img = img.squeeze()

scripts/measure/prep_display_image.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ def display(
9898
img = np.zeros((screen_res[1], screen_res[0], 3), dtype=img_og.dtype)
9999

100100
if image_res is None:
101+
101102
# set image with padding and correct aspect ratio
102103
if screen_res[0] < screen_res[1]:
103104

@@ -120,6 +121,20 @@ def display(
120121
new_height = int(ratio * image_height)
121122
image_res = (new_width, new_height)
122123

124+
# if negative value in image res
125+
elif image_res[0] < 0 or image_res[1] < 0:
126+
assert image_res[0] > 0 or image_res[1] > 0, "Both dimensions cannot be negative."
127+
# rescale according to non-negative value
128+
if image_res[0] < 0:
129+
new_height = image_res[1]
130+
ratio = new_height / float(image_width)
131+
image_res[0] = int(ratio * image_width)
132+
133+
elif image_res[1] < 0:
134+
new_width = image_res[0]
135+
ratio = new_width / float(image_height)
136+
image_res[1] = int(ratio * image_height)
137+
123138
# set image within screen
124139
img_og = cv2.resize(img_og, image_res, interpolation=interpolation)
125140
img[: image_res[1], : image_res[0]] = img_og

0 commit comments

Comments
 (0)