通過深度學習來創作自己的音樂(附代碼)

2020-12-15 人工智慧遇見磐創

概述

學習如何開發自動生成音樂的端到端模型理解WaveNet架構,並使用Keras從頭實現它比較WaveNet與建立自動音樂生成模型的LSTM的性能介紹

「如果我不是物理學家,我可能會成為音樂家。我經常在音樂上思考。我在音樂中實現我的白日夢。我從音樂的角度來看待我的生活。——愛因斯坦

我可能不是像愛因斯坦先生那樣的物理學家,但我完全同意他對音樂的看法!我不記得有哪一天我沒有打開我的音樂播放器。我上下班的旅途伴隨著音樂,老實說,它幫助我專注於我的工作。

我一直夢想著作曲,但對樂器卻不是很熟悉。直到我遇到了深度學習。使用特定的技術和框架,我可以創作自己的原創音樂,而不需要真正了解任何音樂理論!

這是我最喜歡的專業項目之一。我把我的兩個愛好——音樂和深度學習——結合起來,創造了一個自動生成音樂的模型。夢想成真了!

我很高興與你分享我的方法,包括整個代碼,使你能夠生成自己的音樂!我們將首先快速理解自動音樂生成的概念,然後再深入探討我們可以使用的不同方法。最後,我們將啟動Python並設計我們自己的自動音樂生成模型。

目錄

什麼是自動音樂生成?音樂的構成要素是什麼?不同的音樂生成方法 使用WaveNet架構 使用長短時記憶(LSTM)實現-使用Python自動作曲什麼是自動音樂生成?

音樂是一種藝術,一種通用的語言。

我把音樂定義為不同頻率的音調的集合。因此,音樂的自動生成是一個創作一小段音樂的過程,並且在在這個過程中人類的介入不多。

產生音樂的最簡單形式是什麼?

這一切都是從隨機選擇聲音並將它們組合成一段音樂開始的。在1787年,莫扎特提出了一個骰子遊戲,這些隨機的聲音選擇。他手工創作了近272個音調!然後,他根據兩個骰子的總和選擇一個音調。

另一個有趣的想法是利用音樂語法來產生音樂。

音樂語法包括正確安排和組合音樂聲音以及正確演奏音樂作品所必需的知識 -音樂語法基礎

在20世紀50年代早期,Iannis Xenakis使用統計和概率的概念來創作音樂——通常被稱為隨機音樂。他把音樂定義為偶然發生的一系列元素(或聲音)。因此,他用隨機理論來闡述它。他對元素的隨機選擇完全依賴於數學概念。

最近,深度學習架構已經成為自動生成音樂的最新技術。在本文中,我將討論使用WaveNet和LSTM(長短時記憶)架構實現自動作曲的兩種不同方法。

音樂的構成要素是什麼?

音樂基本上是由音符和和弦組成的。讓我從鋼琴樂器的角度來解釋這些術語:

注:單個鍵發出的聲音稱為音符和弦:兩個或多個鍵同時發出的聲音稱為和弦。一般來說,大多數和弦包含至少3個鍵音八度:重複的模式稱為八度。每個八度音階包含7個白鍵和5個黑鍵自動生成音樂的不同方法

我將詳細討論兩種基於深度學習的自動生成音樂的架構——WaveNet和LSTM。但是,為什麼只有深度學習架構呢?

深度學習是受神經結構啟發的機器學習領域。這些網絡自動從數據集中提取特徵,並且能夠學習任何非線性函數。這就是為什麼神經網絡被稱為通用函數逼近器。

因此,深度學習模型是自然語言處理(NLP)、計算機視覺、語音合成等領域的最新技術。讓我們看看如何為音樂作曲建立這些模型。

方法1:使用WaveNet

WaveNet是一個基於深度學習的原始音頻生成模型,由谷歌DeepMind開發。

WaveNet的主要目標是從原始數據分布中生成新的樣本。因此,它被稱為生成模型。

Wavenet類似於NLP中的語言模型。

在一個語言模型中,給定一個單詞序列,該模型試圖預測下一個單詞:

與WaveNet中的語言模型類似,給定一個樣本序列,它嘗試預測下一個樣本。

方法2:使用長短時記憶(LSTM)模型

長短時記憶模型(Long- Short-Term Memory Model,俗稱LSTM)是循環神經網絡(RNNs)的一種變體,它能夠捕獲輸入序列中的長期依賴關係。LSTM在序列到序列建模任務中有著廣泛的應用,如語音識別、文本摘要、視頻分類等。

讓我們詳細討論如何使用這兩種方法來訓練我們的模型。

方法1:使用WaveNet

Wavenet:訓練階段

這是一個多對一的問題,輸入是一系列振幅值,輸出是隨後的值。

讓我們看看如何準備輸入和輸出序列。

波形網輸入:

WaveNet將原始音頻作為輸入。原始音頻波是指波在時間序列域中的表示。

在時間序列域中,音頻波以振幅值的形式表示,振幅值記錄在不同的時間間隔內:

波形網輸出:

給定振幅值的序列,WaveNet嘗試預測連續的振幅值。

讓我們通過一個例子來理解這一點。考慮一個採樣率為16,000(即每秒16,000個次採樣)的5秒的音頻波。現在,我們有80000個樣本,每隔5秒記錄一次。讓我們把音頻分成大小相等的塊,比如1024(這是一個超參數)。

下圖展示了模型的輸入和輸出序列:

我們可以對其餘的塊使用類似的過程。

從上面我們可以推斷出每個塊的輸出只依賴於過去的信息(即以前的時間步),而不依賴於未來的時間步。因此,該任務稱為自回歸任務,該模型稱為自回歸模型。

推理階段

在推理階段,我們將嘗試生成新的樣本。讓我們看看怎麼做:

選擇一個隨機的樣本值數組作為建模的起點現在,模型輸出所有樣本的概率分布選擇具有最大概率的值並將其附加到樣本數組中刪除第一個元素並作為下一個迭代的輸入傳遞對一定數量的迭代重複步驟2和4理解WaveNet架構

WaveNet的構建塊是因果擴展的一維卷積層。讓我們首先了解相關概念的重要性。

為什麼?什麼是卷積?

使用卷積的一個主要原因是從輸入中提取特徵。

例如,在圖像處理的情況下,將圖像與過濾器進行卷積可以得到一個特徵圖。

卷積是結合兩個函數的數學運算。在圖像處理中,卷積是圖像某些部分與核的線性組合

什麼是一維卷積?

一維卷積的目標類似於長短時記憶模型。它用於解決與LSTM類似的任務。在一維卷積中,一個核或一個濾波器只沿著一個方向運動:

卷積的輸出取決於核的大小、輸入形狀、填充類型和步幅。現在,我將帶你通過不同類型的填充來理解使用因果擴展一維卷積層的重要性。

當我們設置padding有效值時,輸入和輸出序列的長度會發生變化。輸出的長度小於輸入的長度:

當我們將padding設為相同時,在輸入序列的兩邊填充0,使輸入和輸出的長度相等:

1D卷積的優點:

捕獲輸入序列中出現的順序信息與GRU或LSTM相比,訓練要快得多,因為它們不像循環神經網絡是串聯的1D卷積的缺點:

當padding設置為same時,時間步t的輸出與之前的t-1和未來的時間步t+1進行卷積。因此,它違反了自回歸原則當填充被設置為valid時,輸入和輸出序列的長度會發生變化,這是計算殘差連接所需的(稍後將介紹)這為因果卷積掃清了道路。

注意:我在這裡提到的優點和缺點是針對這個問題的。

什麼是一維因果卷積?

這被定義為卷積,其中在t時刻的輸出只與來自t時刻以及更早的前一層的元素進行卷積。

簡單地說,普通卷積和因果卷積只在填充上不同。在因果卷積中,在輸入序列的左側添加0,以保持自回歸原理:

因果1D卷積的優點:

因果卷積不考慮未來的時間步,而未來的時間步是構建生成模型的一個標準因果1D卷積的缺點:

因果卷積不能回溯到過去或者序列中較早發生的時間步。因此,因果卷積的接受域非常低。網絡的接受域是指影響輸出的輸入數量:

正如你在這裡看到的,輸出僅受5個輸入的影響。因此,網絡的接受域為5,非常低。網絡的接受域也可以通過添加大尺寸的核來增加,但是要記住計算複雜度會增加。

這讓我們想到了因果擴展一維卷積的概念。

什麼是因果擴展一維卷積?

在核值之間存在空穴或空隙的因果一維卷積層稱為擴展一維卷積。

要添加的空格數由擴展率給出。它定義了網絡的接收域。大小為k且擴展速率為d的核在k的每個值之間有d-1個洞。

正如你在這裡看到的,將一個3*3的核與一個7*7的輸入用擴展率2來進行卷積,其接收域為5*5。

擴展一維因果卷積的優點:

擴展1D卷積網絡通過指數增加每一隱藏層的擴展率來增加接受域:

正如你在這裡看到的,輸出受到所有輸入的影響。因此,網絡的接受域是16。

WaveNet的殘差塊:

一個塊包含殘差連接和跳躍連接,這些連接只是為了加快模型的收斂速度而添加的:

WaveNet的工作流程:

輸入被輸入到一個因果一維卷積然後,輸出被饋送到兩個不同的sigmoid和tanh激活的擴展一維卷積層兩個不同激活值的元素相乘接著是跳躍連接在元素上加入一個跳躍連接和因果1D的輸出會產生殘差跳躍連接和因果一維輸出來計算殘差方法2:長短時記憶(LSTM)方法

另一種自動生成音樂的方法是基於長短時記憶(LSTM)模型。輸入和輸出序列的準備類似於WaveNet。在每個時間步,振幅值被輸入到長短時記憶單元-然後計算隱藏的向量,並將其傳遞到下一個時間步。

在$ht$時刻的當前隱藏向量是基於$ht$時刻的當前輸入$at$和之前的隱藏向量$h{t-1}$計算的。這是如何捕獲序列信息在任何循環神經網絡:

LSTM的優點:

捕獲輸入序列中出現的順序信息LSTM的缺點:

由於它按順序處理輸入,因此會消耗大量的訓練時間實現-使用Python自動生成音樂

等待結束了!讓我們開發一個自動生成音樂的端到端模型。打開你的Jupyter 筆記本或者Colab(或者任何你喜歡的IDE)。

下載數據集:我從眾多資源中下載並組合了一架數字鋼琴的多個古典音樂文件。你可以從這裡下載最終的數據集。

https://drive.google.com/file/d/1qnQVK17DNVkU19MgVA4Vg88zRDvwCRXw/view?usp=sharing

讓我們首先為可重複的結果設置種子。這是因為深度學習模型在執行時由於隨機性可能會輸出不同的結果。這確保了我們每次都能得到相同的結果。

from numpy.random import seedseed(1)from tensorflow import set_random_seedset_random_seed(2)導入庫:

Music 21是由麻省理工學院為理解音樂數據而開發的Python庫。MIDI是存儲音樂文件的標準格式(它代表樂器數字接口)。MIDI文件包含的是指令而不是實際的音頻。因此,它佔用的空間很少。這就是為什麼它通常是首選傳輸文件。

#處理MIDI文件from music21 import * #數組處理import numpy as np import os#隨機數生成import random #keras構建深度學習模型from keras.layers import * from keras.models import *import keras.backend as K讀取數據:

定義一個讀取MIDI文件的函數。它返回音樂文件中的一組音符和和弦。

def read_midi(file): notes=[] notes_to_parse = None #解析MIDI文件 midi = converter.parse(file) #基於樂器分組 s2 = instrument.partitionByInstrument(midi) #遍歷所有的樂器 for part in s2.parts: #只選擇鋼琴 if 'Piano' in str(part): notes_to_parse = part.recurse() #查找特定元素是音符還是和弦 for element in notes_to_parse: if isinstance(element, note.Note): notes.append(str(element.pitch)) elif isinstance(element, chord.Chord): notes.append('.'.join(str(n) for n in element.normalOrder)) return notes從目錄中讀取MIDI文件:

#讀取所有文件名files=[i for i in os.listdir() if i.endswith(".mid")]#讀取每個midi文件all_notes=[]for i in files: all_notes.append(read_midi(i))#所有midi文件的音符和和弦notes = [element for notes in all_notes for element in notes]準備文章中提到的輸入和輸出序列:

#輸入序列的長度no_of_timesteps = 128 n_vocab = len(set(notes)) pitch = sorted(set(item for item in notes)) #為每個note分配唯一的值note_to_int = dict((note, number) for number, note in enumerate(pitch)) #準備輸入和輸出序列X = []y = []for notes in all_notes: for i in range(0, len(notes) - no_of_timesteps, 1): input_ = notes[i:i + no_of_timesteps] output = notes[i + no_of_timesteps] X.append([note_to_int[note] for note in input_]) y.append(note_to_int[output])卷積1D或LSTM的輸入必須是(樣本、時間步、特徵)的形式。因此,讓我們根據需要的形狀來重新設計輸入數組。注意,每個時間步中的特徵數量為1:

X = np.reshape(X, (len(X), no_of_timesteps, 1))#標準化輸入X = X / float(n_vocab) 我在這裡定義了兩個架構——WaveNet和LSTM。請嘗試這兩種架構來理解WaveNet架構的重要性。

def lstm(): model = Sequential() model.add(LSTM(128,return_sequences=True)) model.add(LSTM(128)) model.add(Dense(256)) model.add(Activation('relu')) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='sparse_categorical_crossentropy', optimizer='adam') return model 我簡化了WaveNet的結構,沒有添加殘差連接和跳躍連接,因為這些層的作用是提高更快的收斂速度(而WaveNet將原始音頻作為輸入)。但在我們的情況下,輸入將是一組節點和和弦,因為我們正在生成音樂:

K.clear_session()def simple_wavenet(): no_of_kernels=64 num_of_blocks= int(np.sqrt(no_of_timesteps)) - 1 model = Sequential() for i in range(num_of_blocks): model.add(Conv1D(no_of_kernels,3,dilation_rate=(2**i),padding='causal',activation='relu')) model.add(Conv1D(1, 1, activation='relu', padding='causal')) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(n_vocab, activation='softmax')) model.compile(loss='sparse_categorical_crossentropy', optimizer='adam') return model定義每50個epoch後保存模型的回調:

import kerasmc = keras.callbacks.ModelCheckpoint('model{epoch:03d}.h5', save_weights_only=False, period=50)實例化並訓練批處理大小為128的模型:

model = simple_wavenet()model.fit(X,np.array(y), epochs=300, batch_size=128,callbacks=[mc])這是本文中提到的推理階段的一個實現。它為一定次數的迭代後預測最有可能的元素:

def generate_music(model, pitch, no_of_timesteps, pattern): int_to_note = dict((number, note) for number, note in enumerate(pitch)) prediction_output = [] # 生成50個 for note_index in range(50): #輸入數據 input_ = np.reshape(pattern, (1, len(pattern), 1)) #預測並選出最大可能的元素 proba = model.predict(input_, verbose=0) index = np.argmax(proba) pred = int_to_note[index] prediction_output.append(pred) pattern = list(pattern) pattern.append(index/float(n_vocab)) #將第一個值保留在索引0處 pattern = pattern[1:len(pattern)] return prediction_output下面是一個函數轉換成一個MIDI文件組成的音樂:

def convert_to_midi(prediction_output): offset = 0 output_notes = [] # 根據模型生成的值創建音符和和弦對象 for pattern in prediction_output: # 模式是和弦 if ('.' in pattern) or pattern.isdigit(): notes_in_chord = pattern.split('.') notes = [] for current_note in notes_in_chord: new_note = note.Note(int(current_note)) new_note.storedInstrument = instrument.Piano() notes.append(new_note) new_chord = chord.Chord(notes) new_chord.offset = offset output_notes.append(new_chord) # 模式是音符 else: new_note = note.Note(pattern) new_note.offset = offset new_note.storedInstrument = instrument.Piano() output_notes.append(new_note) # 指定兩個音符之間的持續時間 offset+ = 0.5 # offset += random.uniform(0.5,0.9) midi_stream = stream.Stream(output_notes) midi_stream.write('midi', fp='music.mid')現在讓我們來譜寫自己的音樂吧!

#為第一次迭代選擇隨機塊start = np.random.randint(0, len(X)-1)pattern = X[start]#載入最好的模型model=load_model('model300.h5')#生成和保存音樂music = generate_music(model,pitch,no_of_timesteps,pattern)convert_to_midi(music)以下是我們的模型創作的幾首曲子。是時候欣賞音樂了!

https://cdn.analyticsvidhya.com/wp-content/uploads/2019/12/music1fast.mp3

https://cdn.analyticsvidhya.com/wp-content/uploads/2019/12/music2fast.mp3

https://cdn.analyticsvidhya.com/wp-content/uploads/2019/12/music3fast.mp3

太棒了,對吧?但你的學習還不止於此。這裡有一些方法可以進一步提高模型的性能:

增加訓練數據集的大小會產生更好的旋律,因為深度學習模型可以很好地在大型訓練數據集上進行泛化在構建具有大量層的模型時添加跳躍和殘差連接結尾

深度學習在我們的日常生活中有著廣泛的應用。解決任何問題的關鍵步驟都是理解問題陳述,制定它並定義解決問題的體系結構。

在做這個項目的時候,我有很多樂趣(和學習)。音樂是我的愛好,把深度學習和音樂結合起來是很有趣的。

相關焦點

  • 想用深度學習譜寫自己的音樂嗎?這篇指南來幫你!(附代碼)
    直到我遇到了深度學習,這一切都成了過去。使用某些技術和框架,我能夠在不了解任何樂理的情況下創作自己的原創音樂樂譜!這是我最喜歡的專業項目之一。我結合了兩個愛好——音樂和深度學習——創建了一個自動的音樂生成模型。夢想成真了!我很高興與你分享我的方法,包括使你也能夠生成原創音樂的全部代碼!
  • 十行代碼就能搞定深度學習?飛槳框架高層API,一起輕鬆玩轉AI
    另:文末有福利,一定要看完呦~高層 API,What深度學習作為人工智慧時代的核心技術,近年來無論學術、還是工業領域,均發揮著愈加重要的作用。然而,深度學習理論太難學,開發過程太複雜,又將許多人拒之於深度學習的門外。
  • 不到1000行代碼,GitHub 1400星,天才黑客開源深度學習框架tinygrad
    機器之心報導機器之心編輯部最近,天才黑客 George Hotz 開源了一個小型深度學習框架 tinygrad,兼具 PyTorch 和 micrograd 的功能。
  • Graphcore宣布其IPU支持阿里雲深度學習開放接口標準ODLA
    【TechWeb】9月25日消息, 2020雲棲大會上,阿里雲宣布對行業開源業界首個深度學習開放接口標準ODLA(Open Deep Learning API)。阿里雲在今年5月份的OCP全球峰會上首次對外公布ODLA接口標準,並宣布已率先在Graphcore等生態夥伴上獲得支持。
  • 深度學習方法可通過乳房攝影術實現可靠的乳腺癌檢測
    深度學習方法可通過乳房攝影術實現可靠的乳腺癌檢測 作者:小柯機器人 發布時間:2021/1/14 14:40:20 近日,美國DeepHealth 公司A.
  • 摺疊革命,深度學習通過胺基酸序列預測蛋白質結構
    通過它們構造並保持每個細胞和組織的外觀結構;構建那些維持生命化學反應的催化酶;成為分子的加工廠、轉換器和驅動機;擔當信號器並接收蜂窩信號等等。由胺基酸和蛋白質組成的長鏈,將它們自己摺疊成精準3D結構,可以管理分子間活動的複雜問題。因為,蛋白質外形決定了它的功能和疾病中產生的功能紊亂,並影響蛋白質在分子生物學的中心地位,特別是用於治療科學和治病保健等藥物的發展。
  • 賈揚清:希望Caffe成為深度學習領域的Hadoop
    起源故事《程式設計師》:請介紹一下您自己與深度學習結緣的故事,以及開發Caffe的背景和初衷?賈揚清:我經常和人開玩笑說,「我寫Caffe的原因是因為我不想寫畢業論文。」我最早開始接觸深度學習大概是在2012年,主要是做sparse coding以及相關的特徵學習。
  • 南沙廣附首屆英語藝術節來啦!音樂、電影、創意寫作玩足一周
    該文化節主題是「To try the most, to show the best (追求卓越,秀我風採)」,持續一周時間,內容包括音樂、電影、創意寫作、親子遊園活動等等。閉幕式上同學們在小舞臺上自由表演 馬強攝這場為期一周的英語文化節,活動內容豐富,學術性和趣味性並存。
  • GPU是深度學習系統所必需的嗎?
    直到開始接觸人工智慧和數據科學領域,尤其是深度學習之後,我才意識到了顯卡的真正潛力。就像夢想照進了現實——只用一片簡單的顯卡,就能同時滿足學習和研究的需求,真是妙啊。(註:GPU和顯卡是一個意思,在本文中互換使用。)經過優化的GPU可用於訓練人工智慧和深度學習系統,因為它們可同時處理多個計算。這些系統有大量的內核,可以更好地計算大量並行進程。
  • VBA代碼非常誘人,學習有用的知識是自己的事情
    對於初學者來說,多掌握一些VBA例行語句,對自己的代碼水平提高會有很大的幫助,視野開拓了,才不會拘泥於一處。給很多朋友的建議中,我總是說,在學習VBA代碼解決方案的時候,要學習數組與字典的應用,這樣才不會讓自己的思路故步自封,比如用代碼排重是非常困難的,但是採用了數組會讓你豁然開朗,而用了字典,真的讓你如沐晨風。
  • 2020年深度學習發展大盤點及對2021年深度學習的未來展望|極客雲算
    深度學習框架作為AI底層工具,對個人而言是進入深度學習世界的一把鑰匙,掌握深度學習框架並不等於理解了深度學習,要在AI開發中有所作為,關鍵還是要真正理解框架背後的技術、實踐和生態。隨著近年來的人工智慧發展,2020年深度學習依然是發展最快的領域之一,直奔未來工作。其發展是多方面的,而且是多方位的。
  • 從觸漫看「Z世代」:通過創作表達熱愛,發現更好的自己
    而在創作開始前,她通常會在觸漫先逛逛自己關注的部落和作者的優秀素材帖子、作品。創作完成後,對於自己覺得還有改進空間的的作品,她也會在觸漫廣場發帖子尋求建議,並不時看看快手上的作品評論。如今,芊芊在快手上已經擁有4千多的粉絲關注量。12歲的涵涵細語也是一名漫畫創作者,加入觸漫近一年,目前已擁有1千多的粉絲。現實中,父母給她報了很多興趣班,但都沒有堅持很久。
  • 從觸漫看「Z世代」:通過創作表達熱愛,發現更好的自己
    從觸漫看「Z世代」:通過創作表達熱愛,發現更好的自己當「乘風破浪的姐姐」開始登上舞臺,從容地展示成熟女性的魅力和才華,「乘風破浪的00後們」,也正在以他們的聰明、自信、創造力,不斷刷新著我們的認知。而在創作開始前,她通常會在觸漫先逛逛自己關注的部落和作者的優秀素材帖子、作品。創作完成後,對於自己覺得還有改進空間的的作品,她也會在觸漫廣場發帖子尋求建議,並不時看看快手上的作品評論。如今,芊芊在快手上已經擁有4千多的粉絲關注量。
  • 瑞安本土音樂創作人多了學習交流平臺!市音樂創作研修班開班
    瑞安市本土的音樂創作人有了一個良好
  • AI音樂的「原創」激辯
    2019年,OpenAI發布了可以進行AI音樂創作的深度神經網絡MuseNet,可以使用10種不同樂器,不同音樂風格,生成長達4分鐘的音樂。MuseNet完全不依賴人類對音樂進行編程,而是使用同GPT-2相同的無監督學習技術,通過學習Token來學習和聲、節奏和風格的模式。只要給定一組音符後,AI就會預測後面出現的音符。
  • 「TME騰訊音樂藝術計劃」打通創作與宣發,助力藝術性音樂的跨圈與...
    音樂的藝術性,是近些年來被市場忽視的話題,而這一次通過推出TME騰訊音樂藝術計劃,讓用戶市場再一次注意到了音樂人群體的藝術化表達,讓流量也能向藝術化創作者一方流動,這才是最值得行業關注與認可的一點。  一場深度沉浸式音樂藝術體驗   這是一場音樂與藝術的融合,以不同「動物」為命題,唱作人與藝術家分頭創作,然後再將創作藝術品融合起來——歌曲與畫作,兩者間曖昧、複雜而又有趣的衝突就此產生了。   藝術思維的碰撞與共鳴,大概就是此次「萬物:與動物相遇」藝術展給人最具衝擊力的感受。
  • 快手與華納音樂達成深度合作
    近日,快手宣布華納音樂達成深度合作,以短視頻背景音樂正版授權為基礎,在音樂產品、歌曲宣發等層面展開全方位合作。  此次合作意味著,超百萬首經典及熱門歌曲將成為快手用戶短視頻創作的背景音樂。此次合作是快手繼和騰訊音樂、杰威爾、音著協之後,在音樂版權上又一大突破。
  • 天才黑客George Hotz開源了一個小型深度學習框架tinygrad
    George Hotz 開源了一個小型深度學習框架 tinygrad,兼具 PyTorch 和 micrograd 的功能。tinygrad 的代碼數量不到 1000 行,目前該項目獲得了 GitHub 1400 星。 在深度學習時代,谷歌、Facebook、百度等科技巨頭開源了多款框架來幫助開發者更輕鬆地學習、構建和訓練不同類型的神經網絡。而這些大公司也花費了很大的精力來維護 TensorFlow、PyTorch 這樣龐大的深度學習框架。
  • 代碼可以用來聽?滴滴程式設計師將代碼翻譯成音樂
    冰冷的代碼可以變成情緒豐富的音樂?今天是1024程式設計師節,滴滴的幾個程式設計師從日常代碼中找到映射成音符的邏輯,利用兩三天業餘時間開發上線了一套代碼音樂轉換器。打開微信搜索 「代碼變音樂」小程序,輸入任何一段代碼,即可立刻生成一段旋律。
  • CVPR 2020論文開源項目一頁看盡,附代碼論文
    首先通過深入的實驗,重新評估用於自監督訓練和重建損失的傳統選擇。其次,通過使用一個重要的內存組件來擴展架構,從而進一步改進現有的方法。而後,對大規模半監督視頻對象分割進行了基準測試,提出了一種新的度量方法:可泛化(generalizability)。