├── .ipynb_checkpoints └── xvector_ext_and_lda_scatter-checkpoint.ipynb ├── README.md ├── TDNN_gpu.py ├── celebs_xvectors ├── data_path.txt ├── lda-2dim-with-andrew-lda-pretrained.png ├── lda-2dim.png ├── lda-3dim-with-andrew-lda-pretrained.png ├── lda-3dim-with-andrew.png ├── lda-3dim.png ├── total_model ├── utils.py ├── xvector - gpu.ipynb └── xvector_ext_and_lda_scatter.ipynb /.ipynb_checkpoints/xvector_ext_and_lda_scatter-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import dill" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 18, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "import matplotlib.pyplot as plt\n", 28 | "import pickle\n", 29 | "import numpy as np\n", 30 | "from mpl_toolkits.mplot3d import Axes3D\n", 31 | "import torch\n", 32 | "from scipy.io import wavfile\n", 33 | "from tqdm import tqdm\n", 34 | "from utils import *\n", 35 | "from python_speech_features import mfcc, logfbank\n" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 8, 41 | "metadata": {}, 42 | "outputs": [], 43 | "source": [ 44 | "net_xvec = torch.load('total_model')[:-1]" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 9, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "data": { 54 | "text/plain": [ 55 | "Sequential(\n", 56 | " (0): TDNN()\n", 57 | " (1): TDNN()\n", 58 | " (2): TDNN()\n", 59 | " (3): TDNN()\n", 60 | " (4): TDNN()\n", 61 | " (5): StatsPooling()\n", 62 | " (6): FullyConnected(\n", 63 | " (hidden1): Linear(in_features=3000, out_features=512, bias=True)\n", 64 | " (hidden2): Linear(in_features=512, out_features=512, bias=True)\n", 65 | " )\n", 66 | ")" 67 | ] 68 | }, 69 | "execution_count": 9, 70 | "metadata": {}, 71 | "output_type": "execute_result" 72 | } 73 | ], 74 | "source": [ 75 | "net_xvec" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 10, 81 | "metadata": {}, 82 | "outputs": [], 83 | "source": [ 84 | "# net_xvec = nn.Sequential(net1,net2,net3,net4,net5,SP,FC)\n", 85 | "# net_xvec.cuda()" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 19, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "name": "stderr", 95 | "output_type": "stream", 96 | "text": [ 97 | "0it [00:00, ?it/s]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 98 | "1it [00:02, 2.01s/it]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 99 | "2it [00:03, 1.96s/it]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 100 | "3it [00:05, 1.93s/it]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 101 | "4it [00:07, 1.91s/it]\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "wav_path = r\"D:\\Downloads\\Lecture 1.2 — Introduction Supervised Learning — [ Machine Learning Andrew Ng ].wav\"\n", 107 | "max_total_context_test = 400\n", 108 | "_min,_max = float('inf'),-float('inf')\n", 109 | "X_test = []\n", 110 | "rate, wav = wavfile.read(wav_path)\n", 111 | "for chunked_wav in tqdm(chunks(wav,int(len(wav)/4))):\n", 112 | " X_sample = mfcc(chunked_wav,samplerate= rate,numcep=24\n", 113 | " ,nfilt=26,nfft=1024)\n", 114 | " _min = min(np.amin(X_sample),_min)\n", 115 | " _max = max(np.amax(X_sample),_max)\n", 116 | " for chunked_X_sample in list(chunks(X_sample,max_total_context_test)):\n", 117 | " if len(chunked_X_sample) == max_total_context_test:\n", 118 | " X_test.append(chunked_X_sample)\n", 119 | "X_test = (X_test - _min) / (_max-_min)\n" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 20, 125 | "metadata": {}, 126 | "outputs": [ 127 | { 128 | "data": { 129 | "text/plain": [ 130 | "(372, 400, 24)" 131 | ] 132 | }, 133 | "execution_count": 20, 134 | "metadata": {}, 135 | "output_type": "execute_result" 136 | } 137 | ], 138 | "source": [ 139 | "X_test.shape" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 21, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "mel size: 24\n", 152 | "sequence length: 400\n", 153 | "output shape: torch.Size([30, 396, 512])\n", 154 | "mel size: 512\n", 155 | "sequence length: 396\n", 156 | "output shape: torch.Size([30, 392, 512])\n", 157 | "mel size: 512\n", 158 | "sequence length: 392\n", 159 | "output shape: torch.Size([30, 386, 512])\n", 160 | "mel size: 512\n", 161 | "sequence length: 386\n", 162 | "output shape: torch.Size([30, 385, 512])\n", 163 | "mel size: 512\n", 164 | "sequence length: 385\n", 165 | "output shape: torch.Size([30, 384, 1500])\n" 166 | ] 167 | } 168 | ], 169 | "source": [ 170 | "ng_outout = net_xvec(torch.tensor(X_test[200:230]).cuda())" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 22, 176 | "metadata": {}, 177 | "outputs": [], 178 | "source": [ 179 | "np_ng_output = ng_outout.cpu().detach().numpy()" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 23, 185 | "metadata": {}, 186 | "outputs": [], 187 | "source": [ 188 | "xvecs_collection = {0:[],1:[],2:[],3:[]}" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 24, 194 | "metadata": {}, 195 | "outputs": [ 196 | { 197 | "ename": "NameError", 198 | "evalue": "name 'trainloader' is not defined", 199 | "output_type": "error", 200 | "traceback": [ 201 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 202 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 203 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtrainloader\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# get the inputs; data is a list of [inputs, labels]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabels\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 204 | "\u001b[1;31mNameError\u001b[0m: name 'trainloader' is not defined" 205 | ] 206 | } 207 | ], 208 | "source": [ 209 | "\n", 210 | "# for i, data in enumerate(trainloader, 0):\n", 211 | "# a = time.time()\n", 212 | "# # get the inputs; data is a list of [inputs, labels]\n", 213 | "# inputs, labels = data\n", 214 | "# inputs, labels = inputs.cuda(), labels.cuda()\n", 215 | "# output= net_xvec(inputs).cuda()\n", 216 | "# for j,out in enumerate(output):\n", 217 | "# index_to_append = int(torch.argmax(labels[j]))\n", 218 | "# xvecs_collection[index_to_append].append(out.detach().cpu().numpy())\n", 219 | "# print ('appending to {}'.format(index_to_append))" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 25, 225 | "metadata": {}, 226 | "outputs": [], 227 | "source": [ 228 | "with open(r\"D:\\ml+dl+dsp\\xvector\\celebs_xvectors\",'rb') as f:\n", 229 | " xvecs_collection= pickle.load(f)" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 26, 235 | "metadata": {}, 236 | "outputs": [], 237 | "source": [ 238 | "clases = ['Trump','Macron','Gaga','Clinton','Andrew_ng']" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 27, 244 | "metadata": {}, 245 | "outputs": [], 246 | "source": [ 247 | "lda = LDA(n_components=3)" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 28, 253 | "metadata": {}, 254 | "outputs": [], 255 | "source": [ 256 | "X = []\n", 257 | "y = []\n", 258 | "for class_num in range(len(xvecs_collection)):\n", 259 | " for item in xvecs_collection[class_num]:\n", 260 | " X.append(item)\n", 261 | " y.append(class_num)" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 29, 267 | "metadata": {}, 268 | "outputs": [], 269 | "source": [ 270 | "## Add untrained andrew ng to the test set\n", 271 | "for item in np_ng_output:\n", 272 | " X.append(item)\n", 273 | " y.append(4)" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 30, 279 | "metadata": {}, 280 | "outputs": [ 281 | { 282 | "name": "stderr", 283 | "output_type": "stream", 284 | "text": [ 285 | "C:\\Users\\Daniel\\.conda\\envs\\pytorch\\lib\\site-packages\\sklearn\\discriminant_analysis.py:388: UserWarning: Variables are collinear.\n", 286 | " warnings.warn(\"Variables are collinear.\")\n" 287 | ] 288 | } 289 | ], 290 | "source": [ 291 | "lda_model = lda.fit(X,y)" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 31, 297 | "metadata": {}, 298 | "outputs": [], 299 | "source": [ 300 | "transformed_X= lda_model.transform(X)" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 32, 306 | "metadata": {}, 307 | "outputs": [], 308 | "source": [ 309 | "clases_dict = {0:[],1:[],2:[],3:[],4:[]}" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": 33, 315 | "metadata": {}, 316 | "outputs": [], 317 | "source": [ 318 | "for i,x in enumerate(transformed_X):\n", 319 | " clases_dict[y[i]].append(x)" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 34, 325 | "metadata": {}, 326 | "outputs": [ 327 | { 328 | "data": { 329 | "text/plain": [ 330 | "" 331 | ] 332 | }, 333 | "execution_count": 34, 334 | "metadata": {}, 335 | "output_type": "execute_result" 336 | }, 337 | { 338 | "data": { 339 | "image/png": "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\n", 340 | "text/plain": [ 341 | "
" 342 | ] 343 | }, 344 | "metadata": { 345 | "needs_background": "light" 346 | }, 347 | "output_type": "display_data" 348 | } 349 | ], 350 | "source": [ 351 | "for index in clases_dict:\n", 352 | " plt.scatter(np.array(clases_dict[index])[:,0],np.array(clases_dict[index])[:,1])\n", 353 | "plt.legend(clases)" 354 | ] 355 | }, 356 | { 357 | "cell_type": "code", 358 | "execution_count": 35, 359 | "metadata": {}, 360 | "outputs": [ 361 | { 362 | "data": { 363 | "text/plain": [ 364 | "" 365 | ] 366 | }, 367 | "execution_count": 35, 368 | "metadata": {}, 369 | "output_type": "execute_result" 370 | }, 371 | { 372 | "data": { 373 | "image/png": "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\n", 374 | "text/plain": [ 375 | "
" 376 | ] 377 | }, 378 | "metadata": { 379 | "needs_background": "light" 380 | }, 381 | "output_type": "display_data" 382 | } 383 | ], 384 | "source": [ 385 | "fig = plt.figure()\n", 386 | "ax = Axes3D(fig)\n", 387 | "for index in clases_dict:\n", 388 | " ax.scatter(np.array(clases_dict[index])[:,0],np.array(clases_dict[index])[:,1],np.array(clases_dict[index])[:,2])\n", 389 | "plt.legend(clases)" 390 | ] 391 | }, 392 | { 393 | "cell_type": "code", 394 | "execution_count": null, 395 | "metadata": {}, 396 | "outputs": [], 397 | "source": [] 398 | } 399 | ], 400 | "metadata": { 401 | "kernelspec": { 402 | "display_name": "Python 3", 403 | "language": "python", 404 | "name": "python3" 405 | }, 406 | "language_info": { 407 | "codemirror_mode": { 408 | "name": "ipython", 409 | "version": 3 410 | }, 411 | "file_extension": ".py", 412 | "mimetype": "text/x-python", 413 | "name": "python", 414 | "nbconvert_exporter": "python", 415 | "pygments_lexer": "ipython3", 416 | "version": "3.6.8" 417 | } 418 | }, 419 | "nbformat": 4, 420 | "nbformat_minor": 2 421 | } 422 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pytorch implementation of X-vectors embedding 2 | 3 | This repository is using [https://github.com/SiddGururani/Pytorch-TDNN](https://github.com/SiddGururani/Pytorch-TDNN) repo with few adaptation, including one that allows to stack few TDNN layers sequentially 4 | 5 | 6 | # Files 7 | 8 | [TDNN_gpu.py](https://github.com/Dannynis/xvector_pytorch/blob/master/TDNN_gpu.py "TDNN_gpu.py") 9 | 10 | TDNN layers implementation, Stats pooling and final layers implementation 11 | 12 | [total_model](https://github.com/Dannynis/xvector_pytorch/blob/master/total_model "total_model") 13 | 14 | The pretrained network that was trained on speechs of Trump, Lady Gaga, Macron and Hillary Clinton 15 | 16 | [xvector - gpu.ipynb](https://github.com/Dannynis/xvector_pytorch/blob/master/xvector%20-%20gpu.ipynb "xvector - gpu.ipynb") 17 | 18 | Jupyter notebook for the network training 19 | 20 | [xvector_ext_and_lda_scatter.ipynb](https://github.com/Dannynis/xvector_pytorch/blob/master/xvector_ext_and_lda_scatter.ipynb "xvector_ext_and_lda_scatter.ipynb") 21 | 22 | Notebook that extracts X-vectors on new utterances and via LDA reduces thier dimensions and plots them in 2D and 3D 23 | 24 | 25 | # Demo 26 | 27 | 28 | Xvectors 3d scatter of the trained speakers and new unseen speaker - Andrew_ng 29 | ![lda-3dim-with-andrew.png](https://github.com/Dannynis/xvector_pytorch/blob/master/lda-3dim-with-andrew.png?raw=true) 30 | 31 | -------------------------------------------------------------------------------- /TDNN_gpu.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.optim as optim 4 | import torch.nn.functional as F 5 | from torch.autograd import Variable 6 | import math 7 | 8 | 9 | class StatsPooling(nn.Module): 10 | def __init__(self): 11 | super(StatsPooling,self).__init__() 12 | 13 | def forward(self,varient_length_tensor): 14 | mean = varient_length_tensor.mean(dim=1) 15 | std = varient_length_tensor.std(dim=1) 16 | return torch.cat((mean,std),dim=1) 17 | 18 | 19 | class FullyConnected(nn.Module): 20 | def __init__(self): 21 | super(FullyConnected, self).__init__() 22 | self.hidden1 = nn.Linear(3000,512).double() 23 | self.hidden2 = nn.Linear(512,512).double() 24 | 25 | def forward(self, x): 26 | x = F.relu( self.hidden1(x)) 27 | x = F.relu( self.hidden2(x)) 28 | return x 29 | 30 | 31 | """Time Delay Neural Network as mentioned in the 1989 paper by Waibel et al. (Hinton) and the 2015 paper by Peddinti et al. (Povey)""" 32 | 33 | class TDNN(nn.Module): 34 | def __init__(self, context, input_dim, output_dim, full_context = True,device = 'cpu'): 35 | """ 36 | Definition of context is the same as the way it's defined in the Peddinti paper. It's a list of integers, eg: [-2,2] 37 | By deault, full context is chosen, which means: [-2,2] will be expanded to [-2,-1,0,1,2] i.e. range(-2,3) 38 | """ 39 | super(TDNN,self).__init__() 40 | self.input_dim = input_dim 41 | self.output_dim = output_dim 42 | self.check_valid_context(context) 43 | self.kernel_width, context = self.get_kernel_width(context,full_context) 44 | self.register_buffer('context',torch.LongTensor(context)) 45 | self.full_context = full_context 46 | stdv = 1./math.sqrt(input_dim) 47 | self.kernel = nn.Parameter(torch.Tensor(output_dim, input_dim, self.kernel_width).normal_(0,stdv)).double().cuda() 48 | self.bias = nn.Parameter(torch.Tensor(output_dim).normal_(0,stdv)).double().cuda() 49 | # self.cuda_flag = False 50 | 51 | def forward(self,x): 52 | """ 53 | x is one batch of data 54 | x.shape: [batch_size, sequence_length, input_dim] 55 | sequence length is the length of the input spectral data (number of frames) or if already passed through the convolutional network, it's the number of learned features 56 | 57 | output size: [batch_size, output_dim, len(valid_steps)] 58 | """ 59 | # Check if parameters are cuda type and change context 60 | # if type(self.bias.data) == torch.cuda.FloatTensor and self.cuda_flag == False: 61 | # self.context = self.context.cuda() 62 | # self.cuda_flag = True 63 | conv_out = self.special_convolution(x, self.kernel, self.context, self.bias) 64 | activation = F.relu(conv_out).transpose(1,2).contiguous() 65 | print ('output shape: {}'.format(activation.shape)) 66 | return activation 67 | 68 | def special_convolution(self, x, kernel, context, bias): 69 | """ 70 | This function performs the weight multiplication given an arbitrary context. Cannot directly use convolution because in case of only particular frames of context, 71 | one needs to select only those frames and perform a convolution across all batch items and all output dimensions of the kernel. 72 | """ 73 | input_size = x.shape 74 | assert len(input_size) == 3, 'Input tensor dimensionality is incorrect. Should be a 3D tensor' 75 | [batch_size, input_sequence_length, input_dim] = input_size 76 | print ('mel size: {}'.format(input_dim)) 77 | print ('sequence length: {}'.format(input_sequence_length)) 78 | 79 | x = x.transpose(1,2).contiguous() 80 | 81 | # Allocate memory for output 82 | valid_steps = self.get_valid_steps(self.context, input_sequence_length) 83 | xs = Variable(self.bias.data.new(batch_size, kernel.shape[0], len(valid_steps))) 84 | 85 | # Perform the convolution with relevant input frames 86 | for c, i in enumerate(valid_steps): 87 | features = torch.index_select(x, 2, context+i) 88 | # print ('features taken:{}'.format(features)) 89 | xs[:,:,c] = F.conv1d(features, kernel, bias = bias)[:,:,0] 90 | return xs 91 | 92 | @staticmethod 93 | def check_valid_context(context): 94 | # here context is still a list 95 | assert context[0] <= context[-1], 'Input tensor dimensionality is incorrect. Should be a 3D tensor' 96 | 97 | @staticmethod 98 | def get_kernel_width(context, full_context): 99 | if full_context: 100 | context = range(context[0],context[-1]+1) 101 | return len(context), context 102 | 103 | @staticmethod 104 | def get_valid_steps(context, input_sequence_length): 105 | start = 0 if context[0] >= 0 else -1*context[0] 106 | end = input_sequence_length if context[-1] <= 0 else input_sequence_length - context[-1] 107 | return range(start, end) 108 | -------------------------------------------------------------------------------- /celebs_xvectors: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/celebs_xvectors -------------------------------------------------------------------------------- /data_path.txt: -------------------------------------------------------------------------------- 1 | https://drive.google.com/drive/folders/1HD6PITdZbsxwqDl0S0jkwOT13hZCcg9B?usp=sharing 2 | -------------------------------------------------------------------------------- /lda-2dim-with-andrew-lda-pretrained.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/lda-2dim-with-andrew-lda-pretrained.png -------------------------------------------------------------------------------- /lda-2dim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/lda-2dim.png -------------------------------------------------------------------------------- /lda-3dim-with-andrew-lda-pretrained.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/lda-3dim-with-andrew-lda-pretrained.png -------------------------------------------------------------------------------- /lda-3dim-with-andrew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/lda-3dim-with-andrew.png -------------------------------------------------------------------------------- /lda-3dim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/lda-3dim.png -------------------------------------------------------------------------------- /total_model: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dannynis/xvector_pytorch/0138c36b0cca3991e2670f087d4da12f3d2142c7/total_model -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | def chunks(l, n): 2 | """Yield successive n-sized chunks from l.""" 3 | for i in range(0, len(l), n): 4 | yield l[i:i + n] -------------------------------------------------------------------------------- /xvector_ext_and_lda_scatter.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import dill" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 18, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "import matplotlib.pyplot as plt\n", 28 | "import pickle\n", 29 | "import numpy as np\n", 30 | "from mpl_toolkits.mplot3d import Axes3D\n", 31 | "import torch\n", 32 | "from scipy.io import wavfile\n", 33 | "from tqdm import tqdm\n", 34 | "from utils import *\n", 35 | "from python_speech_features import mfcc, logfbank\n" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 8, 41 | "metadata": {}, 42 | "outputs": [], 43 | "source": [ 44 | "net_xvec = torch.load('total_model')[:-1]" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 9, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "data": { 54 | "text/plain": [ 55 | "Sequential(\n", 56 | " (0): TDNN()\n", 57 | " (1): TDNN()\n", 58 | " (2): TDNN()\n", 59 | " (3): TDNN()\n", 60 | " (4): TDNN()\n", 61 | " (5): StatsPooling()\n", 62 | " (6): FullyConnected(\n", 63 | " (hidden1): Linear(in_features=3000, out_features=512, bias=True)\n", 64 | " (hidden2): Linear(in_features=512, out_features=512, bias=True)\n", 65 | " )\n", 66 | ")" 67 | ] 68 | }, 69 | "execution_count": 9, 70 | "metadata": {}, 71 | "output_type": "execute_result" 72 | } 73 | ], 74 | "source": [ 75 | "net_xvec" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 10, 81 | "metadata": {}, 82 | "outputs": [], 83 | "source": [ 84 | "# net_xvec = nn.Sequential(net1,net2,net3,net4,net5,SP,FC)\n", 85 | "# net_xvec.cuda()" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 19, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "name": "stderr", 95 | "output_type": "stream", 96 | "text": [ 97 | "0it [00:00, ?it/s]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 98 | "1it [00:02, 2.01s/it]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 99 | "2it [00:03, 1.96s/it]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 100 | "3it [00:05, 1.93s/it]WARNING:root:frame length (1103) is greater than FFT size (1024), frame will be truncated. Increase NFFT to avoid.\n", 101 | "4it [00:07, 1.91s/it]\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "wav_path = r\"D:\\Downloads\\Lecture 1.2 — Introduction Supervised Learning — [ Machine Learning Andrew Ng ].wav\"\n", 107 | "max_total_context_test = 400\n", 108 | "_min,_max = float('inf'),-float('inf')\n", 109 | "X_test = []\n", 110 | "rate, wav = wavfile.read(wav_path)\n", 111 | "for chunked_wav in tqdm(chunks(wav,int(len(wav)/4))):\n", 112 | " X_sample = mfcc(chunked_wav,samplerate= rate,numcep=24\n", 113 | " ,nfilt=26,nfft=1024)\n", 114 | " _min = min(np.amin(X_sample),_min)\n", 115 | " _max = max(np.amax(X_sample),_max)\n", 116 | " for chunked_X_sample in list(chunks(X_sample,max_total_context_test)):\n", 117 | " if len(chunked_X_sample) == max_total_context_test:\n", 118 | " X_test.append(chunked_X_sample)\n", 119 | "X_test = (X_test - _min) / (_max-_min)\n" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 20, 125 | "metadata": {}, 126 | "outputs": [ 127 | { 128 | "data": { 129 | "text/plain": [ 130 | "(372, 400, 24)" 131 | ] 132 | }, 133 | "execution_count": 20, 134 | "metadata": {}, 135 | "output_type": "execute_result" 136 | } 137 | ], 138 | "source": [ 139 | "X_test.shape" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 21, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "mel size: 24\n", 152 | "sequence length: 400\n", 153 | "output shape: torch.Size([30, 396, 512])\n", 154 | "mel size: 512\n", 155 | "sequence length: 396\n", 156 | "output shape: torch.Size([30, 392, 512])\n", 157 | "mel size: 512\n", 158 | "sequence length: 392\n", 159 | "output shape: torch.Size([30, 386, 512])\n", 160 | "mel size: 512\n", 161 | "sequence length: 386\n", 162 | "output shape: torch.Size([30, 385, 512])\n", 163 | "mel size: 512\n", 164 | "sequence length: 385\n", 165 | "output shape: torch.Size([30, 384, 1500])\n" 166 | ] 167 | } 168 | ], 169 | "source": [ 170 | "ng_outout = net_xvec(torch.tensor(X_test[200:230]).cuda())" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 22, 176 | "metadata": {}, 177 | "outputs": [], 178 | "source": [ 179 | "np_ng_output = ng_outout.cpu().detach().numpy()" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": {}, 185 | "source": [ 186 | "## Exctract celebs xvecs" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 23, 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [ 195 | "xvecs_collection = {0:[],1:[],2:[],3:[]}" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "metadata": {}, 202 | "outputs": [], 203 | "source": [ 204 | "with open('X_data.pkl','rb') as f:\n", 205 | " X,y = pickle.load(f)\n", 206 | "trainloader = torch.utils.data.DataLoader(list(zip(X,y)), shuffle=True, batch_size=5)" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 24, 212 | "metadata": { 213 | "collapsed": true 214 | }, 215 | "outputs": [ 216 | { 217 | "ename": "NameError", 218 | "evalue": "name 'trainloader' is not defined", 219 | "output_type": "error", 220 | "traceback": [ 221 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 222 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 223 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtrainloader\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# get the inputs; data is a list of [inputs, labels]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabels\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 224 | "\u001b[1;31mNameError\u001b[0m: name 'trainloader' is not defined" 225 | ] 226 | } 227 | ], 228 | "source": [ 229 | "\n", 230 | "for i, data in enumerate(trainloader, 0):\n", 231 | " a = time.time()\n", 232 | " # get the inputs; data is a list of [inputs, labels]\n", 233 | " inputs, labels = data\n", 234 | " inputs, labels = inputs.cuda(), labels.cuda()\n", 235 | " output= net_xvec(inputs).cuda()\n", 236 | " for j,out in enumerate(output):\n", 237 | " index_to_append = int(torch.argmax(labels[j]))\n", 238 | " xvecs_collection[index_to_append].append(out.detach().cpu().numpy())\n", 239 | " print ('appending to {}'.format(index_to_append))" 240 | ] 241 | }, 242 | { 243 | "cell_type": "markdown", 244 | "metadata": {}, 245 | "source": [ 246 | "## Use pre extracted xvecs" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 25, 252 | "metadata": {}, 253 | "outputs": [], 254 | "source": [ 255 | "with open(r\"D:\\ml+dl+dsp\\xvector\\celebs_xvectors\",'rb') as f:\n", 256 | " xvecs_collection= pickle.load(f)" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 26, 262 | "metadata": {}, 263 | "outputs": [], 264 | "source": [ 265 | "clases = ['Trump','Macron','Gaga','Clinton','Andrew_ng']" 266 | ] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "execution_count": 27, 271 | "metadata": {}, 272 | "outputs": [], 273 | "source": [ 274 | "lda = LDA(n_components=3)" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": 28, 280 | "metadata": {}, 281 | "outputs": [], 282 | "source": [ 283 | "X = []\n", 284 | "y = []\n", 285 | "for class_num in range(len(xvecs_collection)):\n", 286 | " for item in xvecs_collection[class_num]:\n", 287 | " X.append(item)\n", 288 | " y.append(class_num)" 289 | ] 290 | }, 291 | { 292 | "cell_type": "code", 293 | "execution_count": 29, 294 | "metadata": {}, 295 | "outputs": [], 296 | "source": [ 297 | "## Add untrained andrew ng to the test set\n", 298 | "for item in np_ng_output:\n", 299 | " X.append(item)\n", 300 | " y.append(4)" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 30, 306 | "metadata": {}, 307 | "outputs": [ 308 | { 309 | "name": "stderr", 310 | "output_type": "stream", 311 | "text": [ 312 | "C:\\Users\\Daniel\\.conda\\envs\\pytorch\\lib\\site-packages\\sklearn\\discriminant_analysis.py:388: UserWarning: Variables are collinear.\n", 313 | " warnings.warn(\"Variables are collinear.\")\n" 314 | ] 315 | } 316 | ], 317 | "source": [ 318 | "lda_model = lda.fit(X,y)" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 31, 324 | "metadata": {}, 325 | "outputs": [], 326 | "source": [ 327 | "transformed_X= lda_model.transform(X)" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": 32, 333 | "metadata": {}, 334 | "outputs": [], 335 | "source": [ 336 | "clases_dict = {0:[],1:[],2:[],3:[],4:[]}" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 33, 342 | "metadata": {}, 343 | "outputs": [], 344 | "source": [ 345 | "for i,x in enumerate(transformed_X):\n", 346 | " clases_dict[y[i]].append(x)" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": 34, 352 | "metadata": {}, 353 | "outputs": [ 354 | { 355 | "data": { 356 | "text/plain": [ 357 | "" 358 | ] 359 | }, 360 | "execution_count": 34, 361 | "metadata": {}, 362 | "output_type": "execute_result" 363 | }, 364 | { 365 | "data": { 366 | "image/png": "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\n", 367 | "text/plain": [ 368 | "
" 369 | ] 370 | }, 371 | "metadata": { 372 | "needs_background": "light" 373 | }, 374 | "output_type": "display_data" 375 | } 376 | ], 377 | "source": [ 378 | "for index in clases_dict:\n", 379 | " plt.scatter(np.array(clases_dict[index])[:,0],np.array(clases_dict[index])[:,1])\n", 380 | "plt.legend(clases)" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "execution_count": 35, 386 | "metadata": {}, 387 | "outputs": [ 388 | { 389 | "data": { 390 | "text/plain": [ 391 | "" 392 | ] 393 | }, 394 | "execution_count": 35, 395 | "metadata": {}, 396 | "output_type": "execute_result" 397 | }, 398 | { 399 | "data": { 400 | "image/png": "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\n", 401 | "text/plain": [ 402 | "
" 403 | ] 404 | }, 405 | "metadata": { 406 | "needs_background": "light" 407 | }, 408 | "output_type": "display_data" 409 | } 410 | ], 411 | "source": [ 412 | "fig = plt.figure()\n", 413 | "ax = Axes3D(fig)\n", 414 | "for index in clases_dict:\n", 415 | " ax.scatter(np.array(clases_dict[index])[:,0],np.array(clases_dict[index])[:,1],np.array(clases_dict[index])[:,2])\n", 416 | "plt.legend(clases)" 417 | ] 418 | }, 419 | { 420 | "cell_type": "code", 421 | "execution_count": null, 422 | "metadata": {}, 423 | "outputs": [], 424 | "source": [] 425 | } 426 | ], 427 | "metadata": { 428 | "kernelspec": { 429 | "display_name": "Python 3", 430 | "language": "python", 431 | "name": "python3" 432 | }, 433 | "language_info": { 434 | "codemirror_mode": { 435 | "name": "ipython", 436 | "version": 3 437 | }, 438 | "file_extension": ".py", 439 | "mimetype": "text/x-python", 440 | "name": "python", 441 | "nbconvert_exporter": "python", 442 | "pygments_lexer": "ipython3", 443 | "version": "3.6.8" 444 | } 445 | }, 446 | "nbformat": 4, 447 | "nbformat_minor": 2 448 | } 449 | --------------------------------------------------------------------------------