├── .gitignore ├── LICENSE ├── MODULATION SPECTRAL SIGNAL REPRESENTATIONAND I-VECTORS FOR ANOMALOUS SOUND DETECTION.pdf ├── README.md ├── bin ├── .DS_Store ├── ensemble │ ├── .DS_Store │ ├── ens.py │ ├── ensemble_dev_data_results.csv │ └── individual_scores │ │ ├── .DS_Store │ │ ├── dev │ │ ├── iVectors_gmm_dev_data.pickle │ │ └── modspec_graph_dev_data.pickle │ │ └── eval │ │ ├── iVectors_gmm_eval_data.pickle │ │ └── modspec_graph_eval_data.pickle ├── iVectors_gmm │ ├── gmm.py │ └── iVectors_gmm_dev_data_results.csv └── modspec_graph │ ├── .DS_Store │ ├── graph_anom_detection.py │ ├── modspec_graph_dev_data_results.csv │ └── utils.py ├── dev_data └── .gitignore ├── download_dev_data.sh ├── download_eval_data.sh ├── eval_data └── .gitignore ├── saved_iVectors ├── .gitignore └── ivector_mfcc_100.zip └── task2 ├── .DS_Store ├── .gitignore └── Tiwari_IITKGP_task2_1 └── .DS_Store /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Parth Tiwari 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MODULATION SPECTRAL SIGNAL REPRESENTATIONAND I-VECTORS FOR ANOMALOUS SOUND DETECTION.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/MODULATION SPECTRAL SIGNAL REPRESENTATIONAND I-VECTORS FOR ANOMALOUS SOUND DETECTION.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MODULATION SPECTRAL SIGNAL REPRESENTATIONAND I-VECTORS FOR ANOMALOUS SOUND DETECTION 2 | 3 | This repository can be used to reproduce our submissions for **DCASE Challenge 2020 Task 2** - Unsupervised Detection of Anomalous Sounds for Machine Condition Monitoring 4 | 5 | 6 | #### Abstract 7 | This report summarizes our submission for Task-2 of the DCASE 2020 Challenge. We propose two different anomalous sound detection systems, one based on features extracted from a modula- tion spectral signal representation and the other based on i-vectors extracted from mel-band features. The first system uses a nearest neighbour graph to construct clusters which capture local variations in the training data. Anomalies are then identified based on their distance from the cluster centroids. The second system uses i-vectors extracted from mel-band spectra for training a Gaussian Mixture Model. Anomalies are then identified using their negative log likelihood. Both these methods show significant improvement over the DCASE Challenge baseline AUC scores, with an average improvement of 6% across all machines. An ensemble of the two systems is shown to further improve the average performance by 11% over the baseline. 8 | 9 | 10 | **Requirements** 11 | - `librosa` 12 | - [`noisereduce`](https://pypi.org/project/noisereduce/) 13 | - [`SRMRpy`](https://github.com/jfsantos/SRMRpy) 14 | - `networkx == 2.2` 15 | - `scikit-learn` 16 | - `numpy` 17 | - `pandas` 18 | - `tqdm` 19 | 20 | ## Usage 21 | 22 | #### 1. Clone this repository 23 | #### 2. Download datasets 24 | - Datasets are available [here](https://zenodo.org/record/3678171) 25 | - Datasets for all machines can be downloaded and unzipped by running 26 | - `sh download_dev_data.sh` for development data 27 | - `sh download_eval_data.sh` for evaluation data 28 | 29 | #### 3. Running System 1 30 | - `cd bin/modspec_graph/` 31 | - `python graph_anom_detection.py d` - for running on development data 32 | - Modulation Spectrums for each machine-id will be stored in `npy` files in `saved/` in the same directory 33 | - The results for development data are stored in `modspec_graph_dev_data_results.csv` in the same directory 34 | - `python graph_anom_detection.py e` - for running on evaluation data 35 | - The results for evaluation data are stored in the submission format in the directory `task2` 36 | 37 | #### 3. Running System 2 38 | - i-Vectors for both development and evaluation have been provided in the zip file - `saved_iVectors/ivector_mfcc_100.zip` 39 | - Unzip `ivector_mfcc_100.zip` in the same directory 40 | - Code for extracting i-Vectors will be added soon 41 | - `cd bin/iVectors_gmm/` 42 | - `python gmm.py d` - for running on development data 43 | - The results for development data are stored in `iVectors_gmm_dev_data_results.csv` in the same directory 44 | - `python gmm.py e` - for running on evaluation data 45 | - The results for evaluation data are stored in the submission format in the directory `task2` 46 | 47 | #### 3. Running ensemble of System 1 and System 2 48 | - Run both System 1 and System 2 49 | - `cd bin/ensemble/` 50 | - `python ens.py d` - for running on development data 51 | - The results for development data are stored in `ensemble_dev_data_results.csv` in the same directory 52 | - `python ens.py e` - for running on evaluation data 53 | - The results for evaluation data are stored in the submission format in the directory `task2` 54 | 55 | 56 | ## Results 57 | 58 | | Machine | Mid | Baseline AUC | Modspec Graph AUC | iVGmm AUC | Ensemble AUC | Baseline pAUC | Modspec Graph pAUC | iVGmm pAUC | Ensemble pAUC | 59 | |-------------|-----|---------------|--------------------|------------|---------------|----------------|---------------------|-------------|----------------| 60 | | ToyCar | 1 | 81.36% | 78.24% | 75.04% | 81.64% | 68.40% | 64.69% | 57.54% | 66.75% | 61 | | | 2 | 85.97% | 89.06% | 83.30% | 91.72% | 77.72% | 76.14% | 67.00% | 79.78% | 62 | | | 3 | 63.30% | 67.16% | 79.47% | 78.21% | 55.21% | 52.58% | 59.52% | 56.37% | 63 | | | 4 | 84.45% | 89.40% | 94.84% | 96.44% | 68.97% | 63.54% | 82.94% | 84.80% | 64 | | | Avg | 78.77% | 80.96% | 83.16% | 87.00% | 67.58% | 64.24% | 66.75% | 71.92% | 65 | | ToyConveyor | 1 | 78.07% | 62.56% | 55.51% | 64.62% | 64.25% | 51.59% | 52.82% | 52.24% | 66 | | | 2 | 64.16% | 54.03% | 53.80% | 56.65% | 56.01% | 49.99% | 50.95% | 50.23% | 67 | | | 3 | 75.35% | 59.10% | 59.09% | 64.06% | 61.03% | 50.31% | 52.82% | 52.25% | 68 | | | Avg | 72.53% | 58.57% | 56.13% | 61.78% | 60.43% | 50.63% | 52.20% | 51.58% | 69 | | fan | 0 | 54.41% | 63.37% | 67.85% | 67.12% | 49.37% | 49.73% | 57.38% | 52.92% | 70 | | | 2 | 73.40% | 79.32% | 70.39% | 80.48% | 54.81% | 57.16% | 61.93% | 59.21% | 71 | | | 4 | 61.61% | 71.76% | 73.52% | 78.07% | 53.26% | 50.68% | 57.53% | 53.99% | 72 | | | 6 | 73.92% | 74.00% | 81.15% | 81.90% | 52.35% | 49.38% | 56.31% | 49.23% | 73 | | | Avg | 65.83% | 72.11% | 73.23% | 76.89% | 52.45% | 51.74% | 58.29% | 53.84% | 74 | | pump | 0 | 67.15% | 86.66% | 74.99% | 86.95% | 56.74% | 82.52% | 67.10% | 78.32% | 75 | | | 2 | 61.53% | 62.44% | 74.91% | 70.06% | 58.10% | 64.77% | 60.08% | 65.72% | 76 | | | 4 | 88.33% | 84.16% | 92.02% | 90.73% | 67.10% | 59.95% | 73.74% | 68.00% | 77 | | | 6 | 74.55% | 81.64% | 71.10% | 82.65% | 58.02% | 66.20% | 51.70% | 66.56% | 78 | | | Avg | 72.89% | 78.72% | 78.26% | 82.60% | 59.99% | 68.36% | 63.15% | 69.65% | 79 | | slider | 0 | 96.19% | 99.91% | 83.92% | 98.72% | 81.44% | 99.53% | 50.04% | 93.44% | 80 | | | 2 | 78.97% | 84.36% | 56.93% | 77.93% | 63.68% | 73.86% | 47.84% | 52.89% | 81 | | | 4 | 94.30% | 97.83% | 87.84% | 95.93% | 71.98% | 88.59% | 62.71% | 79.69% | 82 | | | 6 | 69.59% | 79.03% | 59.04% | 71.40% | 49.02% | 55.47% | 49.91% | 52.28% | 83 | | | Avg | 84.76% | 90.28% | 71.93% | 86.00% | 66.53% | 79.36% | 52.63% | 69.57% | 84 | | valve | 0 | 68.76% | 100.00% | 79.33% | 98.80% | 51.70% | 100.00% | 52.94% | 95.62% | 85 | | | 2 | 68.18% | 99.88% | 85.35% | 98.69% | 51.83% | 99.34% | 56.27% | 93.29% | 86 | | | 4 | 74.30% | 98.26% | 84.10% | 95.88% | 51.97% | 91.32% | 56.32% | 80.26% | 87 | | | 6 | 53.90% | 89.22% | 69.84% | 85.01% | 48.43% | 72.59% | 49.91% | 59.65% | 88 | | | Avg | 66.28% | 96.84% | 79.65% | 94.59% | 50.98% | 90.81% | 53.86% | 82.21% | 89 | -------------------------------------------------------------------------------- /bin/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/.DS_Store -------------------------------------------------------------------------------- /bin/ensemble/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/ensemble/.DS_Store -------------------------------------------------------------------------------- /bin/ensemble/ens.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import pickle 4 | import pandas as pd 5 | import numpy as np 6 | from sklearn.metrics import roc_auc_score 7 | 8 | 9 | def get_machine_ids(machines, mode): 10 | mid_dict = {} 11 | if mode == 'd': 12 | path = '../../dev_data' 13 | folder = 'test' 14 | for m in machines: 15 | file_list = os.listdir(os.path.join(path, m, folder)) 16 | id_list = list(set([int(file.split('_')[2]) for file in file_list])) 17 | mid_dict[m] = id_list 18 | elif mode == 'e': 19 | path = '../../eval_data' 20 | folder = 'test' 21 | for m in machines: 22 | file_list = os.listdir(os.path.join(path, m, folder)) 23 | id_list = list(set([int(file.split('_')[1]) for file in file_list])) 24 | mid_dict[m] = id_list 25 | return mid_dict 26 | 27 | 28 | def get_test_files(m, mid, mode): 29 | y = [] 30 | if mode == 'd': 31 | path = '../../dev_data/' 32 | test_files = os.listdir(path + m + '/test') 33 | normal_test_files = ([file for file in test_files if (file[0] == 'n' and int(file.split('_')[2]) == mid and file[-4:] == '.wav')]) 34 | anom_test_files = ([file for file in test_files if (file[0] == 'a' and int(file.split('_')[2]) == mid and file[-4:] == '.wav')]) 35 | normal_test_files.sort() 36 | anom_test_files.sort() 37 | for sample in normal_test_files: 38 | y.append(0) 39 | for sample in anom_test_files: 40 | y.append(1) 41 | return y 42 | if mode == 'e': 43 | path = path = '../../eval_data/' 44 | files = os.listdir(path + m + '/test/') 45 | files = [f for f in files if int(f.split('_')[1]) == mid] 46 | files.sort() 47 | return files 48 | 49 | def main(mode): 50 | 51 | machines = ['ToyCar', 'ToyConveyor', 'fan', 'pump', 'slider', 'valve'] 52 | 53 | if mode == 'd': 54 | 55 | mid_dict = get_machine_ids(machines, mode) 56 | results = {'Machine':[], 'Mid':[], 'AUC':[], 'pAUC':[]} 57 | 58 | anom_scores_ensemble_iv = pickle.load(open('individual_scores/dev/iVectors_gmm_dev_data.pickle', 'rb')) 59 | anom_scores_ensemble_gr = pickle.load(open('individual_scores/dev/modspec_graph_dev_data.pickle', 'rb')) 60 | 61 | for m in machines: 62 | 63 | avg = {'AUC':[], 'pAUC':[]} 64 | 65 | for mid in mid_dict[m]: 66 | 67 | y_pred_iv = anom_scores_ensemble_iv[m][mid]['iv'] 68 | y_pred_gr = anom_scores_ensemble_gr[m][mid]['gr'] 69 | 70 | y_pred_iv = (y_pred_iv - np.min(y_pred_iv))/(np.max(y_pred_iv) - np.min(y_pred_iv)) 71 | y_pred_gr = (y_pred_gr - np.min(y_pred_gr))/(np.max(y_pred_gr) - np.min(y_pred_gr)) 72 | 73 | y_pred_ens = y_pred_iv * y_pred_gr 74 | 75 | y_test = get_test_files(m, mid, mode) 76 | 77 | AUC = roc_auc_score(y_test, y_pred_ens) 78 | pAUC = roc_auc_score(y_test, y_pred_ens, max_fpr = 0.1) 79 | 80 | results['Machine'].append(m) 81 | results['Mid'].append(mid) 82 | results['AUC'].append(AUC) 83 | results['pAUC'].append(pAUC) 84 | 85 | avg['AUC'].append(AUC) 86 | avg['pAUC'].append(pAUC) 87 | 88 | results['Machine'].append(m) 89 | results['Mid'].append('Average') 90 | results['AUC'].append(np.mean(avg['AUC'])) 91 | results['pAUC'].append(np.mean(avg['pAUC'])) 92 | 93 | results = pd.DataFrame(results) 94 | results.to_csv('ensemble_dev_data_results.csv') 95 | print(results) 96 | 97 | elif mode == 'e': 98 | 99 | mid_dict = get_machine_ids(machines, mode) 100 | anom_scores_ensemble_iv = pickle.load(open('individual_scores/eval/iVectors_gmm_eval_data.pickle', 'rb')) 101 | anom_scores_ensemble_gr = pickle.load(open('individual_scores/eval/modspec_graph_eval_data.pickle', 'rb')) 102 | 103 | for m in machines: 104 | 105 | for mid in mid_dict[m]: 106 | 107 | anom_scores = {'file':[], 'anomaly_score':[]} 108 | 109 | y_pred_iv = anom_scores_ensemble_iv[m][mid]['iv'] 110 | y_pred_gr = anom_scores_ensemble_gr[m][mid]['gr'] 111 | 112 | y_pred_iv = (y_pred_iv - np.min(y_pred_iv))/(np.max(y_pred_iv) - np.min(y_pred_iv)) 113 | y_pred_gr = (y_pred_gr - np.min(y_pred_gr))/(np.max(y_pred_gr) - np.min(y_pred_gr)) 114 | 115 | y_pred_ens = y_pred_iv * y_pred_gr 116 | 117 | eval_files = get_test_files(m, mid, mode) 118 | 119 | anom_scores['file'] = eval_files 120 | anom_scores['anomaly_score'] = y_pred_ens 121 | 122 | submission_file = pd.DataFrame(anom_scores) 123 | submission_file.to_csv('../../task2/Tiwari_IITKGP_task2_3/anomaly_score_{}_id_0{}.csv'.format(m, mid), header = False, index = False) 124 | 125 | if __name__ == '__main__': 126 | n = len(sys.argv) 127 | if n < 2: 128 | print('Please enter dev/eval mode') 129 | mode = sys.argv[1] 130 | 131 | if mode == 'd' or mode == 'e': 132 | main(mode) 133 | else: 134 | print('Invalid mode') 135 | -------------------------------------------------------------------------------- /bin/ensemble/ensemble_dev_data_results.csv: -------------------------------------------------------------------------------- 1 | ,Machine,Mid,AUC,pAUC 2 | 0,ToyCar,1,0.8163636363636364,0.6675210754158123 3 | 1,ToyCar,2,0.9171644204851752,0.7978152929493545 4 | 2,ToyCar,3,0.7821132075471697,0.5636827918853738 5 | 3,ToyCar,4,0.9644097035040432,0.8479784366576819 6 | 4,ToyCar,Average,0.8700127419750061,0.7192493992270557 7 | 5,ToyConveyor,1,0.64619375,0.5224342105263158 8 | 6,ToyConveyor,2,0.5664911971830986,0.5022979985174203 9 | 7,ToyConveyor,3,0.6405718415625165,0.5225351184904036 10 | 8,ToyConveyor,Average,0.617752262915205,0.5157557758447132 11 | 9,fan,0,0.6712407862407863,0.5291607396870555 12 | 10,fan,2,0.8047910863509748,0.5921419146752676 13 | 11,fan,4,0.7807040229885057,0.5399274047186933 14 | 12,fan,6,0.8190304709141274,0.4923458230062691 15 | 13,fan,Average,0.7689415916235985,0.5383939705218214 16 | 14,pump,0,0.8695104895104896,0.7832167832167831 17 | 15,pump,2,0.7006306306306307,0.6571834992887624 18 | 16,pump,4,0.9073,0.6799999999999999 19 | 17,pump,6,0.8264705882352941,0.6656346749226006 20 | 18,pump,Average,0.8259779270941034,0.6965087393570365 21 | 19,slider,0,0.9871629213483146,0.9343583678296865 22 | 20,slider,2,0.7793258426966292,0.5288783757145673 23 | 21,slider,4,0.9593258426966292,0.7968657599053814 24 | 22,slider,6,0.7140449438202248,0.5227675931401538 25 | 23,slider,Average,0.8599648876404495,0.6957175241474474 26 | 24,valve,0,0.9879831932773109,0.9562140645731977 27 | 25,valve,2,0.9869166666666667,0.9328947368421052 28 | 26,valve,4,0.95875,0.8026315789473685 29 | 27,valve,6,0.8500833333333333,0.5964912280701755 30 | 28,valve,Average,0.9459332983193276,0.8220579021082117 31 | -------------------------------------------------------------------------------- /bin/ensemble/individual_scores/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/ensemble/individual_scores/.DS_Store -------------------------------------------------------------------------------- /bin/ensemble/individual_scores/dev/iVectors_gmm_dev_data.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/ensemble/individual_scores/dev/iVectors_gmm_dev_data.pickle -------------------------------------------------------------------------------- /bin/ensemble/individual_scores/dev/modspec_graph_dev_data.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/ensemble/individual_scores/dev/modspec_graph_dev_data.pickle -------------------------------------------------------------------------------- /bin/ensemble/individual_scores/eval/iVectors_gmm_eval_data.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/ensemble/individual_scores/eval/iVectors_gmm_eval_data.pickle -------------------------------------------------------------------------------- /bin/ensemble/individual_scores/eval/modspec_graph_eval_data.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/ensemble/individual_scores/eval/modspec_graph_eval_data.pickle -------------------------------------------------------------------------------- /bin/iVectors_gmm/gmm.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import pickle 4 | import numpy as np 5 | import pandas as pd 6 | from sklearn import mixture 7 | from sklearn.metrics import roc_auc_score 8 | 9 | def get_machine_ids(machines, mode): 10 | mid_dict = {} 11 | if mode == 'd': 12 | path = '../../saved_iVectors/ivector_mfcc_100' 13 | folder = 'test' 14 | for m in machines: 15 | file_list = os.listdir(os.path.join(path, m, folder)) 16 | id_list = list(set([int(file.split('_')[2]) for file in file_list])) 17 | mid_dict[m] = id_list 18 | elif mode == 'e': 19 | path = '../../saved_iVectors/ivector_mfcc_100' 20 | folder = 'test_eval' 21 | for m in machines: 22 | file_list = os.listdir(os.path.join(path, m, folder)) 23 | id_list = list(set([int(file.split('_')[1]) for file in file_list])) 24 | mid_dict[m] = id_list 25 | return mid_dict 26 | 27 | def read_train(m, mid, mode): 28 | X = [] 29 | if mode == 'd': 30 | path = '../../saved_iVectors/ivector_mfcc_100/{}/train/'.format(m) 31 | elif mode == 'e': 32 | path = '../../saved_iVectors/ivector_mfcc_100/{}/train_eval/'.format(m) 33 | files = os.listdir(path) 34 | files = [f for f in files if int(f.split('_')[2]) == mid] 35 | files.sort() 36 | for f in files: 37 | iv = pd.read_csv(path + f, names = ['iv']) 38 | X.append(list(iv['iv'])) 39 | return np.array(X) 40 | 41 | def read_test(m, mid, mode): 42 | X, y = [], [] 43 | if mode == 'd': 44 | path = '../../saved_iVectors/ivector_mfcc_100/{}/test/'.format(m) 45 | files = os.listdir(path) 46 | files = [f for f in files if int(f.split('_')[2]) == mid] 47 | norm_files = [f for f in files if f[0] == 'n'] 48 | anom_files = [f for f in files if f[0] == 'a'] 49 | norm_files.sort() 50 | anom_files.sort() 51 | for f in norm_files: 52 | iv = pd.read_csv(path + f, names = ['iv']) 53 | X.append(list(iv['iv'])) 54 | y.append(0) 55 | for f in anom_files: 56 | iv = pd.read_csv(path + f, names = ['iv']) 57 | X.append(list(iv['iv'])) 58 | y.append(1) 59 | return np.array(X), np.array(y) 60 | elif mode == 'e': 61 | path = '../../saved_iVectors/ivector_mfcc_100/{}/test_eval/'.format(m) 62 | files = os.listdir(path) 63 | files = [f for f in files if int(f.split('_')[1]) == mid] 64 | files.sort() 65 | for f in files: 66 | iv = pd.read_csv(path + f, names = ['iv']) 67 | X.append(list(iv['iv'])) 68 | files = [f[:-4]+'.wav' for f in files] 69 | return np.array(X), files 70 | 71 | def GMM(X_train, X_test): 72 | clf = mixture.GaussianMixture(n_components = 10, covariance_type='full', random_state = 42).fit(X_train) 73 | y_pred = clf.score_samples(X_test) 74 | y_pred_iv = -1 * y_pred 75 | return y_pred_iv 76 | 77 | def main(mode): 78 | 79 | machines = ['ToyCar', 'ToyConveyor', 'fan', 'pump', 'slider', 'valve'] 80 | 81 | if mode == 'd': 82 | 83 | mid_dict = get_machine_ids(machines, mode) 84 | anom_scores_ensemble = {} 85 | results = {'Machine':[], 'Mid':[], 'AUC':[], 'pAUC':[]} 86 | 87 | for m in machines: 88 | 89 | anom_scores_ensemble[m] = {} 90 | avg = {'AUC':[], 'pAUC':[]} 91 | 92 | for mid in mid_dict[m]: 93 | 94 | anom_scores_ensemble[m][mid] = {} 95 | 96 | X_train = read_train(m, mid, mode) 97 | X_test, y_test = read_test(m, mid, mode) 98 | y_pred_iv = GMM(X_train, X_test) 99 | 100 | AUC = roc_auc_score(y_test, y_pred_iv) 101 | pAUC = roc_auc_score(y_test, y_pred_iv, max_fpr = 0.1) 102 | anom_scores_ensemble[m][mid]['iv'] = y_pred_iv 103 | 104 | results['Machine'].append(m) 105 | results['Mid'].append(mid) 106 | results['AUC'].append(AUC) 107 | results['pAUC'].append(pAUC) 108 | 109 | avg['AUC'].append(AUC) 110 | avg['pAUC'].append(pAUC) 111 | 112 | results['Machine'].append(m) 113 | results['Mid'].append('Average') 114 | results['AUC'].append(np.mean(avg['AUC'])) 115 | results['pAUC'].append(np.mean(avg['pAUC'])) 116 | 117 | results = pd.DataFrame(results) 118 | results.to_csv('iVectors_gmm_dev_data_results.csv') 119 | print(results) 120 | with open('../ensemble/individual_scores/dev/iVectors_gmm_dev_data.pickle', 'wb') as file: 121 | pickle.dump(anom_scores_ensemble, file) 122 | 123 | elif mode == 'e': 124 | 125 | mid_dict = get_machine_ids(machines, mode) 126 | anom_scores_ensemble = {} 127 | 128 | for m in machines: 129 | 130 | anom_scores_ensemble[m] = {} 131 | 132 | for mid in mid_dict[m]: 133 | 134 | anom_scores_ensemble[m][mid] = {} 135 | anom_scores = {'file':[], 'anomaly_score':[]} 136 | 137 | X_train = read_train(m, mid, mode) 138 | X_test, eval_files = read_test(m, mid, mode) 139 | 140 | y_pred_iv = GMM(X_train, X_test) 141 | anom_scores['file'] = eval_files 142 | anom_scores['anomaly_score'] = y_pred_iv 143 | anom_scores_ensemble[m][mid]['iv'] = y_pred_iv 144 | 145 | submission_file = pd.DataFrame(anom_scores) 146 | submission_file.to_csv('../../task2/Tiwari_IITKGP_task2_1/anomaly_score_{}_id_0{}.csv'.format(m, mid), header = False, index = False) 147 | 148 | with open('../ensemble/individual_scores/eval/iVectors_gmm_eval_data.pickle', 'wb') as file: 149 | pickle.dump(anom_scores_ensemble, file) 150 | 151 | if __name__ == '__main__': 152 | n = len(sys.argv) 153 | if n < 2: 154 | print('Please enter dev/eval mode') 155 | mode = sys.argv[1] 156 | 157 | if mode == 'd' or mode == 'e': 158 | main(mode) 159 | else: 160 | print('Invalid mode') 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /bin/iVectors_gmm/iVectors_gmm_dev_data_results.csv: -------------------------------------------------------------------------------- 1 | ,Machine,Mid,AUC,pAUC 2 | 0,ToyCar,1,0.750378787878788,0.5754158122579176 3 | 1,ToyCar,2,0.8329595687331537,0.6699673712583345 4 | 2,ToyCar,3,0.7946846361185985,0.5952333664349553 5 | 3,ToyCar,4,0.9484204851752022,0.8294226131366151 6 | 4,ToyCar,Average,0.8316108694764356,0.6675097907719556 7 | 5,ToyConveyor,1,0.55510625,0.5281907894736843 8 | 6,ToyConveyor,2,0.5379647887323944,0.5095255744996293 9 | 7,ToyConveyor,3,0.5909393784484126,0.5281611280223333 10 | 8,ToyConveyor,Average,0.5613368057269357,0.5219591639985489 11 | 9,fan,0,0.6784520884520884,0.5737747316694686 12 | 10,fan,2,0.7039275766016713,0.6192640375311538 13 | 11,fan,4,0.7351724137931036,0.5753176043557169 14 | 12,fan,6,0.8114681440443213,0.5630558390435924 15 | 13,fan,Average,0.7322550557227961,0.5828530531499829 16 | 14,pump,0,0.7499300699300699,0.6709606183290394 17 | 15,pump,2,0.749099099099099,0.6007586533902324 18 | 16,pump,4,0.9201999999999999,0.7373684210526316 19 | 17,pump,6,0.7109803921568627,0.5170278637770898 20 | 18,pump,Average,0.7825523902965079,0.6315288891372484 21 | 19,slider,0,0.8392415730337079,0.5004435245416913 22 | 20,slider,2,0.5693258426966292,0.47841513897102306 23 | 21,slider,4,0.878370786516854,0.627143701951508 24 | 22,slider,6,0.5904494382022472,0.4991129509166174 25 | 23,slider,Average,0.7193469101123595,0.52627882909521 26 | 24,valve,0,0.7932773109243697,0.5294117647058824 27 | 25,valve,2,0.8534999999999999,0.5627192982456141 28 | 26,valve,4,0.8410000000000001,0.5631578947368421 29 | 27,valve,6,0.6984166666666667,0.49912280701754386 30 | 28,valve,Average,0.7965484943977591,0.5386029411764706 31 | -------------------------------------------------------------------------------- /bin/modspec_graph/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/bin/modspec_graph/.DS_Store -------------------------------------------------------------------------------- /bin/modspec_graph/graph_anom_detection.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import pickle 3 | import numpy as np 4 | import pandas as pd 5 | import networkx as nx 6 | from utils import * 7 | from sklearn.metrics import roc_auc_score 8 | 9 | 10 | 11 | def build_net(X_train): 12 | L = len(X_train) 13 | dist_mat = np.ones((L, L)) 14 | for i in range(L): 15 | for j in range(i + 1): 16 | dist = np.sum(np.abs(X_train[i] - X_train[j])) 17 | dist_mat[i][j] = dist 18 | dist_mat[j][i] = dist 19 | dist_mat[i][i] = 999 20 | edge_dict = {e:[] for e in range(L)} 21 | for e in range(L): 22 | distances = list(dist_mat[e]) 23 | min1 = np.argmin(distances) 24 | edge_dict[e].append(min1) 25 | G = nx.Graph(edge_dict) 26 | sub_graphs = list(nx.connected_component_subgraphs(G)) 27 | # print('# of sub graphs = {}'.format(len(sub_graphs))) 28 | sub_graph_dict = {k:list(sub_graphs[k].nodes) for k in range(len(sub_graphs))} 29 | return sub_graph_dict, G 30 | 31 | def get_means(X_train, subgraphs): 32 | means = {k:0 for k in subgraphs} 33 | deviations = {k:0 for k in subgraphs} 34 | for G in subgraphs: 35 | means[G] = np.mean([X_train[i] for i in subgraphs[G]], axis = 0) 36 | deviations[G] = np.std([X_train[i] for i in subgraphs[G]], axis = 0) + 0.000001 37 | return means, deviations 38 | 39 | def get_anom_score(X_test, means, deviations): 40 | y_pred = [] 41 | for sample in X_test: 42 | pred = np.min([np.sum((np.abs(sample - means[i])/deviations[i])) for i in means]) 43 | y_pred.append(pred) 44 | return np.array(y_pred) 45 | 46 | 47 | def main(mode): 48 | 49 | machines = ['ToyCar', 'ToyConveyor', 'fan', 'pump', 'slider', 'valve'] 50 | 51 | reducenoise = 100 52 | 53 | if mode == 'd': 54 | 55 | mid_dict = get_machine_ids(machines, mode) 56 | anom_scores_ensemble = {} 57 | results = {'Machine':[], 'Mid':[], 'AUC':[], 'pAUC':[]} 58 | 59 | for m in machines: 60 | 61 | anom_scores_ensemble[m] = {} 62 | avg = {'AUC':[], 'pAUC':[]} 63 | 64 | for mid in mid_dict[m]: 65 | 66 | anom_scores_ensemble[m][mid] = {} 67 | 68 | X_train, X_test, y_test = get_spectrums(m, mid, reducenoise, mode) 69 | 70 | subgraphs, Graph = build_net(X_train) 71 | means, deviations = get_means(X_train, subgraphs) 72 | y_pred_gr = get_anom_score(X_test, means, deviations) 73 | 74 | AUC = roc_auc_score(y_test, y_pred_gr) 75 | pAUC = roc_auc_score(y_test, y_pred_gr, max_fpr = 0.1) 76 | anom_scores_ensemble[m][mid]['gr'] = y_pred_gr 77 | 78 | results['Machine'].append(m) 79 | results['Mid'].append(mid) 80 | results['AUC'].append(AUC) 81 | results['pAUC'].append(pAUC) 82 | 83 | avg['AUC'].append(AUC) 84 | avg['pAUC'].append(pAUC) 85 | 86 | results['Machine'].append(m) 87 | results['Mid'].append('Average') 88 | results['AUC'].append(np.mean(avg['AUC'])) 89 | results['pAUC'].append(np.mean(avg['pAUC'])) 90 | 91 | results = pd.DataFrame(results) 92 | results.to_csv('modspec_graph_dev_data_results.csv') 93 | print(results) 94 | with open('../ensemble/individual_scores/dev/modspec_graph_dev_data.pickle', 'wb') as file: 95 | pickle.dump(anom_scores_ensemble, file) 96 | 97 | elif mode == 'e': 98 | 99 | mid_dict = get_machine_ids(machines, mode) 100 | anom_scores_ensemble = {} 101 | 102 | for m in machines: 103 | 104 | anom_scores_ensemble[m] = {} 105 | 106 | for mid in mid_dict[m]: 107 | 108 | anom_scores_ensemble[m][mid] = {} 109 | anom_scores = {'file':[], 'anomaly_score':[]} 110 | 111 | X_train, X_test, eval_files = get_spectrums(m, mid, reducenoise, mode) 112 | 113 | subgraphs, Graph = build_net(X_train) 114 | means, deviations = get_means(X_train, subgraphs) 115 | y_pred_gr = get_anom_score(X_test, means, deviations) 116 | 117 | anom_scores['file'] = eval_files 118 | anom_scores['anomaly_score'] = y_pred_gr 119 | anom_scores_ensemble[m][mid]['gr'] = y_pred_gr 120 | 121 | submission_file = pd.DataFrame(anom_scores) 122 | submission_file.to_csv('../../task2/Tiwari_IITKGP_task2_2/anomaly_score_{}_id_0{}.csv'.format(m, mid), header = False, index = False) 123 | 124 | with open('../ensemble/individual_scores/eval/modspec_graph_eval_data.pickle', 'wb') as file: 125 | pickle.dump(anom_scores_ensemble, file) 126 | 127 | if __name__ == '__main__': 128 | n = len(sys.argv) 129 | if n < 2: 130 | print('Please enter dev/eval mode') 131 | mode = sys.argv[1] 132 | 133 | if mode == 'd' or mode == 'e': 134 | main(mode) 135 | else: 136 | print('Invalid mode') -------------------------------------------------------------------------------- /bin/modspec_graph/modspec_graph_dev_data_results.csv: -------------------------------------------------------------------------------- 1 | ,Machine,Mid,AUC,pAUC 2 | 0,ToyCar,1,0.7823917748917748,0.6469013442697653 3 | 1,ToyCar,2,0.8905876010781671,0.7614413391970491 4 | 2,ToyCar,3,0.6715902964959569,0.5257767059157327 5 | 3,ToyCar,4,0.8940269541778976,0.6354092779117606 6 | 4,ToyCar,Average,0.8096491566609492,0.642382166823577 7 | 5,ToyConveyor,1,0.6256093749999999,0.515921052631579 8 | 6,ToyConveyor,2,0.5403380281690141,0.49994440326167533 9 | 7,ToyConveyor,3,0.5910380933913871,0.5031001502062901 10 | 8,ToyConveyor,Average,0.5856618321868003,0.5063218686998482 11 | 9,fan,0,0.6336855036855036,0.49734902366481315 12 | 10,fan,2,0.7932033426183844,0.5716170649464888 13 | 11,fan,4,0.7176149425287356,0.5068058076225045 14 | 12,fan,6,0.740027700831025,0.4938037614812655 15 | 13,fan,Average,0.7211328724159121,0.5173939144287679 16 | 14,pump,0,0.8665734265734266,0.8251748251748251 17 | 15,pump,2,0.6244144144144144,0.6477003319108583 18 | 16,pump,4,0.8415999999999999,0.5994736842105264 19 | 17,pump,6,0.8163725490196078,0.6620227038183695 20 | 18,pump,Average,0.7872400975018622,0.6835928862786447 21 | 19,slider,0,0.9991011235955056,0.9952690715552928 22 | 20,slider,2,0.8436329588014981,0.7386162034299232 23 | 21,slider,4,0.978314606741573,0.885866351271437 24 | 22,slider,6,0.7903370786516853,0.5547013601419278 25 | 23,slider,Average,0.9028464419475655,0.7936132465996452 26 | 24,valve,0,1.0,1.0 27 | 25,valve,2,0.99875,0.993421052631579 28 | 26,valve,4,0.9825833333333334,0.9131578947368422 29 | 27,valve,6,0.8921666666666668,0.7258771929824561 30 | 28,valve,Average,0.9683750000000001,0.9081140350877193 31 | -------------------------------------------------------------------------------- /bin/modspec_graph/utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pickle 3 | import librosa 4 | import numpy as np 5 | import pandas as pd 6 | import noisereduce as nr 7 | from srmrpy import srmr 8 | 9 | def reshape_(x): 10 | return np.array([i.flatten() for i in x]) 11 | 12 | def get_noise(m, mid, reducenoise, mode): 13 | if mode == 'd': 14 | path = '../../dev_data/' 15 | elif mode == 'e': 16 | path = '../../eval_data/' 17 | normal_train_files = os.listdir(path + m +'/train') 18 | normal_train_files = [file for file in normal_train_files if int(file.split('_')[2]) == mid and file[-4:] == '.wav'] 19 | noise = [] 20 | for sample in normal_train_files[:reducenoise]: 21 | y, fs = librosa.load(path + m +'/train/'+ sample, sr = 16000) 22 | noise.append(y) 23 | noise = np.mean(noise, axis = 0) 24 | return noise 25 | 26 | def read_spectrum(path, noise, reducenoise): 27 | y, fs = librosa.load(path, sr = 16000) 28 | if reducenoise: 29 | y = nr.reduce_noise(audio_clip=y, noise_clip=noise) 30 | modspec = srmr(y, fs, n_cochlear_filters = 60, norm = False, low_freq=125, min_cf=4, max_cf=128)[1] 31 | modspec = np.mean(modspec, axis = 2) 32 | return modspec 33 | 34 | def get_train(m, mid, noise, reducenoise, mode): 35 | X = [] 36 | if mode == 'd': 37 | path = '../../dev_data/' 38 | elif mode == 'e': 39 | path = '../../eval_data/' 40 | normal_train_files = os.listdir(path + m + '/train') 41 | normal_train_files = [file for file in normal_train_files if (int(file.split('_')[2]) == mid and file[-4:] == '.wav')] 42 | normal_train_files.sort() 43 | for sample in normal_train_files: 44 | X.append(np.array(read_spectrum(path + m + '/train/' + sample, noise, reducenoise))) 45 | return X 46 | 47 | def get_test(m, mid, noise, reducenoise, mode): 48 | X, y = [], [] 49 | if mode == 'd': 50 | path = '../../dev_data/' 51 | test_files = os.listdir(path + m + '/test') 52 | normal_test_files = ([file for file in test_files if (file[0] == 'n' and int(file.split('_')[2]) == mid and file[-4:] == '.wav')]) 53 | anom_test_files = ([file for file in test_files if (file[0] == 'a' and int(file.split('_')[2]) == mid and file[-4:] == '.wav')]) 54 | normal_test_files.sort() 55 | anom_test_files.sort() 56 | for sample in normal_test_files: 57 | X.append(np.array(read_spectrum(path + m + '/test/' + sample, noise, reducenoise))) 58 | y.append(0) 59 | for sample in anom_test_files: 60 | X.append(np.array(read_spectrum(path + m + '/test/' + sample, noise, reducenoise))) 61 | y.append(1) 62 | return X, y 63 | elif mode == 'e': 64 | path = '../../eval_data/' 65 | test_files = os.listdir(path + m + '/test') 66 | test_files = ([file for file in test_files if (int(file.split('_')[1]) == mid and file[-4:] == '.wav')]) 67 | test_files.sort() 68 | for sample in test_files: 69 | X.append(np.array(read_spectrum(path + m + '/test/' + sample, noise, reducenoise))) 70 | return X, test_files 71 | 72 | def get_spectrums(machine, mid, reducenoise, mode): 73 | file_name = '_NR-{}_{}_.npy'.format(reducenoise, mode) 74 | if mode == 'd': 75 | try: 76 | X_train = np.load('saved/'+machine+str(mid)+'_X_train'+file_name) 77 | X_test = np.load('saved/'+machine+str(mid)+'_X_test'+file_name) 78 | y_test = np.load('saved/'+machine+str(mid)+'_y_test'+file_name) 79 | except: 80 | print('Computing Modulation Spectrums', machine, mid) 81 | noise = get_noise(machine, mid, reducenoise, mode) 82 | X_train = get_train(machine, mid, noise, reducenoise, mode) 83 | X_test, y_test = get_test(machine, mid, noise, reducenoise, mode) 84 | np.save('saved/'+machine+str(mid)+'_X_train'+file_name, X_train) 85 | np.save('saved/'+machine+str(mid)+'_X_test'+file_name, X_test) 86 | np.save('saved/'+machine+str(mid)+'_y_test'+file_name, y_test) 87 | return X_train, X_test, y_test 88 | elif mode == 'e': 89 | try: 90 | X_train = np.load('saved/'+machine+str(mid)+'_X_train'+file_name) 91 | X_test = np.load('saved/'+machine+str(mid)+'_X_test'+file_name) 92 | eval_files = np.load('saved/'+machine+str(mid)+'_eval_files'+file_name) 93 | except: 94 | print('Computing Modulation Spectrums', machine, mid) 95 | noise = get_noise(machine, mid, reducenoise, mode) 96 | X_train = get_train(machine, mid, noise, reducenoise, mode) 97 | X_test, eval_files = get_test(machine, mid, noise, reducenoise, mode) 98 | np.save('saved/'+machine+str(mid)+'_X_train'+file_name, X_train) 99 | np.save('saved/'+machine+str(mid)+'_X_test'+file_name, X_test) 100 | np.save('saved/'+machine+str(mid)+'_eval_files'+file_name, eval_files) 101 | return X_train, X_test, eval_files 102 | 103 | def get_machine_ids(machines, mode): 104 | mid_dict = {} 105 | if mode == 'd': 106 | path = '../../dev_data' 107 | folder = 'test' 108 | for m in machines: 109 | file_list = os.listdir(os.path.join(path, m, folder)) 110 | id_list = list(set([int(file.split('_')[2]) for file in file_list])) 111 | mid_dict[m] = id_list 112 | elif mode == 'e': 113 | path = '../../eval_data' 114 | folder = 'test' 115 | for m in machines: 116 | file_list = os.listdir(os.path.join(path, m, folder)) 117 | id_list = list(set([int(file.split('_')[1]) for file in file_list])) 118 | mid_dict[m] = id_list 119 | return mid_dict 120 | -------------------------------------------------------------------------------- /dev_data/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | !*.sh 6 | 7 | 8 | -------------------------------------------------------------------------------- /download_dev_data.sh: -------------------------------------------------------------------------------- 1 | wget https://zenodo.org/record/3678171/files/dev_data_fan.zip -P dev_data 2 | wget https://zenodo.org/record/3678171/files/dev_data_pump.zip -P dev_data 3 | wget https://zenodo.org/record/3678171/files/dev_data_slider.zip -P dev_data 4 | wget https://zenodo.org/record/3678171/files/dev_data_ToyCar.zip -P dev_data 5 | wget https://zenodo.org/record/3678171/files/dev_data_ToyConveyor.zip -P dev_data 6 | wget https://zenodo.org/record/3678171/files/dev_data_valve.zip -P dev_data 7 | 8 | cd dev_data 9 | unzip \*.zip 10 | rm *.zip -------------------------------------------------------------------------------- /download_eval_data.sh: -------------------------------------------------------------------------------- 1 | wget https://zenodo.org/record/3727685/files/eval_data_train_fan.zip -P eval_data 2 | wget https://zenodo.org/record/3727685/files/eval_data_train_pump.zip -P eval_data 3 | wget https://zenodo.org/record/3727685/files/eval_data_train_slider.zip -P eval_data 4 | wget https://zenodo.org/record/3727685/files/eval_data_train_ToyCar.zip -P eval_data 5 | wget https://zenodo.org/record/3727685/files/eval_data_train_ToyConveyor.zip -P eval_data 6 | wget https://zenodo.org/record/3727685/files/eval_data_train_valve.zip -P eval_data 7 | 8 | wget https://zenodo.org/record/3841772/files/eval_data_test_fan.zip -P eval_data 9 | wget https://zenodo.org/record/3841772/files/eval_data_test_pump.zip -P eval_data 10 | wget https://zenodo.org/record/3841772/files/eval_data_test_slider.zip -P eval_data 11 | wget https://zenodo.org/record/3841772/files/eval_data_test_ToyCar.zip -P eval_data 12 | wget https://zenodo.org/record/3841772/files/eval_data_test_ToyConveyor.zip -P eval_data 13 | wget https://zenodo.org/record/3841772/files/eval_data_test_valve.zip -P eval_data 14 | 15 | cd eval_data 16 | unzip \*.zip 17 | rm *.zip 18 | -------------------------------------------------------------------------------- /eval_data/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | !*.sh 6 | 7 | 8 | -------------------------------------------------------------------------------- /saved_iVectors/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | !*.sh 6 | 7 | 8 | -------------------------------------------------------------------------------- /saved_iVectors/ivector_mfcc_100.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/saved_iVectors/ivector_mfcc_100.zip -------------------------------------------------------------------------------- /task2/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/task2/.DS_Store -------------------------------------------------------------------------------- /task2/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | !*.sh 6 | 7 | 8 | -------------------------------------------------------------------------------- /task2/Tiwari_IITKGP_task2_1/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parth2170/DCASE2020-Task2/7338770ea32abde0146e9ae09d4eb24473377ef6/task2/Tiwari_IITKGP_task2_1/.DS_Store --------------------------------------------------------------------------------