diff --git a/.gitignore b/.gitignore index c280524..96159d8 100644 --- a/.gitignore +++ b/.gitignore @@ -186,4 +186,6 @@ cython_debug/ /logs/*.log runtime/ -/.venv-*/* \ No newline at end of file +/.venv-*/* + +train_scripts/models/* \ No newline at end of file diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_1200.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_1200.ipynb deleted file mode 100644 index ad16d96..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_1200.ipynb +++ /dev/null @@ -1,284 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "import torchsig.utils as u\n", - "import torchsig.transforms.transforms as T\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4848b066-2e09-4c1c-b8fa-8e3fa84d907a", - "metadata": {}, - "outputs": [], - "source": [ - "s = T.Spectrogram(nperseg=1024)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, specT=None,figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " if specT is None:\n", - " specT = T.Spectrogram(nperseg=1024)\n", - " with open(path_to_data + filename, 'rb') as file:\n", - " tmp = np.frombuffer(file.read(), dtype=np.complex64)\n", - " signal = tmp\n", - " spectr = np.array(specT(signal)['data']['samples'][:,:figsize[0] * dpi])\n", - " mag = np.abs(signal)\n", - " real = signal.real\n", - "\n", - " fig2 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(real, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf2 = io.BytesIO()\n", - " fig2.savefig(buf2, format=\"png\", dpi=dpi)\n", - " buf2.seek(0)\n", - " img_arr2 = np.frombuffer(buf2.getvalue(), dtype=np.uint8)\n", - " buf2.close()\n", - " img2 = cv2.imdecode(img_arr2, 1)\n", - " img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig2)\n", - "\n", - " fig3 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(mag, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf3 = io.BytesIO()\n", - " fig3.savefig(buf3, format=\"png\", dpi=dpi)\n", - " buf3.seek(0)\n", - " img_arr3 = np.frombuffer(buf3.getvalue(), dtype=np.uint8)\n", - " buf3.close()\n", - " img3 = cv2.imdecode(img_arr3, 1)\n", - " img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig3)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(img2, resize)\n", - " resized_mag = cv2.resize(img3, resize)\n", - " resized_spectr = cv2.resize(spectr, resize)\n", - " img = np.asarray([resized_real, resized_mag, resized_spectr], dtype=np.float32)\n", - " return img\n", - " img = np.asarray([img2, img3, spectr], dtype=np.float32)\n", - " return img\n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = '//192.168.11.63/data/DATASETS/Energomash/1200'\n", - "path_to_pictures = '//192.168.11.63/data/DATASETS/Energomash/1200_jpg'" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/963 [00:00" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "import torchsig.utils as u\n", - "import torchsig.transforms.transforms as T\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4848b066-2e09-4c1c-b8fa-8e3fa84d907a", - "metadata": {}, - "outputs": [], - "source": [ - "s = T.Spectrogram(nperseg=256)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, specT=None,figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " if specT is None:\n", - " specT = T.Spectrogram(nperseg=256)\n", - " with open(path_to_data + filename, 'rb') as file:\n", - " tmp = np.frombuffer(file.read(), dtype=np.complex64)\n", - " signal = tmp\n", - " spectr = np.array(specT(signal)['data']['samples'][:,:figsize[0] * dpi])\n", - " mag = np.abs(signal)\n", - " real = signal.real\n", - "\n", - " fig2 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(real, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf2 = io.BytesIO()\n", - " fig2.savefig(buf2, format=\"png\", dpi=dpi)\n", - " buf2.seek(0)\n", - " img_arr2 = np.frombuffer(buf2.getvalue(), dtype=np.uint8)\n", - " buf2.close()\n", - " img2 = cv2.imdecode(img_arr2, 1)\n", - " img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig2)\n", - "\n", - " fig3 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(mag, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf3 = io.BytesIO()\n", - " fig3.savefig(buf3, format=\"png\", dpi=dpi)\n", - " buf3.seek(0)\n", - " img_arr3 = np.frombuffer(buf3.getvalue(), dtype=np.uint8)\n", - " buf3.close()\n", - " img3 = cv2.imdecode(img_arr3, 1)\n", - " img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig3)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(img2, resize)\n", - " resized_mag = cv2.resize(img3, resize)\n", - " resized_spectr = cv2.resize(spectr, resize)\n", - " img = np.asarray([resized_real, resized_mag, resized_spectr], dtype=np.float32)\n", - " return img\n", - " img = np.asarray([img2, img3, spectr], dtype=np.float32)\n", - " return img\n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = '//192.168.11.63/data/DATASETS/Energomash/2400'\n", - "path_to_pictures = '//192.168.11.63/data/DATASETS/Energomash/2400_jpg'" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/965 [00:00" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "import torchsig.utils as u\n", - "import torchsig.transforms.transforms as T\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4848b066-2e09-4c1c-b8fa-8e3fa84d907a", - "metadata": {}, - "outputs": [], - "source": [ - "s = T.Spectrogram(nperseg=256)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, specT=None,figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " if specT is None:\n", - " specT = T.Spectrogram(nperseg=256)\n", - " with open(path_to_data + filename, 'rb') as file:\n", - " tmp = np.frombuffer(file.read(), dtype=np.complex64)\n", - " signal = tmp\n", - " spectr = np.array(specT(signal)['data']['samples'][:,:figsize[0] * dpi])\n", - " mag = np.abs(signal)\n", - " real = signal.real\n", - "\n", - " fig2 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(real, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf2 = io.BytesIO()\n", - " fig2.savefig(buf2, format=\"png\", dpi=dpi)\n", - " buf2.seek(0)\n", - " img_arr2 = np.frombuffer(buf2.getvalue(), dtype=np.uint8)\n", - " buf2.close()\n", - " img2 = cv2.imdecode(img_arr2, 1)\n", - " img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig2)\n", - "\n", - " fig3 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(mag, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf3 = io.BytesIO()\n", - " fig3.savefig(buf3, format=\"png\", dpi=dpi)\n", - " buf3.seek(0)\n", - " img_arr3 = np.frombuffer(buf3.getvalue(), dtype=np.uint8)\n", - " buf3.close()\n", - " img3 = cv2.imdecode(img_arr3, 1)\n", - " img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig3)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(img2, resize)\n", - " resized_mag = cv2.resize(img3, resize)\n", - " resized_spectr = cv2.resize(spectr, resize)\n", - " img = np.asarray([resized_real, resized_mag, resized_spectr], dtype=np.float32)\n", - " return img\n", - " img = np.asarray([img2, img3, spectr], dtype=np.float32)\n", - " return img\n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = '//192.168.11.63/data/DATASETS/Energomash/2400'\n", - "path_to_pictures = '//192.168.11.63/data/DATASETS/Energomash/2400_jpg'" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/965 [00:00" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "import torchsig.utils as u\n", - "import torchsig.transforms.transforms as T\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4848b066-2e09-4c1c-b8fa-8e3fa84d907a", - "metadata": {}, - "outputs": [], - "source": [ - "s = T.Spectrogram(nperseg=256)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, specT=None, figsize=(16,16), dpi=16, resize = None):\n", - " def standartize_signal(signal):\n", - " mean = np.mean(signal)\n", - " std = np.std(signal)\n", - " standardized_signal = (signal - mean) / std\n", - " return standardized_signal\n", - " \n", - " try:\n", - " if specT is None:\n", - " specT = T.Spectrogram(nperseg=256)\n", - " with open(path_to_data + filename, 'rb') as file:\n", - " tmp = np.frombuffer(file.read(), dtype=np.complex64)\n", - " signal = tmp\n", - " print(len(signal))\n", - " spectr = np.array(specT(signal)['data']['samples'][:,:figsize[0] * dpi])\n", - " mag = np.abs(signal)\n", - " mag = standartize_signal(mag)\n", - " real = signal.real\n", - " real = standartize_signal(real)\n", - "\n", - " fig2 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(real, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf2 = io.BytesIO()\n", - " fig2.savefig(buf2, format=\"png\", dpi=dpi)\n", - " buf2.seek(0)\n", - " img_arr2 = np.frombuffer(buf2.getvalue(), dtype=np.uint8)\n", - " buf2.close()\n", - " img2 = cv2.imdecode(img_arr2, 1)\n", - " img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig2)\n", - "\n", - " fig3 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(mag, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf3 = io.BytesIO()\n", - " fig3.savefig(buf3, format=\"png\", dpi=dpi)\n", - " buf3.seek(0)\n", - " img_arr3 = np.frombuffer(buf3.getvalue(), dtype=np.uint8)\n", - " buf3.close()\n", - " img3 = cv2.imdecode(img_arr3, 1)\n", - " img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig3)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(img2, resize)\n", - " resized_mag = cv2.resize(img3, resize)\n", - " resized_spectr = cv2.resize(spectr, resize)\n", - " img = np.asarray([resized_real, resized_mag, resized_spectr], dtype=np.float32)\n", - " return img\n", - " img = np.asarray([img2, img3, spectr], dtype=np.float32)\n", - " return img\n", - " except Exception as e:\n", - " print(str(e))\n", - " return None\n", - "\n", - "def plot_signal_and_magnitude(path_to_data, filename, filename_signal):\n", - " def remove_outliers(signal, threshold):\n", - " filtered_signal = np.where(np.abs(signal) <= threshold, signal, np.nan)\n", - " return np.nan_to_num(filtered_signal)\n", - " \n", - " def standartize_signal(signal):\n", - " mean = np.mean(signal)\n", - " std = np.std(signal)\n", - " standardized_signal = (signal - mean) / std\n", - " return standardized_signal\n", - " \n", - " with open(path_to_data + filename, 'rb') as file:\n", - " signal = np.frombuffer(file.read(), dtype=np.complex64)\n", - " print(max(np.real(signal)))\n", - " print(signal[:100])\n", - " plt.figure(figsize=(12, 6))\n", - " plt.subplot(2, 1, 1)\n", - " plt.plot(remove_outliers(standartize_signal(np.real(signal)),1)[10000:], label='Real Part')\n", - " plt.plot(remove_outliers(standartize_signal(np.imag(signal)),1)[10000:], label='Imaginary Part')\n", - " plt.title('QAM Signal')\n", - " plt.legend()\n", - " plt.subplot(2, 1, 2)\n", - " plt.plot(np.abs(signal), label='Magnitude')\n", - " plt.title('Magnitude of QAM Signal')\n", - " plt.legend()\n", - " plt.tight_layout()\n", - " plt.savefig(filename_signal)\n", - " plt.close()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = '/home/sibscience/Datasets/915_9K'\n", - "path_to_pictures = '/home/sibscience/Datasets/915_9K_jpg'" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "6a5f4c51", - "metadata": {}, - "outputs": [ - { - "ename": "FileNotFoundError", - "evalue": "[Errno 2] No such file or directory: '/home/sibscience/Datasets/915_9K_jpg'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mFileNotFoundError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[7]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m size = (\u001b[32m256\u001b[39m,\u001b[32m256\u001b[39m)\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m os.path.exists(path_to_pictures):\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[43mos\u001b[49m\u001b[43m.\u001b[49m\u001b[43mmkdir\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath_to_pictures\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m subdir \u001b[38;5;129;01min\u001b[39;00m os.listdir(path_to_binaries):\n\u001b[32m 5\u001b[39m filepath = path_to_binaries + \u001b[33m'\u001b[39m\u001b[33m/\u001b[39m\u001b[33m'\u001b[39m + subdir + \u001b[33m'\u001b[39m\u001b[33m/\u001b[39m\u001b[33m'\u001b[39m\n", - "\u001b[31mFileNotFoundError\u001b[39m: [Errno 2] No such file or directory: '/home/sibscience/Datasets/915_9K_jpg'" - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath = path_to_pictures +'/' + subdir + '/' + file + '.npy'\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '.png' \n", - " if not os.path.exists(savepath):\n", - " img = plot_signal_and_magnitude(path_to_data=filepath, filename=file, filename_signal= savepath_real_png)\n", - " gc.collect()\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\r\n", - " 0%| | 0/565 [00:00 15\u001b[0m img \u001b[38;5;241m=\u001b[39m \u001b[43msig2pic_with_spec\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath_to_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfilepath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mspecT\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresize\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 16\u001b[0m gc\u001b[38;5;241m.\u001b[39mcollect()\n\u001b[0;32m 17\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "Cell \u001b[1;32mIn[7], line 29\u001b[0m, in \u001b[0;36msig2pic_with_spec\u001b[1;34m(path_to_data, filename, specT, figsize, dpi, resize)\u001b[0m\n\u001b[0;32m 27\u001b[0m plt\u001b[38;5;241m.\u001b[39mmargins(\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m 28\u001b[0m buf2 \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mBytesIO()\n\u001b[1;32m---> 29\u001b[0m \u001b[43mfig2\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msavefig\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbuf2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpng\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdpi\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdpi\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 30\u001b[0m buf2\u001b[38;5;241m.\u001b[39mseek(\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m 31\u001b[0m img_arr2 \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mfrombuffer(buf2\u001b[38;5;241m.\u001b[39mgetvalue(), dtype\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39muint8)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\figure.py:3390\u001b[0m, in \u001b[0;36mFigure.savefig\u001b[1;34m(self, fname, transparent, **kwargs)\u001b[0m\n\u001b[0;32m 3388\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes:\n\u001b[0;32m 3389\u001b[0m _recursively_make_axes_transparent(stack, ax)\n\u001b[1;32m-> 3390\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprint_figure\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backend_bases.py:2193\u001b[0m, in \u001b[0;36mFigureCanvasBase.print_figure\u001b[1;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[0;32m 2189\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 2190\u001b[0m \u001b[38;5;66;03m# _get_renderer may change the figure dpi (as vector formats\u001b[39;00m\n\u001b[0;32m 2191\u001b[0m \u001b[38;5;66;03m# force the figure dpi to 72), so we need to set it again here.\u001b[39;00m\n\u001b[0;32m 2192\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m cbook\u001b[38;5;241m.\u001b[39m_setattr_cm(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure, dpi\u001b[38;5;241m=\u001b[39mdpi):\n\u001b[1;32m-> 2193\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mprint_method\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2194\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 2195\u001b[0m \u001b[43m \u001b[49m\u001b[43mfacecolor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfacecolor\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 2196\u001b[0m \u001b[43m \u001b[49m\u001b[43medgecolor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43medgecolor\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 2197\u001b[0m \u001b[43m \u001b[49m\u001b[43morientation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43morientation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 2198\u001b[0m \u001b[43m \u001b[49m\u001b[43mbbox_inches_restore\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_bbox_inches_restore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 2199\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2200\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 2201\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m bbox_inches \u001b[38;5;129;01mand\u001b[39;00m restore_bbox:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backend_bases.py:2043\u001b[0m, in \u001b[0;36mFigureCanvasBase._switch_canvas_and_return_print_method..\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 2039\u001b[0m optional_kws \u001b[38;5;241m=\u001b[39m { \u001b[38;5;66;03m# Passed by print_figure for other renderers.\u001b[39;00m\n\u001b[0;32m 2040\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdpi\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfacecolor\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124medgecolor\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124morientation\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 2041\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbbox_inches_restore\u001b[39m\u001b[38;5;124m\"\u001b[39m}\n\u001b[0;32m 2042\u001b[0m skip \u001b[38;5;241m=\u001b[39m optional_kws \u001b[38;5;241m-\u001b[39m {\u001b[38;5;241m*\u001b[39minspect\u001b[38;5;241m.\u001b[39msignature(meth)\u001b[38;5;241m.\u001b[39mparameters}\n\u001b[1;32m-> 2043\u001b[0m print_method \u001b[38;5;241m=\u001b[39m functools\u001b[38;5;241m.\u001b[39mwraps(meth)(\u001b[38;5;28;01mlambda\u001b[39;00m \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 2044\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43mk\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mk\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mnot\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mskip\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 2045\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# Let third-parties do as they see fit.\u001b[39;00m\n\u001b[0;32m 2046\u001b[0m print_method \u001b[38;5;241m=\u001b[39m meth\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:497\u001b[0m, in \u001b[0;36mFigureCanvasAgg.print_png\u001b[1;34m(self, filename_or_obj, metadata, pil_kwargs)\u001b[0m\n\u001b[0;32m 450\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mprint_png\u001b[39m(\u001b[38;5;28mself\u001b[39m, filename_or_obj, \u001b[38;5;241m*\u001b[39m, metadata\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, pil_kwargs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 451\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 452\u001b[0m \u001b[38;5;124;03m Write the figure to a PNG file.\u001b[39;00m\n\u001b[0;32m 453\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 495\u001b[0m \u001b[38;5;124;03m *metadata*, including the default 'Software' key.\u001b[39;00m\n\u001b[0;32m 496\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 497\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_print_pil\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpng\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpil_kwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:445\u001b[0m, in \u001b[0;36mFigureCanvasAgg._print_pil\u001b[1;34m(self, filename_or_obj, fmt, pil_kwargs, metadata)\u001b[0m\n\u001b[0;32m 440\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_print_pil\u001b[39m(\u001b[38;5;28mself\u001b[39m, filename_or_obj, fmt, pil_kwargs, metadata\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 441\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 442\u001b[0m \u001b[38;5;124;03m Draw the canvas, then save it using `.image.imsave` (to which\u001b[39;00m\n\u001b[0;32m 443\u001b[0m \u001b[38;5;124;03m *pil_kwargs* and *metadata* are forwarded).\u001b[39;00m\n\u001b[0;32m 444\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 445\u001b[0m \u001b[43mFigureCanvasAgg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 446\u001b[0m mpl\u001b[38;5;241m.\u001b[39mimage\u001b[38;5;241m.\u001b[39mimsave(\n\u001b[0;32m 447\u001b[0m filename_or_obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuffer_rgba(), \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39mfmt, origin\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupper\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 448\u001b[0m dpi\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure\u001b[38;5;241m.\u001b[39mdpi, metadata\u001b[38;5;241m=\u001b[39mmetadata, pil_kwargs\u001b[38;5;241m=\u001b[39mpil_kwargs)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:388\u001b[0m, in \u001b[0;36mFigureCanvasAgg.draw\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 385\u001b[0m \u001b[38;5;66;03m# Acquire a lock on the shared font cache.\u001b[39;00m\n\u001b[0;32m 386\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\u001b[38;5;241m.\u001b[39m_wait_cursor_for_draw_cm() \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\n\u001b[0;32m 387\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m nullcontext()):\n\u001b[1;32m--> 388\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 389\u001b[0m \u001b[38;5;66;03m# A GUI class may be need to update a window using this draw, so\u001b[39;00m\n\u001b[0;32m 390\u001b[0m \u001b[38;5;66;03m# don't forget to call the superclass.\u001b[39;00m\n\u001b[0;32m 391\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mdraw()\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m 93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[0;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m---> 95\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[0;32m 97\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\figure.py:3154\u001b[0m, in \u001b[0;36mFigure.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 3151\u001b[0m \u001b[38;5;66;03m# ValueError can occur when resizing a window.\u001b[39;00m\n\u001b[0;32m 3153\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpatch\u001b[38;5;241m.\u001b[39mdraw(renderer)\n\u001b[1;32m-> 3154\u001b[0m \u001b[43mmimage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_draw_list_compositing_images\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3155\u001b[0m \u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuppressComposite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3157\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m sfig \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msubfigs:\n\u001b[0;32m 3158\u001b[0m sfig\u001b[38;5;241m.\u001b[39mdraw(renderer)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\image.py:132\u001b[0m, in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m not_composite \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m has_images:\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m artists:\n\u001b[1;32m--> 132\u001b[0m \u001b[43ma\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 133\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 134\u001b[0m \u001b[38;5;66;03m# Composite any adjacent images together\u001b[39;00m\n\u001b[0;32m 135\u001b[0m image_group \u001b[38;5;241m=\u001b[39m []\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\axes\\_base.py:3070\u001b[0m, in \u001b[0;36m_AxesBase.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 3067\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artists_rasterized:\n\u001b[0;32m 3068\u001b[0m _draw_rasterized(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure, artists_rasterized, renderer)\n\u001b[1;32m-> 3070\u001b[0m \u001b[43mmimage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_draw_list_compositing_images\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3071\u001b[0m \u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuppressComposite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3073\u001b[0m renderer\u001b[38;5;241m.\u001b[39mclose_group(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maxes\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 3074\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\image.py:132\u001b[0m, in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m not_composite \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m has_images:\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m artists:\n\u001b[1;32m--> 132\u001b[0m \u001b[43ma\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 133\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 134\u001b[0m \u001b[38;5;66;03m# Composite any adjacent images together\u001b[39;00m\n\u001b[0;32m 135\u001b[0m image_group \u001b[38;5;241m=\u001b[39m []\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\lines.py:801\u001b[0m, in \u001b[0;36mLine2D.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 798\u001b[0m gc\u001b[38;5;241m.\u001b[39mset_foreground(lc_rgba, isRGBA\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m 800\u001b[0m gc\u001b[38;5;241m.\u001b[39mset_dashes(\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_dash_pattern)\n\u001b[1;32m--> 801\u001b[0m \u001b[43mrenderer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw_path\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maffine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrozen\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 802\u001b[0m gc\u001b[38;5;241m.\u001b[39mrestore()\n\u001b[0;32m 804\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_marker \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_markersize \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:117\u001b[0m, in \u001b[0;36mRendererAgg.draw_path\u001b[1;34m(self, gc, path, transform, rgbFace)\u001b[0m\n\u001b[0;32m 115\u001b[0m p\u001b[38;5;241m.\u001b[39msimplify_threshold \u001b[38;5;241m=\u001b[39m path\u001b[38;5;241m.\u001b[39msimplify_threshold\n\u001b[0;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 117\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_renderer\u001b[38;5;241m.\u001b[39mdraw_path(gc, p, transform, rgbFace)\n\u001b[0;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOverflowError\u001b[39;00m:\n\u001b[0;32m 119\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 120\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExceeded cell block limit in Agg.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 121\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease reduce the value of \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 127\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath\u001b[38;5;241m.\u001b[39msimplify_threshold\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.2f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m on the input).\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 128\u001b[0m )\n", - "\u001b[1;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath = path_to_pictures +'/' + subdir + '/' + file + '.npy'\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.png' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.png' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.png'\n", - " if not os.path.exists(savepath):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, specT=s, resize = size)\n", - " gc.collect()\n", - " try:\n", - " \n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " np.save(savepath, img)\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "58ff5fbd", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f9ad366", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv-train", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_915-Copy2.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_915-Copy2.ipynb deleted file mode 100644 index f6ad37f..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_915-Copy2.ipynb +++ /dev/null @@ -1,20562 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 11, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "import torchsig.utils as u\n", - "import torchsig.transforms.transforms as T\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "4848b066-2e09-4c1c-b8fa-8e3fa84d907a", - "metadata": {}, - "outputs": [], - "source": [ - "s = T.Spectrogram(nperseg=256)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, specT=None, figsize=(16,16), dpi=16, resize = None):\n", - " def standartize_signal(signal):\n", - " mean = np.mean(signal)\n", - " std = np.std(signal)\n", - " standardized_signal = (signal - mean) / std\n", - " return standardized_signal\n", - " \n", - " try:\n", - " if specT is None:\n", - " specT = T.Spectrogram(nperseg=256)\n", - " with open(path_to_data + filename, 'rb') as file:\n", - " tmp = np.frombuffer(file.read(), dtype=np.complex64)\n", - " signal = tmp\n", - " print(len(signal))\n", - " spectr = np.array(specT(signal)['data']['samples'][:,:figsize[0] * dpi])\n", - " mag = np.abs(signal)\n", - " mag = standartize_signal(mag)\n", - " real = signal.real\n", - " real = standartize_signal(real)\n", - "\n", - " fig2 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(real, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf2 = io.BytesIO()\n", - " fig2.savefig(buf2, format=\"png\", dpi=dpi)\n", - " buf2.seek(0)\n", - " img_arr2 = np.frombuffer(buf2.getvalue(), dtype=np.uint8)\n", - " buf2.close()\n", - " img2 = cv2.imdecode(img_arr2, 1)\n", - " img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig2)\n", - "\n", - " fig3 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - "\n", - " plt.plot(mag, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf3 = io.BytesIO()\n", - " fig3.savefig(buf3, format=\"png\", dpi=dpi)\n", - " buf3.seek(0)\n", - " img_arr3 = np.frombuffer(buf3.getvalue(), dtype=np.uint8)\n", - " buf3.close()\n", - " img3 = cv2.imdecode(img_arr3, 1)\n", - " img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig3)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(img2, resize)\n", - " resized_mag = cv2.resize(img3, resize)\n", - " resized_spectr = cv2.resize(spectr, resize)\n", - " img = np.asarray([resized_real, resized_mag, resized_spectr], dtype=np.float32)\n", - " return img\n", - " img = np.asarray([img2, img3, spectr], dtype=np.float32)\n", - " return img\n", - " except Exception as e:\n", - " print(str(e))\n", - " return None\n", - "\n", - "def plot_signal_and_magnitude(path_to_data, filename, filename_signal):\n", - " def remove_outliers(signal, threshold):\n", - " filtered_signal = np.where(np.abs(signal) <= threshold, signal, np.nan)\n", - " return np.nan_to_num(filtered_signal)\n", - " \n", - " def standartize_signal(signal):\n", - " mean = np.mean(signal)\n", - " std = np.std(signal)\n", - " standardized_signal = (signal - mean) / std\n", - " return standardized_signal\n", - " \n", - " with open(path_to_data + filename, 'rb') as file:\n", - " signal = np.frombuffer(file.read(), dtype=np.complex64)\n", - " print(max(np.real(signal)))\n", - " print(signal[:100])\n", - " plt.figure(figsize=(12, 6))\n", - " plt.subplot(2, 1, 1)\n", - " plt.plot(remove_outliers(standartize_signal(np.real(signal)),1)[10000:], label='Real Part')\n", - " plt.plot(remove_outliers(standartize_signal(np.imag(signal)),1)[10000:], label='Imaginary Part')\n", - " plt.title('QAM Signal')\n", - " plt.legend()\n", - " plt.subplot(2, 1, 2)\n", - " plt.plot(np.abs(signal), label='Magnitude')\n", - " plt.title('Magnitude of QAM Signal')\n", - " plt.legend()\n", - " plt.tight_layout()\n", - " plt.savefig(filename_signal)\n", - " plt.close()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = 'C:/Users/snytk/Datasets/2400_9K'\n", - "path_to_pictures = 'C:/Users/snytk/Datasets/1200_9K_jpg'" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "6a5f4c51", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\r", - " 0%| | 0/707 [00:00 13\u001b[0m img \u001b[38;5;241m=\u001b[39m \u001b[43mplot_signal_and_magnitude\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath_to_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfilepath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilename_signal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43msavepath_real_png\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 14\u001b[0m gc\u001b[38;5;241m.\u001b[39mcollect()\n\u001b[0;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDir: \u001b[39m\u001b[38;5;124m'\u001b[39m, subdir , \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m finished!\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "Cell \u001b[1;32mIn[13], line 97\u001b[0m, in \u001b[0;36mplot_signal_and_magnitude\u001b[1;34m(path_to_data, filename, filename_signal)\u001b[0m\n\u001b[0;32m 95\u001b[0m plt\u001b[38;5;241m.\u001b[39mlegend()\n\u001b[0;32m 96\u001b[0m plt\u001b[38;5;241m.\u001b[39mtight_layout()\n\u001b[1;32m---> 97\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msavefig\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilename_signal\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 98\u001b[0m plt\u001b[38;5;241m.\u001b[39mclose()\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\pyplot.py:1135\u001b[0m, in \u001b[0;36msavefig\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 1132\u001b[0m \u001b[38;5;66;03m# savefig default implementation has no return, so mypy is unhappy\u001b[39;00m\n\u001b[0;32m 1133\u001b[0m \u001b[38;5;66;03m# presumably this is here because subclasses can return?\u001b[39;00m\n\u001b[0;32m 1134\u001b[0m res \u001b[38;5;241m=\u001b[39m fig\u001b[38;5;241m.\u001b[39msavefig(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[func-returns-value]\u001b[39;00m\n\u001b[1;32m-> 1135\u001b[0m \u001b[43mfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw_idle\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# Need this if 'transparent=True', to reset colors.\u001b[39;00m\n\u001b[0;32m 1136\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backend_bases.py:1893\u001b[0m, in \u001b[0;36mFigureCanvasBase.draw_idle\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1891\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_idle_drawing:\n\u001b[0;32m 1892\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_idle_draw_cntx():\n\u001b[1;32m-> 1893\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\backends\\backend_agg.py:388\u001b[0m, in \u001b[0;36mFigureCanvasAgg.draw\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 385\u001b[0m \u001b[38;5;66;03m# Acquire a lock on the shared font cache.\u001b[39;00m\n\u001b[0;32m 386\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\u001b[38;5;241m.\u001b[39m_wait_cursor_for_draw_cm() \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtoolbar\n\u001b[0;32m 387\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m nullcontext()):\n\u001b[1;32m--> 388\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 389\u001b[0m \u001b[38;5;66;03m# A GUI class may be need to update a window using this draw, so\u001b[39;00m\n\u001b[0;32m 390\u001b[0m \u001b[38;5;66;03m# don't forget to call the superclass.\u001b[39;00m\n\u001b[0;32m 391\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mdraw()\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m 93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[0;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m---> 95\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[0;32m 97\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\figure.py:3154\u001b[0m, in \u001b[0;36mFigure.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 3151\u001b[0m \u001b[38;5;66;03m# ValueError can occur when resizing a window.\u001b[39;00m\n\u001b[0;32m 3153\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpatch\u001b[38;5;241m.\u001b[39mdraw(renderer)\n\u001b[1;32m-> 3154\u001b[0m \u001b[43mmimage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_draw_list_compositing_images\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3155\u001b[0m \u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuppressComposite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3157\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m sfig \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msubfigs:\n\u001b[0;32m 3158\u001b[0m sfig\u001b[38;5;241m.\u001b[39mdraw(renderer)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\image.py:132\u001b[0m, in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m not_composite \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m has_images:\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m artists:\n\u001b[1;32m--> 132\u001b[0m \u001b[43ma\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 133\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 134\u001b[0m \u001b[38;5;66;03m# Composite any adjacent images together\u001b[39;00m\n\u001b[0;32m 135\u001b[0m image_group \u001b[38;5;241m=\u001b[39m []\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\axes\\_base.py:3070\u001b[0m, in \u001b[0;36m_AxesBase.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 3067\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artists_rasterized:\n\u001b[0;32m 3068\u001b[0m _draw_rasterized(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure, artists_rasterized, renderer)\n\u001b[1;32m-> 3070\u001b[0m \u001b[43mmimage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_draw_list_compositing_images\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3071\u001b[0m \u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuppressComposite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3073\u001b[0m renderer\u001b[38;5;241m.\u001b[39mclose_group(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maxes\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 3074\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\image.py:132\u001b[0m, in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m not_composite \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m has_images:\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m artists:\n\u001b[1;32m--> 132\u001b[0m \u001b[43ma\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 133\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 134\u001b[0m \u001b[38;5;66;03m# Composite any adjacent images together\u001b[39;00m\n\u001b[0;32m 135\u001b[0m image_group \u001b[38;5;241m=\u001b[39m []\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\legend.py:780\u001b[0m, in \u001b[0;36mLegend.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 777\u001b[0m Shadow(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlegendPatch, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_shadow_props)\u001b[38;5;241m.\u001b[39mdraw(renderer)\n\u001b[0;32m 779\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlegendPatch\u001b[38;5;241m.\u001b[39mdraw(renderer)\n\u001b[1;32m--> 780\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_legend_box\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 782\u001b[0m renderer\u001b[38;5;241m.\u001b[39mclose_group(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlegend\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 783\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:39\u001b[0m, in \u001b[0;36m_prevent_rasterization..draw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m 36\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n\u001b[0;32m 37\u001b[0m renderer\u001b[38;5;241m.\u001b[39m_rasterizing \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m---> 39\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\offsetbox.py:412\u001b[0m, in \u001b[0;36mOffsetBox.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 407\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 408\u001b[0m \u001b[38;5;124;03mUpdate the location of children if necessary and draw them\u001b[39;00m\n\u001b[0;32m 409\u001b[0m \u001b[38;5;124;03mto the given *renderer*.\u001b[39;00m\n\u001b[0;32m 410\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 411\u001b[0m bbox, offsets \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_bbox_and_child_offsets(renderer)\n\u001b[1;32m--> 412\u001b[0m px, py \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_offset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbbox\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 413\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m c, (ox, oy) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_visible_children(), offsets):\n\u001b[0;32m 414\u001b[0m c\u001b[38;5;241m.\u001b[39mset_offset((px \u001b[38;5;241m+\u001b[39m ox, py \u001b[38;5;241m+\u001b[39m oy))\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\offsetbox.py:60\u001b[0m, in \u001b[0;36m_compat_get_offset..get_offset\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 56\u001b[0m params \u001b[38;5;241m=\u001b[39m _api\u001b[38;5;241m.\u001b[39mselect_matching_signature(sigs, \u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 57\u001b[0m bbox \u001b[38;5;241m=\u001b[39m (params[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbbox\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbbox\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m params \u001b[38;5;28;01melse\u001b[39;00m\n\u001b[0;32m 58\u001b[0m Bbox\u001b[38;5;241m.\u001b[39mfrom_bounds(\u001b[38;5;241m-\u001b[39mparams[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxdescent\u001b[39m\u001b[38;5;124m\"\u001b[39m], \u001b[38;5;241m-\u001b[39mparams[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mydescent\u001b[39m\u001b[38;5;124m\"\u001b[39m],\n\u001b[0;32m 59\u001b[0m params[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwidth\u001b[39m\u001b[38;5;124m\"\u001b[39m], params[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheight\u001b[39m\u001b[38;5;124m\"\u001b[39m]))\n\u001b[1;32m---> 60\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mself\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbbox\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrenderer\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\offsetbox.py:312\u001b[0m, in \u001b[0;36mOffsetBox.get_offset\u001b[1;34m(self, bbox, renderer)\u001b[0m\n\u001b[0;32m 297\u001b[0m \u001b[38;5;129m@_compat_get_offset\u001b[39m\n\u001b[0;32m 298\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_offset\u001b[39m(\u001b[38;5;28mself\u001b[39m, bbox, renderer):\n\u001b[0;32m 299\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 300\u001b[0m \u001b[38;5;124;03m Return the offset as a tuple (x, y).\u001b[39;00m\n\u001b[0;32m 301\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 309\u001b[0m \u001b[38;5;124;03m renderer : `.RendererBase` subclass\u001b[39;00m\n\u001b[0;32m 310\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m 311\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[1;32m--> 312\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_offset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbbox\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwidth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbbox\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mbbox\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mx0\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mbbox\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43my0\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 313\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_offset)\n\u001b[0;32m 314\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_offset)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\legend.py:738\u001b[0m, in \u001b[0;36mLegend._findoffset\u001b[1;34m(self, width, height, xdescent, ydescent, renderer)\u001b[0m\n\u001b[0;32m 735\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Helper function to locate the legend.\"\"\"\u001b[39;00m\n\u001b[0;32m 737\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_loc \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m: \u001b[38;5;66;03m# \"best\".\u001b[39;00m\n\u001b[1;32m--> 738\u001b[0m x, y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_find_best_position\u001b[49m\u001b[43m(\u001b[49m\u001b[43mwidth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 739\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_loc \u001b[38;5;129;01min\u001b[39;00m Legend\u001b[38;5;241m.\u001b[39mcodes\u001b[38;5;241m.\u001b[39mvalues(): \u001b[38;5;66;03m# Fixed location.\u001b[39;00m\n\u001b[0;32m 740\u001b[0m bbox \u001b[38;5;241m=\u001b[39m Bbox\u001b[38;5;241m.\u001b[39mfrom_bounds(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m0\u001b[39m, width, height)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\legend.py:1186\u001b[0m, in \u001b[0;36mLegend._find_best_position\u001b[1;34m(self, width, height, renderer, consider)\u001b[0m\n\u001b[0;32m 1183\u001b[0m badness \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 1184\u001b[0m \u001b[38;5;66;03m# XXX TODO: If markers are present, it would be good to take them\u001b[39;00m\n\u001b[0;32m 1185\u001b[0m \u001b[38;5;66;03m# into account when checking vertex overlaps in the next line.\u001b[39;00m\n\u001b[1;32m-> 1186\u001b[0m badness \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28msum\u001b[39m(legendBox\u001b[38;5;241m.\u001b[39mcount_contains(line\u001b[38;5;241m.\u001b[39mvertices)\n\u001b[0;32m 1187\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines)\n\u001b[0;32m 1188\u001b[0m \u001b[38;5;241m+\u001b[39m legendBox\u001b[38;5;241m.\u001b[39mcount_contains(offsets)\n\u001b[0;32m 1189\u001b[0m \u001b[38;5;241m+\u001b[39m legendBox\u001b[38;5;241m.\u001b[39mcount_overlaps(bboxes)\n\u001b[0;32m 1190\u001b[0m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28msum\u001b[39m(line\u001b[38;5;241m.\u001b[39mintersects_bbox(legendBox, filled\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m 1191\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines))\n\u001b[0;32m 1192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m badness \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 1193\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m l, b\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\legend.py:1186\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 1183\u001b[0m badness \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 1184\u001b[0m \u001b[38;5;66;03m# XXX TODO: If markers are present, it would be good to take them\u001b[39;00m\n\u001b[0;32m 1185\u001b[0m \u001b[38;5;66;03m# into account when checking vertex overlaps in the next line.\u001b[39;00m\n\u001b[1;32m-> 1186\u001b[0m badness \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28msum\u001b[39m(\u001b[43mlegendBox\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcount_contains\u001b[49m\u001b[43m(\u001b[49m\u001b[43mline\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvertices\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1187\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines)\n\u001b[0;32m 1188\u001b[0m \u001b[38;5;241m+\u001b[39m legendBox\u001b[38;5;241m.\u001b[39mcount_contains(offsets)\n\u001b[0;32m 1189\u001b[0m \u001b[38;5;241m+\u001b[39m legendBox\u001b[38;5;241m.\u001b[39mcount_overlaps(bboxes)\n\u001b[0;32m 1190\u001b[0m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28msum\u001b[39m(line\u001b[38;5;241m.\u001b[39mintersects_bbox(legendBox, filled\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m 1191\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines))\n\u001b[0;32m 1192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m badness \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 1193\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m l, b\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\transforms.py:583\u001b[0m, in \u001b[0;36mBboxBase.count_contains\u001b[1;34m(self, vertices)\u001b[0m\n\u001b[0;32m 580\u001b[0m vertices \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39masarray(vertices)\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m np\u001b[38;5;241m.\u001b[39merrstate(invalid\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m 582\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmin\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m<\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mvertices\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m&\u001b[39;49m\n\u001b[1;32m--> 583\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mvertices\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m<\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mall\u001b[49m\u001b[43m(\u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39msum())\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\numpy\\core\\_methods.py:64\u001b[0m, in \u001b[0;36m_all\u001b[1;34m(a, axis, dtype, out, keepdims, where)\u001b[0m\n\u001b[0;32m 61\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_all\u001b[39m(a, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, dtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, keepdims\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, \u001b[38;5;241m*\u001b[39m, where\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[0;32m 62\u001b[0m \u001b[38;5;66;03m# Parsing keyword arguments is currently fairly slow, so avoid it for now\u001b[39;00m\n\u001b[0;32m 63\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m where \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m---> 64\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m umr_all(a, axis, dtype, out, keepdims)\n\u001b[0;32m 65\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m umr_all(a, axis, dtype, out, keepdims, where\u001b[38;5;241m=\u001b[39mwhere)\n", - "\u001b[1;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath = path_to_pictures +'/' + subdir + '/' + file + '.npy'\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '.png' \n", - " if not os.path.exists(savepath):\n", - " img = plot_signal_and_magnitude(path_to_data=filepath, filename=file, filename_signal= savepath_real_png)\n", - " gc.collect()\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/707 [00:00 19\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mimshow\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 20\u001b[0m plt\u001b[38;5;241m.\u001b[39msavefig(savepath_real_png)\n\u001b[0;32m 21\u001b[0m plt\u001b[38;5;241m.\u001b[39mclf()\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\pyplot.py:3358\u001b[0m, in \u001b[0;36mimshow\u001b[1;34m(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, interpolation_stage, filternorm, filterrad, resample, url, data, **kwargs)\u001b[0m\n\u001b[0;32m 3337\u001b[0m \u001b[38;5;129m@_copy_docstring_and_deprecators\u001b[39m(Axes\u001b[38;5;241m.\u001b[39mimshow)\n\u001b[0;32m 3338\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mimshow\u001b[39m(\n\u001b[0;32m 3339\u001b[0m X: ArrayLike \u001b[38;5;241m|\u001b[39m PIL\u001b[38;5;241m.\u001b[39mImage\u001b[38;5;241m.\u001b[39mImage,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 3356\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[0;32m 3357\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m AxesImage:\n\u001b[1;32m-> 3358\u001b[0m __ret \u001b[38;5;241m=\u001b[39m \u001b[43mgca\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mimshow(\n\u001b[0;32m 3359\u001b[0m X,\n\u001b[0;32m 3360\u001b[0m cmap\u001b[38;5;241m=\u001b[39mcmap,\n\u001b[0;32m 3361\u001b[0m norm\u001b[38;5;241m=\u001b[39mnorm,\n\u001b[0;32m 3362\u001b[0m aspect\u001b[38;5;241m=\u001b[39maspect,\n\u001b[0;32m 3363\u001b[0m interpolation\u001b[38;5;241m=\u001b[39minterpolation,\n\u001b[0;32m 3364\u001b[0m alpha\u001b[38;5;241m=\u001b[39malpha,\n\u001b[0;32m 3365\u001b[0m vmin\u001b[38;5;241m=\u001b[39mvmin,\n\u001b[0;32m 3366\u001b[0m vmax\u001b[38;5;241m=\u001b[39mvmax,\n\u001b[0;32m 3367\u001b[0m origin\u001b[38;5;241m=\u001b[39morigin,\n\u001b[0;32m 3368\u001b[0m extent\u001b[38;5;241m=\u001b[39mextent,\n\u001b[0;32m 3369\u001b[0m interpolation_stage\u001b[38;5;241m=\u001b[39minterpolation_stage,\n\u001b[0;32m 3370\u001b[0m filternorm\u001b[38;5;241m=\u001b[39mfilternorm,\n\u001b[0;32m 3371\u001b[0m filterrad\u001b[38;5;241m=\u001b[39mfilterrad,\n\u001b[0;32m 3372\u001b[0m resample\u001b[38;5;241m=\u001b[39mresample,\n\u001b[0;32m 3373\u001b[0m url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m 3374\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\"\u001b[39m: data} \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m {}),\n\u001b[0;32m 3375\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[0;32m 3376\u001b[0m )\n\u001b[0;32m 3377\u001b[0m sci(__ret)\n\u001b[0;32m 3378\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m __ret\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\pyplot.py:2540\u001b[0m, in \u001b[0;36mgca\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2538\u001b[0m \u001b[38;5;129m@_copy_docstring_and_deprecators\u001b[39m(Figure\u001b[38;5;241m.\u001b[39mgca)\n\u001b[0;32m 2539\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgca\u001b[39m() \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Axes:\n\u001b[1;32m-> 2540\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mgcf\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgca\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\figure.py:1658\u001b[0m, in \u001b[0;36mFigureBase.gca\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1648\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 1649\u001b[0m \u001b[38;5;124;03mGet the current Axes.\u001b[39;00m\n\u001b[0;32m 1650\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1655\u001b[0m \u001b[38;5;124;03mwhether `.pyplot.get_fignums()` is empty.)\u001b[39;00m\n\u001b[0;32m 1656\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 1657\u001b[0m ax \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_axstack\u001b[38;5;241m.\u001b[39mcurrent()\n\u001b[1;32m-> 1658\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ax \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madd_subplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\figure.py:782\u001b[0m, in \u001b[0;36mFigureBase.add_subplot\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 780\u001b[0m args \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28mmap\u001b[39m(\u001b[38;5;28mint\u001b[39m, \u001b[38;5;28mstr\u001b[39m(args[\u001b[38;5;241m0\u001b[39m])))\n\u001b[0;32m 781\u001b[0m projection_class, pkw \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_projection_requirements(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m--> 782\u001b[0m ax \u001b[38;5;241m=\u001b[39m \u001b[43mprojection_class\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 783\u001b[0m key \u001b[38;5;241m=\u001b[39m (projection_class, pkw)\n\u001b[0;32m 784\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_add_axes_internal(ax, key)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\axes\\_base.py:678\u001b[0m, in \u001b[0;36m_AxesBase.__init__\u001b[1;34m(self, fig, facecolor, frameon, sharex, sharey, label, xscale, yscale, box_aspect, *args, **kwargs)\u001b[0m\n\u001b[0;32m 675\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_axisbelow(mpl\u001b[38;5;241m.\u001b[39mrcParams[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maxes.axisbelow\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[0;32m 677\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_rasterization_zorder \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m--> 678\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclear\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 680\u001b[0m \u001b[38;5;66;03m# funcs used to format x and y - fall back on major formatters\u001b[39;00m\n\u001b[0;32m 681\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfmt_xdata \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\axes\\_base.py:1388\u001b[0m, in \u001b[0;36m_AxesBase.clear\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1386\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcla()\n\u001b[0;32m 1387\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1388\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__clear\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\axes\\_base.py:1355\u001b[0m, in \u001b[0;36m_AxesBase.__clear\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1351\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpatch\u001b[38;5;241m.\u001b[39mset_transform(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtransAxes)\n\u001b[0;32m 1353\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_axis_on()\n\u001b[1;32m-> 1355\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mxaxis\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_clip_path\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpatch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1356\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39myaxis\u001b[38;5;241m.\u001b[39mset_clip_path(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpatch)\n\u001b[0;32m 1358\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sharex \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\_api\\deprecation.py:297\u001b[0m, in \u001b[0;36mrename_parameter..wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 292\u001b[0m warn_deprecated(\n\u001b[0;32m 293\u001b[0m since, message\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mold\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m parameter of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m() \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 294\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas been renamed \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnew\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m since Matplotlib \u001b[39m\u001b[38;5;132;01m{\u001b[39;00msince\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m; support \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 295\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfor the old name will be dropped %(removal)s.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 296\u001b[0m kwargs[new] \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(old)\n\u001b[1;32m--> 297\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\axis.py:1110\u001b[0m, in \u001b[0;36mAxis.set_clip_path\u001b[1;34m(self, path, transform)\u001b[0m\n\u001b[0;32m 1108\u001b[0m \u001b[38;5;129m@_api\u001b[39m\u001b[38;5;241m.\u001b[39mrename_parameter(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m3.8\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mclippath\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpath\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 1109\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mset_clip_path\u001b[39m(\u001b[38;5;28mself\u001b[39m, path, transform\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m-> 1110\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_clip_path\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtransform\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1111\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m child \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmajorTicks \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mminorTicks:\n\u001b[0;32m 1112\u001b[0m child\u001b[38;5;241m.\u001b[39mset_clip_path(path, transform)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\artist.py:802\u001b[0m, in \u001b[0;36mArtist.set_clip_path\u001b[1;34m(self, path, transform)\u001b[0m\n\u001b[0;32m 800\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m transform \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 801\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(path, Rectangle):\n\u001b[1;32m--> 802\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclipbox \u001b[38;5;241m=\u001b[39m TransformedBbox(\u001b[43mBbox\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43munit\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[0;32m 803\u001b[0m path\u001b[38;5;241m.\u001b[39mget_transform())\n\u001b[0;32m 804\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_clippath \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 805\u001b[0m success \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\transforms.py:797\u001b[0m, in \u001b[0;36mBbox.unit\u001b[1;34m()\u001b[0m\n\u001b[0;32m 794\u001b[0m \u001b[38;5;129m@staticmethod\u001b[39m\n\u001b[0;32m 795\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21munit\u001b[39m():\n\u001b[0;32m 796\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Create a new unit `Bbox` from (0, 0) to (1, 1).\"\"\"\u001b[39;00m\n\u001b[1;32m--> 797\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mBbox\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\matplotlib\\transforms.py:771\u001b[0m, in \u001b[0;36mBbox.__init__\u001b[1;34m(self, points, **kwargs)\u001b[0m\n\u001b[0;32m 768\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBbox points must be of the form \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 769\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[[x0, y0], [x1, y1]]\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 770\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_points \u001b[38;5;241m=\u001b[39m points\n\u001b[1;32m--> 771\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_minpos \u001b[38;5;241m=\u001b[39m _default_minpos\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[0;32m 772\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_ignore \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m 773\u001b[0m \u001b[38;5;66;03m# it is helpful in some contexts to know if the bbox is a\u001b[39;00m\n\u001b[0;32m 774\u001b[0m \u001b[38;5;66;03m# default or has been mutated; we store the orig points to\u001b[39;00m\n\u001b[0;32m 775\u001b[0m \u001b[38;5;66;03m# support the mutated methods\u001b[39;00m\n", - "\u001b[1;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath = path_to_pictures +'/' + subdir + '/' + file + '.npy'\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.png' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.png' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.png'\n", - " if not os.path.exists(savepath):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, specT=s, resize = size)\n", - " gc.collect()\n", - " try:\n", - " \n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " np.save(savepath, img)\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "58ff5fbd", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f9ad366", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg.ipynb deleted file mode 100644 index 9aa2038..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg.ipynb +++ /dev/null @@ -1,222 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " array = np.load(path_to_data+filename)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(array[0], resize)\n", - " resized_mag = cv2.resize(array[1], resize)\n", - " resized_spectr = cv2.resize(array[2], resize)\n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = 'C:/Users/snytk/Lerning_NN_for_work/datasets/2.4_learning'\n", - "path_to_pictures = 'C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/2.4_jpg_learning'" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████| 8751/8751 [1:01:54<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dir: drone finished!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████| 11202/11202 [1:19:30<00:00, 2.35it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dir: noise finished!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.jpg' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.jpg' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.jpg'\n", - " if not os.path.exists(savepath_real_png):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, resize = size)\n", - " gc.collect()\n", - " \n", - " try:\n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cfbd309d", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_1.2.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_1.2.ipynb deleted file mode 100644 index e5a0fed..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_1.2.ipynb +++ /dev/null @@ -1,360 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " array = np.load(path_to_data+filename)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(array[0], resize)\n", - " resized_mag = cv2.resize(array[1], resize)\n", - " resized_spectr = cv2.resize(array[2], resize)\n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " except Exception as e:\n", - " print(str(e))\n", - " return None\n", - " \n", - " \n", - " \n", - "\n", - "def pre_func_ensemble(data=None, src ='', ind_inference=0):\n", - " try:\n", - " import matplotlib.pyplot as plt\n", - " matplotlib.use('Agg')\n", - " plt.ioff()\n", - "\n", - " figsize = (16, 16)\n", - " dpi = 16\n", - "\n", - " signal = np.vectorize(complex)(data[0], data[1])\n", - " #np.save(src + '_inference_2400_' + str(ind_inference) + '.npy', signal)\n", - " spec = transform.Spectrogram(nperseg=256)\n", - " spectr = np.array(spec(signal)[:,:figsize[0] * dpi])\n", - " fig1 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - " sigr = signal.real\n", - " sigi = signal.imag\n", - " \n", - " plt.plot(sigr, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf1 = io.BytesIO()\n", - " fig1.savefig(buf1, format=\"png\", dpi=dpi)\n", - " buf1.seek(0)\n", - " img_arr1 = np.frombuffer(buf1.getvalue(), dtype=np.uint8)\n", - " buf1.close()\n", - " img1 = cv2.imdecode(img_arr1, 1)\n", - " img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig1)\n", - "\n", - " fig2 = plt.figure(figsize = figsize)\n", - " plt.axes(ylim=(-1, 1))\n", - " sigr = signal.real\n", - " sigi = signal.imag\n", - " \n", - " plt.plot(sigi, color='black')\n", - " plt.gca().set_axis_off()\n", - " plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)\n", - " plt.margins(0,0)\n", - " buf = io.BytesIO()\n", - " fig2.savefig(buf, format=\"png\", dpi=dpi)\n", - " buf.seek(0)\n", - " img_arr = np.frombuffer(buf.getvalue(), dtype=np.uint8)\n", - " buf.close()\n", - " img = cv2.imdecode(img_arr, 1)\n", - " img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " plt.close(fig2)\n", - "\n", - " img = np.array([img1, img2, spectr])\n", - " \n", - " cv2.destroyAllWindows()\n", - " del signal\n", - " del spec\n", - " del spectr\n", - " del img1\n", - " del img2\n", - " del sigr\n", - " del sigi\n", - " del buf\n", - " del buf1\n", - " del img_arr\n", - " del img_arr1\n", - " cv2.destroyAllWindows()\n", - " gc.collect()\n", - "\n", - " print('Подготовка данных завершена')\n", - " print()\n", - " return img\n", - "\n", - " except Exception as e:\n", - " print(str(e))\n", - " return None\n", - "\n", - "\n", - "def build_func_ensemble(file_model='', file_config='', num_classes=None):\n", - " try:\n", - " import matplotlib.pyplot as plt\n", - " matplotlib.use('Agg')\n", - " plt.ioff()\n", - " torch.cuda.empty_cache()\n", - " model1 = models.resnet18(pretrained=False)\n", - " model2 = models.resnet50(pretrained=False)\n", - " model3 = models.resnet101(pretrained=False)\n", - "\n", - " num_classes = 2\n", - "\n", - " model1.fc = nn.Linear(model1.fc.in_features, num_classes)\n", - " model2.fc = nn.Linear(model2.fc.in_features, num_classes)\n", - " model3.fc = nn.Linear(model3.fc.in_features, num_classes)\n", - "\n", - " class Ensemble(nn.Module):\n", - " def __init__(self, model1, model2, model3):\n", - " super(Ensemble, self).__init__()\n", - " self.model1 = model1\n", - " self.model2 = model2\n", - " self.model3 = model3\n", - " self.fc = nn.Linear(3 * num_classes, num_classes)\n", - "\n", - " def forward(self, x):\n", - " x1 = self.model1(x)\n", - " x2 = self.model2(x)\n", - " x3 = self.model3(x)\n", - " x = torch.cat((x1, x2, x3), dim=1)\n", - " x = self.fc(x)\n", - " return x\n", - "\n", - " model = Ensemble(model1, model2, model3)\n", - "\n", - " device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - " if device != 'cpu':\n", - " model = model.to(device)\n", - " model.load_state_dict(torch.load(file_model, map_location=device))\n", - " model.eval()\n", - "\n", - " cv2.destroyAllWindows()\n", - " del model1\n", - " del model2\n", - " del model3\n", - " gc.collect()\n", - "\n", - " print('Инициализация модели завершена')\n", - " print()\n", - " return model\n", - "\n", - " except Exception as exc:\n", - " print(str(exc))\n", - " return None\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = 'C:/Users/snytk/Lerning_NN_for_work/datasets/1.2_learning'\n", - "path_to_pictures = 'C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/1.2_jpg_learning'" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 963/963 [06:36<00:00, 2.43it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dir: drone finished!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1724/1724 [11:41<00:00, 2.46it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dir: noise finished!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.jpg' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.jpg' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.jpg'\n", - " if not os.path.exists(savepath_real_png):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, resize = size)\n", - " gc.collect()\n", - " \n", - " try:\n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "871d7ab6", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_2.4.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_2.4.ipynb deleted file mode 100644 index 8fbe1f7..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_2.4.ipynb +++ /dev/null @@ -1,194 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " array = np.load(path_to_data+filename)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(array[0], resize)\n", - " resized_mag = cv2.resize(array[1], resize)\n", - " resized_spectr = cv2.resize(array[2], resize)\n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = 'C:/Users/snytk/Lerning_NN_for_work/datasets/2.4_learning'\n", - "path_to_pictures = 'C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/2.4_jpg_learning'" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 2%|█▍ | 158/8751 [01:06<1:01:14, 2.34it/s]" - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.jpg' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.jpg' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.jpg'\n", - " if not os.path.exists(savepath_real_png):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, resize = size)\n", - " gc.collect()\n", - " \n", - " try:\n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "871d7ab6", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_2_4_Copy1.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_2_4_Copy1.ipynb deleted file mode 100644 index 8fbe1f7..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_2_4_Copy1.ipynb +++ /dev/null @@ -1,194 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " array = np.load(path_to_data+filename)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(array[0], resize)\n", - " resized_mag = cv2.resize(array[1], resize)\n", - " resized_spectr = cv2.resize(array[2], resize)\n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = 'C:/Users/snytk/Lerning_NN_for_work/datasets/2.4_learning'\n", - "path_to_pictures = 'C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/2.4_jpg_learning'" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 2%|█▍ | 158/8751 [01:06<1:01:14, 2.34it/s]" - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.jpg' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.jpg' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.jpg'\n", - " if not os.path.exists(savepath_real_png):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, resize = size)\n", - " gc.collect()\n", - " \n", - " try:\n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "871d7ab6", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_915.ipynb b/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_915.ipynb deleted file mode 100644 index 635dbf9..0000000 --- a/train_scripts/ImageDatasetCreate_spec_imag_real_from_npy_to_jpg_915.ipynb +++ /dev/null @@ -1,236 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4fdb98fc-65bb-467e-be0c-168fee9b0fca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda:0\n", - "['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8', 'seaborn-v0_8-bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep', 'seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-whitegrid', 'tableau-colorblind10']\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import time\n", - "import io\n", - "import cv2\n", - "import copy\n", - "import os\n", - "from tqdm import tqdm\n", - "import torch.nn as nn\n", - "import torch\n", - "import torchvision\n", - "from torch.utils.data import Dataset\n", - "from torch import default_generator, randperm\n", - "from PIL import Image\n", - "#from torch._utils import _accumulate\n", - "import csv\n", - "from torch.utils.data.dataset import Subset\n", - "from scipy import ndimage\n", - "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", - "print(device)\n", - "batch_size = 16\n", - "momentum=0.9\n", - "lr = 1e-3\n", - "import random\n", - "sub_sample = 0.5\n", - "import matplotlib\n", - "import gc\n", - "matplotlib.use('Agg')\n", - "import matplotlib as mpl\n", - "mpl.rcParams['agg.path.chunksize'] = 256*256\n", - "#plt.style.use('mplstyle')\n", - "plt.style.use('ggplot')\n", - "plt.grid(None)\n", - "plt.rcParams[\"axes.grid\"] = False\n", - "print(plt.style.available)\n", - "plt.ioff()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "9267fbe1", - "metadata": {}, - "outputs": [], - "source": [ - "def sig2pic_with_spec(path_to_data, filename, figsize=(16,16), dpi=16, resize = None):\n", - " try:\n", - " array = np.load(path_to_data+filename)\n", - "\n", - " if resize != None:\n", - " resized_real = cv2.resize(array[0], resize)\n", - " resized_mag = cv2.resize(array[1], resize)\n", - " resized_spectr = cv2.resize(array[2], resize)\n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " img = np.asarray(array, dtype=np.float32)\n", - " return img\n", - " \n", - " except Exception as e:\n", - " print(str(e))\n", - " return None" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "448da74a-e0ae-44d8-9877-8dd1f257a24f", - "metadata": {}, - "outputs": [], - "source": [ - "path_to_binaries = 'C:/Users/snytk/Lerning_NN_for_work/datasets/915_learning'\n", - "path_to_pictures = 'C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/915_jpg_learning'" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "ac4945a8-29c4-4da4-945f-08658953e3e5", - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "6f226f86-5d72-4573-8af6-750128b70263", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 856/856 [10:50<00:00, 1.32it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dir: drone finished!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 627/627 [08:40<00:00, 1.20it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dir: noise finished!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "size = (256,256)\n", - "if not os.path.exists(path_to_pictures):\n", - " os.mkdir(path_to_pictures)\n", - "for subdir in os.listdir(path_to_binaries):\n", - " filepath = path_to_binaries + '/' + subdir + '/'\n", - " if not os.path.exists(path_to_pictures +'/' + subdir):\n", - " os.mkdir(path_to_pictures + '/' + subdir)\n", - " files = os.listdir(filepath)\n", - " for file in tqdm(files):\n", - " savepath_real_png = path_to_pictures +'/' + subdir + '/' + file + '_real' + '.jpg' \n", - " savepath_imag_png = path_to_pictures +'/' + subdir + '/' + file + '_imag' + '.jpg' \n", - " savepath_spec_png = path_to_pictures +'/' + subdir + '/' + file + '_spec' + '.jpg'\n", - " if not os.path.exists(savepath_real_png):\n", - " img = sig2pic_with_spec(path_to_data=filepath, filename=file, resize = size)\n", - " gc.collect()\n", - " \n", - " try:\n", - " plt.imshow(img[0])\n", - " plt.savefig(savepath_real_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.imshow(img[1])\n", - " plt.savefig(savepath_imag_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - "\n", - " plt.imshow(img[2])\n", - " plt.savefig(savepath_spec_png)\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " except Exception:\n", - " continue\n", - " print('Dir: ', subdir , ' finished!')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "871d7ab6", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e080bb07", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Jetson_пароли.txt b/train_scripts/Jetson_пароли.txt deleted file mode 100644 index 375fa26..0000000 --- a/train_scripts/Jetson_пароли.txt +++ /dev/null @@ -1,7 +0,0 @@ -Для ящика на выставки: -aleksandr@192.168.3.85 19751975 -aleksandr@192.168.3.86 19751975 - -Для ящика на Липецк: -aleksandr@192.168.3.85 19751975 -aleksandr@192.168.3.86 19751975 diff --git a/train_scripts/PTH_to_PT.ipynb b/train_scripts/PTH_to_PT.ipynb deleted file mode 100644 index 097af24..0000000 --- a/train_scripts/PTH_to_PT.ipynb +++ /dev/null @@ -1,55 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "a89c0273", - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import torchvision\n", - "\n", - "def convert_pth_to_pt(pth_path, pt_path, model_class):\n", - " state_dict = torch.load(pth_path)\n", - " model = model_class()\n", - " model.load_state_dict(state_dict)\n", - " torch.save(model, pt_path)\n", - " print(f'Model saved to {pt_path}')\n", - "\n", - "class ModelClass(torch.nn.Module):\n", - " def __init__(self):\n", - " super(ModelClass, self).__init__()\n", - "\n", - " def forward(self, x):\n", - " pass\n", - "\n", - "pth_path = 'model.pth'\n", - "pt_path = 'model.pt'\n", - "\n", - "convert_pth_to_pt(pth_path, pt_path, ModelClass)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.8" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models.ipynb b/train_scripts/Training_models.ipynb deleted file mode 100644 index 08d3eef..0000000 --- a/train_scripts/Training_models.ipynb +++ /dev/null @@ -1,463 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "ename": "error", - "evalue": "OpenCV(4.10.0) D:\\a\\opencv-python\\opencv-python\\opencv\\modules\\highgui\\src\\window.cpp:1295: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvDestroyAllWindows'\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31merror\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[1], line 37\u001b[0m\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28mprint\u001b[39m(device)\n\u001b[0;32m 36\u001b[0m torch\u001b[38;5;241m.\u001b[39mcuda\u001b[38;5;241m.\u001b[39mempty_cache()\n\u001b[1;32m---> 37\u001b[0m \u001b[43mcv2\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdestroyAllWindows\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 38\u001b[0m gc\u001b[38;5;241m.\u001b[39mcollect()\n", - "\u001b[1;31merror\u001b[0m: OpenCV(4.10.0) D:\\a\\opencv-python\\opencv-python\\opencv\\modules\\highgui\\src\\window.cpp:1295: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvDestroyAllWindows'\n" - ] - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " data_file = np.asarray(np.load(self.sig_filenames[idx], 'r+'), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return data_file, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img, label) in tqdm(dataloaders[phase]):\n", - " img, label = img.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model(img)\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * img.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=None`.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 437/437 [23:49<00:00, 3.27s/it]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0884 Acc: 0.9634\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 187/187 [09:15<00:00, 2.97s/it]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0342 Acc: 0.9873\n", - "\n", - "Epoch : 2\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 84%|██████████████████████████████████████████████████████████████████▊ | 365/437 [19:28<04:18, 3.59s/it]" - ] - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "num_classes = 3\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model1 = models.resnet18(pretrained=False)\n", - "model2 = models.resnet50(pretrained=False)\n", - "model3 = models.resnet101(pretrained=False)\n", - "\n", - "num_classes = 2\n", - "\n", - "model1.fc = nn.Linear(model1.fc.in_features, num_classes)\n", - "model2.fc = nn.Linear(model2.fc.in_features, num_classes)\n", - "model3.fc = nn.Linear(model3.fc.in_features, num_classes)\n", - "\n", - "class Ensemble(nn.Module):\n", - " def __init__(self, model1, model2, model3):\n", - " super(Ensemble, self).__init__()\n", - " self.model1 = model1\n", - " self.model2 = model2\n", - " self.model3 = model3\n", - " self.fc = nn.Linear(3 * num_classes, num_classes)\n", - "\n", - " def forward(self, x):\n", - " x1 = self.model1(x)\n", - " x2 = self.model2(x)\n", - " x3 = self.model3(x)\n", - " x = torch.cat((x1, x2, x3), dim=1)\n", - " x = self.fc(x)\n", - " return x\n", - "\n", - "model = Ensemble(model1, model2, model3)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 10000, path_dataset = \"//192.168.1.64/data/DATASETS/2.4/2.4_learning/\", \n", - " model_name = config_name+\"_2.4_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d18676", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models_2.4-Copy1.ipynb b/train_scripts/Training_models_2.4-Copy1.ipynb deleted file mode 100644 index 40b4db4..0000000 --- a/train_scripts/Training_models_2.4-Copy1.ipynb +++ /dev/null @@ -1,465 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " image_real = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'real.jpg')), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return image_real, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img, label) in tqdm(dataloaders[phase]):\n", - " img, label = img.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model(img)\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * img.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/337 [00:00 42\u001b[0m path_res, model_name \u001b[38;5;241m=\u001b[39m \u001b[43mprepare_and_learning_detection\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnum_classes\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mnum_classes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_samples\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m20000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath_dataset\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m//192.168.11.63/data/DATASETS/Energomash/2400_learning/\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[0;32m 43\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel_name\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mconfig_name\u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m_2.4_jpg_\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconfig_name\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mconfig_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 46\u001b[0m torch\u001b[38;5;241m.\u001b[39mcuda\u001b[38;5;241m.\u001b[39mempty_cache()\n\u001b[0;32m 47\u001b[0m cv2\u001b[38;5;241m.\u001b[39mdestroyAllWindows()\n", - "Cell \u001b[1;32mIn[2], line 108\u001b[0m, in \u001b[0;36mprepare_and_learning_detection\u001b[1;34m(num_classes, num_samples, path_dataset, model_name, config_name, model)\u001b[0m\n\u001b[0;32m 105\u001b[0m optimizer\u001b[38;5;241m.\u001b[39mzero_grad()\n\u001b[0;32m 107\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mset_grad_enabled(phase \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m--> 108\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 109\u001b[0m _, pred \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mmax(output\u001b[38;5;241m.\u001b[39mdata, \u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 110\u001b[0m loss \u001b[38;5;241m=\u001b[39m criterion(output, label)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1553\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1551\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1552\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1562\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1557\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1558\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1560\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1562\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1565\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "Cell \u001b[1;32mIn[10], line 28\u001b[0m, in \u001b[0;36mModel.forward\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x):\n\u001b[0;32m 27\u001b[0m \u001b[38;5;28mprint\u001b[39m(x)\n\u001b[1;32m---> 28\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 29\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m x\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1553\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1551\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1552\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1562\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1557\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1558\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1560\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1562\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1565\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\resnet.py:285\u001b[0m, in \u001b[0;36mResNet.forward\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 284\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[1;32m--> 285\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_forward_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\resnet.py:268\u001b[0m, in \u001b[0;36mResNet._forward_impl\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 266\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_forward_impl\u001b[39m(\u001b[38;5;28mself\u001b[39m, x: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[0;32m 267\u001b[0m \u001b[38;5;66;03m# See note [TorchScript super()]\u001b[39;00m\n\u001b[1;32m--> 268\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconv1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 269\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbn1(x)\n\u001b[0;32m 270\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrelu(x)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1553\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1551\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1552\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1562\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1557\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1558\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1560\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1562\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1565\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\conv.py:458\u001b[0m, in \u001b[0;36mConv2d.forward\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m 457\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[1;32m--> 458\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_conv_forward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mweight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbias\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\conv.py:454\u001b[0m, in \u001b[0;36mConv2d._conv_forward\u001b[1;34m(self, input, weight, bias)\u001b[0m\n\u001b[0;32m 450\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpadding_mode \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mzeros\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 451\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m F\u001b[38;5;241m.\u001b[39mconv2d(F\u001b[38;5;241m.\u001b[39mpad(\u001b[38;5;28minput\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reversed_padding_repeated_twice, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpadding_mode),\n\u001b[0;32m 452\u001b[0m weight, bias, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstride,\n\u001b[0;32m 453\u001b[0m _pair(\u001b[38;5;241m0\u001b[39m), \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdilation, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups)\n\u001b[1;32m--> 454\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconv2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbias\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstride\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 455\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpadding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdilation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[1;31mRuntimeError\u001b[0m: Expected 3D (unbatched) or 4D (batched) input to conv2d, but got input of size: [4, 0]" - ] - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model = models.resnet18(pretrained=True)\n", - "\n", - "num_classes = 2\n", - "\n", - "model.fc = nn.Linear(model.fc.in_features, num_classes)\n", - "\n", - "class Model(nn.Module):\n", - " def __init__(self, model):\n", - " super(Model, self).__init__()\n", - " self.model = model\n", - "\n", - " def forward(self, x):\n", - " print(x)\n", - " x = self.model(x)\n", - " return x\n", - "\n", - "model = Model(model)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 20000, path_dataset = \"//192.168.11.63/data/DATASETS/Energomash/2400_learning/\", \n", - " model_name = config_name+\"_2.4_jpg_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d18676", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c10afb29", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models_2.4-Copy2.ipynb b/train_scripts/Training_models_2.4-Copy2.ipynb deleted file mode 100644 index 6d08155..0000000 --- a/train_scripts/Training_models_2.4-Copy2.ipynb +++ /dev/null @@ -1,772 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "data": { - "text/plain": [ - "12" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " image_real = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'real.jpg')), dtype=np.float32)\n", - " image_imag = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'imag.jpg')), dtype=np.float32)\n", - " image_spec = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'spec.jpg')), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return image_real, image_imag, image_spec, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img1, img2, img3, label) in tqdm(dataloaders[phase]):\n", - " img1, img2, img3, label = img1.to(device), img2.to(device), img3.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model([img1, img2, img3])\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * 3 * img1.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=None`.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [33:47<00:00, 1.73it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.3107 Acc: 0.9612\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [05:45<00:00, 4.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0993 Acc: 0.9893\n", - "\n", - "Epoch : 2\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [25:20<00:00, 2.30it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0911 Acc: 0.9896\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:40<00:00, 5.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0354 Acc: 0.9980\n", - "\n", - "Epoch : 3\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:52<00:00, 2.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0519 Acc: 0.9938\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:13<00:00, 5.92it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0525 Acc: 0.9942\n", - "\n", - "Epoch : 4\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [25:23<00:00, 2.30it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0347 Acc: 0.9961\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:44<00:00, 5.27it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0190 Acc: 0.9975\n", - "\n", - "Epoch : 5\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:50<00:00, 2.35it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0302 Acc: 0.9965\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:22<00:00, 5.72it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0338 Acc: 0.9958\n", - "\n", - "Epoch : 6\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:44<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0223 Acc: 0.9970\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:20<00:00, 5.77it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0111 Acc: 0.9992\n", - "\n", - "Epoch : 7\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:40<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0215 Acc: 0.9979\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:22<00:00, 5.71it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0133 Acc: 0.9982\n", - "\n", - "Epoch : 8\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:42<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0184 Acc: 0.9979\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:17<00:00, 5.83it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0343 Acc: 0.9962\n", - "\n", - "Epoch : 9\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:35<00:00, 2.37it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0090 Acc: 0.9990\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:15<00:00, 5.86it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0175 Acc: 0.9978\n", - "\n", - "Epoch : 10\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [25:01<00:00, 2.33it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0189 Acc: 0.9982\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:47<00:00, 5.21it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0349 Acc: 0.9960\n", - "\n", - "Total time elapsed = 18231.4253906 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAHFCAYAAADmGm0KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB3rUlEQVR4nO3deVhU1f8H8PcwDDAs4oJsLiyuKK5gKFpqmYZLWlpqalpqWpqa9U3NzCWXsjR/pZAbpqZippalpeSuaCiGqSi44wIiLqCiLMP5/XGagZEBAYGBmffreeaRuXNn7rkDMm/O+dxzFEIIASIiIiLSY2HsBhARERGVRwxJRERERAYwJBEREREZwJBEREREZABDEhEREZEBDElEREREBjAkERERERnAkERERERkAEMSERERkQEMSUT0RN9++y0UCgV8fX2N3ZQK6caNG5g4cSKaNGkCe3t72NjYoF69ehg7dizOnj1r7OYRUT4UXJaEiJ6kefPmOH78OADg8OHDCAgIMHKLKo7IyEh0794dQgiMHj0abdq0gZWVFWJjY/Hjjz/i5MmTuHPnjrGbSUQGMCQRUYGOHj2KVq1aoVu3bti6dSuGDx+OJUuWGLtZBqWlpcHW1tbYzdBJTU1FgwYNoFKpEBERgZo1a+bZ5+eff0afPn2e+lgajQZZWVmwtrZ+6tciIonDbURUoOXLlwMAvvjiCwQGBiIsLAxpaWl59rt27Rreeecd1KpVC1ZWVnB3d0efPn1w48YN3T53797Fhx9+CG9vb1hbW8PZ2Rldu3bFmTNnAAB79uyBQqHAnj179F770qVLUCgU+OGHH3TbhgwZAnt7e5w4cQKdO3eGg4MDXnjhBQBAeHg4evbsiZo1a8LGxgZ169bFiBEjkJycnKfdZ86cQf/+/eHi4gJra2vUrl0bb775JtLT03Hp0iVYWlpizpw5eZ63b98+KBQKbNiwId/3bunSpUhMTMTcuXMNBiQAegGpQ4cO6NChQ559hgwZAk9Pzzzvx9y5czFz5kx4eXnB2toaP/30E6ysrDBlyhSD56lQKPDtt9/qtiUmJmLEiBGoWbMmrKys4OXlhenTpyMrKyvfcyIyJ5bGbgARlV8PHz7EunXr0KpVK/j6+uLtt9/GsGHDsGHDBgwePFi337Vr19CqVStkZmbik08+QdOmTXHr1i1s374dd+7cgYuLC+7du4d27drh0qVLmDBhAgICAnD//n3s27cPCQkJaNiwYZHbl5GRgZdffhkjRozAxIkTdR/u58+fR5s2bTBs2DA4Ojri0qVLmD9/Ptq1a4cTJ05ApVIBAI4fP4527drByckJM2bMQL169ZCQkIAtW7YgIyMDnp6eePnll/H999/j448/hlKp1B174cKFcHd3xyuvvJJv+3bs2AGlUokePXoU+dwK49tvv0X9+vXx9ddfo1KlSqhXrx66d++OlStXYvr06bCwyPk7eMWKFbCyssKAAQMAyID0zDPPwMLCAp999hnq1KmDQ4cOYebMmbh06RJWrFhRKm0mqlAEEVE+Vq1aJQCI77//XgghxL1794S9vb149tln9fZ7++23hUqlEjExMfm+1owZMwQAER4enu8+u3fvFgDE7t279bZfvHhRABArVqzQbRs8eLAAIEJDQws8h+zsbJGZmSkuX74sAIhff/1V99jzzz8vKleuLJKSkp7Yps2bN+u2Xbt2TVhaWorp06cXeOyGDRsKV1fXAvfJrX379qJ9+/Z5tg8ePFh4eHjo7mvfjzp16oiMjAy9fbds2SIAiB07dui2ZWVlCXd3d9G7d2/dthEjRgh7e3tx+fJlved//fXXAoA4depUodtNZKo43EZE+Vq+fDnUajX69esHALC3t8drr72G/fv3612V9ccff6Bjx47w8fHJ97X++OMP1K9fH506dSrRNvbu3TvPtqSkJIwcORK1atWCpaUlVCoVPDw8AACnT58GIOuX9u7di9dffx3Vq1fP9/U7dOiAZs2aYdGiRbpt33//PRQKBd55550SPZeievnll3W9YlpBQUFwdXXV6wnavn07rl+/jrffflu37ffff0fHjh3h7u6OrKws3S0oKAgAsHfv3rI5CaJyjCGJiAw6d+4c9u3bh27dukEIgbt37+Lu3bu6GprQ0FDdvjdv3sy35qYo+xSVra0tKlWqpLctOzsbnTt3xqZNm/Dxxx9j586diIyMxOHDhwHIIUQAuHPnDjQaTaHaNGbMGOzcuROxsbHIzMzE0qVL0adPH7i6uhb4vNq1a+PmzZt48OBBMc+wYG5ubnm2WVpaYtCgQdi8eTPu3r0LAPjhhx/g5uaGLl266Pa7ceMGfvvtN6hUKr1b48aNAcBg/RaRuWFIIiKDQkNDIYTAzz//jCpVquhu3bp1AwCs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L774IsLCwpCenl4abaNyJvdM2/+t8EJERGSyihyS3n//fURFRSEqKgqNGjXCmDFj4ObmhtGjR+PYsWOl0UYqJ1iPRERE5qTYNUnNmjXD//3f/+HatWuYOnUqli1bhlatWqFZs2YIDQ0FVzsxPUePyn8ZkoiIyBwUe4HbzMxMbN68GStWrEB4eDhat26NoUOH4vr165g8eTL++usvrF27tiTbSkbEom0iIjI3RQ5Jx44dw4oVK7Bu3ToolUoMGjQI33zzDRo2bKjbp3PnznjuuedKtKFkXCzaJiIic1PkkNSqVSu8+OKLCAkJQa9evaBSqfLs06hRI/Tr169EGkjlQ+6Ztlm0TURE5qDIIenChQvw8PAocB87OzusWLGi2I2i8odF20REZG6KXLidlJSEv//+O8/2v//+G0e1lb1kchiSiIjI3BQ5JI0aNQpXrlzJs/3atWsYNWpUiTSKyheNBvjnH/k1QxIREZmLIoekmJgYtGzZMs/2Fi1aICYmpkQaReVLbGxO0XaDBsZuDRERUdkockiytrbGjRs38mxPSEiApWWxZxSgckw71Na8OYu2iYjIfBQ5JL344ouYNGkSUlJSdNvu3r2LTz75BC+++GKJNo7KB9YjERGROSpy18+8efPw3HPPwcPDAy1atAAAREdHw8XFBatXry7xBpLxaUOSv79x20FERFSWihySatSogX///Rdr1qzB8ePHoVar8dZbb6F///4G50yiik2jAbRL8rEniYiIzEmxiojs7OzwzjvvlHRbqBxi0TYREZmrYldax8TEID4+HhkZGXrbX3755aduFJUfLNomIiJzVawZt1955RWcOHECCoUCQggAgEKhAABoNJqSbSEZFYu2iYjIXBX56raxY8fCy8sLN27cgK2tLU6dOoV9+/bB398fe/bsKYUmkjExJBERkbkqck/SoUOHsGvXLlSvXh0WFhawsLBAu3btMGfOHIwZMwb/aKdmpgqPM20TEZE5K3JPkkajgb29PQDAyckJ169fBwB4eHggNja2ZFtHRhUXBzx4ANjaAg0bGrs1REREZavIPUm+vr74999/4e3tjYCAAMydOxdWVlZYsmQJvL29S6ONZCQs2iYiInNW5JD06aef4sGDBwCAmTNnonv37nj22WdRrVo1rF+/vsQbSMbDeiQiIjJnRQ5JXbp00X3t7e2NmJgY3L59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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "67" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "num_classes = 3\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model1 = models.resnet18(pretrained=False)\n", - "model2 = models.resnet50(pretrained=False)\n", - "model3 = models.resnet101(pretrained=False)\n", - "\n", - "num_classes = 2\n", - "\n", - "model1.fc = nn.Linear(model1.fc.in_features, num_classes)\n", - "model2.fc = nn.Linear(model2.fc.in_features, num_classes)\n", - "model3.fc = nn.Linear(model3.fc.in_features, num_classes)\n", - "\n", - "class Ensemble(nn.Module):\n", - " def __init__(self, model1, model2, model3):\n", - " super(Ensemble, self).__init__()\n", - " self.model1 = model1\n", - " self.model2 = model2\n", - " self.model3 = model3\n", - " self.fc = nn.Linear(3 * num_classes, num_classes)\n", - "\n", - " def forward(self, x):\n", - " x1 = self.model1(x[0])\n", - " x2 = self.model2(x[1])\n", - " x3 = self.model3(x[2])\n", - " x = torch.cat((x1, x2, x3), dim=1)\n", - " x = self.fc(x)\n", - " return x\n", - "\n", - "model = Ensemble(model1, model2, model3)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 20000, path_dataset = \"C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/2.4_jpg_learning/\", \n", - " model_name = config_name+\"_2.4_jpg_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d18676", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models_2.4-Copy3.ipynb b/train_scripts/Training_models_2.4-Copy3.ipynb deleted file mode 100644 index 40b4db4..0000000 --- a/train_scripts/Training_models_2.4-Copy3.ipynb +++ /dev/null @@ -1,465 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " image_real = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'real.jpg')), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return image_real, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img, label) in tqdm(dataloaders[phase]):\n", - " img, label = img.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model(img)\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * img.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/337 [00:00 42\u001b[0m path_res, model_name \u001b[38;5;241m=\u001b[39m \u001b[43mprepare_and_learning_detection\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnum_classes\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mnum_classes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_samples\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m20000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath_dataset\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m//192.168.11.63/data/DATASETS/Energomash/2400_learning/\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[0;32m 43\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel_name\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mconfig_name\u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m_2.4_jpg_\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconfig_name\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mconfig_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 46\u001b[0m torch\u001b[38;5;241m.\u001b[39mcuda\u001b[38;5;241m.\u001b[39mempty_cache()\n\u001b[0;32m 47\u001b[0m cv2\u001b[38;5;241m.\u001b[39mdestroyAllWindows()\n", - "Cell \u001b[1;32mIn[2], line 108\u001b[0m, in \u001b[0;36mprepare_and_learning_detection\u001b[1;34m(num_classes, num_samples, path_dataset, model_name, config_name, model)\u001b[0m\n\u001b[0;32m 105\u001b[0m optimizer\u001b[38;5;241m.\u001b[39mzero_grad()\n\u001b[0;32m 107\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mset_grad_enabled(phase \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m--> 108\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 109\u001b[0m _, pred \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mmax(output\u001b[38;5;241m.\u001b[39mdata, \u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 110\u001b[0m loss \u001b[38;5;241m=\u001b[39m criterion(output, label)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1553\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1551\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1552\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1562\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1557\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1558\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1560\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1562\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1565\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "Cell \u001b[1;32mIn[10], line 28\u001b[0m, in \u001b[0;36mModel.forward\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x):\n\u001b[0;32m 27\u001b[0m \u001b[38;5;28mprint\u001b[39m(x)\n\u001b[1;32m---> 28\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 29\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m x\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1553\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1551\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1552\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1562\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1557\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1558\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1560\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1562\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1565\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\resnet.py:285\u001b[0m, in \u001b[0;36mResNet.forward\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 284\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[1;32m--> 285\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_forward_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\resnet.py:268\u001b[0m, in \u001b[0;36mResNet._forward_impl\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 266\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_forward_impl\u001b[39m(\u001b[38;5;28mself\u001b[39m, x: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[0;32m 267\u001b[0m \u001b[38;5;66;03m# See note [TorchScript super()]\u001b[39;00m\n\u001b[1;32m--> 268\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconv1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 269\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbn1(x)\n\u001b[0;32m 270\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrelu(x)\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1553\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1551\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 1552\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1562\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1557\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1558\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1559\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m 1560\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1562\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1565\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\conv.py:458\u001b[0m, in \u001b[0;36mConv2d.forward\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m 457\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[1;32m--> 458\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_conv_forward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mweight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbias\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32m~\\miniconda3\\envs\\python311\\Lib\\site-packages\\torch\\nn\\modules\\conv.py:454\u001b[0m, in \u001b[0;36mConv2d._conv_forward\u001b[1;34m(self, input, weight, bias)\u001b[0m\n\u001b[0;32m 450\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpadding_mode \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mzeros\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 451\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m F\u001b[38;5;241m.\u001b[39mconv2d(F\u001b[38;5;241m.\u001b[39mpad(\u001b[38;5;28minput\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reversed_padding_repeated_twice, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpadding_mode),\n\u001b[0;32m 452\u001b[0m weight, bias, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstride,\n\u001b[0;32m 453\u001b[0m _pair(\u001b[38;5;241m0\u001b[39m), \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdilation, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgroups)\n\u001b[1;32m--> 454\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconv2d\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbias\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstride\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 455\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpadding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdilation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroups\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[1;31mRuntimeError\u001b[0m: Expected 3D (unbatched) or 4D (batched) input to conv2d, but got input of size: [4, 0]" - ] - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model = models.resnet18(pretrained=True)\n", - "\n", - "num_classes = 2\n", - "\n", - "model.fc = nn.Linear(model.fc.in_features, num_classes)\n", - "\n", - "class Model(nn.Module):\n", - " def __init__(self, model):\n", - " super(Model, self).__init__()\n", - " self.model = model\n", - "\n", - " def forward(self, x):\n", - " print(x)\n", - " x = self.model(x)\n", - " return x\n", - "\n", - "model = Model(model)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 20000, path_dataset = \"//192.168.11.63/data/DATASETS/Energomash/2400_learning/\", \n", - " model_name = config_name+\"_2.4_jpg_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d18676", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c10afb29", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models_2.4.ipynb b/train_scripts/Training_models_2.4.ipynb deleted file mode 100644 index 6d08155..0000000 --- a/train_scripts/Training_models_2.4.ipynb +++ /dev/null @@ -1,772 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "data": { - "text/plain": [ - "12" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " image_real = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'real.jpg')), dtype=np.float32)\n", - " image_imag = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'imag.jpg')), dtype=np.float32)\n", - " image_spec = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'spec.jpg')), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return image_real, image_imag, image_spec, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img1, img2, img3, label) in tqdm(dataloaders[phase]):\n", - " img1, img2, img3, label = img1.to(device), img2.to(device), img3.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model([img1, img2, img3])\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * 3 * img1.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=None`.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [33:47<00:00, 1.73it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.3107 Acc: 0.9612\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [05:45<00:00, 4.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0993 Acc: 0.9893\n", - "\n", - "Epoch : 2\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [25:20<00:00, 2.30it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0911 Acc: 0.9896\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:40<00:00, 5.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0354 Acc: 0.9980\n", - "\n", - "Epoch : 3\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:52<00:00, 2.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0519 Acc: 0.9938\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:13<00:00, 5.92it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0525 Acc: 0.9942\n", - "\n", - "Epoch : 4\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [25:23<00:00, 2.30it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0347 Acc: 0.9961\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:44<00:00, 5.27it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0190 Acc: 0.9975\n", - "\n", - "Epoch : 5\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:50<00:00, 2.35it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0302 Acc: 0.9965\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:22<00:00, 5.72it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0338 Acc: 0.9958\n", - "\n", - "Epoch : 6\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:44<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0223 Acc: 0.9970\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:20<00:00, 5.77it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0111 Acc: 0.9992\n", - "\n", - "Epoch : 7\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:40<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0215 Acc: 0.9979\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:22<00:00, 5.71it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0133 Acc: 0.9982\n", - "\n", - "Epoch : 8\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:42<00:00, 2.36it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0184 Acc: 0.9979\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:17<00:00, 5.83it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0343 Acc: 0.9962\n", - "\n", - "Epoch : 9\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [24:35<00:00, 2.37it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0090 Acc: 0.9990\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:15<00:00, 5.86it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0175 Acc: 0.9978\n", - "\n", - "Epoch : 10\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 3500/3500 [25:01<00:00, 2.33it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0189 Acc: 0.9982\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 1500/1500 [04:47<00:00, 5.21it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0349 Acc: 0.9960\n", - "\n", - "Total time elapsed = 18231.4253906 seconds\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAHFCAYAAADmGm0KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB3rUlEQVR4nO3deVhU1f8H8PcwDDAs4oJsLiyuKK5gKFpqmYZLWlpqalpqWpqa9U3NzCWXsjR/pZAbpqZippalpeSuaCiGqSi44wIiLqCiLMP5/XGagZEBAYGBmffreeaRuXNn7rkDMm/O+dxzFEIIASIiIiLSY2HsBhARERGVRwxJRERERAYwJBEREREZwJBEREREZABDEhEREZEBDElEREREBjAkERERERnAkERERERkAEMSERERkQEMSUT0RN9++y0UCgV8fX2N3ZQK6caNG5g4cSKaNGkCe3t72NjYoF69ehg7dizOnj1r7OYRUT4UXJaEiJ6kefPmOH78OADg8OHDCAgIMHKLKo7IyEh0794dQgiMHj0abdq0gZWVFWJjY/Hjjz/i5MmTuHPnjrGbSUQGMCQRUYGOHj2KVq1aoVu3bti6dSuGDx+OJUuWGLtZBqWlpcHW1tbYzdBJTU1FgwYNoFKpEBERgZo1a+bZ5+eff0afPn2e+lgajQZZWVmwtrZ+6tciIonDbURUoOXLlwMAvvjiCwQGBiIsLAxpaWl59rt27Rreeecd1KpVC1ZWVnB3d0efPn1w48YN3T53797Fhx9+CG9vb1hbW8PZ2Rldu3bFmTNnAAB79uyBQqHAnj179F770qVLUCgU+OGHH3TbhgwZAnt7e5w4cQKdO3eGg4MDXnjhBQBAeHg4evbsiZo1a8LGxgZ169bFiBEjkJycnKfdZ86cQf/+/eHi4gJra2vUrl0bb775JtLT03Hp0iVYWlpizpw5eZ63b98+KBQKbNiwId/3bunSpUhMTMTcuXMNBiQAegGpQ4cO6NChQ559hgwZAk9Pzzzvx9y5czFz5kx4eXnB2toaP/30E6ysrDBlyhSD56lQKPDtt9/qtiUmJmLEiBGoWbMmrKys4OXlhenTpyMrKyvfcyIyJ5bGbgARlV8PHz7EunXr0KpVK/j6+uLtt9/GsGHDsGHDBgwePFi337Vr19CqVStkZmbik08+QdOmTXHr1i1s374dd+7cgYuLC+7du4d27drh0qVLmDBhAgICAnD//n3s27cPCQkJaNiwYZHbl5GRgZdffhkjRozAxIkTdR/u58+fR5s2bTBs2DA4Ojri0qVLmD9/Ptq1a4cTJ05ApVIBAI4fP4527drByckJM2bMQL169ZCQkIAtW7YgIyMDnp6eePnll/H999/j448/hlKp1B174cKFcHd3xyuvvJJv+3bs2AGlUokePXoU+dwK49tvv0X9+vXx9ddfo1KlSqhXrx66d++OlStXYvr06bCwyPk7eMWKFbCyssKAAQMAyID0zDPPwMLCAp999hnq1KmDQ4cOYebMmbh06RJWrFhRKm0mqlAEEVE+Vq1aJQCI77//XgghxL1794S9vb149tln9fZ7++23hUqlEjExMfm+1owZMwQAER4enu8+u3fvFgDE7t279bZfvHhRABArVqzQbRs8eLAAIEJDQws8h+zsbJGZmSkuX74sAIhff/1V99jzzz8vKleuLJKSkp7Yps2bN+u2Xbt2TVhaWorp06cXeOyGDRsKV1fXAvfJrX379qJ9+/Z5tg8ePFh4eHjo7mvfjzp16oiMjAy9fbds2SIAiB07dui2ZWVlCXd3d9G7d2/dthEjRgh7e3tx+fJlved//fXXAoA4depUodtNZKo43EZE+Vq+fDnUajX69esHALC3t8drr72G/fv3612V9ccff6Bjx47w8fHJ97X++OMP1K9fH506dSrRNvbu3TvPtqSkJIwcORK1atWCpaUlVCoVPDw8AACnT58GIOuX9u7di9dffx3Vq1fP9/U7dOiAZs2aYdGiRbpt33//PRQKBd55550SPZeievnll3W9YlpBQUFwdXXV6wnavn07rl+/jrffflu37ffff0fHjh3h7u6OrKws3S0oKAgAsHfv3rI5CaJyjCGJiAw6d+4c9u3bh27dukEIgbt37+Lu3bu6GprQ0FDdvjdv3sy35qYo+xSVra0tKlWqpLctOzsbnTt3xqZNm/Dxxx9j586diIyMxOHDhwHIIUQAuHPnDjQaTaHaNGbMGOzcuROxsbHIzMzE0qVL0adPH7i6uhb4vNq1a+PmzZt48OBBMc+wYG5ubnm2WVpaYtCgQdi8eTPu3r0LAPjhhx/g5uaGLl266Pa7ceMGfvvtN6hUKr1b48aNAcBg/RaRuWFIIiKDQkNDIYTAzz//jCpVquhu3bp1AwCs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L774IsLCwpCenl4abaNyJvdM2/+t8EJERGSyihyS3n//fURFRSEqKgqNGjXCmDFj4ObmhtGjR+PYsWOl0UYqJ1iPRERE5qTYNUnNmjXD//3f/+HatWuYOnUqli1bhlatWqFZs2YIDQ0FVzsxPUePyn8ZkoiIyBwUe4HbzMxMbN68GStWrEB4eDhat26NoUOH4vr165g8eTL++usvrF27tiTbSkbEom0iIjI3RQ5Jx44dw4oVK7Bu3ToolUoMGjQI33zzDRo2bKjbp3PnznjuuedKtKFkXCzaJiIic1PkkNSqVSu8+OKLCAkJQa9evaBSqfLs06hRI/Tr169EGkjlQ+6Ztlm0TURE5qDIIenChQvw8PAocB87OzusWLGi2I2i8odF20REZG6KXLidlJSEv//+O8/2v//+G0e1lb1kchiSiIjI3BQ5JI0aNQpXrlzJs/3atWsYNWpUiTSKyheNBvjnH/k1QxIREZmLIoekmJgYtGzZMs/2Fi1aICYmpkQaReVLbGxO0XaDBsZuDRERUdkockiytrbGjRs38mxPSEiApWWxZxSgckw71Na8OYu2iYjIfBQ5JL344ouYNGkSUlJSdNvu3r2LTz75BC+++GKJNo7KB9YjERGROSpy18+8efPw3HPPwcPDAy1atAAAREdHw8XFBatXry7xBpLxaUOSv79x20FERFSWihySatSogX///Rdr1qzB8ePHoVar8dZbb6F///4G50yiik2jAbRL8rEniYiIzEmxiojs7OzwzjvvlHRbqBxi0TYREZmrYldax8TEID4+HhkZGXrbX3755aduFJUfLNomIiJzVawZt1955RWcOHECCoUCQggAgEKhAABoNJqSbSEZFYu2iYjIXBX56raxY8fCy8sLN27cgK2tLU6dOoV9+/bB398fe/bsKYUmkjExJBERkbkqck/SoUOHsGvXLlSvXh0WFhawsLBAu3btMGfOHIwZMwb/aKdmpgqPM20TEZE5K3JPkkajgb29PQDAyckJ169fBwB4eHggNja2ZFtHRhUXBzx4ANjaAg0bGrs1REREZavIPUm+vr74999/4e3tjYCAAMydOxdWVlZYsmQJvL29S6ONZCQs2iYiInNW5JD06aef4sGDBwCAmTNnonv37nj22WdRrVo1rF+/vsQbSMbDeiQiIjJnRQ5JXbp00X3t7e2NmJgY3L59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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "67" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "num_classes = 3\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model1 = models.resnet18(pretrained=False)\n", - "model2 = models.resnet50(pretrained=False)\n", - "model3 = models.resnet101(pretrained=False)\n", - "\n", - "num_classes = 2\n", - "\n", - "model1.fc = nn.Linear(model1.fc.in_features, num_classes)\n", - "model2.fc = nn.Linear(model2.fc.in_features, num_classes)\n", - "model3.fc = nn.Linear(model3.fc.in_features, num_classes)\n", - "\n", - "class Ensemble(nn.Module):\n", - " def __init__(self, model1, model2, model3):\n", - " super(Ensemble, self).__init__()\n", - " self.model1 = model1\n", - " self.model2 = model2\n", - " self.model3 = model3\n", - " self.fc = nn.Linear(3 * num_classes, num_classes)\n", - "\n", - " def forward(self, x):\n", - " x1 = self.model1(x[0])\n", - " x2 = self.model2(x[1])\n", - " x3 = self.model3(x[2])\n", - " x = torch.cat((x1, x2, x3), dim=1)\n", - " x = self.fc(x)\n", - " return x\n", - "\n", - "model = Ensemble(model1, model2, model3)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 20000, path_dataset = \"C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/2.4_jpg_learning/\", \n", - " model_name = config_name+\"_2.4_jpg_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d18676", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models_915-Copy1.ipynb b/train_scripts/Training_models_915-Copy1.ipynb deleted file mode 100644 index 20a6384..0000000 --- a/train_scripts/Training_models_915-Copy1.ipynb +++ /dev/null @@ -1,759 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "data": { - "text/plain": [ - "12" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " image_real = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'real.jpg')), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return image_real, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img, label) in tqdm(dataloaders[phase]):\n", - " img, label = img.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model(img)\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * img.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:56<00:00, 5.63it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.1856 Acc: 0.9362\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:35<00:00, 8.03it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0901 Acc: 0.9654\n", - "\n", - "Epoch : 2\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:50<00:00, 5.95it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.1103 Acc: 0.9556\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:36<00:00, 7.63it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.1421 Acc: 0.9211\n", - "\n", - "Epoch : 3\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:40<00:00, 6.57it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0895 Acc: 0.9636\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:32<00:00, 8.76it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.1153 Acc: 0.9610\n", - "\n", - "Epoch : 4\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:42<00:00, 6.45it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0745 Acc: 0.9704\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:36<00:00, 7.81it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.1168 Acc: 0.9610\n", - "\n", - "Epoch : 5\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:47<00:00, 6.10it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0599 Acc: 0.9776\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:34<00:00, 8.27it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0316 Acc: 0.9902\n", - "\n", - "Epoch : 6\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:46<00:00, 6.16it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0383 Acc: 0.9856\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:35<00:00, 8.04it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0240 Acc: 0.9929\n", - "\n", - "Epoch : 7\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:49<00:00, 6.01it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0185 Acc: 0.9932\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:33<00:00, 8.31it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0139 Acc: 0.9956\n", - "\n", - "Epoch : 8\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:48<00:00, 6.09it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0272 Acc: 0.9905\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:36<00:00, 7.82it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0361 Acc: 0.9876\n", - "\n", - "Epoch : 9\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:46<00:00, 6.16it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0194 Acc: 0.9947\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:38<00:00, 7.37it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0092 Acc: 0.9973\n", - "\n", - "Epoch : 10\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [01:49<00:00, 6.01it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.0156 Acc: 0.9935\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:34<00:00, 8.16it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.0283 Acc: 0.9894\n", - "\n", - "Total time elapsed = 1432.5218361000007 seconds\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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HTvinXfewa1bt4x6n0SkJ0ZbdpWI6DkNGDBAWFpaCnt7e51t2rRpQgghAIhhw4bpvMfPz0/873//E0IIsWzZMuHk5CTu3bunfX379u3CwsJCJCQkCCGEcHd3FxMmTMgzBgBi4sSJ2uf37t0TKpVK7Ny5U2/3SUTGwzFARGQS/P39sXTpUp19zs7O2sdNmzbVea1p06aIjo4GAJw5cwb169eHvb299vXmzZsjKysLMTExUKlUuH79Ol555ZV8Y6hXr572sb29PRwcHJCYmPi8t0RECmICREQmwd7ePkeX1LOoVCoAgBBC+zi3Y+zs7Ap0PrVaneO9WVlZhYqJiIoGjgEiomLh8OHDOZ7XrFkTAFCrVi1ER0fj/v372tcPHjwICwsLVK9eHQ4ODvD09MSuXbuMGjMRKYctQERkEtLS0pCQkKCzz8rKCmXLlgUAbNiwAb6+vmjRogV++uknREREYOXKlQCAd955B5MnT8aAAQMwZcoU/Pfffxg5ciT69esHFxcXAMCUKVMwbNgwlC9fHh06dMDdu3dx8OBBjBw50rg3SkRGwQSIiEzC77//Djc3N519NWrUwNmzZwHICq2QkBB88MEHcHV1xU8//YRatWoBAEqUKIE//vgDo0aNQuPGjVGiRAn06NEDc+fO1Z5rwIABePjwIebNm4dPPvkEZcuWRc+ePY13g0RkVCohhFA6CCKiF6FSqbB582Z0795d6VCIyERwDBARERGZHSZAREREZHY4BoiITB578omosNgCRERERGaHCRARERGZHSZAREREZHaYABEREZHZYQJEREREZocJEBEREZkdJkBERERkdpgAERERkdlhAkRERERm5/9RqjhgABHcPQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "67" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model = models.resnet18(pretrained=True)\n", - "\n", - "num_classes = 2\n", - "\n", - "model.fc = nn.Linear(model.fc.in_features, num_classes)\n", - "\n", - "class Model(nn.Module):\n", - " def __init__(self, model):\n", - " super(Model, self).__init__()\n", - " self.model = model\n", - "\n", - " def forward(self, x):\n", - " x = self.model(x)\n", - " return x\n", - "\n", - "model = Model(model)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 20000, path_dataset = \"C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/915_jpg_learning/\", \n", - " model_name = config_name+\"_915_jpg_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4234ee26", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ebb4d1db", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Training_models_915.ipynb b/train_scripts/Training_models_915.ipynb deleted file mode 100644 index 945e2be..0000000 --- a/train_scripts/Training_models_915.ipynb +++ /dev/null @@ -1,503 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5a13ad6b-56c9-4381-b376-1765f6dd7553", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Импортирование библиотек" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "7311cb4a-5bf3-4268-b431-43eea10e9ed6", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - }, - { - "data": { - "text/plain": [ - "12" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torch import default_generator, randperm\n", - "from torch.utils.data.dataset import Subset\n", - "import torchvision.transforms as transforms\n", - "from torchvision.io import read_image\n", - "from importlib import import_module\n", - "import matplotlib.pyplot as plt\n", - "from torchvision import models\n", - "import torch, torchvision\n", - "from pathlib import Path\n", - "from PIL import Image\n", - "import torch.nn as nn\n", - "from tqdm import tqdm\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib\n", - "import os, shutil\n", - "import mlconfig\n", - "import random\n", - "import shutil\n", - "import timeit\n", - "import copy\n", - "import time\n", - "import cv2\n", - "import csv\n", - "import sys\n", - "import io\n", - "import gc\n", - "\n", - "plt.rcParams[\"savefig.bbox\"] = 'tight'\n", - "torch.manual_seed(1)\n", - "#matplotlib.use('Agg')\n", - "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", - "print(device)\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()" - ] - }, - { - "cell_type": "markdown", - "id": "384de097-82c6-41f5-bda9-b2f54bc99593", - "metadata": { - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "# Подготовка и обучение детектирование" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "46e4dc99-6994-4fee-a32e-f3983bd991bd", - "metadata": {}, - "outputs": [], - "source": [ - "def prepare_and_learning_detection(num_classes, num_samples, path_dataset, model_name, config_name, model):\n", - " num_samples_per_class = num_samples // num_classes\n", - "\n", - " #----------Создаём папку для сохранения результатов обучения--------------\n", - " \n", - " ind = 1\n", - " while True:\n", - " if os.path.exists(\"models/\" + model_name + str(ind)):\n", - " ind += 1\n", - " else:\n", - " os.mkdir(\"models/\" + model_name + str(ind))\n", - " path_res = \"models/\" + model_name + str(ind) + '/'\n", - " break\n", - " \n", - " #----------Создаём файл dataset.csv для обучения--------------\n", - " \n", - " pd_columns = ['file_name']\n", - " df = pd.DataFrame(columns=pd_columns)\n", - " \n", - " subdirs = os.listdir(path_dataset)\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " num_samples_per_class = min(num_samples_per_class, len(files))\n", - " for subdir in subdirs:\n", - " files = os.listdir(path_dataset + subdir + '/')\n", - " random.shuffle(files)\n", - " files_to_process = files[:num_samples_per_class]\n", - " for file in files_to_process:\n", - " row = pd.DataFrame({pd_columns[0]: [str(path_dataset + subdir + '/' + file)]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - " \n", - " df.to_csv(path_res + 'dataset.csv', index=False)\n", - " \n", - " #----------Импортируем параметры для обучения--------------\n", - " \n", - " def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - " config = mlconfig.load('config_' + config_name + '.yaml')\n", - " \n", - " #----------Создаём класс датасета--------------\n", - " \n", - " class MyDataset(Dataset):\n", - " def __init__(self, path_dataset, csv_file):\n", - " data=[]\n", - " with open(path_dataset + csv_file, newline='') as csvfile:\n", - " reader = csv.reader(csvfile, delimiter=' ', quotechar='|')\n", - " for row in list(reader)[1:]:\n", - " row = str(row)\n", - " data.append(row[2: len(row)-2])\n", - " self.sig_filenames = data\n", - " self.path_dataset = path_dataset\n", - " \n", - " def __len__(self):\n", - " return len(self.sig_filenames)\n", - " \n", - " def __getitem__(self, idx):\n", - " image_real = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'real.jpg')), dtype=np.float32)\n", - " image_imag = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'imag.jpg')), dtype=np.float32)\n", - " image_spec = np.asarray(cv2.split(cv2.imread(self.sig_filenames[idx][:-8]+'spec.jpg')), dtype=np.float32)\n", - " if 'drone' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(0)\n", - " if 'noise' in list(self.sig_filenames[idx].split('/')):\n", - " label = torch.tensor(1)\n", - " return image_real, image_imag, image_spec, label\n", - " \n", - " #----------Создаём датасет--------------\n", - " \n", - " dataset = MyDataset(path_dataset=path_res, csv_file='dataset.csv')\n", - " train_set, valid_set = torch.utils.data.random_split(dataset, [0.7, 0.3], generator=torch.Generator().manual_seed(42))\n", - " batch_size = config.batch_size\n", - " train_dataloader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " valid_dataloader = torch.utils.data.DataLoader(valid_set, batch_size=batch_size, shuffle=True, drop_last=True)\n", - " \n", - " dataloaders = {}\n", - " dataloaders['train'] = train_dataloader\n", - " dataloaders['val'] = valid_dataloader\n", - " dataset_sizes = {}\n", - " dataset_sizes['train'] = len(train_set)\n", - " dataset_sizes['val'] = len(valid_set)\n", - "\n", - " #----------Обучаем модель--------------\n", - "\n", - " val_loss = []\n", - " val_acc = []\n", - " train_loss = []\n", - " train_acc = []\n", - " epochs = config.epoch\n", - " \n", - " best_acc = 0.0\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " limit = config.limit\n", - " epoch_limit = epochs\n", - " \n", - " start = timeit.default_timer()\n", - " for epoch in range(1, epochs+1):\n", - " print(f\"Epoch : {epoch}\\n\")\n", - " dataloader = None\n", - " \n", - " for phase in ['train', 'val']:\n", - " running_loss = 0.0\n", - " running_corrects = 0\n", - " \n", - " for (img1, img2, img3, label) in tqdm(dataloaders[phase]):\n", - " img1, img2, img3, label = img1.to(device), img2.to(device), img3.to(device), label.to(device)\n", - " optimizer.zero_grad()\n", - " \n", - " with torch.set_grad_enabled(phase == 'train'):\n", - " output = model([img1, img2, img3])\n", - " _, pred = torch.max(output.data, 1)\n", - " loss = criterion(output, label)\n", - " if phase=='train' :\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " running_loss += loss.item() * 3 * img1.size(0)\n", - " running_corrects += torch.sum(pred == label.data)\n", - " \n", - " epoch_loss = running_loss / dataset_sizes[phase]\n", - " epoch_acc = running_corrects.double() / dataset_sizes[phase]\n", - " \n", - " print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))\n", - " \n", - " if phase=='train' :\n", - " train_loss.append(epoch_loss)\n", - " train_acc.append(epoch_acc)\n", - " else :\n", - " val_loss.append(epoch_loss)\n", - " val_acc.append(epoch_acc)\n", - " if val_acc[-1] > best_acc :\n", - " ind_limit = 0\n", - " best_acc = val_acc[-1]\n", - " best_model = copy.deepcopy(model.state_dict())\n", - " torch.save(best_model, path_res + model_name + '.pth')\n", - " else:\n", - " ind_limit += 1\n", - " \n", - " if ind_limit >= limit:\n", - " break\n", - " \n", - " if ind_limit >= limit:\n", - " epoch_limit = epoch\n", - " break\n", - " \n", - " print()\n", - " \n", - " end = timeit.default_timer()\n", - " print(f\"Total time elapsed = {end - start} seconds\")\n", - " epoch_limit += 1\n", - " \n", - " #----------Вывод графиков и сохранение результатов обучения--------------\n", - " \n", - " train_acc = np.asarray(list(map(lambda x: x.item(), train_acc)))\n", - " val_acc = np.asarray(list(map(lambda x: x.item(), val_acc)))\n", - " \n", - " np.save(path_res+'train_acc.npy', train_acc)\n", - " np.save(path_res+'val_acc.npy', val_acc)\n", - " np.save(path_res+'train_loss.npy', train_loss)\n", - " np.save(path_res+'val_loss.npy', val_loss)\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_loss, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_loss, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Loss')\n", - " plt.title('Loss Curve')\n", - " plt.legend(['Train Loss', 'Validation Loss'])\n", - " plt.show()\n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " \n", - " plt.figure()\n", - " plt.plot(range(1,epoch_limit), train_acc, color='blue')\n", - " plt.plot(range(1,epoch_limit), val_acc, color='red')\n", - " plt.xlabel('Epoch')\n", - " plt.ylabel('Accuracy')\n", - " plt.title('Accuracy Curve')\n", - " plt.legend(['Train Accuracy', 'Validation Accuracy'])\n", - " plt.show()\n", - " \n", - " plt.clf()\n", - " plt.cla()\n", - " plt.close()\n", - " torch.cuda.empty_cache()\n", - " cv2.destroyAllWindows()\n", - " del model\n", - " gc.collect()\n", - "\n", - " return path_res, model_name" - ] - }, - { - "cell_type": "markdown", - "id": "93c136ee", - "metadata": {}, - "source": [ - "### Ensemble" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52e8d4c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - " warnings.warn(\n", - "C:\\Users\\snytk\\miniconda3\\envs\\python311\\Lib\\site-packages\\torchvision\\models\\_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=None`.\n", - " warnings.warn(msg)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch : 1\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████| 658/658 [1:00:26<00:00, 5.51s/it]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.6663 Acc: 0.9241\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [02:45<00:00, 1.71it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.4023 Acc: 0.9557\n", - "\n", - "Epoch : 2\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 658/658 [43:11<00:00, 3.94s/it]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "train Loss: 0.4096 Acc: 0.9514\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████| 282/282 [00:47<00:00, 5.98it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "val Loss: 0.3390 Acc: 0.9574\n", - "\n", - "Epoch : 3\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 8%|██████▍ | 52/658 [04:26<51:43, 5.12s/it]" - ] - } - ], - "source": [ - "#----------Инициализируем модель и параметры обучения--------------\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "gc.collect()\n", - "\n", - "num_classes = 3\n", - "config_name = \"ensemble\"\n", - " \n", - "def load_function(attr):\n", - " module_, func = attr.rsplit('.', maxsplit=1)\n", - " return getattr(import_module(module_), func)\n", - " \n", - "config = mlconfig.load('config_' + config_name + '.yaml')\n", - "\n", - "model1 = models.resnet18(pretrained=False)\n", - "model2 = models.resnet50(pretrained=False)\n", - "model3 = models.resnet101(pretrained=False)\n", - "\n", - "num_classes = 2\n", - "\n", - "model1.fc = nn.Linear(model1.fc.in_features, num_classes)\n", - "model2.fc = nn.Linear(model2.fc.in_features, num_classes)\n", - "model3.fc = nn.Linear(model3.fc.in_features, num_classes)\n", - "\n", - "class Ensemble(nn.Module):\n", - " def __init__(self, model1, model2, model3):\n", - " super(Ensemble, self).__init__()\n", - " self.model1 = model1\n", - " self.model2 = model2\n", - " self.model3 = model3\n", - " self.fc = nn.Linear(3 * num_classes, num_classes)\n", - "\n", - " def forward(self, x):\n", - " x1 = self.model1(x[0])\n", - " x2 = self.model2(x[1])\n", - " x3 = self.model3(x[2])\n", - " x = torch.cat((x1, x2, x3), dim=1)\n", - " x = self.fc(x)\n", - " return x\n", - "\n", - "model = Ensemble(model1, model2, model3)\n", - "\n", - "optimizer = load_function(config.optimizer.name)(model.parameters(), lr=config.optimizer.lr)\n", - "criterion = load_function(config.loss_function.name)()\n", - "scheduler = load_function(config.scheduler.name)(optimizer, step_size=config.scheduler.step_size, gamma=config.scheduler.gamma)\n", - "\n", - "if device != 'cpu':\n", - " model = model.to(device)\n", - "\n", - "#----------Создания датасета и обучение модели--------------\n", - "\n", - "path_res, model_name = prepare_and_learning_detection(num_classes = num_classes, num_samples = 5000, path_dataset = \"C:/Users/snytk/Lerning_NN_for_work/datasets_jpg/915_jpg_learning/\", \n", - " model_name = config_name+\"_915_jpg_\", config_name = config_name, model=model)\n", - "\n", - "\n", - "torch.cuda.empty_cache()\n", - "cv2.destroyAllWindows()\n", - "del model\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d18676", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eab69324", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Отсутствует", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/Untitled.ipynb b/train_scripts/Untitled.ipynb deleted file mode 100644 index 5ebef6e..0000000 --- a/train_scripts/Untitled.ipynb +++ /dev/null @@ -1,370 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 13, - "id": "c1b1a484", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['id', 'module_id', 'createdAt', 'registeredAt', 'data', 'createdBy', 'type']\n", - "['291725', '1', '2025-02-14 13:58:03', '2025-02-14 13:58:01', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291722', '1', '2025-02-14 13:57:32', '2025-02-14 13:57:30', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291721', '1', '2025-02-14 13:57:29', '2025-02-14 13:57:27', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291718', '1', '2025-02-14 13:56:58', '2025-02-14 13:56:55', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291715', '1', '2025-02-14 13:56:26', '2025-02-14 13:56:24', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291711', '1', '2025-02-14 13:55:53', '2025-02-14 13:55:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291710', '1', '2025-02-14 13:55:50', '2025-02-14 13:55:48', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291706', '1', '2025-02-14 13:55:17', '2025-02-14 13:55:15', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291700', '1', '2025-02-14 13:54:15', '2025-02-14 13:54:13', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291697', '1', '2025-02-14 13:53:44', '2025-02-14 13:53:42', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291696', '1', '2025-02-14 13:53:41', '2025-02-14 13:53:39', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291693', '1', '2025-02-14 13:53:10', '2025-02-14 13:53:07', '[{\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291692', '1', '2025-02-14 13:53:07', '2025-02-14 13:53:05', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291688', '1', '2025-02-14 13:52:34', '2025-02-14 13:52:32', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291685', '1', '2025-02-14 13:52:03', '2025-02-14 13:52:01', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291684', '1', '2025-02-14 13:52:01', '2025-02-14 13:51:59', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291681', '1', '2025-02-14 13:51:30', '2025-02-14 13:51:28', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291677', '1', '2025-02-14 13:50:57', '2025-02-14 13:50:55', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291676', '1', '2025-02-14 13:50:53', '2025-02-14 13:50:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291673', '1', '2025-02-14 13:50:21', '2025-02-14 13:50:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291672', '1', '2025-02-14 13:50:18', '2025-02-14 13:50:16', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291669', '1', '2025-02-14 13:49:47', '2025-02-14 13:49:45', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291668', '1', '2025-02-14 13:49:36', '2025-02-14 13:49:34', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291665', '1', '2025-02-14 13:49:05', '2025-02-14 13:49:03', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291664', '1', '2025-02-14 13:49:03', '2025-02-14 13:49:01', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291661', '1', '2025-02-14 13:48:32', '2025-02-14 13:48:30', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291657', '1', '2025-02-14 13:47:59', '2025-02-14 13:47:57', '[{\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291656', '1', '2025-02-14 13:47:56', '2025-02-14 13:47:54', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291653', '1', '2025-02-14 13:47:24', '2025-02-14 13:47:22', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291621', '1', '2025-02-14 13:15:52', '2025-02-14 13:15:50', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291615', '1', '2025-02-14 13:14:50', '2025-02-14 13:14:48', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291614', '1', '2025-02-14 13:14:45', '2025-02-14 13:14:43', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291611', '1', '2025-02-14 13:14:14', '2025-02-14 13:14:12', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291607', '1', '2025-02-14 13:13:38', '2025-02-14 13:13:36', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291551', '1', '2025-02-14 12:17:59', '2025-02-14 12:17:57', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291548', '1', '2025-02-14 12:17:28', '2025-02-14 12:17:26', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291547', '1', '2025-02-14 12:17:26', '2025-02-14 12:17:24', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291544', '1', '2025-02-14 12:16:55', '2025-02-14 12:16:53', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291543', '1', '2025-02-14 12:16:51', '2025-02-14 12:16:49', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291540', '1', '2025-02-14 12:16:20', '2025-02-14 12:16:18', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291335', '1', '2025-02-14 08:51:24', '2025-02-14 08:51:22', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291332', '1', '2025-02-14 08:50:53', '2025-02-14 08:50:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291331', '1', '2025-02-14 08:50:48', '2025-02-14 08:50:46', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291328', '1', '2025-02-14 08:50:17', '2025-02-14 08:50:14', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291327', '1', '2025-02-14 08:50:11', '2025-02-14 08:50:09', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291324', '1', '2025-02-14 08:49:40', '2025-02-14 08:49:38', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291323', '1', '2025-02-14 08:49:36', '2025-02-14 08:49:34', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291320', '1', '2025-02-14 08:49:05', '2025-02-14 08:49:03', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291317', '1', '2025-02-14 08:48:34', '2025-02-14 08:48:32', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291316', '1', '2025-02-14 08:48:32', '2025-02-14 08:48:30', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291313', '1', '2025-02-14 08:48:01', '2025-02-14 08:47:59', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291312', '1', '2025-02-14 08:47:46', '2025-02-14 08:47:44', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291309', '1', '2025-02-14 08:47:15', '2025-02-14 08:47:13', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291308', '1', '2025-02-14 08:47:13', '2025-02-14 08:47:11', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291305', '1', '2025-02-14 08:46:41', '2025-02-14 08:46:39', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291304', '1', '2025-02-14 08:46:25', '2025-02-14 08:46:23', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291301', '1', '2025-02-14 08:45:54', '2025-02-14 08:45:52', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291300', '1', '2025-02-14 08:45:52', '2025-02-14 08:45:50', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291297', '1', '2025-02-14 08:45:21', '2025-02-14 08:45:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291296', '1', '2025-02-14 08:45:17', '2025-02-14 08:45:15', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291293', '1', '2025-02-14 08:44:46', '2025-02-14 08:44:44', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291292', '1', '2025-02-14 08:44:33', '2025-02-14 08:44:31', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291289', '1', '2025-02-14 08:44:02', '2025-02-14 08:44:00', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291288', '1', '2025-02-14 08:43:53', '2025-02-14 08:43:50', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291285', '1', '2025-02-14 08:43:21', '2025-02-14 08:43:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291284', '1', '2025-02-14 08:43:19', '2025-02-14 08:43:17', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291281', '1', '2025-02-14 08:42:48', '2025-02-14 08:42:46', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291280', '1', '2025-02-14 08:42:32', '2025-02-14 08:42:30', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291277', '1', '2025-02-14 08:42:01', '2025-02-14 08:41:59', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291276', '1', '2025-02-14 08:41:57', '2025-02-14 08:41:55', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291269', '1', '2025-02-14 08:40:52', '2025-02-14 08:40:50', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['291265', '1', '2025-02-14 08:40:19', '2025-02-14 08:40:17', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290775', '1', '2025-02-14 00:29:43', '2025-02-14 00:29:41', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290772', '1', '2025-02-14 00:29:12', '2025-02-14 00:29:10', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290768', '1', '2025-02-14 00:28:38', '2025-02-14 00:28:36', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290767', '1', '2025-02-14 00:28:27', '2025-02-14 00:28:25', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290764', '1', '2025-02-14 00:27:56', '2025-02-14 00:27:54', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290763', '1', '2025-02-14 00:27:46', '2025-02-14 00:27:44', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290760', '1', '2025-02-14 00:27:15', '2025-02-14 00:27:13', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290756', '1', '2025-02-14 00:26:42', '2025-02-14 00:26:40', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290752', '1', '2025-02-14 00:25:59', '2025-02-14 00:25:57', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290748', '1', '2025-02-14 00:25:26', '2025-02-14 00:25:24', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290744', '1', '2025-02-14 00:24:51', '2025-02-14 00:24:49', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290743', '1', '2025-02-14 00:24:41', '2025-02-14 00:24:39', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290740', '1', '2025-02-14 00:24:10', '2025-02-14 00:24:08', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290739', '1', '2025-02-14 00:24:00', '2025-02-14 00:23:58', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290736', '1', '2025-02-14 00:23:29', '2025-02-14 00:23:27', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290735', '1', '2025-02-14 00:23:24', '2025-02-14 00:23:22', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290732', '1', '2025-02-14 00:22:53', '2025-02-14 00:22:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290728', '1', '2025-02-14 00:22:20', '2025-02-14 00:22:18', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290727', '1', '2025-02-14 00:22:17', '2025-02-14 00:22:15', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290724', '1', '2025-02-14 00:21:46', '2025-02-14 00:21:44', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290721', '1', '2025-02-14 00:21:15', '2025-02-14 00:21:13', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290720', '1', '2025-02-14 00:21:10', '2025-02-14 00:21:08', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290717', '1', '2025-02-14 00:20:39', '2025-02-14 00:20:37', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290716', '1', '2025-02-14 00:20:34', '2025-02-14 00:20:32', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290713', '1', '2025-02-14 00:20:02', '2025-02-14 00:20:00', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290712', '1', '2025-02-14 00:20:00', '2025-02-14 00:19:58', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290709', '1', '2025-02-14 00:19:29', '2025-02-14 00:19:27', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290705', '1', '2025-02-14 00:18:56', '2025-02-14 00:18:54', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290704', '1', '2025-02-14 00:18:48', '2025-02-14 00:18:46', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290701', '1', '2025-02-14 00:18:17', '2025-02-14 00:18:15', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290700', '1', '2025-02-14 00:18:12', '2025-02-14 00:18:10', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290697', '1', '2025-02-14 00:17:41', '2025-02-14 00:17:39', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290693', '1', '2025-02-14 00:17:08', '2025-02-14 00:17:06', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290692', '1', '2025-02-14 00:17:06', '2025-02-14 00:17:03', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290689', '1', '2025-02-14 00:16:34', '2025-02-14 00:16:32', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290685', '1', '2025-02-14 00:16:01', '2025-02-14 00:15:59', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290682', '1', '2025-02-14 00:15:30', '2025-02-14 00:15:28', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290676', '1', '2025-02-14 00:09:52', '2025-02-14 00:09:50', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290673', '1', '2025-02-14 00:09:21', '2025-02-14 00:09:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290672', '1', '2025-02-14 00:09:19', '2025-02-14 00:09:17', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290669', '1', '2025-02-14 00:08:48', '2025-02-14 00:08:46', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290661', '1', '2025-02-14 00:00:53', '2025-02-14 00:00:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290658', '1', '2025-02-14 00:00:22', '2025-02-14 00:00:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290654', '1', '2025-02-13 23:59:45', '2025-02-13 23:59:43', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290650', '1', '2025-02-13 23:59:12', '2025-02-13 23:59:10', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290649', '1', '2025-02-13 23:59:08', '2025-02-13 23:59:06', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290646', '1', '2025-02-13 23:58:37', '2025-02-13 23:58:35', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290645', '1', '2025-02-13 23:58:28', '2025-02-13 23:58:26', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290642', '1', '2025-02-13 23:57:57', '2025-02-13 23:57:55', '[{\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290641', '1', '2025-02-13 23:57:55', '2025-02-13 23:57:53', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290638', '1', '2025-02-13 23:57:24', '2025-02-13 23:57:22', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290637', '1', '2025-02-13 23:57:22', '2025-02-13 23:57:20', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290634', '1', '2025-02-13 23:56:51', '2025-02-13 23:56:49', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290633', '1', '2025-02-13 23:56:47', '2025-02-13 23:56:45', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290630', '1', '2025-02-13 23:56:15', '2025-02-13 23:56:13', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290629', '1', '2025-02-13 23:56:10', '2025-02-13 23:56:08', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290626', '1', '2025-02-13 23:55:39', '2025-02-13 23:55:37', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290625', '1', '2025-02-13 23:55:30', '2025-02-13 23:55:28', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290622', '1', '2025-02-13 23:54:59', '2025-02-13 23:54:57', '[{\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290621', '1', '2025-02-13 23:54:57', '2025-02-13 23:54:55', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290618', '1', '2025-02-13 23:54:26', '2025-02-13 23:54:24', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290617', '1', '2025-02-13 23:54:23', '2025-02-13 23:54:21', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290614', '1', '2025-02-13 23:53:52', '2025-02-13 23:53:50', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290613', '1', '2025-02-13 23:53:41', '2025-02-13 23:53:39', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290610', '1', '2025-02-13 23:53:09', '2025-02-13 23:53:07', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290441', '1', '2025-02-13 21:04:20', '2025-02-13 21:04:18', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290438', '1', '2025-02-13 21:03:49', '2025-02-13 21:03:47', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290431', '1', '2025-02-13 21:02:44', '2025-02-13 21:02:42', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290427', '1', '2025-02-13 21:02:04', '2025-02-13 21:02:02', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290423', '1', '2025-02-13 21:01:31', '2025-02-13 21:01:29', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290419', '1', '2025-02-13 21:00:56', '2025-02-13 21:00:54', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290418', '1', '2025-02-13 21:00:46', '2025-02-13 21:00:44', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290415', '1', '2025-02-13 21:00:15', '2025-02-13 21:00:13', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290414', '1', '2025-02-13 21:00:06', '2025-02-13 21:00:04', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290411', '1', '2025-02-13 20:59:35', '2025-02-13 20:59:33', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290407', '1', '2025-02-13 20:59:02', '2025-02-13 20:59:00', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290406', '1', '2025-02-13 20:58:54', '2025-02-13 20:58:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290403', '1', '2025-02-13 20:58:22', '2025-02-13 20:58:20', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290399', '1', '2025-02-13 20:57:48', '2025-02-13 20:57:46', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290398', '1', '2025-02-13 20:57:41', '2025-02-13 20:57:39', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290395', '1', '2025-02-13 20:57:10', '2025-02-13 20:57:08', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290394', '1', '2025-02-13 20:57:06', '2025-02-13 20:57:04', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290390', '1', '2025-02-13 20:56:32', '2025-02-13 20:56:30', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290387', '1', '2025-02-13 20:56:01', '2025-02-13 20:55:59', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290386', '1', '2025-02-13 20:55:59', '2025-02-13 20:55:57', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290383', '1', '2025-02-13 20:55:28', '2025-02-13 20:55:26', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290382', '1', '2025-02-13 20:55:26', '2025-02-13 20:55:24', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290379', '1', '2025-02-13 20:54:55', '2025-02-13 20:54:53', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290378', '1', '2025-02-13 20:54:44', '2025-02-13 20:54:42', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290375', '1', '2025-02-13 20:54:13', '2025-02-13 20:54:11', '[{\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290374', '1', '2025-02-13 20:54:11', '2025-02-13 20:54:09', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290371', '1', '2025-02-13 20:53:40', '2025-02-13 20:53:38', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290370', '1', '2025-02-13 20:53:37', '2025-02-13 20:53:34', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290363', '1', '2025-02-13 20:52:32', '2025-02-13 20:52:30', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290299', '1', '2025-02-13 19:48:43', '2025-02-13 19:48:41', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290296', '1', '2025-02-13 19:48:12', '2025-02-13 19:48:10', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290295', '1', '2025-02-13 19:48:07', '2025-02-13 19:48:05', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290292', '1', '2025-02-13 19:47:36', '2025-02-13 19:47:34', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290291', '1', '2025-02-13 19:47:34', '2025-02-13 19:47:32', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290288', '1', '2025-02-13 19:47:03', '2025-02-13 19:47:01', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290287', '1', '2025-02-13 19:46:59', '2025-02-13 19:46:56', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290280', '1', '2025-02-13 19:45:54', '2025-02-13 19:45:52', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290229', '1', '2025-02-13 18:55:16', '2025-02-13 18:55:14', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290226', '1', '2025-02-13 18:54:45', '2025-02-13 18:54:43', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290225', '1', '2025-02-13 18:54:43', '2025-02-13 18:54:41', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290222', '1', '2025-02-13 18:54:12', '2025-02-13 18:54:10', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290221', '1', '2025-02-13 18:53:52', '2025-02-13 18:53:50', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290218', '1', '2025-02-13 18:53:21', '2025-02-13 18:53:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290089', '1', '2025-02-13 16:44:59', '2025-02-13 16:44:57', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290086', '1', '2025-02-13 16:44:28', '2025-02-13 16:44:26', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290085', '1', '2025-02-13 16:44:19', '2025-02-13 16:44:17', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290082', '1', '2025-02-13 16:43:48', '2025-02-13 16:43:45', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290078', '1', '2025-02-13 16:43:14', '2025-02-13 16:43:12', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290074', '1', '2025-02-13 16:42:40', '2025-02-13 16:42:38', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290073', '1', '2025-02-13 16:42:29', '2025-02-13 16:42:27', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290070', '1', '2025-02-13 16:41:58', '2025-02-13 16:41:56', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290069', '1', '2025-02-13 16:41:55', '2025-02-13 16:41:53', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290066', '1', '2025-02-13 16:41:24', '2025-02-13 16:41:22', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290063', '1', '2025-02-13 16:40:53', '2025-02-13 16:40:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290062', '1', '2025-02-13 16:40:49', '2025-02-13 16:40:47', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290058', '1', '2025-02-13 16:40:16', '2025-02-13 16:40:13', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290055', '1', '2025-02-13 16:39:44', '2025-02-13 16:39:42', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290054', '1', '2025-02-13 16:39:41', '2025-02-13 16:39:39', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290048', '1', '2025-02-13 16:38:39', '2025-02-13 16:38:37', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290047', '1', '2025-02-13 16:38:37', '2025-02-13 16:38:35', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290044', '1', '2025-02-13 16:38:06', '2025-02-13 16:38:04', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290043', '1', '2025-02-13 16:37:58', '2025-02-13 16:37:56', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290040', '1', '2025-02-13 16:37:27', '2025-02-13 16:37:25', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290039', '1', '2025-02-13 16:37:25', '2025-02-13 16:37:23', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290036', '1', '2025-02-13 16:36:54', '2025-02-13 16:36:52', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290028', '1', '2025-02-13 16:35:46', '2025-02-13 16:35:44', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290027', '1', '2025-02-13 16:35:36', '2025-02-13 16:35:34', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290024', '1', '2025-02-13 16:35:05', '2025-02-13 16:35:03', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290023', '1', '2025-02-13 16:35:00', '2025-02-13 16:34:58', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290020', '1', '2025-02-13 16:34:29', '2025-02-13 16:34:27', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290019', '1', '2025-02-13 16:34:26', '2025-02-13 16:34:24', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['290016', '1', '2025-02-13 16:33:55', '2025-02-13 16:33:53', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289835', '1', '2025-02-13 13:32:33', '2025-02-13 13:32:31', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289832', '1', '2025-02-13 13:32:02', '2025-02-13 13:31:59', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289831', '1', '2025-02-13 13:31:25', '2025-02-13 13:31:23', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289828', '1', '2025-02-13 13:30:54', '2025-02-13 13:30:52', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289827', '1', '2025-02-13 13:30:52', '2025-02-13 13:30:50', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289824', '1', '2025-02-13 13:30:21', '2025-02-13 13:30:19', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289823', '1', '2025-02-13 13:30:16', '2025-02-13 13:30:14', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289820', '1', '2025-02-13 13:29:45', '2025-02-13 13:29:43', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289819', '1', '2025-02-13 13:29:41', '2025-02-13 13:29:39', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289816', '1', '2025-02-13 13:29:10', '2025-02-13 13:29:08', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289815', '1', '2025-02-13 13:29:03', '2025-02-13 13:29:01', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289812', '1', '2025-02-13 13:28:32', '2025-02-13 13:28:30', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289811', '1', '2025-02-13 13:28:30', '2025-02-13 13:28:27', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289808', '1', '2025-02-13 13:27:58', '2025-02-13 13:27:56', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289807', '1', '2025-02-13 13:27:38', '2025-02-13 13:27:36', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289804', '1', '2025-02-13 13:27:07', '2025-02-13 13:27:05', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289749', '1', '2025-02-13 12:34:53', '2025-02-13 12:34:51', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289745', '1', '2025-02-13 12:34:20', '2025-02-13 12:34:18', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289741', '1', '2025-02-13 12:33:44', '2025-02-13 12:33:42', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289737', '1', '2025-02-13 12:33:11', '2025-02-13 12:33:09', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289736', '1', '2025-02-13 12:33:06', '2025-02-13 12:33:04', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289733', '1', '2025-02-13 12:32:35', '2025-02-13 12:32:33', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289729', '1', '2025-02-13 12:32:02', '2025-02-13 12:32:00', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289728', '1', '2025-02-13 12:31:57', '2025-02-13 12:31:54', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289725', '1', '2025-02-13 12:31:25', '2025-02-13 12:31:23', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289721', '1', '2025-02-13 12:30:52', '2025-02-13 12:30:50', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289720', '1', '2025-02-13 12:30:47', '2025-02-13 12:30:45', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289717', '1', '2025-02-13 12:30:16', '2025-02-13 12:30:14', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289713', '1', '2025-02-13 12:29:43', '2025-02-13 12:29:41', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289712', '1', '2025-02-13 12:29:38', '2025-02-13 12:29:36', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289709', '1', '2025-02-13 12:29:07', '2025-02-13 12:29:05', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289705', '1', '2025-02-13 12:28:34', '2025-02-13 12:28:31', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289704', '1', '2025-02-13 12:28:28', '2025-02-13 12:28:26', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289701', '1', '2025-02-13 12:27:57', '2025-02-13 12:27:55', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289697', '1', '2025-02-13 12:27:24', '2025-02-13 12:27:22', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289693', '1', '2025-02-13 12:26:50', '2025-02-13 12:26:48', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289692', '1', '2025-02-13 12:26:46', '2025-02-13 12:26:44', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289689', '1', '2025-02-13 12:26:15', '2025-02-13 12:26:13', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289685', '1', '2025-02-13 12:25:41', '2025-02-13 12:25:39', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289684', '1', '2025-02-13 12:25:37', '2025-02-13 12:25:34', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 8, \"light_len\": 8, \"triggered\": true}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289681', '1', '2025-02-13 12:25:05', '2025-02-13 12:25:03', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289680', '1', '2025-02-13 12:25:00', '2025-02-13 12:24:58', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289677', '1', '2025-02-13 12:24:29', '2025-02-13 12:24:27', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289673', '1', '2025-02-13 12:23:56', '2025-02-13 12:23:54', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289669', '1', '2025-02-13 12:23:22', '2025-02-13 12:23:20', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289665', '1', '2025-02-13 12:22:48', '2025-02-13 12:22:46', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289664', '1', '2025-02-13 12:22:42', '2025-02-13 12:22:40', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289661', '1', '2025-02-13 12:22:11', '2025-02-13 12:22:08', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289657', '1', '2025-02-13 12:21:37', '2025-02-13 12:21:35', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289656', '1', '2025-02-13 12:21:34', '2025-02-13 12:21:32', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289653', '1', '2025-02-13 12:21:03', '2025-02-13 12:21:01', '[{\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289652', '1', '2025-02-13 12:21:00', '2025-02-13 12:20:58', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289649', '1', '2025-02-13 12:20:29', '2025-02-13 12:20:27', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289648', '1', '2025-02-13 12:20:23', '2025-02-13 12:20:21', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289645', '1', '2025-02-13 12:19:52', '2025-02-13 12:19:50', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289644', '1', '2025-02-13 12:19:50', '2025-02-13 12:19:48', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289641', '1', '2025-02-13 12:19:19', '2025-02-13 12:19:17', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289640', '1', '2025-02-13 12:19:16', '2025-02-13 12:19:13', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289637', '1', '2025-02-13 12:18:44', '2025-02-13 12:18:42', '[{\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289636', '1', '2025-02-13 12:18:41', '2025-02-13 12:18:39', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289633', '1', '2025-02-13 12:18:10', '2025-02-13 12:18:08', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289632', '1', '2025-02-13 12:18:04', '2025-02-13 12:18:02', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289629', '1', '2025-02-13 12:17:33', '2025-02-13 12:17:31', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289628', '1', '2025-02-13 12:17:31', '2025-02-13 12:17:29', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289625', '1', '2025-02-13 12:17:00', '2025-02-13 12:16:58', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289624', '1', '2025-02-13 12:16:58', '2025-02-13 12:16:56', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289621', '1', '2025-02-13 12:16:27', '2025-02-13 12:16:25', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289620', '1', '2025-02-13 12:16:24', '2025-02-13 12:16:22', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289617', '1', '2025-02-13 12:15:53', '2025-02-13 12:15:50', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289616', '1', '2025-02-13 12:15:45', '2025-02-13 12:15:43', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289613', '1', '2025-02-13 12:15:14', '2025-02-13 12:15:12', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289612', '1', '2025-02-13 12:15:11', '2025-02-13 12:15:09', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289609', '1', '2025-02-13 12:14:40', '2025-02-13 12:14:38', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289606', '1', '2025-02-13 12:14:09', '2025-02-13 12:14:07', '[{\"freq\": 433, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289605', '1', '2025-02-13 12:14:05', '2025-02-13 12:14:03', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['289602', '1', '2025-02-13 12:13:34', '2025-02-13 12:13:32', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 868, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "['287824', '1', '2025-02-12 04:41:04', '2025-02-12 04:41:02', '[{\"freq\": 433, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 700, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 868, \"amplitude\": 9, \"triggered\": true}, {\"freq\": 915, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 1200, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 2400, \"amplitude\": 0, \"light_len\": 0, \"triggered\": false}, {\"freq\": 5200, \"amplitude\": 0, \"triggered\": false}, {\"freq\": 5800, \"amplitude\": 0, \"triggered\": false}]', 'NULL', 'freq']\n", - "Данные успешно обработаны и сохранены в History_change_1.csv\n" - ] - } - ], - "source": [ - "import csv\n", - "\n", - "# Путь к входному CSV-файлу\n", - "input_file = 'History_1.csv'\n", - "\n", - "# Путь к выходному CSV-файлу (с правильно разделёнными данными)\n", - "output_file = 'History_change_1.csv'\n", - "\n", - "# Открываем исходный файл для чтения и новый файл для записи\n", - "with open(input_file, mode='r', encoding='utf-8') as infile:\n", - " with open(output_file, mode='w', encoding='utf-8-sig', newline='') as outfile:\n", - "\n", - " # Создаем объект reader для чтения CSV с учетом кавычек\n", - " reader = csv.reader(infile, delimiter=',', quotechar='\"')\n", - "\n", - " # Создаем объект writer для записи в новый CSV-файл\n", - " writer = csv.writer(outfile, delimiter=';', quotechar=\"'\", quoting=csv.QUOTE_MINIMAL)\n", - "\n", - " # Проходимся по каждой строке в исходном файле\n", - " for row in reader:\n", - " # Записываем строку в выходной файл\n", - " print(row)\n", - " writer.writerow(row)\n", - "\n", - "print(f\"Данные успешно обработаны и сохранены в {output_file}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "caf7679f", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "97cfbd11", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/models/ensemble_1.2_jpg_10/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_10/dataset.csv deleted file mode 100644 index bc276d4..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_10/dataset.csv +++ /dev/null @@ -1,964 +0,0 @@ -file_name -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1261.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_333.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_53.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_933.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_81.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_193.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_419.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1440.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_501.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_475.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_981.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_837.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_880.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_150.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1802.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_363.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_360.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_161.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_199.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_43.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1275.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_54.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_833.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_459.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1814.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_338.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_451.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_414.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_968.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_328.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1243.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_64.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_8.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1826.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_444.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_842.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_779.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_847.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1250.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_903.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_455.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_406.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_778.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1341.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_751.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_44.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_511.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_743.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_888.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_497.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1805.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1821.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_194.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_875.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1279.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_25.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_366.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_885.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_912.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_473.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_828.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_740.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_492.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1455.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_97.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1357.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_135.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1292.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1778.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_483.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_493.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_21.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_498.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_973.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_373.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_907.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1380.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1329.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_958.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_860.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_179.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1818.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_49.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_780.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_314.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_951.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1427.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_756.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_400.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_307.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_99.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_89.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1255.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1378.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_389.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_770.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_446.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_437.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_937.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_369.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_883.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_499.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_515.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1372.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_128.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_476.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_915.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1286.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_959.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_61.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_832.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_836.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1823.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1807.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1409.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1245.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_929.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_336.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_433.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1320.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1825.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_935.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1801.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_500.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1309.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_480.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_442.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1267.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_965.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_412.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1405.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1343.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_416.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1411.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_417.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_384.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_116.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_491.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1434.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_733.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1448.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_471.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1780.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1340.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_144.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_126.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_140.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_859.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1333.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_784.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1824.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_5.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_4.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_36.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_908.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_477.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_801.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_466.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_109.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_824.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_825.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_16.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_771.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1373.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1314.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_900.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_404.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_808.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_441.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_435.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_881.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1235.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1306.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_797.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_851.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1307.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_130.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_330.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_826.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_159.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1244.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_149.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_66.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_760.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1812.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1797.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1226.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_308.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1330.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_465.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_753.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_931.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_821.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_205.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_69.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_90.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1442.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1392.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1410.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1456.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_35.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_168.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1257.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_479.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_869.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1384.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_458.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_754.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_984.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_979.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_735.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_325.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1272.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_985.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_834.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1280.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_85.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_884.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1241.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_42.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1274.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1349.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_827.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1396.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_502.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1789.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_899.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1297.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_142.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1352.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1772.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1435.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_844.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_153.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_70.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1777.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1326.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_909.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_157.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1438.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_349.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_204.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_403.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_347.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_861.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1385.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_20.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1822.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_310.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_505.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_858.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_344.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1322.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_445.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_134.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1381.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_852.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_391.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_341.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_960.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_901.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_758.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_831.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_507.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1429.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_486.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1783.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_878.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_132.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_450.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_164.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_320.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_434.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_197.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1369.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_350.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_854.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_12.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_358.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1779.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_313.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_790.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1315.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1360.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_795.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_469.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_764.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1334.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_916.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_38.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_440.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_383.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_180.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1398.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_169.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1449.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_773.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_430.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_806.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_815.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_729.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1236.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_864.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_346.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_944.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_72.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1366.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1246.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_156.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_22.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_182.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_68.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_882.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_106.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_186.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_810.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_436.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_27.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_478.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_848.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1231.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1337.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1324.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_845.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_387.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_438.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_129.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_814.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1239.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_332.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1294.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1444.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_902.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1224.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_18.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_28.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_474.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_971.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1412.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_23.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1262.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_335.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1785.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_898.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1356.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_362.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1443.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_396.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_381.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_13.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_58.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_408.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_51.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_811.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_393.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_65.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1281.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_407.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_490.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1273.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1424.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1269.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1259.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_983.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1790.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1339.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_9.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_113.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_425.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_146.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1225.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1445.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_356.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_399.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1287.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1342.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1382.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_829.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_772.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_865.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_187.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_46.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1348.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1303.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_203.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_911.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_122.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_482.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1419.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_942.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1408.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_820.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_105.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1828.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1436.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_120.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_736.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_429.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1403.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1452.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_467.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1251.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_422.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_319.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_495.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_956.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1776.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_83.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_966.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_781.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_428.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_452.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_37.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_755.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_757.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_30.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_155.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_786.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1389.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_78.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_111.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_809.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_131.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_361.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_782.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1371.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_962.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_928.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1407.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_930.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_463.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1361.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_424.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_394.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1390.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1377.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_472.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_411.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1454.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1238.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1282.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_886.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_812.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1256.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_862.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_787.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1794.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1325.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1432.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1363.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_67.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_76.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1800.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_410.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1816.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_817.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_785.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1304.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_2.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1283.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_59.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_950.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1817.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1295.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_379.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_374.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_192.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_342.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_974.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_73.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_800.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1317.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1383.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1331.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_167.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_891.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_3.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_160.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_201.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1347.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1323.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_513.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_481.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_162.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_896.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_439.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_367.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_506.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_166.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1827.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_206.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1387.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1299.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_910.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_395.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_124.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1451.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_352.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_29.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_857.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_94.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_747.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_202.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_62.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_165.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_955.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_40.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1417.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_10.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_200.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_863.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_151.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_462.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_39.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_976.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_895.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1811.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_55.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_110.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1351.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1300.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1426.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_485.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_34.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1254.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_893.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_191.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_849.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_431.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1242.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_121.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_101.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1420.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_60.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_207.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_119.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_783.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_92.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_748.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_823.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_334.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1370.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_957.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1284.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1365.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1368.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_329.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_514.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_98.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_830.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1804.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_954.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1264.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1414.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_376.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_775.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_388.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_163.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_324.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1327.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1318.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_917.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1290.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_972.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1437.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_26.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_876.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_759.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_918.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_835.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_850.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_32.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_802.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1277.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_74.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_734.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_742.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_977.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_923.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_108.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_327.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_807.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_114.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1319.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_91.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_198.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_813.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_368.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_461.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_796.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_426.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_326.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1421.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1311.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_749.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_19.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1379.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1397.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_453.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_96.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_33.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1271.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_402.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_311.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1345.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_970.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_93.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1815.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_88.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_371.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_767.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_975.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_372.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_938.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_853.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_894.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_79.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_752.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1404.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1353.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_732.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_184.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_323.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_961.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1258.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_792.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_777.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_765.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1316.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_107.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_147.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_804.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_304.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_978.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_762.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_840.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1228.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1232.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1302.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_148.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1792.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_351.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_154.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1313.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_949.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1268.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1781.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_185.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_731.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_741.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1293.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1233.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_138.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_737.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1346.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_488.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1394.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_7.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_927.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_871.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_943.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_941.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_868.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_45.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_468.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_774.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_48.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_919.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1820.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1431.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_504.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1796.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1810.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_353.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_738.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_322.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_82.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1237.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_136.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_87.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_380.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_897.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1400.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_17.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_95.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_143.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_791.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1799.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_924.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_343.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_867.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_872.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_370.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1375.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1247.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1344.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_123.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1406.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_139.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_24.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_874.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1782.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_822.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_102.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1386.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_302.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_0.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_71.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_856.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1321.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_421.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1775.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1430.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_460.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1332.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_873.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1355.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_409.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_397.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_905.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_727.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_117.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_805.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1788.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_398.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1359.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1301.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1252.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1362.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_57.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_420.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_382.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_793.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_127.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1803.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_103.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_879.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_945.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1308.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_798.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_789.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_359.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1358.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1374.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_63.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1376.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_510.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_969.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_494.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_11.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_50.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_375.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1266.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_77.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1447.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1441.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1336.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_443.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_390.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1270.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_803.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_385.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_321.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1439.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_354.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_470.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1401.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_337.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_746.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1248.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_305.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_115.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_75.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_904.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_769.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1457.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_183.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1263.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_331.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_345.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_952.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1249.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_6.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_889.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_31.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1305.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_315.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_750.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_301.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1422.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_137.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1298.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1253.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1230.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_866.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_982.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_364.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_763.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_418.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_348.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_449.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1354.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1388.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1819.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1415.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1291.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_340.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1791.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_925.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_14.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_15.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_41.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_766.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_892.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_788.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_312.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_355.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1829.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1278.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1260.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_946.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1350.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_84.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_306.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_100.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_118.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_52.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_196.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_303.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_181.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1786.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_739.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_309.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1798.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_508.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_152.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_489.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_887.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_794.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_86.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1806.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_843.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_457.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_819.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_768.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1402.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_934.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_838.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_339.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_378.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1335.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_914.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1453.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1425.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1240.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_940.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_846.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_456.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_920.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1423.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_906.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_744.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1793.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_145.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_936.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1310.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1229.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1446.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_487.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_405.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1338.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1393.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1413.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_503.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_730.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_454.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_377.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_728.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_818.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_415.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1328.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_980.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1265.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_447.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_496.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_855.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_745.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_316.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_401.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_816.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_932.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_509.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1296.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1433.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1774.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1809.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_158.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_464.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_761.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1288.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_922.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_413.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_392.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1289.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_141.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_133.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1450.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_967.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_877.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1773.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_125.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_365.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_318.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1367.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_841.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_776.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_178.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1813.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_512.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_953.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1787.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_47.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_926.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1808.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_317.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_484.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_357.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_947.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_839.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1285.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1234.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_799.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1784.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_432.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_56.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1395.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_104.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_870.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_963.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_427.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_423.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1428.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_386.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_913.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1364.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_939.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1416.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1418.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_948.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_112.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_195.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1391.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1795.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_921.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_80.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1312.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1276.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1227.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1399.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_448.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_964.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_890.npy.npy diff --git a/train_scripts/models/ensemble_1.2_jpg_11/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_11/dataset.csv deleted file mode 100644 index 4561abb..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_11/dataset.csv +++ /dev/null @@ -1,964 +0,0 @@ -file_name -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1258.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_890.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1780.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_362.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_166.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_754.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_780.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1401.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1811.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_854.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_178.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1804.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_818.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_441.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_372.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_333.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1304.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1799.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_428.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_506.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_163.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_497.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1411.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_425.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_459.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1358.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_482.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_968.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1337.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_496.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_842.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1353.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_808.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_90.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_961.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_128.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_32.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_474.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_918.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_738.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_964.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_135.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_744.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_883.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_162.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_316.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1395.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1280.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_764.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_866.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_835.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_479.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_783.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_151.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_838.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_779.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_909.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1237.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_943.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_156.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_311.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_8.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_806.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_402.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_481.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_962.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_50.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_819.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_421.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1447.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_200.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1362.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1446.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_805.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_832.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_14.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_13.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1373.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_371.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_515.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1444.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_797.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_326.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_929.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_180.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_917.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_955.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_827.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1805.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_184.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1386.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_21.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1440.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_420.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_795.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_345.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_504.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_114.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_375.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_383.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_954.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_355.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_849.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_817.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1292.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_386.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_191.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_467.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1414.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1404.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_824.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1775.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_946.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_739.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_36.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1308.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_382.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_462.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_123.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_390.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_387.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1807.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1406.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_353.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_446.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_912.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1423.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_951.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_429.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_887.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_937.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1824.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_830.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_348.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_424.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1431.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_380.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1393.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_131.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1230.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_411.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1227.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_320.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_899.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1416.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_67.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_182.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_907.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_765.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_406.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_939.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1425.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_352.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_126.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_15.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1343.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_407.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1409.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_748.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_72.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_106.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_816.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_511.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_392.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1823.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_360.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_404.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1389.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_92.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1275.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1364.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1336.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_882.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1298.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_31.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1817.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_510.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_144.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_314.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1347.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_330.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1344.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_760.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1787.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1399.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_306.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_388.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1369.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_44.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_729.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_340.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1809.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_98.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_80.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1352.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_847.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_139.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_401.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_47.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_860.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1436.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_821.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1428.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_397.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_449.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_329.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_845.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_99.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_39.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1786.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_303.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1357.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1360.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1264.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_447.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_746.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1410.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1330.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1814.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_75.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_958.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_349.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1417.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_494.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_53.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_960.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1225.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_86.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1795.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_919.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_37.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_452.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_498.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_859.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_341.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_57.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_444.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_136.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_507.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_508.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_374.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_395.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_898.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_980.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_485.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_42.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_851.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1327.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1350.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_470.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1276.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_204.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_321.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_758.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_920.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_83.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_34.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_186.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_776.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1248.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_751.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_207.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_130.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_502.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_38.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_361.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_736.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1260.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_886.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_196.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_367.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_158.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_319.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1412.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_179.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_843.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_796.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1351.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_74.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_430.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_893.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_500.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_159.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1813.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_801.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_873.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1374.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_152.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_51.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1449.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_343.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_62.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1290.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_30.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1398.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1456.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_941.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_9.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_458.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_59.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_837.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_435.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_307.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_120.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_793.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_60.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1257.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_185.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_457.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_503.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1403.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_804.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1437.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1310.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_85.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_305.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_150.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_137.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_863.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_985.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_2.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_836.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1300.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_164.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_813.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_768.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_865.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_913.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_318.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1778.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1287.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_914.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_923.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1822.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_756.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_488.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_512.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1796.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1321.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1777.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_111.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1311.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1421.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_761.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1808.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_16.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_869.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1328.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1326.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_398.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_461.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_23.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_875.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_168.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_433.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1251.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_921.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_165.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1812.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_928.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_335.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_133.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1235.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_342.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1245.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_456.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_489.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_115.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_463.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_143.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_149.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1323.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_206.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1791.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1241.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_978.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_325.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_877.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_472.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_774.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_902.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_938.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_377.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1246.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_358.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1265.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1453.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_740.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_499.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1319.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1450.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_925.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_426.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1256.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_922.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1429.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1296.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_789.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_142.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_187.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_45.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_413.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_916.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_49.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_391.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_0.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_181.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_91.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_344.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1339.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_61.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1826.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_731.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1402.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1806.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_769.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1281.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_192.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_28.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_116.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1259.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_312.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_417.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_811.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_369.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_767.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_448.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_932.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1232.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_743.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1371.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_895.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_434.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_878.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1419.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_427.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1819.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1262.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_466.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1366.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_905.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1438.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_778.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_455.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_880.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1427.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_927.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1242.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_495.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1443.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_953.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1375.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1789.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_112.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_834.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1279.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_96.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_803.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1293.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1228.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1354.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1334.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_867.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_831.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_442.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_464.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1377.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_966.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1372.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_889.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_897.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_40.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_900.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_101.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_825.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_436.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_22.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_408.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1829.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_965.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_117.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_65.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_840.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_812.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1324.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1783.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_122.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1305.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1793.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_393.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_844.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_105.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_205.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_41.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_826.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_766.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_940.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1828.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_981.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1779.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1396.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_141.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_302.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1384.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_87.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_203.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_876.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_104.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_734.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_870.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_460.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_25.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1413.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_107.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_926.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_815.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_450.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1773.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_437.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1782.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_931.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1294.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_351.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_947.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_888.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_728.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_422.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_118.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_157.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_147.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_901.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_95.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_792.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1355.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_416.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_19.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_791.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1238.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_892.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_17.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_759.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_983.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_93.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_509.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_109.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1239.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_800.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1309.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1359.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_755.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_957.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_322.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_952.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_84.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_129.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_119.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1333.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1307.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_323.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1397.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1253.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_451.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_752.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1381.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1435.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_100.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1442.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_194.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1340.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1301.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_338.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_195.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1229.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_378.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1394.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_486.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_833.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1408.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_385.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_346.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_747.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1289.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1451.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1233.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_336.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1356.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_948.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_20.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1269.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_959.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1317.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1341.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_807.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_58.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_52.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_432.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_839.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1422.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_782.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1801.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1810.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_313.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_33.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1297.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_443.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_331.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1378.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_125.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1342.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_27.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1430.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1790.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_862.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1338.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1254.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_477.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1426.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_492.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_872.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_820.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_110.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1236.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_868.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1348.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_772.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_108.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1303.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_737.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_405.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_423.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_794.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_394.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1313.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_970.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_77.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1452.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_790.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_483.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_82.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_490.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_121.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1800.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1792.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1325.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1306.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_359.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1277.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_484.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_468.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_410.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_160.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1231.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_473.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_493.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_809.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_858.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_373.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_788.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_969.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_911.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_802.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_975.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_846.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1434.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_94.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1244.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_950.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_505.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1240.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1424.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_69.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_379.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_749.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_885.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_71.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_10.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_350.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_376.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_810.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_967.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_347.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_785.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_370.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1314.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_140.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_852.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_848.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_487.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_54.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_24.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1266.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_148.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_763.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1252.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_798.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_29.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_97.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1335.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1415.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_88.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_841.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1827.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_183.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_514.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_963.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1433.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_727.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1295.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_202.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1255.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_735.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_786.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_480.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1250.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_366.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_414.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_103.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1349.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1261.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1391.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_364.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_363.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_56.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1286.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1267.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_879.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1785.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_864.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1821.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_12.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1263.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_5.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1322.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_770.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_412.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_368.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1400.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_757.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1802.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_935.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_155.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1302.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_43.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1316.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_742.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_339.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_146.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_18.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_198.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1270.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_134.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_73.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1818.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_857.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_979.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1383.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_933.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1272.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1284.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_903.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_357.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_945.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_465.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_356.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_400.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1291.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_419.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1772.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1388.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1318.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1346.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1370.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_773.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_891.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_332.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_127.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1788.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_750.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1382.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_384.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1420.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_753.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1249.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_102.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_7.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1278.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1361.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1455.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1784.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_781.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_822.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_469.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_762.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_874.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_324.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1243.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_984.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1224.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_775.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_396.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1407.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_942.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_310.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1331.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_513.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_501.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_894.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_930.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_491.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1797.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_169.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_476.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_977.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_46.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1815.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_777.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_944.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1441.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_973.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1798.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_881.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_850.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_915.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_853.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_787.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1376.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1320.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_6.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_956.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_55.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_328.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_855.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_784.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1445.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1803.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_949.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1329.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_884.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_403.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_138.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1345.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_68.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_389.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_445.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_934.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1282.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_301.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_936.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1439.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1283.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1781.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_478.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_828.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_733.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_365.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1271.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1299.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_418.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1363.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1457.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_3.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_317.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_315.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_475.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1454.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_76.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_193.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1268.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_337.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_976.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_908.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_48.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_124.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1332.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_26.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_896.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_910.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1387.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_439.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1367.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1226.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_145.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_167.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1448.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_354.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1390.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_70.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1273.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1288.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1405.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_201.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_982.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_829.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_906.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_64.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_304.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1825.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_161.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_741.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_924.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_113.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1432.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_399.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_4.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_454.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_814.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_972.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_861.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1774.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1368.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1315.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_199.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1794.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1274.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_89.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_381.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_153.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1380.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_81.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1385.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_440.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1816.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1418.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_904.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_823.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1379.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_799.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_732.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1285.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_308.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_154.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_11.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_438.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_309.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_415.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1365.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1247.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_856.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_453.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_971.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1820.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_431.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_471.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_197.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1776.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_409.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_327.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_66.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1234.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_771.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_35.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_132.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_974.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_871.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_334.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_78.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1312.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_745.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_79.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1392.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_730.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_63.npy.npy diff --git a/train_scripts/models/ensemble_1.2_jpg_11/ensemble_1.2_jpg_.pth b/train_scripts/models/ensemble_1.2_jpg_11/ensemble_1.2_jpg_.pth deleted file mode 100644 index e07b602..0000000 Binary files a/train_scripts/models/ensemble_1.2_jpg_11/ensemble_1.2_jpg_.pth and /dev/null differ diff --git a/train_scripts/models/ensemble_1.2_jpg_11/train_acc.npy b/train_scripts/models/ensemble_1.2_jpg_11/train_acc.npy deleted file mode 100644 index 3a49a34..0000000 Binary files a/train_scripts/models/ensemble_1.2_jpg_11/train_acc.npy and /dev/null differ diff --git a/train_scripts/models/ensemble_1.2_jpg_11/train_loss.npy b/train_scripts/models/ensemble_1.2_jpg_11/train_loss.npy deleted file mode 100644 index 15f34ac..0000000 Binary files a/train_scripts/models/ensemble_1.2_jpg_11/train_loss.npy and /dev/null differ diff --git a/train_scripts/models/ensemble_1.2_jpg_11/val_acc.npy b/train_scripts/models/ensemble_1.2_jpg_11/val_acc.npy deleted file mode 100644 index cc6612e..0000000 Binary files a/train_scripts/models/ensemble_1.2_jpg_11/val_acc.npy and /dev/null differ diff --git a/train_scripts/models/ensemble_1.2_jpg_11/val_loss.npy b/train_scripts/models/ensemble_1.2_jpg_11/val_loss.npy deleted file mode 100644 index 44d2935..0000000 Binary files a/train_scripts/models/ensemble_1.2_jpg_11/val_loss.npy and /dev/null differ diff --git a/train_scripts/models/ensemble_1.2_jpg_2/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_2/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_2/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_3/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_3/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_3/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_4/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_4/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_4/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_5/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_5/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_5/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_6/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_6/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_6/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_7/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_7/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_7/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_8/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_8/dataset.csv deleted file mode 100644 index 2b5147b..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_8/dataset.csv +++ /dev/null @@ -1 +0,0 @@ -file_name diff --git a/train_scripts/models/ensemble_1.2_jpg_9/dataset.csv b/train_scripts/models/ensemble_1.2_jpg_9/dataset.csv deleted file mode 100644 index 61c4412..0000000 --- a/train_scripts/models/ensemble_1.2_jpg_9/dataset.csv +++ /dev/null @@ -1,964 +0,0 @@ -file_name -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_443.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_183.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_403.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_163.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_349.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_922.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_830.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_893.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_386.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1774.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1224.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_780.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_482.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_38.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1301.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_503.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_848.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_881.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_195.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1431.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_793.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1808.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_819.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_484.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1392.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1324.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_2.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_890.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_974.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_395.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_91.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_43.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_151.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1288.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_917.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_382.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_814.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1383.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1275.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_125.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1351.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1449.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_847.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_131.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_414.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_868.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1293.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_448.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_312.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_795.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1294.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_486.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_182.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1243.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1791.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1323.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_978.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1785.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_970.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_192.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_872.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_100.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1304.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1415.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1309.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1245.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1322.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1816.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1442.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1367.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1260.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1452.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_411.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_843.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1377.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1412.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_962.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_185.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_308.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_383.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_729.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_773.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_870.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_52.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_417.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1432.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1292.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_54.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1819.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1378.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1315.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_318.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_108.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1249.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_439.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_864.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_80.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1800.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_451.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1405.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_373.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_378.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1346.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1335.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_849.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1799.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_730.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_0.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_740.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_950.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_968.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_836.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_809.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1368.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1451.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1433.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_311.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_502.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_113.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1790.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1350.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_14.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_24.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_951.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1289.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_415.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_902.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_426.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1341.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1826.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_757.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1406.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_133.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_11.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_831.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_167.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1359.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_70.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_76.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_48.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_943.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_110.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_820.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_8.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_731.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_846.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_481.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1328.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_980.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1361.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_60.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_138.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1330.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_910.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_148.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_733.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1334.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_10.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1435.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1313.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_472.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_877.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_908.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_901.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1266.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_315.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_84.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_776.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1332.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1354.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_940.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_401.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1329.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1804.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_63.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_181.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_891.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_37.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_932.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_322.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1455.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_61.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1797.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1331.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1262.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_926.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_959.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_127.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_40.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_385.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_826.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_31.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1296.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_973.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_480.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_865.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_966.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_958.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_343.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_827.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_744.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_434.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_77.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_119.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_894.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_909.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_436.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_369.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_497.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_126.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_29.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_418.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1318.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_420.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_874.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_205.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_811.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_858.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_20.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1272.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_323.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_45.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_327.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_357.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_845.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_916.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_953.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1298.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1299.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_783.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1306.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_307.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_69.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1823.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_356.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_348.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_155.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_412.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_316.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_821.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_756.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1775.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_326.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_147.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_930.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1815.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1443.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1440.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_918.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_90.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_186.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1801.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_850.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_180.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_961.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_98.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_317.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_828.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1430.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1286.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_504.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1233.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_812.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_483.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1307.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_179.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_474.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_46.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_4.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1278.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1393.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_361.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_882.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_166.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_99.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_198.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_306.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1402.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_899.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_907.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_863.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1254.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_861.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_202.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_490.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_377.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_409.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1300.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_897.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1250.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_912.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1454.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1409.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_808.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_7.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1240.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_204.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1407.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_71.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_768.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_765.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_952.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1287.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_905.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_25.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_461.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1283.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_117.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_946.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1226.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_68.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_491.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_458.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_353.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_338.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1339.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_772.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_860.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_83.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1348.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_732.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_360.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_141.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_364.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1347.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_487.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_366.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_388.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1234.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_466.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_320.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_109.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1338.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_118.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1434.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_787.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_337.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_515.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1295.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_379.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1410.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_421.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_358.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_62.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1271.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1242.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_825.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_324.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_920.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1413.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_450.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1411.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_302.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1794.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_914.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_906.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1382.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1357.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_470.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_50.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1356.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_876.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_835.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1389.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_840.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1265.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_784.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_87.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_816.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_494.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1362.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_479.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_896.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_507.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1388.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_67.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_498.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_866.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1380.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1305.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_747.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_977.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_106.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_132.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_346.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1387.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_146.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_428.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_755.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_342.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_32.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_365.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_471.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1239.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_339.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1230.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_423.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_786.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1811.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_880.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_929.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_65.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1227.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_921.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_938.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1337.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_154.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1438.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_791.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1238.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_945.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1371.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_161.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_329.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1384.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_473.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_788.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_95.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_129.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_469.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_394.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_855.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_944.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1798.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1813.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_200.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1369.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_404.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_936.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1400.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_981.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_303.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_44.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_82.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_781.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_782.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_355.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_738.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_55.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1822.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_513.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_112.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_124.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_856.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_749.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1342.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_465.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1394.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1439.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_207.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_785.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_325.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1437.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1404.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_751.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1302.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_64.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_734.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_904.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_511.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_889.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_424.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1776.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_122.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1386.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1817.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_468.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1333.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1399.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_442.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_802.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_832.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_397.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1788.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_430.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_145.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_767.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1320.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1277.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1803.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_960.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_984.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_937.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_96.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1810.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_115.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_508.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_867.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_341.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_375.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1436.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_105.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_197.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_778.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_965.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1379.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1235.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_892.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_413.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_362.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_396.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_815.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_301.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_963.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1316.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1786.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_898.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_78.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_399.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_829.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_144.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1343.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1818.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_86.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_883.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1425.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1241.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_967.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1358.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_759.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_805.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_330.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_432.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_89.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1448.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_387.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_851.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1228.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_381.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_380.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_114.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_56.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_16.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_485.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1787.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_26.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1418.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1268.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1267.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_931.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1420.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_763.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_478.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_752.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_168.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_107.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_505.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_956.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1336.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_496.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_332.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1276.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_199.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1772.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_463.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_139.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_390.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_728.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_495.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_367.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_822.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1773.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1261.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_878.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1229.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_790.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_433.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1258.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_441.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_939.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_328.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_493.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1403.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_467.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1809.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_879.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1423.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_903.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_979.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_873.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1802.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_392.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1363.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_823.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_152.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_975.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1447.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1280.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_331.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1821.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1327.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_304.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_352.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_19.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_319.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1303.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1284.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_875.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1398.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_410.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1456.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_169.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1370.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_22.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1257.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_350.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_347.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_871.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1419.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_794.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_72.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1353.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_81.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_427.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1256.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_102.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1395.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1312.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_862.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1344.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_806.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_93.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_143.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_810.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_735.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_23.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_919.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1795.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_345.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1248.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1269.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_184.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1780.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_39.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1251.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_47.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_770.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1824.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_727.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_391.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_985.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1784.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_475.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1807.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_976.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_85.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_813.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_21.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_398.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_746.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_120.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_771.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1263.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_736.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_111.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_887.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_158.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_18.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_393.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_512.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1317.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1390.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_969.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_745.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1308.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_17.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_49.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_196.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_59.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_447.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_964.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1397.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_134.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1427.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_789.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_454.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1225.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1340.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_305.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_431.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_748.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_954.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_800.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1781.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_79.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1777.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1273.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_807.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_462.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_101.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_775.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_933.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_499.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1792.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_123.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1385.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1806.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_971.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_492.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_41.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_799.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_74.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_66.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_948.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1376.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1457.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_798.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_947.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_949.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_309.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1424.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_28.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_750.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1396.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_340.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_9.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1453.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1365.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_359.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_488.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_455.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_335.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1325.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_869.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_453.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_927.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1319.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_444.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_983.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_333.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_178.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_165.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_310.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_164.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_501.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_446.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_376.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1231.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_818.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_895.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1391.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_506.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1416.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_162.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1375.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_384.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_27.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_838.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1779.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_452.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_737.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_853.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_884.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_854.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1783.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_739.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_193.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_187.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1279.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_476.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1812.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_935.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1326.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_34.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_30.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1429.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_754.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_792.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1252.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_885.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_94.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_58.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_456.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_500.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_859.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_489.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1311.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_766.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_344.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_140.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_834.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1796.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_206.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_801.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_201.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_363.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_15.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_191.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_389.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_408.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1366.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1414.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_422.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1782.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_762.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_955.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_130.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_435.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_924.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_440.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_934.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1445.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_160.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_6.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_128.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_97.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1450.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1349.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1247.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_760.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_841.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_203.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_459.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1820.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_370.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_445.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_769.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_817.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1829.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1274.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_402.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1444.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1352.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_844.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_925.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_742.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_804.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_354.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_753.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_464.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1236.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1441.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_368.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_336.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1793.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1253.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_774.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_406.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_351.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1814.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_797.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_35.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1381.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_371.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_407.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1373.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1259.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1401.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1255.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_824.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_194.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_941.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_923.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1408.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_915.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1428.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1310.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_833.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_157.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_457.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_13.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_57.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_886.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1446.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_116.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_972.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_321.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_156.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1372.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_314.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_839.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_416.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_12.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_928.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_313.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_372.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_438.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_104.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_419.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_425.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_137.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1426.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_477.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1291.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_449.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1321.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_88.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_842.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_857.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_53.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1270.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_374.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_837.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_405.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_779.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_913.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_852.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_777.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_460.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_51.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1778.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1360.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_957.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_153.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_42.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_136.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1825.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_803.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_510.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_150.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1789.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_982.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1290.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_73.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_911.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1417.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_741.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_437.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_900.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_888.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_36.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_400.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_92.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1232.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1285.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1422.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_942.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1281.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_159.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1364.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1421.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1282.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_761.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1244.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_758.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_75.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1827.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_103.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_764.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_5.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_3.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1246.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_334.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_429.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_796.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1264.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_509.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1237.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1297.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_142.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1374.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1355.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1314.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_33.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1828.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_135.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_514.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_121.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_149.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1345.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_1805.npy.npy -/mnt/nvme1/dataset_img/drone/1200/HackA5_1.2_743.npy.npy diff --git a/train_scripts/my_csv_make.ipynb b/train_scripts/my_csv_make.ipynb deleted file mode 100644 index 138f368..0000000 --- a/train_scripts/my_csv_make.ipynb +++ /dev/null @@ -1,58 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "537ea5d0-1d6c-423e-9417-171b70a76c66", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import pandas as pd\n", - "\n", - "path = '//192.168.11.63/data/DATASETS/Energomash/915_learning'\n", - "pd_columns = ['file_name']\n", - "df = pd.DataFrame(columns=pd_columns)\n", - "\n", - "p = 0\n", - "for i in os.walk(path):\n", - " p+=1\n", - " if p != 1:\n", - " for j in i[2]:\n", - " row = pd.DataFrame({pd_columns[0]: [str(str(i[0]) + '\\\\' + str(j)).replace('\\\\', '/')]})\n", - " df = pd.concat([df, row], ignore_index=True)\n", - "\n", - "df.to_csv(path + '\\dataset.csv', index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8f6e1ff8", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/train_scripts.zip b/train_scripts/train_scripts.zip deleted file mode 100644 index 9dd2629..0000000 Binary files a/train_scripts/train_scripts.zip and /dev/null differ diff --git a/train_scripts/triangulation_accurate.ipynb b/train_scripts/triangulation_accurate.ipynb deleted file mode 100644 index 6034c79..0000000 --- a/train_scripts/triangulation_accurate.ipynb +++ /dev/null @@ -1,91 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "689613d2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80.58750000000002\n", - "(array([8.97705408, 4.95 , 0. ]), array([-8.97705408, 4.95 , 0. ]))\n" - ] - } - ], - "source": [ - "import numpy \n", - "from math import sqrt as square\n", - "from numpy import sqrt, dot, cross \n", - "from numpy.linalg import norm \n", - "\n", - "#rssi = [rssi, max_rssi, min_rssi, gamma]\n", - "\n", - "def dist(rssi):\n", - " rssi = list(map(float, rssi))\n", - " return square(abs(rssi[0]-rssi[1]))*rssi[3]/square(abs(rssi[0]-rssi[2]))\n", - "\n", - "def sol(x1,x2,x3,rssi1,rssi2,rssi3):\n", - " r1 = dist(rssi1)\n", - " r2 = dist(rssi2)\n", - " r3 = dist(rssi3)\n", - " x1=numpy.array(x1)\n", - " x2=numpy.array(x2)\n", - " x3=numpy.array(x3)\n", - " temp1 = x2-x1 \n", - " e_x = temp1/norm(temp1) \n", - " temp2 = x3-x1 \n", - " i = dot(e_x,temp2) \n", - " temp3 = temp2 - i*e_x \n", - " e_y = temp3/norm(temp3) \n", - " e_z = cross(e_x,e_y) \n", - " d = norm(x2-x1) \n", - " j = dot(e_y,temp2) \n", - " x = (r1*r1 - r2*r2 + d*d) / (2*d) \n", - " y = (r1*r1 - r3*r3 -2*i*x + i*i + j*j) / (2*j) \n", - " temp4 = r1*r1 - x*x - y*y \n", - " print(temp4)\n", - " if temp4<0: \n", - " return \"Нет пересечения!\"\n", - " z = sqrt(temp4) \n", - " p_12_a = x1 + x*e_x + y*e_y + z*e_z \n", - " p_12_b = x1 + x*e_x + y*e_y - z*e_z \n", - " return p_12_a,p_12_b\n", - "\n", - "\n", - "print(sol([0,0,1],[0,0,-1],[0,10,0],[50,100,0,10.3],[50,100,0,10.3],[50,100,0,10.3]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a68f35a", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/train_scripts/triangulation_direction_2D.ipynb b/train_scripts/triangulation_direction_2D.ipynb deleted file mode 100644 index 5b4d93a..0000000 --- a/train_scripts/triangulation_direction_2D.ipynb +++ /dev/null @@ -1,57 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "f18afe4b", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy \n", - "from math import sqrt as square\n", - "from numpy import sqrt, dot, cross \n", - "from numpy.linalg import norm \n", - "\n", - "#rssi = [rssi, max_rssi, min_rssi, gamma]\n", - "\n", - "def dist(rssi):\n", - " rssi = list(map(float, rssi))\n", - " return square(abs(rssi[0]-rssi[1]))*rssi[3]/square(abs(rssi[0]-rssi[2]))\n", - "\n", - "def sol(x1,x2,x3,rssi1,rssi2,rssi3):\n", - " r1 = dist(rssi1)\n", - " r2 = dist(rssi2)\n", - " r3 = dist(rssi3)\n", - " x1=numpy.array(x1)\n", - " x2=numpy.array(x2)\n", - " x3=numpy.array(x3)\n", - " \n", - " return sector.\n", - "\n", - "\n", - "print(sol([0,0,1],[0,0,-1],[0,10,0],[50,100,0,10.3],[50,100,0,10.3],[50,100,0,10.3]))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}