crimeacs commited on
Commit
e16c9d0
·
1 Parent(s): baf6507

Updated Layout

Browse files
Files changed (4) hide show
  1. Gradio_app.ipynb +22 -330
  2. app.py +16 -16
  3. quantized_model.pt +3 -0
  4. traced_model.pt +3 -0
Gradio_app.ipynb CHANGED
@@ -2,14 +2,14 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 49,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stdout",
10
  "output_type": "stream",
11
  "text": [
12
- "Running on local URL: http://127.0.0.1:7873\n",
13
  "\n",
14
  "To create a public link, set `share=True` in `launch()`.\n"
15
  ]
@@ -17,7 +17,7 @@
17
  {
18
  "data": {
19
  "text/html": [
20
- "<div><iframe src=\"http://127.0.0.1:7873/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
21
  ],
22
  "text/plain": [
23
  "<IPython.core.display.HTML object>"
@@ -30,196 +30,9 @@
30
  "data": {
31
  "text/plain": []
32
  },
33
- "execution_count": 49,
34
  "metadata": {},
35
  "output_type": "execute_result"
36
- },
37
- {
38
- "name": "stdout",
39
- "output_type": "stream",
40
- "text": [
41
- "Starting to download inventory\n",
42
- "Finished downloading inventory\n",
43
- "Processing CI.CCC...\n",
44
- "Downloading waveform for CI_CCC_2019-07-04T17:33:40.494920Z\n",
45
- "Skipping CI_CCC_2019-07-04T17:33:40.494920Z\n",
46
- "Processing CI.CLC...\n",
47
- "Processing CI.JRC2...\n",
48
- "Reading cached waveform\n",
49
- "Added CI.JRC2 to the list of waveforms\n",
50
- "Processing CI.LRL...\n",
51
- "Reading cached waveform\n",
52
- "Added CI.LRL to the list of waveforms\n",
53
- "Processing CI.MPM...\n",
54
- "Reading cached waveform\n",
55
- "Processing CI.Q0072...\n",
56
- "Reading cached waveform\n",
57
- "Processing CI.SLA...\n",
58
- "Reading cached waveform\n",
59
- "Added CI.SLA to the list of waveforms\n",
60
- "Processing CI.SRT...\n",
61
- "Reading cached waveform\n",
62
- "Added CI.SRT to the list of waveforms\n",
63
- "Processing CI.TOW2...\n",
64
- "Reading cached waveform\n",
65
- "Added CI.TOW2 to the list of waveforms\n",
66
- "Processing CI.WBM...\n",
67
- "Downloading waveform for CI_WBM_2019-07-04T17:33:40.063616Z\n",
68
- "Skipping CI_WBM_2019-07-04T17:33:40.063616Z\n",
69
- "Processing CI.WCS2...\n",
70
- "Downloading waveform for CI_WCS2_2019-07-04T17:33:40.200958Z\n",
71
- "Skipping CI_WCS2_2019-07-04T17:33:40.200958Z\n",
72
- "Processing CI.WMF...\n",
73
- "Reading cached waveform\n",
74
- "Added CI.WMF to the list of waveforms\n",
75
- "Processing CI.WNM...\n",
76
- "Reading cached waveform\n",
77
- "Processing CI.WRC2...\n",
78
- "Downloading waveform for CI_WRC2_2019-07-04T17:33:38.698099Z\n",
79
- "Skipping CI_WRC2_2019-07-04T17:33:38.698099Z\n",
80
- "Processing CI.WRV2...\n",
81
- "Reading cached waveform\n",
82
- "Processing CI.WVP2...\n",
83
- "Downloading waveform for CI_WVP2_2019-07-04T17:33:39.650402Z\n",
84
- "Skipping CI_WVP2_2019-07-04T17:33:39.650402Z\n",
85
- "Processing NP.1809...\n",
86
- "Reading cached waveform\n",
87
- "Processing NP.5419...\n",
88
- "Reading cached waveform\n",
89
- "Processing PB.B916...\n",
90
- "Reading cached waveform\n",
91
- "Processing PB.B917...\n",
92
- "Reading cached waveform\n",
93
- "Processing PB.B918...\n",
94
- "Reading cached waveform\n",
95
- "Processing PB.B921...\n",
96
- "Reading cached waveform\n",
97
- "Starting to run predictions\n"
98
- ]
99
- },
100
- {
101
- "name": "stderr",
102
- "output_type": "stream",
103
- "text": [
104
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:299: FutureWarning: The input object of type 'Tensor' is an array-like implementing one of the corresponding protocols (`__array__`, `__array_interface__` or `__array_struct__`); but not a sequence (or 0-D). In the future, this object will be coerced as if it was first converted using `np.array(obj)`. To retain the old behaviour, you have to either modify the type 'Tensor', or assign to an empty array created with `np.empty(correct_shape, dtype=object)`.\n",
105
- " waveforms = np.array(waveforms)[selection_indexes]\n",
106
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:299: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
107
- " waveforms = np.array(waveforms)[selection_indexes]\n",
108
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:306: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
109
- " waveforms = [torch.tensor(waveform) for waveform in waveforms]\n"
110
- ]
111
- },
112
- {
113
- "name": "stdout",
114
- "output_type": "stream",
115
- "text": [
116
- "Starting plotting 3 waveforms\n",
117
- "Fetching topography\n",
118
- "Plotting topo\n"
119
- ]
120
- },
121
- {
122
- "name": "stderr",
123
- "output_type": "stream",
124
- "text": [
125
- "/Users/anovosel/miniconda3/envs/phasehunter/lib/python3.11/site-packages/bmi_topography/api_key.py:49: UserWarning: You are using a demo key to fetch data from OpenTopography, functionality will be limited. See https://bmi-topography.readthedocs.io/en/latest/#api-key for more information.\n",
126
- " warnings.warn(\n"
127
- ]
128
- },
129
- {
130
- "name": "stdout",
131
- "output_type": "stream",
132
- "text": [
133
- "Plotting waveform 1/3\n",
134
- "Station 35.98249, -117.80885 has P velocity 4.13660431013202 and S velocity 2.2622770044299756\n",
135
- "Plotting waveform 2/3\n"
136
- ]
137
- },
138
- {
139
- "name": "stderr",
140
- "output_type": "stream",
141
- "text": [
142
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:391: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
143
- " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n",
144
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:391: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
145
- " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n"
146
- ]
147
- },
148
- {
149
- "name": "stdout",
150
- "output_type": "stream",
151
- "text": [
152
- "Station 36.11758, -117.85486 has P velocity 4.743224278343435 and S velocity 2.6493777937777434\n",
153
- "Plotting waveform 3/3\n",
154
- "Station 35.69235, -117.75051 has P velocity 3.4168555245020182 and S velocity 1.6801806885131727\n",
155
- "Plotting stations\n"
156
- ]
157
- },
158
- {
159
- "name": "stderr",
160
- "output_type": "stream",
161
- "text": [
162
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:391: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
163
- " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n",
164
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:411: UserWarning: FixedFormatter should only be used together with FixedLocator\n",
165
- " ax[i].set_xticklabels(ax[i].get_xticks(), rotation = 50)\n"
166
- ]
167
- },
168
- {
169
- "name": "stdout",
170
- "output_type": "stream",
171
- "text": [
172
- " station_name st_lat st_lon starttime p_phase, s \\\n",
173
- "0 CI.JRC2 35.98249 -117.80885 2019-07-04T17:33:39.947494Z 7.320212 \n",
174
- "1 CI.WMF 36.11758 -117.85486 2019-07-04T17:33:41.867962Z 9.509396 \n",
175
- "2 CI.SRT 35.69235 -117.75051 2019-07-04T17:33:38.029990Z 4.530285 \n",
176
- "\n",
177
- " p_uncertainty, s s_phase, s s_uncertainty, s velocity_p, km/s \\\n",
178
- "0 0.020417 13.385108 0.028439 4.136604 \n",
179
- "1 0.017238 17.024826 0.043195 4.743224 \n",
180
- "2 0.013012 9.212895 0.018260 3.416856 \n",
181
- "\n",
182
- " velocity_s, km/s \n",
183
- "0 2.262277 \n",
184
- "1 2.649378 \n",
185
- "2 1.680181 \n"
186
- ]
187
- },
188
- {
189
- "name": "stderr",
190
- "output_type": "stream",
191
- "text": [
192
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:529: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n",
193
- " plt.colorbar(m)\n"
194
- ]
195
- },
196
- {
197
- "name": "stdout",
198
- "output_type": "stream",
199
- "text": [
200
- " station_name st_lat st_lon starttime p_phase, s \\\n",
201
- "0 CI.JRC2 35.98249 -117.80885 2019-07-04T17:33:39.947494Z 7.320212 \n",
202
- "1 CI.WMF 36.11758 -117.85486 2019-07-04T17:33:41.867962Z 9.509396 \n",
203
- "2 CI.SRT 35.69235 -117.75051 2019-07-04T17:33:38.029990Z 4.530285 \n",
204
- "\n",
205
- " p_uncertainty, s s_phase, s s_uncertainty, s velocity_p, km/s \\\n",
206
- "0 0.020417 13.385108 0.028439 4.136604 \n",
207
- "1 0.017238 17.024826 0.043195 4.743224 \n",
208
- "2 0.013012 9.212895 0.018260 3.416856 \n",
209
- "\n",
210
- " velocity_s, km/s \n",
211
- "0 2.262277 \n",
212
- "1 2.649378 \n",
213
- "2 1.680181 \n"
214
- ]
215
- },
216
- {
217
- "name": "stderr",
218
- "output_type": "stream",
219
- "text": [
220
- "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_3502/3370384716.py:529: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n",
221
- " plt.colorbar(m)\n"
222
- ]
223
  }
224
  ],
225
  "source": [
@@ -760,7 +573,10 @@
760
  "\n",
761
  " return image\n",
762
  "\n",
763
- "model = torch.jit.load(\"model.pt\")\n",
 
 
 
764
  "\n",
765
  "with gr.Blocks() as demo:\n",
766
  " gr.HTML(\"\"\"\n",
@@ -823,17 +639,18 @@
823
  " )\n",
824
  " with gr.Column(scale=1):\n",
825
  " upload = gr.File(label=\"Or upload your own waveform\")\n",
826
- " sampling_rate_inputs = gr.Slider(minimum=10,\n",
827
- " maximum=1000,\n",
828
- " value=100,\n",
829
- " label=\"Samlping rate, Hz\",\n",
830
- " step=10,\n",
831
- " info=\"Sampling rate of the waveform\",\n",
832
- " interactive=True,\n",
833
- " )\n",
834
- " order_input = gr.Text(value='ZNE', \n",
835
- " label='Channel order', \n",
836
- " info='Order of the channels in the waveform file (e.g. ZNE)')\n",
 
837
  "\n",
838
  " button = gr.Button(\"Predict phases\")\n",
839
  " outputs = gr.Image(label='Waveform with Phases Marked', type='numpy', interactive=False)\n",
@@ -963,140 +780,15 @@
963
  " inputs=inputs_vel_model, \n",
964
  " outputs=outputs_vel_model)\n",
965
  "\n",
966
- "\n",
967
- " \n",
968
- "\n",
969
- "\n",
970
  "demo.launch()"
971
  ]
972
  },
973
  {
974
  "cell_type": "code",
975
- "execution_count": 34,
976
- "metadata": {},
977
- "outputs": [
978
- {
979
- "data": {
980
- "text/plain": [
981
- "array([[53, 52, 28, ..., 0, 0, 0]], dtype=int32)"
982
- ]
983
- },
984
- "execution_count": 34,
985
- "metadata": {},
986
- "output_type": "execute_result"
987
- },
988
- {
989
- "name": "stdout",
990
- "output_type": "stream",
991
- "text": [
992
- "Loaded (1, 25412)\n",
993
- "Reshaped (1, 25412)\n"
994
- ]
995
- },
996
- {
997
- "name": "stderr",
998
- "output_type": "stream",
999
- "text": [
1000
- "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
1001
- ]
1002
- },
1003
- {
1004
- "name": "stdout",
1005
- "output_type": "stream",
1006
- "text": [
1007
- "Loaded (1, 25412)\n",
1008
- "Reshaped (1, 25412)\n"
1009
- ]
1010
- }
1011
- ],
1012
- "source": [
1013
- "np.load('test_no_p.npy')"
1014
- ]
1015
- },
1016
- {
1017
- "cell_type": "code",
1018
- "execution_count": 48,
1019
- "metadata": {},
1020
- "outputs": [
1021
- {
1022
- "data": {
1023
- "text/plain": [
1024
- "2023-04-10T00:16:56.000000Z"
1025
- ]
1026
- },
1027
- "execution_count": 48,
1028
- "metadata": {},
1029
- "output_type": "execute_result"
1030
- }
1031
- ],
1032
- "source": [
1033
- "obspy.UTCDateTime('2023-04-09T17:16:56-07')"
1034
- ]
1035
- },
1036
- {
1037
- "cell_type": "code",
1038
- "execution_count": 6,
1039
  "metadata": {},
1040
  "outputs": [],
1041
- "source": [
1042
- "np.save(\"test.npy\", np.random.randint(0,10, size=(6000)))"
1043
- ]
1044
- },
1045
- {
1046
- "cell_type": "code",
1047
- "execution_count": 37,
1048
- "metadata": {},
1049
- "outputs": [
1050
- {
1051
- "name": "stdout",
1052
- "output_type": "stream",
1053
- "text": [
1054
- "1 0 2\n"
1055
- ]
1056
- }
1057
- ],
1058
- "source": [
1059
- "import numpy as np\n",
1060
- "\n",
1061
- "\n",
1062
- "\n",
1063
- "# Example usage:\n",
1064
- "waveform = np.random.rand(3, 100) # A random waveform with 3 channels and 100 samples\n",
1065
- "channels = 'NZE'\n",
1066
- "\n",
1067
- "sorted_waveform = sort_channels_to_ZNE(waveform, channels)"
1068
- ]
1069
- },
1070
- {
1071
- "cell_type": "code",
1072
- "execution_count": 20,
1073
- "metadata": {},
1074
- "outputs": [
1075
- {
1076
- "name": "stderr",
1077
- "output_type": "stream",
1078
- "text": [
1079
- "\n",
1080
- "KeyboardInterrupt\n",
1081
- "\n"
1082
- ]
1083
- },
1084
- {
1085
- "data": {
1086
- "image/png": "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",
1087
- "text/plain": [
1088
- "<Figure size 640x480 with 1 Axes>"
1089
- ]
1090
- },
1091
- "metadata": {},
1092
- "output_type": "display_data"
1093
- }
1094
- ],
1095
- "source": [
1096
- "filename.split(\"/\")[-1]\n",
1097
- " eq_lat = float(filename.split(\"_\")[0])\n",
1098
- " eq_lon = float(filename.split(\"_\")[1])"
1099
- ]
1100
  }
1101
  ],
1102
  "metadata": {
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 1,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stdout",
10
  "output_type": "stream",
11
  "text": [
12
+ "Running on local URL: http://127.0.0.1:7860\n",
13
  "\n",
14
  "To create a public link, set `share=True` in `launch()`.\n"
15
  ]
 
17
  {
18
  "data": {
19
  "text/html": [
20
+ "<div><iframe src=\"http://127.0.0.1:7860/\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
21
  ],
22
  "text/plain": [
23
  "<IPython.core.display.HTML object>"
 
30
  "data": {
31
  "text/plain": []
32
  },
33
+ "execution_count": 1,
34
  "metadata": {},
35
  "output_type": "execute_result"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
  ],
38
  "source": [
 
573
  "\n",
574
  " return image\n",
575
  "\n",
576
+ "# model = torch.jit.load(\"model.pt\")\n",
577
+ "model = torch.jit.load(\"quantized_model.pt\")\n",
578
+ "\n",
579
+ "model.eval()\n",
580
  "\n",
581
  "with gr.Blocks() as demo:\n",
582
  " gr.HTML(\"\"\"\n",
 
639
  " )\n",
640
  " with gr.Column(scale=1):\n",
641
  " upload = gr.File(label=\"Or upload your own waveform\")\n",
642
+ " with gr.Row():\n",
643
+ " sampling_rate_inputs = gr.Slider(minimum=10,\n",
644
+ " maximum=1000,\n",
645
+ " value=100,\n",
646
+ " label=\"Samlping rate, Hz\",\n",
647
+ " step=10,\n",
648
+ " info=\"Sampling rate of the waveform\",\n",
649
+ " interactive=True,\n",
650
+ " )\n",
651
+ " order_input = gr.Text(value='ZNE', \n",
652
+ " label='Channel order', \n",
653
+ " info='Order of the channels in the waveform file (e.g. ZNE)')\n",
654
  "\n",
655
  " button = gr.Button(\"Predict phases\")\n",
656
  " outputs = gr.Image(label='Waveform with Phases Marked', type='numpy', interactive=False)\n",
 
780
  " inputs=inputs_vel_model, \n",
781
  " outputs=outputs_vel_model)\n",
782
  "\n",
 
 
 
 
783
  "demo.launch()"
784
  ]
785
  },
786
  {
787
  "cell_type": "code",
788
+ "execution_count": null,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
789
  "metadata": {},
790
  "outputs": [],
791
+ "source": []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
792
  }
793
  ],
794
  "metadata": {
app.py CHANGED
@@ -535,7 +535,10 @@ def compute_velocity_model(azimuth, elevation):
535
 
536
  return image
537
 
538
- model = torch.jit.load("model.pt")
 
 
 
539
 
540
  with gr.Blocks() as demo:
541
  gr.HTML("""
@@ -598,17 +601,18 @@ with gr.Blocks() as demo:
598
  )
599
  with gr.Column(scale=1):
600
  upload = gr.File(label="Or upload your own waveform")
601
- sampling_rate_inputs = gr.Slider(minimum=10,
602
- maximum=1000,
603
- value=100,
604
- label="Samlping rate, Hz",
605
- step=10,
606
- info="Sampling rate of the waveform",
607
- interactive=True,
608
- )
609
- order_input = gr.Text(value='ZNE',
610
- label='Channel order',
611
- info='Order of the channels in the waveform file (e.g. ZNE)')
 
612
 
613
  button = gr.Button("Predict phases")
614
  outputs = gr.Image(label='Waveform with Phases Marked', type='numpy', interactive=False)
@@ -738,8 +742,4 @@ with gr.Blocks() as demo:
738
  inputs=inputs_vel_model,
739
  outputs=outputs_vel_model)
740
 
741
-
742
-
743
-
744
-
745
  demo.launch()
 
535
 
536
  return image
537
 
538
+ # model = torch.jit.load("model.pt")
539
+ model = torch.jit.load("quantized_model.pt")
540
+
541
+ model.eval()
542
 
543
  with gr.Blocks() as demo:
544
  gr.HTML("""
 
601
  )
602
  with gr.Column(scale=1):
603
  upload = gr.File(label="Or upload your own waveform")
604
+ with gr.Row():
605
+ sampling_rate_inputs = gr.Slider(minimum=10,
606
+ maximum=1000,
607
+ value=100,
608
+ label="Samlping rate, Hz",
609
+ step=10,
610
+ info="Sampling rate of the waveform",
611
+ interactive=True,
612
+ )
613
+ order_input = gr.Text(value='ZNE',
614
+ label='Channel order',
615
+ info='Order of the channels in the waveform file (e.g. ZNE)')
616
 
617
  button = gr.Button("Predict phases")
618
  outputs = gr.Image(label='Waveform with Phases Marked', type='numpy', interactive=False)
 
742
  inputs=inputs_vel_model,
743
  outputs=outputs_vel_model)
744
 
 
 
 
 
745
  demo.launch()
quantized_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8d40a1160ed3c55d8734acf65f7a84a305207bef49eea14c24f5dd18b77def98
3
+ size 68482653
traced_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:45db366167ca7646cddf7220c51b2f1f8d97a050b8f80c526b23058aca1f23f5
3
+ size 68481478