chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用Tensorflow編寫一個(gè)基本的端到端自動(dòng)語音識別

倩倩 ? 來源:lq ? 作者:讀芯術(shù) ? 2019-10-09 15:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文闡述了如何利用Tensorflow編寫一個(gè)基本的端到端自動(dòng)語音識別(Automatic Speech Recognition,ASR)系統(tǒng),詳細(xì)介紹了最小神經(jīng)網(wǎng)絡(luò)的各個(gè)組成部分以及可將音頻轉(zhuǎn)為可讀文本的前綴束搜索解碼器。

雖然當(dāng)下關(guān)于如何搭建基礎(chǔ)機(jī)器學(xué)習(xí)系統(tǒng)的文獻(xiàn)或資料有很多,但是大部分都是圍繞計(jì)算機(jī)視覺和自然語言處理展開的,極少有文章就語音識別展開介紹。本文旨在填補(bǔ)這一空缺,幫助初學(xué)者降低入門難度,提高學(xué)習(xí)自信。

前提

初學(xué)者需要熟練掌握:

· 神經(jīng)網(wǎng)絡(luò)的組成

· 如何訓(xùn)練神經(jīng)網(wǎng)絡(luò)

· 如何利用語言模型求得詞序的概率

概述

· 音頻預(yù)處理:將原始音頻轉(zhuǎn)換為可用作神經(jīng)網(wǎng)絡(luò)輸入的數(shù)據(jù)

· 神經(jīng)網(wǎng)絡(luò):搭建一個(gè)簡單的神經(jīng)網(wǎng)絡(luò),用于將音頻特征轉(zhuǎn)換為文本中可能出現(xiàn)的字符的概率分布

· CTC損失:計(jì)算不使用相應(yīng)字符標(biāo)注音頻時(shí)間步長的損失

· 解碼:利用前綴束搜索和語言模型,根據(jù)各個(gè)時(shí)間步長的概率分布生成文本

本文重點(diǎn)講解了神經(jīng)網(wǎng)絡(luò)、CTC損失和解碼。

音頻預(yù)處理

搭建語音識別系統(tǒng),首先需要將音頻轉(zhuǎn)換為特征矩陣,并輸入到神經(jīng)網(wǎng)絡(luò)中。完成這一步的簡單方法就是創(chuàng)建頻譜圖。

def create_spectrogram(signals):

stfts = tf.signal.stft(signals, fft_length=256)

spectrograms = tf.math.pow(tf.abs(stfts), 0.5)

return spectrograms

這一方法會計(jì)算出音頻信號的短時(shí)傅里葉變換(Short-time Fourier Transform)以及功率譜,其最終輸出可直接用作神經(jīng)網(wǎng)絡(luò)輸入的頻譜圖矩陣。其他方法包括濾波器組和MFCC(Mel頻率倒譜系數(shù))等。

了解更多音頻預(yù)處理知識:https://haythamfayek.com/2016/04/21/speech-processing-for-machine-learning.html

神經(jīng)網(wǎng)絡(luò)

下圖展現(xiàn)了一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

語音識別基本結(jié)構(gòu)

頻譜圖輸入可以看作是每個(gè)時(shí)間步長的向量。1D卷積層從各個(gè)向量中提取出特征,形成特征向量序列,并輸入LSTM層進(jìn)一步處理。LSTM層(或雙LSTM層)的輸入則傳遞至全連接層。利用softmax激活函數(shù),可得出每個(gè)時(shí)間步長的字符概率分布。整個(gè)網(wǎng)絡(luò)將會用CTC損失函數(shù)進(jìn)行訓(xùn)練(CTC即Connectionist Temporal Classification,是一種時(shí)序分類算法)。熟悉整個(gè)建模流程后可嘗試使用更復(fù)雜的模型。

class ASR(tf.keras.Model):

def __init__(self, filters, kernel_size, conv_stride, conv_border, n_lstm_units, n_dense_units):

super(ASR, self).__init__()

self.conv_layer = tf.keras.layers.Conv1D(filters,

kernel_size,

strides=conv_stride,

padding=conv_border,

activation=‘relu’)

self.lstm_layer = tf.keras.layers.LSTM(n_lstm_units,

return_sequences=True,

activation=‘tanh’)

self.lstm_layer_back = tf.keras.layers.LSTM(n_lstm_units,

return_sequences=True,

go_backwards=True,

activation=‘tanh’)

self.blstm_layer = tf.keras.layers.Bidirectional(self.lstm_layer, backward_layer=self.lstm_layer_back)

self.dense_layer = tf.keras.layers.Dense(n_dense_units)

def call(self, x):

x = self.conv_layer(x)

x = self.blstm_layer(x)

x = self.dense_layer(x)

return x

為什么使用CTC呢?搭建神經(jīng)網(wǎng)絡(luò)旨在預(yù)測每個(gè)時(shí)間步長的字符。然而現(xiàn)有的標(biāo)簽并不是各個(gè)時(shí)間步長的字符,僅僅是音頻的轉(zhuǎn)換文本。而文本的各個(gè)字符可能橫跨多個(gè)步長。如果對音頻的各個(gè)時(shí)間步長進(jìn)行標(biāo)記,C-A-T就會變成C-C-C-A-A-T-T。而每隔一段時(shí)間,如10毫秒,對音頻數(shù)據(jù)集進(jìn)行標(biāo)注,并不是一個(gè)切實(shí)可行的方法。CTC則解決上了上述問題。CTC并不需要標(biāo)記每個(gè)時(shí)間步長。它忽略了文本中每個(gè)字符的位置和實(shí)際相位差,把神經(jīng)網(wǎng)絡(luò)的整個(gè)概率矩陣輸入和相應(yīng)的文本作為輸入。

CTC 損失計(jì)算

輸出矩陣示例

假設(shè)真實(shí)的數(shù)據(jù)標(biāo)簽為CAT,在四個(gè)時(shí)間步長中,有序列C-C-A-T,C-A-A-T,C-A-T-T,_-C-A-T,C-A-T-_與真實(shí)數(shù)據(jù)相對應(yīng)。將這些序列的概率相加,可得到真實(shí)數(shù)據(jù)的概率。根據(jù)輸出的概率矩陣,將序列的各個(gè)字符的概率相乘,可得到單個(gè)序列的概率。則上述序列的總概率為0.0288+0.0144+0.0036+0.0576+0.0012=0.1056。CTC損失則為該概率的負(fù)對數(shù)。Tensorflow自帶損失函數(shù)文件。

解碼

由上文的神經(jīng)網(wǎng)絡(luò),可輸出一個(gè)CTC矩陣。這一矩陣給出了各個(gè)時(shí)間步長中每個(gè)字符在其字符集中的概率。利用前綴束搜索,可從CTC矩陣中得出所需的文本。

除了字母和空格符,CTC矩陣的字符集還包括兩種特別的標(biāo)記(token,也稱為令牌)——空白標(biāo)記和字符串結(jié)束標(biāo)記。

空白標(biāo)記的作用:CTC矩陣中的時(shí)間步長通常比較小,如10毫秒。因此,句子中的一個(gè)字符會橫跨多個(gè)時(shí)間步長。如,C-A-T會變成C-C-C-A-A-T-T。所以,需要將CTC矩陣中出現(xiàn)該問題的字符串中的重復(fù)部分折疊,消除重復(fù)。那么像FUNNY這種本來就有兩個(gè)重復(fù)字符(N)的詞要怎么辦呢?在這種情況下,就可以使用空白標(biāo)記,將其插入兩個(gè)N中間,就可以防止N被折疊。而這么做實(shí)際上并沒有在文本中添加任何東西,也就不會影響其內(nèi)容或形式。因此,F(xiàn)-F-U-N-[空白]-N-N-Y最終會變成FUNNY。

結(jié)束標(biāo)記的作用:字符串的結(jié)束表示著一句話的結(jié)束。對字符串結(jié)束標(biāo)記后的時(shí)間步長進(jìn)行解碼不會給候選字符串增加任何內(nèi)容。

步驟

初始化

· 準(zhǔn)備一個(gè)初始列表。列表包括多個(gè)候選字符串,一個(gè)空白字符串,以及各個(gè)字符串在不同時(shí)間步長以空白標(biāo)記結(jié)束的概率,和以非空白標(biāo)記結(jié)束的概率。在時(shí)刻0,空白字符串以空白標(biāo)記結(jié)束的概率為1,以非空白標(biāo)記結(jié)束的概率則為0。

迭代

· 選擇一個(gè)候選字符串,將字符一個(gè)一個(gè)添加進(jìn)去。計(jì)算拓展后的字符串在時(shí)刻1以空白標(biāo)記和非空白標(biāo)記結(jié)束的概率。將拓展字符串及其概率記錄到列表中。將拓展字符串作為新的候選字符串,在下一時(shí)刻重復(fù)上述步驟。

· 情況A:如果添加的字符是空白標(biāo)記,則保持候選字符串不變。

· 情況B:如果添加的字符是空格符,則根據(jù)語言模型將概率與和候選字符串的概率成比例的數(shù)字相乘。這一步可以防止錯(cuò)誤拼寫變成最佳候選字符串。如,避免COOL被拼成KUL輸出。

· 情況C:如果添加的字符和候選字符串的最后一個(gè)字符相同,(以候選字符串FUN和字符N為例),則生成兩個(gè)新的候選字符串,F(xiàn)UNN和FUN。生成FUN的概率取決于FUN以空白標(biāo)記結(jié)束的概率。生成FUNN的概率則取決于FUN以非空白標(biāo)記結(jié)束的概率。因此,如果FUN以非空白標(biāo)記結(jié)束,則去除額外的字符N。

輸出

經(jīng)過所有時(shí)間步長迭代得出的最佳候選字符串就是輸出。

為了加快這一過程,可作出如下兩個(gè)修改。

1.在每一個(gè)時(shí)間步長,去除其他字符串,僅留下最佳的K個(gè)候選字符串。具體操作為:根據(jù)字符串以空白和非空白標(biāo)記結(jié)束的概率之和,對候選字符串進(jìn)行分類。

2.去除矩陣中概率之和低于某個(gè)閾值(如0.001)的字符。

具體操作細(xì)節(jié)可參考如下代碼。

def prefix_beam_search(ctc,

alphabet,

blank_token,

end_token,

space_token,

lm,

k=25,

alpha=0.30,

beta=5,

prune=0.001):

‘’‘

function to perform prefix beam search on output ctc matrix and return the best string

:param ctc: output matrix

:param alphabet: list of strings in the order their probabilties are present in ctc output

:param blank_token: string representing blank token

:param end_token: string representing end token

:param space_token: string representing space token

:param lm: function to calculate language model probability of given string

:param k: threshold for selecting the k best prefixes at each timestep

:param alpha: language model weight (b/w 0 and 1)

:param beta: language model compensation (should be proportional to alpha)

:param prune: threshold on the output matrix probability of a character.

If the probability of a character is less than this threshold, we do not extend the prefix with it

:return: best string

’‘’

zero_pad = np.zeros((ctc.shape[0]+1,ctc.shape[1]))

zero_pad[1:,:] = ctc

ctc = zero_pad

total_timesteps = ctc.shape[0]

# #### Initialization ####

null_token = ‘’

Pb, Pnb = Cache(), Cache()

Pb.add(0,null_token,1)

Pnb.add(0,null_token,0)

prefix_list = [null_token]

# #### Iterations ####

for timestep in range(1, total_timesteps):

pruned_alphabet = [alphabet[i] for i in np.where(ctc[timestep] 》 prune)[0]]

for prefix in prefix_list:

if len(prefix) 》 0 and prefix[-1] == end_token:

Pb.add(timestep,prefix,Pb.get(timestep - 1,prefix))

Pnb.add(timestep,prefix,Pnb.get(timestep - 1,prefix))

continue

for character in pruned_alphabet:

character_index = alphabet.index(character)

# #### Iterations : Case A ####

if character == blank_token:

value = Pb.get(timestep,prefix) + ctc[timestep][character_index] * (Pb.get(timestep - 1,prefix) + Pnb.get(timestep - 1,prefix))

Pb.add(timestep,prefix,value)

else:

prefix_extended = prefix + character

# #### Iterations : Case C ####

if len(prefix) 》 0 and character == prefix[-1]:

value = Pnb.get(timestep,prefix_extended) + ctc[timestep][character_index] * Pb.get(timestep-1,prefix)

Pnb.add(timestep,prefix_extended,value)

value = Pnb.get(timestep,prefix) + ctc[timestep][character_index] * Pnb.get(timestep-1,prefix)

Pnb.add(timestep,prefix,value)

# #### Iterations : Case B ####

elif len(prefix.replace(space_token, ‘’)) 》 0 and character in (space_token, end_token):

lm_prob = lm(prefix_extended.strip(space_token + end_token)) ** alpha

value = Pnb.get(timestep,prefix_extended) + lm_prob * ctc[timestep][character_index] * (Pb.get(timestep-1,prefix) + Pnb.get(timestep-1,prefix))

Pnb.add(timestep,prefix_extended,value)

else:

value = Pnb.get(timestep,prefix_extended) + ctc[timestep][character_index] * (Pb.get(timestep-1,prefix) + Pnb.get(timestep-1,prefix))

Pnb.add(timestep,prefix_extended,value)

if prefix_extended not in prefix_list:

value = Pb.get(timestep,prefix_extended) + ctc[timestep][-1] * (Pb.get(timestep-1,prefix_extended) + Pnb.get(timestep-1,prefix_extended))

Pb.add(timestep,prefix_extended,value)

value = Pnb.get(timestep,prefix_extended) + ctc[timestep][character_index] * Pnb.get(timestep-1,prefix_extended)

Pnb.add(timestep,prefix_extended,value)

prefix_list = get_k_most_probable_prefixes(Pb,Pnb,timestep,k,beta)

# #### Output ####

return prefix_list[0].strip(end_token)

這樣,一個(gè)基礎(chǔ)的語音識別系統(tǒng)就完成了。對上述步驟進(jìn)行復(fù)雜化,可以得到更優(yōu)的結(jié)果,如,搭建更大的神經(jīng)網(wǎng)絡(luò)和利用音頻預(yù)處理技巧。

完整代碼:https://github.com/apoorvnandan/speech-recognition-primer

注意事項(xiàng):

1. 文中代碼使用的是TensorFlow2.0系統(tǒng),舉例使用的音頻文件選自LibriSpeech數(shù)據(jù)庫(http://www.openslr.org/12)。

2. 文中代碼并不包括訓(xùn)練音頻數(shù)據(jù)集的批量處理生成器。讀者需要自己編寫。

3. 讀者亦需自己編寫解碼部分的語言模型函數(shù)。最簡單的方法就是基于語料庫生成一部二元語法字典并計(jì)算字符概率。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 語音識別
    +關(guān)注

    關(guān)注

    39

    文章

    1812

    瀏覽量

    116058
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8553

    瀏覽量

    136957
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    334

    瀏覽量

    62187
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    自動(dòng)駕駛為什么會出現(xiàn)黑盒現(xiàn)象?

    自動(dòng)駕駛領(lǐng)域,(End-to-End)是指從感知環(huán)境的原始數(shù)據(jù)車輛實(shí)際控制指令,全部交給
    的頭像 發(fā)表于 02-20 09:25 ?9266次閱讀
    <b class='flag-5'>自動(dòng)</b>駕駛<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>為什么會出現(xiàn)黑盒現(xiàn)象?

    如何訓(xùn)練好自動(dòng)駕駛模型?

    [首發(fā)于智駕最前沿微信公眾號]最近有位小伙伴在后臺留言提問:算法是怎樣訓(xùn)練的?是模仿學(xué)習(xí)、強(qiáng)化學(xué)習(xí)和離線強(qiáng)化學(xué)習(xí)這三類嗎?其實(shí)
    的頭像 發(fā)表于 12-08 16:31 ?1432次閱讀
    如何訓(xùn)練好<b class='flag-5'>自動(dòng)</b>駕駛<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>模型?

    智駕模擬軟件推薦——為什么選擇Keymotek的aiSim?

    隨著自動(dòng)駕駛技術(shù)的快速發(fā)展,車企和科技公司對于模擬測試平臺的需求越來越強(qiáng)。從L2/ADASL4/L5等級的自動(dòng)駕駛,虛擬模擬已經(jīng)成為其中的關(guān)鍵環(huán)。特別是對于「
    的頭像 發(fā)表于 11-18 11:35 ?819次閱讀

    自動(dòng)駕駛中仿真與基于規(guī)則的仿真有什么區(qū)別?

    自動(dòng)駕駛領(lǐng)域,“仿真”指的是將感知控制的整個(gè)決策鏈條視為
    的頭像 發(fā)表于 11-02 11:33 ?1710次閱讀

    自動(dòng)駕駛中“段式”和“二段式”有什么區(qū)別?

    [首發(fā)于智駕最前沿微信公眾號]最近有小伙伴提問,段式和二段式
    的頭像 發(fā)表于 10-24 09:03 ?1171次閱讀
    <b class='flag-5'>自動(dòng)</b>駕駛中“<b class='flag-5'>一</b>段式<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>”和“二段式<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>”有什么區(qū)別?

    自動(dòng)駕駛中常提的段式(單段)個(gè)啥?

    自動(dòng)駕駛技術(shù)的發(fā)展,催生出技術(shù)的應(yīng)用,段式
    的頭像 發(fā)表于 10-18 10:16 ?1693次閱讀

    文讀懂特斯拉自動(dòng)駕駛FSD從輔助的演進(jìn)

    [首發(fā)于智駕最前沿微信公眾號]自動(dòng)駕駛行業(yè)發(fā)展至今,特斯拉直被很多企業(yè)對標(biāo),其FSD系統(tǒng)的每次更新,都會獲得非常多人的關(guān)注。早期自動(dòng)駕駛是
    的頭像 發(fā)表于 10-11 09:13 ?809次閱讀
    <b class='flag-5'>一</b>文讀懂特斯拉<b class='flag-5'>自動(dòng)</b>駕駛FSD從輔助<b class='flag-5'>到</b><b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>的演進(jìn)

    自動(dòng)駕駛大模型為什么會有不確定性?

    。為了能讓自動(dòng)駕駛汽車做出正確、安全且符合邏輯的行駛動(dòng)作,大模型被提了出來。
    的頭像 發(fā)表于 09-28 09:20 ?876次閱讀
    <b class='flag-5'>自動(dòng)</b>駕駛<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>大模型為什么會有不確定性?

    語音交互數(shù)據(jù) 精準(zhǔn)賦能語音大模型進(jìn)階

    模型在多輪對話、噪聲環(huán)境及語義理解方面表現(xiàn)不佳。 相較于傳統(tǒng)數(shù)據(jù)集僅關(guān)注語音-文本的單點(diǎn)轉(zhuǎn)寫,語音交互數(shù)據(jù)集強(qiáng)調(diào)在真實(shí)多輪對話場景下的
    的頭像 發(fā)表于 09-11 17:17 ?743次閱讀

    廣和通發(fā)布自研側(cè)語音識別大模型FiboASR

    7月,全球領(lǐng)先的無線通信模組及AI解決方案提供商廣和通,發(fā)布其自主研發(fā)的語音識別大模型FiboASR。該模型專為側(cè)設(shè)備上面臨的面對面實(shí)時(shí)對話及多人會議場景深度優(yōu)化,在低延遲語音交互、
    的頭像 發(fā)表于 08-04 11:43 ?1598次閱讀

    Nullmax自動(dòng)駕駛最新研究成果入選ICCV 2025

    Nullmax 在段式核心技術(shù)上的深厚積累與創(chuàng)新實(shí)力,尤其在
    的頭像 發(fā)表于 07-05 15:40 ?1810次閱讀
    Nullmax<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b><b class='flag-5'>自動(dòng)</b>駕駛最新研究成果入選ICCV 2025

    為什么自動(dòng)駕駛大模型有黑盒特性?

    、激光雷達(dá)數(shù)據(jù))映射到控制輸出(如方向盤轉(zhuǎn)角、加速度、制動(dòng)等),以深度神經(jīng)網(wǎng)絡(luò)為核心,打通了從視覺駕駛行為的完整鏈條。它也代表了自動(dòng)駕駛從“規(guī)則驅(qū)動(dòng)”向“數(shù)據(jù)驅(qū)動(dòng)”的躍遷,展現(xiàn)了極高的潛力。當(dāng)然這種結(jié)構(gòu)也天然地帶來了
    的頭像 發(fā)表于 07-04 16:50 ?885次閱讀
    為什么<b class='flag-5'>自動(dòng)</b>駕駛<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>大模型有黑盒特性?

    文帶你厘清自動(dòng)駕駛架構(gòu)差異

    [首發(fā)于智駕最前沿微信公眾號]隨著自動(dòng)駕駛技術(shù)飛速發(fā)展,智能駕駛系統(tǒng)的設(shè)計(jì)思路也經(jīng)歷了從傳統(tǒng)模塊化架構(gòu)大模型轉(zhuǎn)變。傳統(tǒng)模塊化架構(gòu)將感
    的頭像 發(fā)表于 05-08 09:07 ?1032次閱讀
    <b class='flag-5'>一</b>文帶你厘清<b class='flag-5'>自動(dòng)</b>駕駛<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>架構(gòu)差異

    自動(dòng)駕駛中基于規(guī)則的決策和大模型有何區(qū)別?

    自動(dòng)駕駛架構(gòu)的選擇上,也經(jīng)歷了從感知、決策控制、執(zhí)行的三段式架構(gòu)到現(xiàn)在火熱的大模型,尤其是在2024年特斯拉推出FSD V12后,各車企更是陸續(xù)推出自家的
    的頭像 發(fā)表于 04-13 09:38 ?3738次閱讀
    <b class='flag-5'>自動(dòng)</b>駕駛中基于規(guī)則的決策和<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>大模型有何區(qū)別?

    小米汽車智駕技術(shù)介紹

    后起之秀,小米在宣布造車前被非常多的人質(zhì)疑,但在“真香”定律下,小米創(chuàng)下了很多友商所不能及的成就。作為科技企業(yè),小米也在智能駕駛領(lǐng)域也不斷研發(fā)及突破,并推送了自動(dòng)駕駛系統(tǒng)。 小米
    的頭像 發(fā)表于 03-31 18:17 ?5275次閱讀
    小米汽車<b class='flag-5'>端</b><b class='flag-5'>到</b><b class='flag-5'>端</b>智駕技術(shù)介紹