玩护士睡老师勾搭女下属_欧美变态另类牲交ZOZO_亚洲国产欧美另类久久综合_午夜福利无码a级_亚洲综合一二三_天天干免费视频播放_先锋美女情趣网站在线观看_免费一级毛片全部免费播放瓯_天堂精品mv在线观看99_影音先锋影AV色资源站

檢信專注心理
用技術創(chuàng)新 做行業(yè)先驅
檢信ALLEMOTION
  • 檢信智能 Allemotion OS 介紹 語音識別技術的發(fā)展現(xiàn)狀
    讓機器聽懂人聲,這是人們長久以來的夢想。語音識別是一門交叉學科,涉及多學科研究領域。不同領域的研究成果為語音識別的發(fā)展做出了貢獻。語音識別技術是一種高科技,它可以讓機器通過識別和理解的過程將語音信號轉換成相應的文本或命令。計算機語音識別過程與人類語音識別過程基本相同。當前主流的語音識別技術是基于統(tǒng)計模式識別的基本理論。一個完整的語音識別系統(tǒng)大致可以分為三個部分:(1)語音特征提?。耗康氖菑恼Z音波形中提取隨時間變化的語音特征序列。(2)聲學模型與模式匹配(識別算法):聲學模型是識別系統(tǒng)的底層模型,也是語音識別系統(tǒng)中關鍵的部分。聲學模型通常是從獲得的語音特征中訓練生成的,目的是為每個發(fā)音建立一個發(fā)音模板。在識別過程中,將未知語音特征與聲學模型(模式)進行匹配和比較,計算未知語音的特征向量序列與每個發(fā)音模板的距離。聲學模型的設計與語言發(fā)音的特點密切相關。聲學模型單元大小對語音訓練數(shù)據(jù)的大小、語音識別系統(tǒng)的識別率和靈活性有很大影響。(3)語義理解:計算機對語音識別結果的語法和語義進行分析。理解語言的含義,以便做出相應的反應。它通常是通過語言模型來實現(xiàn)的。語音識別技術的應用:語音識別過程實際上就是一個識別過程。就像人們在聽語音時,不會將語音與語言的語法結構和語義結構分開,因為當語音的發(fā)音模糊時,人們可以利用這些知識來指導理解語言的過程。對于機器來說,語音識別系統(tǒng)也需要使用這些知識,但鑒于語音信號的可變性、動態(tài)性和瞬態(tài)性,語音識別技術與人腦仍有一定差距。因此,在語音識別技術的選擇、應用模式和系統(tǒng)開發(fā)等方面都需要專業(yè)的設計和調試,以達到良好的應用效果。
    2021-09-27
  • 檢信智能 Allemotion OS 對語音識別的簡單介紹
    語言作為人類交流的基本方式,在幾千年的歷史長河中不斷傳承。近年來,隨著語音識別技術的不斷成熟,它在我們的生活中得到了廣泛的應用,成為通過自然語言進行人機交互的重要方式之一。語音識別技術如何讓機器“理解”人類語言?隨著計算機技術的快速發(fā)展,人們對機器的依賴已經(jīng)達到了一個非常高的水平。語音識別技術使人和機器通過自然語言進行交互成為可能。通過語音識別控制房間照明、空調溫度和電視相關操作是很常見的。根據(jù)識別對象的不同,語音識別任務大致可以分為三類,即孤立詞識別、關鍵詞識別(或關鍵詞檢測)和連續(xù)語音識別。其中,孤立詞識別的任務是識別先前已知的孤立詞,如“開放”和“封閉”。連續(xù)語音識別的任務是識別任何連續(xù)的語音,如句子或段落。連續(xù)語音流中的關鍵詞檢測針對的是連續(xù)語音,但它并不識別所有的文本,只檢測一些已知關鍵詞出現(xiàn)的位置。根據(jù)目標說話人,語音識別技術可以分為特定人語音識別和非特定人語音識別。前者只能識別一個或幾個人的聲音,而后者可以被任何人使用。顯然,獨立于人的語音識別系統(tǒng)更符合實際需求,但比識別特定的人要困難得多。此外,根據(jù)語音設備和渠道,可分為桌面(PC)語音識別、電話語音識別和嵌入式設備(手機、PDA等)語音識別。不同的采集通道會扭曲人類發(fā)音的聲學特征,因此我們需要構建自己的識別系統(tǒng)。語音識別應用廣泛。常見的應用系統(tǒng)包括:語音輸入系統(tǒng),比鍵盤輸入更符合人們的日常習慣,也更自然;語音控制系統(tǒng),即使用語音識別控制設備比手動控制更快更方便,可應用于工業(yè)控制、語音撥號系統(tǒng)、智能家電、聲控智能玩具等諸多領域。
    2021-09-24
  • Tensorboard可視化:基于LeNet5進行面部表情分類
    面部表情分類面部表情是面部肌肉的一個或多個動作或狀態(tài)的結果。這些運動表達了個體對觀察者的情緒狀態(tài)。面部表情是非語言交際的一種形式。它是表達人類之間的社會信息的主要手段,不過也發(fā)生在大多數(shù)其他哺乳動物和其他一些動物物種中。人類的面部表情至少有21種,除了常見的高興、吃驚、悲傷、憤怒、厭惡和恐懼6種,還有驚喜(高興+吃驚)、悲憤(悲傷+憤怒)等15種可被區(qū)分的復合表情。面部表情識別技術主要的應用領域包括人機交互、智能控制、安全、醫(yī)療、通信等領域。網(wǎng)絡架構LeNet-5出自論文Gradient-Based Learning Applied to Document Recognition,是一種用于手寫體字符識別的非常高效的卷積神經(jīng)網(wǎng)絡。LeNet5的網(wǎng)絡架構如下:但是因為我們要做的是面部表情分類,而且CK+數(shù)據(jù)集樣本大小是48*48,因此需要對LeNet5網(wǎng)絡進行微調。網(wǎng)絡架構如下: 網(wǎng)絡結構如下:計算圖如下:代碼實現(xiàn)預處理數(shù)據(jù)集加載,并進行預處理,同時將測試集的前225張樣本拼接成15張*15張的大圖片,用于Tensorboard可視化。%matplotlib inlineimport matplotlib.pyplot as pltimport osimport cv2import numpy as npfrom tensorflow import name_scope as namespacefrom tensorflow.contrib.tensorboard.plugins import projectorNUM_PIC_SHOW=225base_filedir='D:/CV/datasets/facial_exp/CK+'dict_str2int={'anger':0,'contempt':1,'disgust':2,'fear':3,'happy':4,'sadness':5,'surprise':6}labels=[]data=[]#讀取圖片并將其保存至datafor expdir in os.listdir(base_filedir): base_expdir=os.path.join(base_filedir,expdir) for name in os.listdir(base_expdir): labels.append(dict_str2int[expdir]) path=os.path.join(base_expdir,name) path=path.replace('\\','/') #將\替換為/ img = cv2.imread(path,0) data.append(img)data=np.array(data)labels=np.array(labels)#將data打亂permutation = np.random.permutation(data.shape[0])data = data[permutation,:,:]labels = labels[permutation]#取前225個圖片拼成一張大圖片,用于tensorboard可視化img_set=data[:NUM_PIC_SHOW]#前225的數(shù)據(jù)用于顯示label_set=labels[:NUM_PIC_SHOW]big_pic=Noneindex=0for row in range(15): row_vector=img_set[index] index+=1 for col in range(1,15): img=img_set[index] row_vector=np.hstack([row_vector,img]) index+=1 if(row==0): big_pic=row_vector else: big_pic=np.vstack([big_pic,row_vector])plt.imshow(big_pic, cmap='gray')plt.show()#寫入大圖片cv2.imwrite(D:/Jupyter/TensorflowLearning/facial_expression_cnn_projector/data/faces.png,big_pic)#轉換數(shù)據(jù)格式和形狀data=data.reshape(-1,48*48).astype('float32')/255.0labels=labels.astype('float32')#0.3的比例測試scale=0.3test_data=data[:int(scale*data.shape[0])]test_labels=labels[:int(scale*data.shape[0])]train_data=data[int(scale*data.shape[0]):]train_labels=labels[int(scale*data.shape[0]):]print(train_data.shape)print(train_labels.shape)print(test_data.shape)print(test_labels.shape)#將標簽one-hottrain_labels_onehot=np.zeros((train_labels.shape[0],7))test_labels_onehot=np.zeros((test_labels.shape[0],7))for i,label in enumerate(train_labels): train_labels_onehot[i,int(label)]=1for i,label in enumerate(test_labels): test_labels_onehot[i,int(label)]=1print(train_labels_onehot.shape)print(test_labels_onehot.shape)2.定義前向網(wǎng)絡import tensorflow as tfIMAGE_SIZE=48 #圖片大小NUM_CHANNELS=1 #圖片通道CONV1_SIZE=5CONV1_KERNEL_NUM=32CONV2_SIZE=5CONV2_KERNEL_NUM=64FC_SIZE=512 #隱層大小OUTPUT_NODE=7 #輸出大小#參數(shù)概要,用于tensorboard實時查看訓練過程def variable_summaries(var): with namespace('summaries'): mean=tf.reduce_mean(var) tf.summary.scalar('mean',mean) #平均值 with namespace('stddev'): stddev=tf.sqrt(tf.reduce_mean(tf.square(var-mean))) tf.summary.scalar('stddev',stddev) #標準差 tf.summary.scalar('max',tf.reduce_max(var))#最大值 tf.summary.scalar('min',tf.reduce_min(var))#最小值 tf.summary.histogram('histogram',var)#直方圖#獲取權重def get_weight(shape,regularizer,name=None): w=tf.Variable(tf.truncated_normal(shape,stddev=0.1),name=name) #variable_summaries(w) if(regularizer!=None): tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w)) return w#獲取偏置def get_bias(shape,name=None): b=tf.Variable(tf.zeros(shape),name=name) #variable_summaries(b) return b #定義前向網(wǎng)絡def forward(x,train,regularizer): with tf.name_scope('layer'): #把輸入reshape with namespace('reshape_input'): x_reshaped=tf.reshape(x,[-1,IMAGE_SIZE,IMAGE_SIZE,NUM_CHANNELS]) with tf.name_scope('conv1'): #定義兩個卷積層 conv1_w=get_weight([CONV1_SIZE,CONV1_SIZE,NUM_CHANNELS,CONV1_KERNEL_NUM],regularizer=regularizer,name='conv1_w') conv1_b=get_bias([CONV1_KERNEL_NUM],name='conv1_b') conv1=tf.nn.conv2d(x_reshaped,conv1_w,strides=[1,1,1,1],padding='SAME') relu1=tf.nn.relu(tf.nn.bias_add(conv1,conv1_b)) pool1=tf.nn.max_pool(relu1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME') with tf.name_scope('conv2'): conv2_w=get_weight([CONV2_SIZE,CONV2_SIZE,CONV1_KERNEL_NUM,CONV2_KERNEL_NUM],regularizer=regularizer,name='conv2_w') conv2_b=get_bias([CONV2_KERNEL_NUM],name='conv2_b') conv2=tf.nn.conv2d(pool1,conv2_w,strides=[1,1,1,1],padding='SAME') relu2=tf.nn.relu(tf.nn.bias_add(conv2,conv2_b)) #對卷機后的輸出添加偏置,并通過relu完成非線性激活 pool2=tf.nn.max_pool(relu2,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME') with tf.name_scope('flatten'): #定義reshape層 pool_shape=pool2.get_shape().as_list() #獲得張量的維度并轉換為列表 nodes=pool_shape[1]*pool_shape[2]*pool_shape[3] #[0]為batch值,[1][2][3]分別為長寬和深度 #print(type(pool2)) reshaped=tf.reshape(pool2,[-1,nodes]) with tf.name_scope('fc1'): #定義兩層全連接層 fc1_w=get_weight([nodes,FC_SIZE],regularizer,name='fc1_w') fc1_b=get_bias([FC_SIZE],name='fc1_b') fc1=tf.nn.relu(tf.matmul(reshaped,fc1_w)+fc1_b) if(train): fc1=tf.nn.dropout(fc1,0.5) with tf.name_scope('fc2'): fc2_w=get_weight([FC_SIZE,OUTPUT_NODE],regularizer,name='fc2_w') fc2_b=get_bias([OUTPUT_NODE],name='fc2_b') y=tf.matmul(fc1,fc2_w)+fc2_b return y3.定義反向傳播 ,可視化設置,并進行訓練,BATCH_SIZE=100 #每次樣本數(shù)LEARNING_RATE_BASE=0.005 #基本學習率LEARNING_RATE_DECAY=0.99 #學習率衰減率REGULARIZER=0.0001 #正則化系數(shù)STEPS=2500 #訓練次數(shù)MOVING_AVERAGE_DECAY=0.99 #滑動平均衰減系數(shù)SAVE_PATH='.\\facial_expression_cnn_projector\\' #參數(shù)保存路徑data_len=train_data.shape[0]#將拼接為big_pic的測試樣本保存至標量,用于訓練過程可視化pic_stack=tf.stack(test_data[:NUM_PIC_SHOW]) #stack拼接圖片張量embedding=tf.Variable(pic_stack,trainable=False,name='embedding')if(tf.gfile.Exists(os.path.join(SAVE_PATH,'projector'))==False): tf.gfile.MkDir(os.path.join(SAVE_PATH,'projector'))#創(chuàng)建metadata文件,存放可視化圖片的labelif(tf.gfile.Exists(os.path.join(SAVE_PATH,'projector','metadata.tsv'))==True): tf.gfile.DeleteRecursively(os.path.join(SAVE_PATH,'projector')) tf.gfile.MkDir(os.path.join(SAVE_PATH,'projector'))#將可視化圖片的標簽寫入with open(os.path.join(SAVE_PATH,'projector','metadata.tsv'),'w') as f: for i in range(NUM_PIC_SHOW): f.write(str(label_set[i])+'\n')with tf.Session() as sess: with tf.name_scope('input'): #x=tf.placeholder(tf.float32,[BATCH_SIZE,IMAGE_SIZE,IMAGE_SIZE,NUM_CHANNELS],name='x_input') x=tf.placeholder(tf.float32,[None,IMAGE_SIZE*IMAGE_SIZE*NUM_CHANNELS],name='x_input') y_=tf.placeholder(tf.float32,[None,OUTPUT_NODE],name='y_input') #reshape可視化圖片 with namespace('input_reshape'): image_shaped_input=tf.reshape(x,[-1,IMAGE_SIZE,IMAGE_SIZE,1]) #把輸入reshape tf.summary.image('input',image_shaped_input,7) #添加到tensorboard中顯示 y=forward(x,True,REGULARIZER) global_step=tf.Variable(0,trainable=False) with namespace('loss'): #softmax并計算交叉熵 ce=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1)) cem=tf.reduce_mean(ce) #求每個樣本的交叉熵 loss=cem+tf.add_n(tf.get_collection('losses')) tf.summary.scalar('loss',loss) #loss只有一個值,就直接輸出 learning_rate=tf.train.exponential_decay( LEARNING_RATE_BASE, global_step, data_len/BATCH_SIZE, LEARNING_RATE_DECAY, staircase=True ) with namespace('train'): train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step) ema=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step) ema_op=ema.apply(tf.trainable_variables()) with namespace('accuracy'): correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) tf.summary.scalar('accuracy',accuracy) with tf.control_dependencies([train_step,ema_op]): train_op=tf.no_op(name='train') init_op=tf.global_variables_initializer() sess.run(init_op) #合并所有的summary merged=tf.summary.merge_all() #寫入圖結構 writer=tf.summary.FileWriter(os.path.join(SAVE_PATH,'projector'),sess.graph) saver=tf.train.Saver() #保存網(wǎng)絡的模型 #配置可視化 config=projector.ProjectorConfig() #tensorboard配置對象 embed=config.embeddings.add() #增加一項 embed.tensor_name=embedding.name #指定可視化的變量 embed.metadata_path='D:/Jupyter/TensorflowLearning/facial_expression_cnn_projector/projector/metadata.tsv' #路徑 embed.sprite.image_path='D:/Jupyter/TensorflowLearning/facial_expression_cnn_projector/data/faces.png' embed.sprite.single_image_dim.extend([IMAGE_SIZE,IMAGE_SIZE])#可視化圖片大小 projector.visualize_embeddings(writer,config) #斷點續(xù)訓 #ckpt=tf.train.get_checkpoint_state(MODEL_SAVE_PATH) #if(ckpt and ckpt.model_checkpoint_path): # saver.restore(sess,ckpt.model_checkpoint_path) for i in range(STEPS): run_option=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) run_metadata=tf.RunMetadata() start=(i*BATCH_SIZE)%(data_len-BATCH_SIZE) end=start+BATCH_SIZE summary,_,loss_value,step=sess.run([merged,train_op,loss,global_step], feed_dict={x:train_data[start:end],y_:train_labels_onehot[start:end]}, options=run_option, run_metadata=run_metadata) writer.add_run_metadata(run_metadata,'step%03d'%i) writer.add_summary(summary,i)#寫summary和i到文件 if(i%100==0): acc=sess.run(accuracy,feed_dict={x:test_data,y_:test_labels_onehot}) print('%d %g'%(step,loss_value)) print('acc:%f'%(acc)) saver.save(sess,os.path.join(SAVE_PATH,'projector','model'),global_step=global_step) writer.close()可視化訓練過程執(zhí)行上面的代碼,打開tensorboard,可以看到訓練精度和交叉熵損失如下:由于只有六百多的訓練樣本,故得到曲線抖動很大,訓練精度大概在百分之八九十多浮動,測試精度在百分之七八十浮動,可見精度不高。下面使用Tensorboard將訓練過程可視化(圖片是用Power Point錄頻然后用迅雷應用截取gif得到的): ————————————————版權聲明:本文為CSDN博主「陳建驅」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
    2021-09-20
  • 檢信智能ALLEMOTION OS 語音情感識別——語音(聲音的預處理)
    1. 語音信號(聲音是什么)聲音是由物體振動產(chǎn)生的聲波,是通過介質(空氣或固體、液體)傳播并能被人或動物聽覺器官所感知的波動現(xiàn)象,最初發(fā)出振動的物體叫聲源。聲音(語音消息)的基本模擬形式是一種稱為語音信號的聲學波。語音信號可以通過麥克風轉化成電信號,轉換成語音波形圖,如下圖為消息should we chase的波形圖。橫坐標表示時間,縱坐標表示振幅。文本should we chase按照發(fā)音可以表示成音素的形式[SH UH D - W IY - CH EY S],聲波圖中的每一段表示一個音素,在ARBAbet音素集中包含近64 = 2^6個符號。聲音作為波的一種,頻率(聲源在一秒內振動的次數(shù))和振幅是描述波的重要屬性,頻率的大小與我們通常所說的音高對應,而振幅影響聲音的大小。聲音可以被分解為不同頻率不同強度正弦波的疊加,正弦波是頻率成分最為單一的一種信號,任何復雜信號都可以看成由許許多多頻率不同、大小不等的正弦波復合而成。這種變換(或分解)的過程,稱為傅立葉變換,通過這種分解我們可以把時域圖轉為頻域圖。正弦信號表達式為y=Asin(ωx+φ)y=Asin?(ωx+φ)。其中A表示振幅。ω/2πω/2π表示頻率。對于(空氣中的)聲振動而言,振幅是聲壓與靜止壓強之差的最大值。其中聲壓是聲波在空氣中傳播時形成壓縮和稀疏交替變化的壓力增值。麥克風錄制聲音的原理就是將空氣中的壓力變動波轉化成電信號的變動。而我們平常說的聲音強度(響亮程度)就是由振幅決定的,聲音強度的單位是分貝(dB),計算公式如下,用實測聲壓和參考聲壓之比的常用對數(shù)(常用對數(shù)lg以10為底,自然對數(shù)ln以e為底)的20倍來表示。下式中分母是參考值的聲壓,通常為20微帕,人類能聽到的最小聲壓。分貝表示功率量之比時,等于功率強度之比的常用對數(shù)的10倍。分貝表示場量之比時,等于場強幅值之比的常用對數(shù)的20倍。語音鏈(聲音是怎么發(fā)出的)從語音信號的產(chǎn)生到感知的過程稱為語音鏈,如下圖所示:2 下面是語音信號產(chǎn)生的四個步驟:文本:消息以某種形式出現(xiàn)在說話者的大腦中,消息攜帶的信息可認為有著不同的表示形式,例如最初可能以英語文本的形式表示。假設書面語有32個符號,也就是2^5,用5個bit表示一個符號。正常的平均說話速率為15個符號每秒。上圖例子中有15個字母“should we chase”,持續(xù)了0.6秒,信息流的速率為15x5/0.6 = 125 bps。音素:為了說出這條消息,說話者隱式地將文本轉換成對應口語形式的聲音序列的符號表示,即文本符號轉成音素符號,音素符號用來描述口語形式消息的基本聲音及聲音發(fā)生的方式(即語速和語調)。ARBAbet音素集中包含近64 = 2^6個符號,用6個bit表示一個音素,上圖例子中有8個音素,持續(xù)了0.6秒,信息流的速率為8x6/0.6 = 80 bps,考慮描述信號韻律特征的額外信息(比如段長,音高,響度),文本信息編碼成語音信號后,總信息速率需要再加上100bps。發(fā)音:神經(jīng)肌肉系統(tǒng)以一種與產(chǎn)生口語形式消息及其語調相一致的方式,移動舌頭,唇,牙齒,頜,軟腭,使這些聲道發(fā)聲器官按規(guī)定的方式移動,進而發(fā)出期望的聲音。刺激共振:聲道系統(tǒng)產(chǎn)生物理生源和恰當?shù)臅r變聲道形狀,產(chǎn)生上圖所示的聲學波形。前兩個階段的信息表示是離散的,用一些簡單假設就可以估計信息流的速率。但是后兩個階段信息是連續(xù)的,以關節(jié)運動的形式發(fā)出,想要度量這些連續(xù)信息,需要進行恰當?shù)牟蓸雍土炕@得等效的數(shù)字信號,才能估計出數(shù)據(jù)的速率。事實上,因為連續(xù)的模擬信號容易收到噪聲的影響,抗噪能力弱,通常會轉為離散的數(shù)字信號。在第三階段,進行采樣和量化后得到的數(shù)據(jù)率約為2000bps。在最后一個階段,數(shù)字語音波形的數(shù)據(jù)率可以從64kbps變化到700kbps。該數(shù)據(jù)是通過測量“表示語音信號時為達到想要的感知保真度”所需要的采樣率和量化計算得到的。比如,“電話質量”的語音處理需要保證寬帶為0~4kHz,這意味著采樣率為8000個樣本每秒(根據(jù)香農(nóng)采樣定理,為了不失真地恢復模擬信號,采樣頻率應該不小于模擬信號頻譜中最高頻率的2倍),每個樣本可以量化成8比特,從而得到數(shù)據(jù)率64000bps。這種表示方式很容易聽懂,但對于大多數(shù)傾聽者來說,語音聽起來與說話者發(fā)出的原始語音會有不同。另一方面,語音波形可以表示成“CD質量”,采用44100個樣本每秒的采樣率,每個樣本16比特,總數(shù)據(jù)率為705600bps,此時復原的聲學波聽起來和原始信號幾乎沒有區(qū)別。現(xiàn)在在音樂app上下載歌曲的時一般有四種音樂品質選擇,標準(128kbps),較高(192kbps),極高(320kbps),無損品質。將消息從文本表示轉換成采樣的語音波形時,數(shù)據(jù)率會增大10000倍。這些額外信息的一部分能夠代表說話者的一些特征比如情緒狀態(tài),說話習慣等,但主要是由簡單采樣和對模擬信號進行精細量化的低效性導致的。因此,處于語音信號固有的低信息速率考慮,很多數(shù)字語音處理的重點是用更低的數(shù)據(jù)率對語音進行數(shù)字表示(通常希望數(shù)據(jù)率越低越好,同時保證重現(xiàn)語音信號的感知質量滿足需要的水平)。3 語音信號中的Analog-Digital Converter,“模-數(shù)”變換(聲音是怎么保存的)預濾波(反混疊濾波):語音信號在采樣之前要進行預濾波處理。目的有兩個,一是抑制輸入信號各頻率分量中頻率超過fs/2的所有分量(fs為采樣頻率),以防止混疊干擾;二是抑制50Hz的電源工頻干擾。1.采樣:原始的語音信號是連續(xù)的模擬信號,需要對語音進行采樣,轉化為時間軸上離散的數(shù)據(jù)。采樣后,模擬信號被等間隔地取樣,這時信號在時間上就不再連續(xù)了,但在幅度上還是連續(xù)的。經(jīng)過采樣處理之后,模擬信號變成了離散時間信號。采樣頻率是指一秒鐘內對聲音信號的采樣次數(shù),采樣頻率越高聲音的還原就越真實越自然。在當今的主流采集卡上,采樣頻率一般共分為22.05KHz、44.1KHz、48KHz三個等級,22.05KHz只能達到FM廣播的聲音品質,44.1KHz則是理論上的CD音質界限(人耳一般可以感覺到20-20K Hz的聲音,根據(jù)香農(nóng)采樣定理,采樣頻率應該不小于最高頻率的兩倍,所以40KHz是能夠將人耳聽見的聲音進行很好的還原的一個數(shù)值,于是CD公司把采樣率定為44.1KHz),48KHz則更加精確一些。對于高于48KHz的采樣頻率人耳已無法辨別出來了,所以在電腦上沒有多少使用價值。2.量化:進行分級量化,將信號采樣的幅度劃分成幾個區(qū)段,把落在某區(qū)段的采樣到的樣品值歸成一類,并給出相應的量化值。根據(jù)量化間隔是否均勻劃分,又分為均勻量化和非均勻量化。均勻量化的特點為“大信號的信噪比大,小信號的信噪比小”。缺點為“為了保證信噪比要求,編碼位數(shù)必須足夠大,但是這樣導致了信道利用率低,如果減少編碼位數(shù)又不能滿足信噪比的要求”(根據(jù)信噪比公式,編碼位數(shù)越大,信噪比越大,通信質量越好)。通常對語音信號采用非均勻量化,基本方法是對大信號使用大的量化間隔,對小信號使用小的量化間隔。由于小信號時量化間隔變小,其相應的量化噪聲功率也減小(根據(jù)量化噪聲功率公式),從而使小信號時的量化信噪比增大,改善了小信號時的信噪比。量化后,信號不僅在時間上不再連續(xù),在幅度上也不連續(xù)了。經(jīng)過量化處理之后,離散時間信號變成了數(shù)字信號。3.編碼:在量化之后信號已經(jīng)變成了數(shù)字信號,需要將數(shù)字信號編碼成二進制?!癈D質量”的語音采用44100個樣本每秒的采樣率,每個樣本16比特,這個16比特就是編碼的位數(shù)。采樣,量化,編碼的過程稱為A/D轉換,如下圖所示。反過程為D/A轉換,因為A/D之前進行了預濾波,D/A轉換后面還需要加一個平滑濾波器。A/D轉換,D/A轉換,濾波這些功能都可以用一塊芯片來完成,在市面上能買到各種這樣的芯片。4 語音信號的預處理(聲音的預處理)語音信號的預處理一般包括預加重,分幀,加窗,端點檢測。預加重:求語音信號頻譜(頻譜是指時域信號在頻域下的表示方式,關于頻域和時域的理解如下圖所示),頻率越高相應的成分越小,高頻部分的頻譜比低頻部分的難求,為此要在預處理中進行預加重(Pre-emphasis)處理。預加重的目的是提高高頻部分,使信號的頻譜變得平坦,以便于頻譜分析或者聲道參數(shù)分析。預加重可在語音信號數(shù)字化時在反混疊濾波器之前進行,但一般是在語音信號數(shù)字化之后。短時分析:語音信號從整體來看是隨時間變化的,是一個非平穩(wěn)過程,不能用處理平穩(wěn)信號的數(shù)字信號處理技術對其進行分析處理。但是,由于不同的語音是由人的口腔肌肉運動構成聲道某種形狀而產(chǎn)生的響應,這種運動對于語音頻率來說是非常緩慢的,所以從另一方面看,雖然語音信號具有時變特性,但是在一個短時間范圍內(一般認為在10-30ms)其特性基本保持相對穩(wěn)定,即語音具有短時平穩(wěn)性。所以任何語音信號的分析和處理必須建立在“短時”的基礎上,即進行“短時分析”。分幀:為了進行短時分析,將語音信號分為一段一段,其中每一段稱為一幀,一般取10-30ms,為了使幀與幀之間平滑過渡,保持連續(xù)性,使用交疊分段的方法,可以想成一個指針p從頭開始,截取一段頭為p,長度為幀長的片段,然后指針p移動,移動的步長就稱為幀移,每移動一次都截取一段,這樣就得到很多幀。加窗:加窗就是用一定的窗函數(shù)w(n)來乘s(n),從而形成加窗語音信號sw(n)=s(n)?w(n),常用的窗函數(shù)是矩形窗和漢明窗,用矩形窗其實就是不加窗,窗函數(shù)中有個N,指的是窗口長度(樣本點個數(shù)),對應一幀,通常在8kHz取樣頻率下,N折中選擇為80-160(即10-20ms持續(xù)時間)。端點檢測:從一段語音信號中準確地找出語音信號的起始點和結束點,它的目的是為了使有效的語音信號和無用的噪聲信號得以分離。對于一些公共的語音數(shù)據(jù)集可以不做這步操作,因為這些語音的內容就是有效的語音信號(可以認為研究人員已經(jīng)對數(shù)據(jù)做過端點檢測)。語音信號的特征(聲音的特征)特征的選取是語音處理的關鍵問題,特征的好壞直接影響到語音處理(比如語音識別)的精度。然而在語音領域中,沒有一個所謂的標準特征集,不同的語音系統(tǒng)選取的特征組合不盡相同。語音的特征一般是由信號處理專家定義的,比較流行的特征是MFCC(梅爾頻率倒譜系數(shù))。5 語音情感識別算法常用的機器學習分類器:模式識別領域的諸多算法(傳統(tǒng))都曾用于語音情感識別的研究,比如GMM(高斯混合模型),SVM,KNN,HMM(隱馬爾可夫模型)。用LLDs(low level descriptors)和HSFs(high level statistics functions)這些手工設計特征去訓練。聲譜圖+CRNN:最近很多人用聲譜圖加上CNN,LSTM這些深度學習模型來做。還有手工特征加聲譜圖一起作為特征放進深度學習模型。也有人用DBN,但是不多。3.手工特征+CRNN:也有人用手工特征加CRNN做?!鏅嗦暶鳎罕疚臑镃SDN博主「醒了的追夢人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
    2021-09-20
  • 檢信智能ALLEMOTION OS推薦免費下載的語音情感數(shù)據(jù)庫
    檢信智能ALLEMOTION OS推薦免費下載的語音情感數(shù)據(jù)庫計算機對從傳感器采集來的信號進行分析和處理,得出對方正處在的情感狀態(tài),這種行為叫作情感識別。目前對于情感識別有兩種方式,一種是檢測生理信號如呼吸,心律和體溫等,另一種是檢測情感行為如面部表情識別,語音情感識別和姿態(tài)識別。語音情感數(shù)據(jù)集是研究語音情感識別的重要基礎,按照情感描述類型可將數(shù)據(jù)集分為離散情感數(shù)據(jù)庫和維度情感數(shù)據(jù)庫,前者以離散的語言標簽(如高興,悲傷等)作為情感標注,后者以連續(xù)的實數(shù)坐標值表示情感。下面介紹一些離散語音情感數(shù)據(jù)集:Belfast英語情感數(shù)據(jù)庫:40位錄音者(20男20女,18-69歲),對五個段落(每個段落7-8個句子)進行演講錄制,演講者按照五種情感傾向進行演講:生氣(anger),悲傷(sadness),高興(happiniess),害怕(fear),中性(neutral)。柏林Emo-DB情感數(shù)據(jù)庫:德國柏林工業(yè)大學錄制,10位演員(5男5女),對10個德語語音進行表演,包含了七種情感:生氣(anger),悲傷(sadness),高興(happiniess),害怕(fear),中性(neutral),厭惡(disgust),無聊(boredom)。共包含800句語料(10 位演員 x10 句話 x7 種情感+100 條某些語句的二次版本),后經(jīng)過篩選得到500多條,采樣率為 48kHz (后壓縮至 16kHz),16bit 量化。語料文本的選取遵從語義中性、無情感傾向的原則,且為日??谡Z化風格,無過多的書面語修飾。語音的錄制在專業(yè)錄音室中完成,要求演員在表演某個特定情感片段前通過回憶自身真實經(jīng)歷或體驗進行情緒的醞釀,來增強情緒的真實感。FAU AIBO兒童德語情感數(shù)據(jù)庫:2009年在Interspeech會議上舉辦Emotion Challenge評比中指定的語音情感數(shù)據(jù)庫。通過兒童與索尼公司的AIBO機器狗進行自然交互,從而進行情感數(shù)據(jù)的采集。說話人由51名兒童組成,年齡段為10-13歲,其中30個為女性。語料庫包含9.2小時的語音,48401個單詞。采樣頻率為48kHz(后壓縮至 16kHz),16比特量化。該數(shù)據(jù)庫中情感數(shù)據(jù)的自然度高,數(shù)據(jù)量足夠大,是較為流行的一個語音情感數(shù)據(jù)庫。CASIA漢語情感數(shù)據(jù)庫:中科院自動化所錄制,兩男兩女錄制500句不同的文本,通過演講者不同的感情演講得出,最后的語音又人工篩選,得到了大約9600條語句。分為六類情感。ACCorpus系列漢語情感數(shù)據(jù)庫:清華大學和中科院心理研究所合作錄制,相對于CASIA錄制工作者更多,代表性更強。包含如下 5 個相關子庫:ACCorpus_MM 多模態(tài)、多通道的情感數(shù)據(jù)庫;ACCorpus_SR 情感語音識別數(shù)據(jù)庫;ACCorpus_SA 漢語普通話情感分析數(shù)據(jù)庫;ACCorpus_FV 人臉表情視頻數(shù)據(jù)庫;ACCorpus_FI 人臉表情圖像數(shù)據(jù)庫。以 ACCorpus_SR 為例,該子庫是由 50 位錄音人(25 男25女)對 5類情感(中性、高興、生氣、恐懼和悲傷)各自表演得到,16kHz 采樣,16bit 量化。IEMOCAP: 南加利福尼亞大學錄制的,10個演員,1男1女演繹一個session,共5個session。錄制了將近12小時的數(shù)據(jù),有視頻,語音,人臉的變動捕捉和文本。包括即興自發(fā)的和照著稿子念的。每個utterance至少三個人評估。包括9種情感(anger,happiness,excitement,sadness,frustration,fear,surprise,other和neural)的離散標簽,以及三個維度的維度標簽(valence, activation and dominance)?!鏅嗦暶鳎罕疚臑镃SDN博主「醒了的追夢人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/qq_33472146/article/details/96433766
    2021-09-20
  • 檢信智能ALLEMOTION OS 語義文本情感識別原理
    首先,當然是文本預處理輸入文本,在將輸入文本轉化成向量之前,我們需要將標點符號、括號、問號等刪去,只留下字母、數(shù)字和字符, 同時將大寫字母轉化為小寫,去除停用詞。效果如下圖然后就是將文本轉化為詞向量(即漢字要轉化為計算機能識別的數(shù)字類(矩陣啥的))在將深度學習運用于文本情感分析的過程中,我們需要考慮網(wǎng)絡模型的輸入數(shù)據(jù)的形式。在其他例子中,卷積神經(jīng)網(wǎng)絡(CNN)使用像素值作為輸入,logistic回歸使用一些可以量化的特征值作為輸入,強化學習模型使用獎勵信號來進行更新。通常的輸入數(shù)據(jù)是需要被標記的標量值。當我們處理文本任務時,可能會想到利用這樣的數(shù)據(jù)管道。但是,這樣的處理方式存在著很多問題。我們不能像點積或者反向傳播那樣在一個字符串上執(zhí)行普通的運算操作。所以在這里我們不能將字符串作為輸入,而是需要將文本轉換成計算機可識別的格式,由于計算機只能識別數(shù)字,因此我們可以將文本中的每一個詞都轉化為一個向量,也稱作詞向量。詞向量是用一個向量的形式表示文本中的一個詞,通過這種轉化方式就能采用機器學習來把任何輸入量化成我們需要的數(shù)值表示,然后就可以充分利用計算機的計算能力,計算得出最終想要的結果,保證了操作的可行性。如圖所示,我們可以將上面的這段文本輸入數(shù)據(jù)轉化成一個 16*D 的輸入矩陣。我們希望創(chuàng)建這種詞向量的方式是可以表示單詞及其在上下文中意義的。例如,我們希望單詞 “l(fā)ove” 和 “adore” 這兩個詞在向量空間中是有一定的相關性的,因為他們的意思相似,而且都在類似的上下文中使用,因此他們的空間相距距離會相對較小。而“l(fā)ove”、“adore”這兩個單詞與單詞“baseball”的意思有很大的不同,詞性也不相同,那么“l(fā)ove”、“adore”這兩個單詞的向量與單詞“baseball”的向量相距距離就會相對較大。單詞的向量表示也被稱之為詞嵌入。特征提取:為了得到這些詞嵌入,我們采用一個很著名的模型 “Word2Vec”?!癢ord2Vec”是近幾年很火的算法,它通過神經(jīng)網(wǎng)絡機器學習算法來訓練N-gram 語言模型,并在訓練過程中求出word所對應的vector的方法。它是將詞表征為實數(shù)值向量的一種高效的算法模型,其利用深度學習的思想,可以通過訓練,把對文本內容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似。在這個模型中,每個詞的詞向量是根據(jù)上下文的語境來進行推斷的,如果兩個詞在上下文的語境中可以被互換,那么這就表示這兩個詞的意思相似,詞性相似,那么他們的詞向量中相距距離就非常近。在自然語言中,上下文的語境對分析詞語的意義是非常重要的。簡單來說,Word2Vec這個模型的作用就是從一大堆句子(以 Wikipedia 為例)中為每個獨一無二的單詞進行建模,并且輸出一個唯一的向量,Word2Vec 模型的輸出被稱為一個嵌入矩陣。該嵌入矩陣將包含訓練語料庫中每個不同單詞的向量。 傳統(tǒng)上,嵌入矩陣可以包含超過300萬個單詞向量。Word2Vec模型是通過對數(shù)據(jù)集中的每個句子進行訓練,在其上滑動一個固定大小的窗口,并試圖預測窗口的中心詞,給出其他詞。使用損失函數(shù)和優(yōu)化程序,該模型為每個唯一字生成向量。這個訓練過程的細節(jié)可能會變得有點復雜,所以我們現(xiàn)在要跳過細節(jié),但這里主要的一點是,任何深度學習方法對于NLP任務的輸入可能都會有單詞向量作為輸入。后面特征提取這一塊,應該會將用word2vec提取的方式改為用doc2vec來提取,不過具體修改時間待定,得看我啥時候能將這一操作學會(哈哈噠)。Google 已經(jīng)幫助我們在大規(guī)模數(shù)據(jù)集上訓練出來了 Word2Vec 模型,它包括 1000 億個不同的詞,在這個模型中,谷歌能創(chuàng)建300萬個詞向量,每個向量維度為 300。在理想情況下,我們將使用這些向量來構建模型,但是因為這個單詞向量矩陣太大了(3.6G),因此在此次研究中我們將使用一個更加易于管理的矩陣,該矩陣由 GloVe 進行訓練得到。矩陣將包含 400000 個詞向量,每個向量的維數(shù)為 50。這里有用到一些.npy文件,是通過glove已經(jīng)轉好的,存為了npy文件。我們將導入兩個不同的數(shù)據(jù)結構,一個是包含 400000 個單詞的 Python 列表,一個是包含所有單詞向量值的 400000*50 維的嵌入矩陣。結果對比:CNN網(wǎng)絡層數(shù)包括:卷積層,池化層,全連接層。CNN神經(jīng)網(wǎng)絡模型運用于文本情感分析時效果不如LSTM神經(jīng)網(wǎng)絡模型效果好,經(jīng)典的CNN模型在文本情感分析正確率只有71.2%,而對經(jīng)典進行改進之后,增加了卷積層和池化層,CNN模型的正確率得到了提高,但正確率也是只有77.25%,仍然比不上只用了一層LSTM網(wǎng)絡的正確率高。從結果對比中我們可以知道,CNN不光可以應用于圖像處理領域,也能成功有效地對文本信息進行分析,但LSTM在解決文本情感分析的問題時效果要比CNN好。下面是一些運行結果:訓練數(shù)據(jù)集的結果嗯…,訓練了800多個數(shù)據(jù),發(fā)現(xiàn)最高的時候準確率在百分之七十幾,但是絕大多數(shù)穩(wěn)定在百分之五十左右,這個準確度還是有點低的,后面加強學習,改進代碼,應該可以將準確度提高。(方法推薦:改改epoch可能會提高準確度,模型收斂+準確率)輸出詞列表的長度,詞向量的維數(shù)維度的個數(shù)這個項目采用的數(shù)據(jù)集是IMDB數(shù)據(jù)集,這個數(shù)據(jù)集是一個關于電影評論的數(shù)據(jù)集,在這個數(shù)據(jù)集上做訓練和測試。這個數(shù)據(jù)集包含 25000 條電影數(shù)據(jù),其中 12500 條正向數(shù)據(jù),12500 條負向數(shù)據(jù)。將其中的23000個文本評論作為訓練集,將剩下的2000個文本評論作為測試集。下面為正面評價文本和負面評價文本示例總結:將CNN與LSTM兩種神經(jīng)網(wǎng)絡模型應用到了文本情感分析的問題當中,使用Word2Vec模型及它的子矩陣GloVe來將文本信息進行預處理,轉換成了詞向量及向量矩陣,使用了IMDB數(shù)據(jù)集來對模型進行訓練,并用TensorFlow進行建模、訓練。版權聲明:本文為CSDN博主「醒了的追夢人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
    2021-09-20