Navyabhat commited on
Commit
33d956e
·
1 Parent(s): 72e4b7c

Upload 6 files

Browse files
Files changed (6) hide show
  1. .gitignore +4 -0
  2. app.py +288 -0
  3. config.toml +13 -0
  4. model.ckpt +3 -0
  5. requirements.txt +228 -0
  6. session12.ipynb +0 -0
.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ lightning_logs
2
+ data
3
+ .ipynb_checkpoints
4
+ __pycache__/
app.py ADDED
@@ -0,0 +1,288 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import random
3
+ import numpy as np
4
+ from PIL import Image
5
+ import torch
6
+ import torchvision
7
+
8
+ from pytorch_grad_cam import GradCAM
9
+ from pytorch_grad_cam.utils.image import show_cam_on_image
10
+
11
+ from models.resnet_lightning import ResNet
12
+ from utils.data import CIFARDataModule
13
+ from utils.transforms import test_transform
14
+ from utils.common import get_misclassified_data
15
+
16
+ inv_normalize = torchvision.transforms.Normalize(
17
+ mean=[-0.50 / 0.23, -0.50 / 0.23, -0.50 / 0.23], std=[1 / 0.23, 1 / 0.23, 1 / 0.23]
18
+ )
19
+
20
+ datamodule = CIFARDataModule()
21
+ datamodule.setup()
22
+ classes = datamodule.train_dataset.classes
23
+
24
+ model = ResNet.load_from_checkpoint("model.ckpt")
25
+ model = model.to("cpu")
26
+
27
+ prediction_image = None
28
+
29
+
30
+ def upload_file(files):
31
+ file_paths = [file.name for file in files]
32
+ return file_paths
33
+
34
+
35
+ def read_image(path):
36
+ img = Image.open(path)
37
+ img.load()
38
+ data = np.asarray(img, dtype="uint8")
39
+ return data
40
+
41
+
42
+ def sample_images():
43
+ images = []
44
+ length = len(datamodule.test_dataset)
45
+ classes = datamodule.train_dataset.classes
46
+ for i in range(10):
47
+ idx = random.randint(0, length - 1)
48
+ image, label = datamodule.test_dataset[idx]
49
+ image = inv_normalize(image).permute(1, 2, 0).numpy()
50
+ images.append((image, classes[label]))
51
+ return images
52
+
53
+
54
+ def get_misclassified_images(misclassified_count):
55
+ misclassified_images = []
56
+ misclassified_data = get_misclassified_data(
57
+ model=model,
58
+ device="cpu",
59
+ test_loader=datamodule.test_dataloader(),
60
+ count=misclassified_count,
61
+ )
62
+ for i in range(misclassified_count):
63
+ img = misclassified_data[i][0].squeeze().to("cpu")
64
+ img = inv_normalize(img)
65
+ img = np.transpose(img.numpy(), (1, 2, 0))
66
+ label = f"Label: {classes[misclassified_data[i][1].item()]} | Prediction: {classes[misclassified_data[i][2].item()]}"
67
+ misclassified_images.append((img, label))
68
+ return misclassified_images
69
+
70
+
71
+ def get_gradcam_images(gradcam_layer, gradcam_count, gradcam_opacity):
72
+ gradcam_images = []
73
+ if gradcam_layer == "Layer1":
74
+ target_layers = [model.layer1[-1]]
75
+ elif gradcam_layer == "Layer2":
76
+ target_layers = [model.layer2[-1]]
77
+ else:
78
+ target_layers = [model.layer3[-1]]
79
+
80
+ cam = GradCAM(model=model, target_layers=target_layers, use_cuda=False)
81
+ data = get_misclassified_data(
82
+ model=model,
83
+ device="cpu",
84
+ test_loader=datamodule.test_dataloader(),
85
+ count=gradcam_count,
86
+ )
87
+ for i in range(gradcam_count):
88
+ input_tensor = data[i][0]
89
+
90
+ # Get the activations of the layer for the images
91
+ grayscale_cam = cam(input_tensor=input_tensor, targets=None)
92
+ grayscale_cam = grayscale_cam[0, :]
93
+
94
+ # Get back the original image
95
+ img = input_tensor.squeeze(0).to("cpu")
96
+ if inv_normalize is not None:
97
+ img = inv_normalize(img)
98
+ rgb_img = np.transpose(img, (1, 2, 0))
99
+ rgb_img = rgb_img.numpy()
100
+
101
+ # Mix the activations on the original image
102
+ visualization = show_cam_on_image(
103
+ rgb_img, grayscale_cam, use_rgb=True, image_weight=gradcam_opacity
104
+ )
105
+ label = f"Label: {classes[data[i][1].item()]} | Prediction: {classes[data[i][2].item()]}"
106
+ gradcam_images.append((visualization, label))
107
+ return gradcam_images
108
+
109
+
110
+ def show_hide_misclassified(status):
111
+ if not status:
112
+ return {misclassified_count: gr.update(visible=False)}
113
+ return {misclassified_count: gr.update(visible=True)}
114
+
115
+
116
+ def show_hide_gradcam(status):
117
+ if not status:
118
+ return [gr.update(visible=False) for i in range(3)]
119
+ return [gr.update(visible=True) for i in range(3)]
120
+
121
+
122
+ def set_prediction_image(evt: gr.SelectData, gallery):
123
+ global prediction_image
124
+ if isinstance(gallery[evt.index], dict):
125
+ prediction_image = gallery[evt.index]["name"]
126
+ else:
127
+ prediction_image = gallery[evt.index][0]["name"]
128
+
129
+
130
+ def predict(
131
+ is_misclassified,
132
+ misclassified_count,
133
+ is_gradcam,
134
+ gradcam_count,
135
+ gradcam_layer,
136
+ gradcam_opacity,
137
+ num_classes,
138
+ ):
139
+ misclassified_images = None
140
+ if is_misclassified:
141
+ misclassified_images = get_misclassified_images(int(misclassified_count))
142
+
143
+ gradcam_images = None
144
+ if is_gradcam:
145
+ gradcam_images = get_gradcam_images(
146
+ gradcam_layer, int(gradcam_count), gradcam_opacity
147
+ )
148
+
149
+ img = read_image(prediction_image)
150
+ image_transformed = test_transform(image=img)["image"]
151
+ output = model(image_transformed.unsqueeze(0))
152
+ preds = torch.softmax(output, dim=1).squeeze().detach().numpy()
153
+ indices = (
154
+ output.argsort(descending=True).squeeze().detach().numpy()[: int(num_classes)]
155
+ )
156
+ predictions = {classes[i]: round(float(preds[i]), 2) for i in indices}
157
+
158
+ return {
159
+ miscalssfied_output: gr.update(value=misclassified_images),
160
+ gradcam_output: gr.update(value=gradcam_images),
161
+ prediction_label: gr.update(value=predictions),
162
+ }
163
+
164
+
165
+ with gr.Blocks() as app:
166
+ gr.Markdown("## ERA Session12 - CIFAR10 Classification with ResNet")
167
+ with gr.Row():
168
+ with gr.Column():
169
+ with gr.Box():
170
+ is_misclassified = gr.Checkbox(
171
+ label="Misclassified Images", info="Display misclassified images?"
172
+ )
173
+ misclassified_count = gr.Dropdown(
174
+ choices=["10", "20"],
175
+ label="Select Number of Images",
176
+ info="Number of Misclassified images",
177
+ visible=False,
178
+ interactive=True,
179
+ )
180
+ is_misclassified.input(
181
+ show_hide_misclassified,
182
+ inputs=[is_misclassified],
183
+ outputs=[misclassified_count],
184
+ )
185
+ with gr.Box():
186
+ is_gradcam = gr.Checkbox(
187
+ label="GradCAM Images",
188
+ info="Display GradCAM images?",
189
+ )
190
+ gradcam_count = gr.Dropdown(
191
+ choices=["10", "20"],
192
+ label="Select Number of Images",
193
+ info="Number of GradCAM images",
194
+ interactive=True,
195
+ visible=False,
196
+ )
197
+ gradcam_layer = gr.Dropdown(
198
+ choices=["Layer1", "Layer2", "Layer3"],
199
+ label="Select the layer",
200
+ info="Please select the layer for which the GradCAM is required",
201
+ interactive=True,
202
+ visible=False,
203
+ )
204
+ gradcam_opacity = gr.Slider(
205
+ minimum=0,
206
+ maximum=1,
207
+ value=0.6,
208
+ label="Opacity",
209
+ info="Opacity of GradCAM output",
210
+ interactive=True,
211
+ visible=False,
212
+ )
213
+
214
+ is_gradcam.input(
215
+ show_hide_gradcam,
216
+ inputs=[is_gradcam],
217
+ outputs=[gradcam_count, gradcam_layer, gradcam_opacity],
218
+ )
219
+ with gr.Box():
220
+ # file_output = gr.File(file_types=["image"])
221
+ with gr.Group():
222
+ upload_gallery = gr.Gallery(
223
+ value=None,
224
+ label="Uploaded images",
225
+ show_label=False,
226
+ elem_id="gallery_upload",
227
+ columns=5,
228
+ rows=2,
229
+ height="auto",
230
+ object_fit="contain",
231
+ )
232
+ upload_button = gr.UploadButton(
233
+ "Click to Upload images",
234
+ file_types=["image"],
235
+ file_count="multiple",
236
+ )
237
+ upload_button.upload(upload_file, upload_button, upload_gallery)
238
+
239
+ with gr.Group():
240
+ sample_gallery = gr.Gallery(
241
+ value=sample_images,
242
+ label="Sample images",
243
+ show_label=True,
244
+ elem_id="gallery_sample",
245
+ columns=5,
246
+ rows=2,
247
+ height="auto",
248
+ object_fit="contain",
249
+ )
250
+
251
+ upload_gallery.select(set_prediction_image, inputs=[upload_gallery])
252
+ sample_gallery.select(set_prediction_image, inputs=[sample_gallery])
253
+
254
+ with gr.Box():
255
+ num_classes = gr.Dropdown(
256
+ choices=[str(i + 1) for i in range(10)],
257
+ label="Select Number of Top Classes",
258
+ info="Number of Top target classes to be shown",
259
+ )
260
+ run_btn = gr.Button()
261
+ with gr.Column():
262
+ with gr.Box():
263
+ miscalssfied_output = gr.Gallery(
264
+ value=None, label="Misclassified Images", show_label=True
265
+ )
266
+ with gr.Box():
267
+ gradcam_output = gr.Gallery(
268
+ value=None, label="GradCAM Images", show_label=True
269
+ )
270
+ with gr.Box():
271
+ prediction_label = gr.Label(value=None, label="Predictions")
272
+
273
+ run_btn.click(
274
+ predict,
275
+ inputs=[
276
+ is_misclassified,
277
+ misclassified_count,
278
+ is_gradcam,
279
+ gradcam_count,
280
+ gradcam_layer,
281
+ gradcam_opacity,
282
+ num_classes,
283
+ ],
284
+ outputs=[miscalssfied_output, gradcam_output, prediction_label],
285
+ )
286
+
287
+
288
+ app.launch(server_name="0.0.0.0", server_port=9998)
config.toml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [data]
2
+ batch_size = 512
3
+ shuffle = true
4
+ num_workers = 4
5
+
6
+ [training]
7
+ epochs = 20
8
+ batch_size = 512
9
+ optimizer = "adam"
10
+ criterion = "crossentropy"
11
+ lr = 0.003
12
+ weight_decay = 1e-4
13
+ lrfinder = { numiter = 600, endlr = 10, startlr = 1e-2 }
model.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6f3d4b6359778a6dd0c86e85afb1a522aae822ccfeeea9a6fb82aabb124f518d
3
+ size 78938183
requirements.txt ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ absl-py==1.4.0
2
+ adbc-driver-manager==0.5.1
3
+ adbc-driver-sqlite==0.5.1
4
+ aiofiles==23.1.0
5
+ aiohttp==3.8.5
6
+ aiosignal==1.3.1
7
+ albumentations==1.3.1
8
+ altair==5.0.1
9
+ annotated-types==0.5.0
10
+ anyio==3.7.1
11
+ argon2-cffi==21.3.0
12
+ argon2-cffi-bindings==21.2.0
13
+ arrow==1.2.3
14
+ asttokens @ file:///home/conda/feedstock_root/build_artifacts/asttokens_1670263926556/work
15
+ async-lru==2.0.4
16
+ async-timeout==4.0.2
17
+ attrs==23.1.0
18
+ Babel==2.12.1
19
+ backcall @ file:///home/conda/feedstock_root/build_artifacts/backcall_1592338393461/work
20
+ backoff==2.2.1
21
+ backports.functools-lru-cache @ file:///home/conda/feedstock_root/build_artifacts/backports.functools_lru_cache_1687772187254/work
22
+ beautifulsoup4==4.12.2
23
+ black==23.7.0
24
+ bleach==6.0.0
25
+ blessed==1.20.0
26
+ cachetools==5.3.1
27
+ certifi==2022.12.7
28
+ cffi==1.15.1
29
+ charset-normalizer==2.1.1
30
+ click==8.1.6
31
+ cloudpickle==2.2.1
32
+ cmake==3.25.0
33
+ connectorx==0.3.1
34
+ contourpy==1.1.0
35
+ croniter==1.4.1
36
+ cycler==0.11.0
37
+ dateutils==0.6.12
38
+ debugpy @ file:///home/builder/ci_310/debugpy_1640789504635/work
39
+ decorator @ file:///home/conda/feedstock_root/build_artifacts/decorator_1641555617451/work
40
+ deepdiff==6.3.1
41
+ defusedxml==0.7.1
42
+ deltalake==0.10.0
43
+ entrypoints @ file:///home/conda/feedstock_root/build_artifacts/entrypoints_1643888246732/work
44
+ exceptiongroup==1.1.2
45
+ executing @ file:///home/conda/feedstock_root/build_artifacts/executing_1667317341051/work
46
+ fastapi==0.100.1
47
+ fastjsonschema==2.18.0
48
+ ffmpy==0.3.1
49
+ filelock==3.12.2
50
+ fonttools==4.41.0
51
+ fqdn==1.5.1
52
+ frozenlist==1.4.0
53
+ fsspec==2023.6.0
54
+ google-auth==2.22.0
55
+ google-auth-oauthlib==1.0.0
56
+ grad-cam==1.4.8
57
+ gradio==3.39.0
58
+ gradio_client==0.3.0
59
+ greenlet==2.0.2
60
+ grpcio==1.56.2
61
+ h11==0.14.0
62
+ httpcore==0.17.3
63
+ httpx==0.24.1
64
+ huggingface-hub==0.16.4
65
+ idna==3.4
66
+ imageio==2.31.1
67
+ inquirer==3.1.3
68
+ ipykernel @ file:///home/conda/feedstock_root/build_artifacts/ipykernel_1655369107642/work
69
+ ipython @ file:///home/conda/feedstock_root/build_artifacts/ipython_1685727741709/work
70
+ ipywidgets==8.0.7
71
+ isoduration==20.11.0
72
+ itsdangerous==2.1.2
73
+ jedi @ file:///home/conda/feedstock_root/build_artifacts/jedi_1669134318875/work
74
+ Jinja2==3.1.2
75
+ joblib==1.3.1
76
+ json5==0.9.14
77
+ jsonpointer==2.4
78
+ jsonschema==4.18.6
79
+ jsonschema-specifications==2023.7.1
80
+ jupyter-events==0.7.0
81
+ jupyter-lsp==2.2.0
82
+ jupyter_client==8.3.0
83
+ jupyter_core @ file:///home/conda/feedstock_root/build_artifacts/jupyter_core_1686775611663/work
84
+ jupyter_server==2.7.0
85
+ jupyter_server_terminals==0.4.4
86
+ jupyterlab==4.0.4
87
+ jupyterlab-pygments==0.2.2
88
+ jupyterlab-widgets==3.0.8
89
+ jupyterlab_server==2.24.0
90
+ kiwisolver==1.4.4
91
+ lazy_loader==0.3
92
+ lightning==2.0.6
93
+ lightning-cloud==0.5.37
94
+ lightning-utilities==0.9.0
95
+ linkify-it-py==2.0.2
96
+ lit==15.0.7
97
+ Markdown==3.4.3
98
+ markdown-it-py==2.2.0
99
+ MarkupSafe==2.1.2
100
+ matplotlib==3.7.2
101
+ matplotlib-inline @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-inline_1660814786464/work
102
+ mdit-py-plugins==0.3.3
103
+ mdurl==0.1.2
104
+ mistune==3.0.1
105
+ mpmath==1.2.1
106
+ multidict==6.0.4
107
+ mypy-extensions==1.0.0
108
+ nbclient==0.8.0
109
+ nbconvert==7.7.3
110
+ nbformat==5.9.2
111
+ nest-asyncio @ file:///home/conda/feedstock_root/build_artifacts/nest-asyncio_1664684991461/work
112
+ netron==7.0.6
113
+ networkx==3.0
114
+ notebook_shim==0.2.3
115
+ numpy==1.24.1
116
+ nvidia-cublas-cu11==11.10.3.66
117
+ nvidia-cuda-cupti-cu11==11.7.101
118
+ nvidia-cuda-nvrtc-cu11==11.7.99
119
+ nvidia-cuda-runtime-cu11==11.7.99
120
+ nvidia-cudnn-cu11==8.5.0.96
121
+ nvidia-cufft-cu11==10.9.0.58
122
+ nvidia-curand-cu11==10.2.10.91
123
+ nvidia-cusolver-cu11==11.4.0.1
124
+ nvidia-cusparse-cu11==11.7.4.91
125
+ nvidia-nccl-cu11==2.14.3
126
+ nvidia-nvtx-cu11==11.7.91
127
+ oauthlib==3.2.2
128
+ opencv-python==4.8.0.74
129
+ opencv-python-headless==4.8.0.74
130
+ ordered-set==4.1.0
131
+ orjson==3.9.3
132
+ overrides==7.3.1
133
+ packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1681337016113/work
134
+ pandas==2.0.3
135
+ pandocfilters==1.5.0
136
+ parso @ file:///home/conda/feedstock_root/build_artifacts/parso_1638334955874/work
137
+ pathspec==0.11.2
138
+ pexpect @ file:///home/conda/feedstock_root/build_artifacts/pexpect_1667297516076/work
139
+ pickleshare @ file:///home/conda/feedstock_root/build_artifacts/pickleshare_1602536217715/work
140
+ Pillow==10.0.0
141
+ platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1689538620473/work
142
+ polars==0.18.8
143
+ prometheus-client==0.17.1
144
+ prompt-toolkit @ file:///home/conda/feedstock_root/build_artifacts/prompt-toolkit_1688565951714/work
145
+ protobuf==4.23.4
146
+ psutil @ file:///opt/conda/conda-bld/psutil_1656431268089/work
147
+ ptyprocess @ file:///home/conda/feedstock_root/build_artifacts/ptyprocess_1609419310487/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl
148
+ pure-eval @ file:///home/conda/feedstock_root/build_artifacts/pure_eval_1642875951954/work
149
+ pyarrow==12.0.1
150
+ pyasn1==0.5.0
151
+ pyasn1-modules==0.3.0
152
+ pycparser==2.21
153
+ pydantic==2.0.3
154
+ pydantic_core==2.3.0
155
+ pydub==0.25.1
156
+ Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1681904169130/work
157
+ PyJWT==2.8.0
158
+ pyparsing==3.0.9
159
+ python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1626286286081/work
160
+ python-editor==1.0.4
161
+ python-json-logger==2.0.7
162
+ python-multipart==0.0.6
163
+ pytorch-lightning==2.0.6
164
+ pytz==2023.3
165
+ PyWavelets==1.4.1
166
+ PyYAML==6.0.1
167
+ pyzmq @ file:///croot/pyzmq_1686601365461/work
168
+ qudida==0.0.4
169
+ readchar==4.0.5
170
+ referencing==0.30.2
171
+ requests==2.28.1
172
+ requests-oauthlib==1.3.1
173
+ rfc3339-validator==0.1.4
174
+ rfc3986-validator==0.1.1
175
+ rich==13.5.0
176
+ rpds-py==0.9.2
177
+ rsa==4.9
178
+ ruff==0.0.280
179
+ scikit-image==0.21.0
180
+ scikit-learn==1.3.0
181
+ scipy==1.11.1
182
+ semantic-version==2.10.0
183
+ Send2Trash==1.8.2
184
+ six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
185
+ sniffio==1.3.0
186
+ soupsieve==2.4.1
187
+ SQLAlchemy==2.0.19
188
+ stack-data @ file:///home/conda/feedstock_root/build_artifacts/stack_data_1669632077133/work
189
+ starlette==0.27.0
190
+ starsessions==1.3.0
191
+ sympy==1.11.1
192
+ tensorboard==2.13.0
193
+ tensorboard-data-server==0.7.1
194
+ terminado==0.17.1
195
+ threadpoolctl==3.2.0
196
+ tifffile==2023.7.18
197
+ tinycss2==1.2.1
198
+ toml==0.10.2
199
+ tomli==2.0.1
200
+ toolz==0.12.0
201
+ torch==2.0.1+cu118
202
+ torch-lr-finder==0.2.1
203
+ torch-tb-profiler==0.4.1
204
+ torchaudio==2.0.2+cu118
205
+ torchinfo==1.8.0
206
+ torchmetrics==1.0.1
207
+ torchvision==0.15.2+cu118
208
+ tornado==6.3.2
209
+ tqdm==4.65.0
210
+ traitlets @ file:///home/conda/feedstock_root/build_artifacts/traitlets_1675110562325/work
211
+ triton==2.0.0
212
+ ttach==0.0.3
213
+ typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1688315532570/work
214
+ tzdata==2023.3
215
+ uc-micro-py==1.0.2
216
+ uri-template==1.3.0
217
+ urllib3==1.26.13
218
+ uvicorn==0.23.1
219
+ wcwidth @ file:///home/conda/feedstock_root/build_artifacts/wcwidth_1673864653149/work
220
+ webcolors==1.13
221
+ webencodings==0.5.1
222
+ websocket-client==1.6.1
223
+ websockets==11.0.3
224
+ Werkzeug==2.3.6
225
+ widgetsnbextension==4.0.8
226
+ xlsx2csv==0.8.1
227
+ XlsxWriter==3.1.2
228
+ yarl==1.9.2
session12.ipynb ADDED
The diff for this file is too large to render. See raw diff