国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

公司起名字大全免費取名隨州seo

公司起名字大全免費取名,隨州seo,電子工程師資格證,wordpress多平臺自動提交AI Deep Reinforcement Learning Autonomous Driving(深度強化學習自動駕駛) 背景介紹研究背景研究目的及意義項目設計內容算法介紹馬爾可夫鏈及馬爾可夫決策過程強化學習神經網絡 仿真平臺OpenAI gymTorcs配置GTA5 參數選擇行動空間獎勵函數 環(huán)境及軟件…

AI Deep Reinforcement Learning Autonomous Driving(深度強化學習自動駕駛)

  • 背景介紹
  • 研究背景
  • 研究目的及意義
  • 項目設計內容
    • 算法介紹
      • 馬爾可夫鏈及馬爾可夫決策過程
      • 強化學習
      • 神經網絡
    • 仿真平臺
      • OpenAI gym
      • Torcs配置
      • GTA5
    • 參數選擇
      • 行動空間
      • 獎勵函數
    • 環(huán)境及軟件包
    • 步驟
    • 可參考項目
    • 參考

背景介紹

自動駕駛技術的興起:自動駕駛技術旨在將車輛的駕駛功能部分或完全交給計算機系統(tǒng),以提高道路安全性、減少交通擁堵,并提供更多的便利性。這需要車輛能夠根據環(huán)境和情境做出智能的決策,遵循交通規(guī)則并與其他車輛和行人進行協(xié)同。

深度學習的崛起:深度學習是一種機器學習技術,它使用神經網絡模型來學習數據的抽象特征表示。這些模型具有多層神經元,可以自動從大量數據中提取特征,因此被廣泛用于圖像、語音、自然語言處理等領域。

強化學習的應用:強化學習是一種讓智能體通過與環(huán)境交互來學習最優(yōu)策略的方法。在自動駕駛中,車輛可以被視為智能體,道路和交通環(huán)境則為其環(huán)境。強化學習能夠使車輛從試錯中學習,逐步優(yōu)化駕駛策略。

深度強化學習的結合:深度強化學習將深度學習和強化學習相結合,使用深度神經網絡來近似智能體的策略或值函數。這使得自動駕駛車輛能夠從大量的傳感器數據中提取信息,并根據車輛的狀態(tài)和環(huán)境來做出決策,比如加速、減速、轉向等。

挑戰(zhàn)與機遇:盡管深度強化學習在自動駕駛領域取得了顯著進展,但仍然面臨著許多挑戰(zhàn)。其中包括安全性、決策的解釋性、數據效率等問題。然而,借助深度強化學習,自動駕駛系統(tǒng)能夠逐漸提升其決策能力和安全性,為未來的智能交通做出貢獻。

鑒于自動駕駛可能從根本上改變機動性和交通運輸方式,因此自動駕駛技術已經引起了研究界和企業(yè)的高度重視。目前,大部分方法都集中在使用帶注釋的3D幾何地圖來定義駕駛行為的形式邏輯上。然而,這種方法的擴展性可能存在問題,因為它嚴重依賴于外部映射基礎設施,而不是主要基于對本地場景的理解。為了實現真正無處不在的自動駕駛技術,業(yè)界正在提倡驅動機器人系統(tǒng)的處理能力和導航,這種導航方式不依賴于地圖和明確的規(guī)則,就像人類在全面理解當前環(huán)境后,能夠簡單地進行更高層次的方向控制(例如,遵循道路路徑指令)。最近在這個領域的研究表明,在模擬真實道路情境中,利用GPS進行粗定位和激光雷達對本地場景的理解是可行的。近年來,強化學習(Reinforcement Learning,簡稱RL)作為機器學習領域的重要分支,專注于解決馬爾科夫決策問題(Markov Decision Process,簡稱MDP)。這種方法使代理能夠在與環(huán)境互動的過程中選擇行動,以最大化某種獎勵函數。在模擬環(huán)境中,例如電腦游戲,以及機器人操作中的簡單任務,強化學習顯示出巨大的潛力,有望取得類似超人級別的成就,類似于游戲或國際象棋等情境中。

在這里插入圖片描述
我們覺得強化學習的通用性使其成為自動駕駛的一個有價值的框架。最為重要的是,它提供了一種糾正機制,以改進自動駕駛在學習后的行為表現。然而,強化學習作為一種專注于解決復雜問題的通用智能方法,在處理時序問題方面具有優(yōu)勢。而自動駕駛作為典型的"工業(yè)人工智能"領域,涉及感知、決策和控制這三大環(huán)節(jié),必須考慮各種極端工況和場景。在其中,感知過程中環(huán)境要素異常復雜,而駕駛任務則多變且靈活,很多情況并非時序問題。因此,僅依靠強化學習來解決這些問題可能相當具有挑戰(zhàn)性。在這方面,深度學習(Deep Learning,簡稱DL)扮演了重要角色,例如常見的YOLO及其衍生版本等。強調的是,對于自動駕駛來說,僅有在決策層面,模型驅動的強化學習(Model Based RL)與基于值的強化學習(Value Based RL)相互協(xié)同,基于規(guī)則的構建被用來處理大多數常見駕駛場景,但需要不斷地進行設計與更新;強化學習則用來解決那些規(guī)則庫無法涵蓋的極端場景和問題。對于一些專注于解決方案的科技公司而言,更傾向于選擇深度強化學習(Deep Reinforcement Learning,簡稱DRL)方法。這種方法將深度學習的感知能力與強化學習的決策能力相結合,使其能夠直接根據輸入信息進行控制。這種方法更貼近人類的思維方式,也是更具成熟解決方案潛力的體現。

研究背景

在2015年,DeepMind團隊提出了深度Q網絡(Deep Q-network,簡稱DQN)。DQN以一種全新的方式進行學習,它僅使用原始游戲圖像作為輸入,摒棄了對人工特征的依賴,實現了端到端的學習方法。DQN在創(chuàng)新性地將深度卷積神經網絡與Q-learning相融合的基礎上,在Atari視頻游戲中取得了與人類玩家相媲美的控制效果。通過應用經驗回放技術以及引入固定目標Q網絡,DQN成功地解決了使用神經網絡進行非線性動作值函數逼近時可能出現的不穩(wěn)定和發(fā)散問題,極大地增強了強化學習的適用性。

經驗回放技術不僅提高了歷史數據的有效利用率,同時通過隨機采樣打破了數據之間的相關性。固定目標Q網絡的引入進一步穩(wěn)定了動作值函數的訓練過程。此外,通過截斷獎賞信號并對網絡參數進行正則化,DQN限制了梯度的范圍,從而實現了更為魯棒的訓練過程。下方展示了DQN網絡的結構圖:

在這里插入圖片描述
在2016年的Ben Lua項目中,演示了如何運用深度確定性政策梯度算法(DDPG,Deep Deterministic Policy Gradient)——這是由DeepMind的Lillicrap等人在2016年提出的方法。該方法核心思想在于將卷積神經網絡作為策略函數μ和Q函數的近似模型,即策略網絡和Q網絡。通過深度學習技術對這些神經網絡進行訓練。

他們將這一方法與Keras框架結合,應用于TORCS(The Open Racing Car Simulator,開放賽車模擬器),這是一個富有趣味性的AI賽車游戲和研究平臺。當時,TORCS被視為出色的駕駛仿真平臺,因為借助這個仿真環(huán)境,我們可以觀察神經網絡隨著時間推移如何進行學習,并檢驗其學習過程。通過在這一仿真環(huán)境中進行實驗,我們可以更輕松地理解自動駕駛中的機器學習技術。

在這里插入圖片描述

英國自動駕駛初創(chuàng)公司Wayve在2018年公布了其使用Actor-Critic強化學習框架快速訓練駕駛策略的論文 。從隨機初始化的參數中,他們的模型能夠在少量使用單目圖像作為輸入的訓練片段中學習車道跟蹤策略,采用的自動駕駛框架,擺脫了對定義的邏輯規(guī)則、映射和直接監(jiān)督的依賴。
在這里插入圖片描述

研究目的及意義

真正的自動駕駛汽車(即能夠在任何要求的環(huán)境中安全駕駛)的關鍵是更加重視關于其軟件的自學能力。換句話說,自動駕駛汽車首先是人工智能問題,需要一個非常具體的機器學習開發(fā)技能。而強化學習是機器學習的一個重要分支,是多學科多領域交叉的一個產物,它的本質是解決決策(decision making)問題,即自動進行決策,并且可以做連續(xù)決策。通過搭建仿真環(huán)境,設計強化學習框架,并且無需 3D 地圖,也無需規(guī)則編程,讓汽車從零開始在短時間內學會在模擬真實駕駛環(huán)境中自動駕駛。

  • ? 仿真駕駛環(huán)境的個性化搭建/復雜環(huán)境對代理算法的挑戰(zhàn)研究:討論如何設置系統(tǒng),以便在現實世界的車輛上高效、安全地學習駕駛;
  • ? 新環(huán)境中,為了快速探索全圖的策略討論研究,如數據增強方面:通過連續(xù)深度強化學習算法,僅使用車載計算,在幾個短視頻中學習駕駛一輛模擬真實世界的自動駕駛汽車;
  • ? 強化學習算法框架研究,根據不同環(huán)境觀測維度精確設計底層框架和損失函數以及獎勵機制:算法基于model- based VS model-
    free的有效性對比。

項目設計內容

算法介紹

馬爾可夫鏈及馬爾可夫決策過程

馬爾可夫鏈(Markov Chain):
在這里插入圖片描述
描述狀態(tài)轉移可以用狀態(tài)轉移矩陣:
在這里插入圖片描述
表示agent在st這個狀態(tài)下的時候到下一個狀態(tài)的概率:
在這里插入圖片描述
馬爾可夫獎勵決策過程(Markov Decision Reward Process, MDRP):MDRP = Markov Chain + reward

與馬爾科夫鏈相比,多了一個獎勵函數:
在這里插入圖片描述
到達某個狀態(tài)后,可以獲得的獎勵,其獎勵的折扣因子, 折扣因子越大,Agent越關注未來的獎勵,而不僅僅只關注當前的利益:
在這里插入圖片描述
最終的獎勵為:
在這里插入圖片描述

強化學習

強化學習的目標是學習到策略,使得累計回報的期望值最大,即:
在這里插入圖片描述
為了便于求解最優(yōu)策略,引入值函數和動作狀態(tài)值函數來評價某個狀態(tài)和動作的優(yōu)劣。值函數的定義如下:
在這里插入圖片描述
動作狀態(tài)值函數定義為:
在這里插入圖片描述
解決值函數和動作狀態(tài)值函數的方法可以分為基于表的方法和基于值函數逼近的方法。在基于表的方法中,傳統(tǒng)的動態(tài)規(guī)劃、蒙特卡洛和時間差分(Temporal Difference,簡稱TD)算法都屬于這一類,其本質是構建一個Q(s,a)表格,其中行表示狀態(tài),列表示動作,通過迭代計算不斷更新表中的值。如下圖所示,上方的三個環(huán)境維度展示了在狀態(tài)較少時,使用Q表能夠容納這些維度,并且在實際決策時遍歷較小的表并不會引起明顯的時間延遲。

然而,當環(huán)境狀態(tài)數量龐大時,例如圍棋盤面狀態(tài)或機器人運動狀態(tài)等,狀態(tài)的數量變得無法計數,這時基于表的方法就無法應用。因此,基于值函數逼近的方法更適用于這些復雜環(huán)境。

在強化學習的眾多子算法中,分為兩大流派:model-based/off-policy 和 value-based/on-policy , 在我們這次的自動駕駛項目中,我們需要關注的是我們的動作是連續(xù)的還是離散問題。

當需要解決的問題是連續(xù)動作(如gym的carmountin-v0),則采取基于policy gradient的算法:DDPG,PPO,A3C等。

當需要解決的問題是離散動作(CarMountinCounts-v0)時,則可采取基于value的算法,如 Q-learning, DQN, A3C, PPO等。

Deep Q-Network的一大局限性是輸出/動作是離散的,而賽車中的轉向等動作是連續(xù)的。將DQN應用于連續(xù)域的一個明顯方法是對動作空間進行簡單的離散化。且容易遇到了維數的詛咒問題。例如,如果你將方向盤離散化,從-90度到+90度,每5度,加速度從0km到300km,每5km,你的輸出組合將是36個轉向狀態(tài)乘以60個速度狀態(tài),等于2160種可能的組合。如果你想讓機器人執(zhí)行一些非常專業(yè)的操作,比如需要對動作進行精細控制的腦外科手術,而天真的離散化將無法達到操作所需的精度,那么情況就會變得更糟。

所以,連續(xù)問題算法DDPG是不錯的選擇,具體哪個更適合自己搭建的仿真環(huán)境,需要經過實驗對比得出有效結論。

神經網絡

人工神經網絡的架構大致可分為兩大類。一類是前饋和遞歸神經網絡(RNN),前饋網絡采用單個輸入(例如游戲狀態(tài)的表示),并輸出每個可能動作的概率值。另一類是卷積神經網絡(CNN),它由可訓練的濾波器組成,適用于處理圖像數據,例如來自視頻游戲屏幕的像素。
在這里插入圖片描述
RNN 通常應用于時間序列數據,其中網絡的輸出取決于先前時間步驟的激活。除了網絡的先前隱藏狀態(tài)與下一個輸入一起反饋給網絡外,RNN 的訓練過程類似于前饋網絡。這就允許網絡通過記憶先前的激活而變得具有上下文感知,這在那種單個觀察不代表完整狀態(tài)的游戲中是非常有用的。對于視頻游戲,通常使用一堆卷積層,然后是循環(huán)層和完全連接的前饋層。

仿真平臺

OpenAI gym

gym是一個開發(fā)和比較強化學習算法的工具包。它對代理的結構沒有任何假設,并且與任何數值計算庫兼容,比如TensorFlow或Theano。gym的庫是一個測試問題的集合環(huán)境,你可以用它來解決你的強化學習算法。這些環(huán)境有一個共享的接口,允許編寫通用算法。
當python>=3.5時,可直接pip install gym
其駕駛環(huán)境有:MountainCarContinuous-v0(附上環(huán)境配置教程 ),MountainCar-v0 (附python code)
在這里插入圖片描述

Torcs配置

可以在TORCS中開發(fā)自己的智能車,TORCS提供了幾種可用的模式,但客戶端-服務器模式僅支持兩種模型:Practice和Quick Race。其中Practice支持一輛車參加比賽,Quick Race支持多輛車參加比賽。TORCS是一個具有高度可移植性的賽車模擬器。它可作為普通的賽車游戲,同樣能做為賽車游戲和人工智能的研究平臺。它可運行在Linux(x86,AMD64,PPC),FreeBSD,Mac OS X和Windows之上。仿真功能包含簡單的損傷模型,碰撞,輪胎和車輪屬性(彈簧,減震器,剛度等),空氣動力學(地面效應,破壞等)及更多。
在這里插入圖片描述
在這里插入圖片描述

GTA5

Grand Theft Auto是由Rockstar Games開發(fā)的以犯罪為主題的世界著名游戲,其中駕駛模擬器被很多強化學習愛好者所使用。
在這里插入圖片描述

在這里插入圖片描述

參數選擇

行動空間

有人或許會認為駕駛本身囊括了一系列天然的動作,如加速、剎車、信號等。然而,強化學習算法應該在什么領域輸出呢?以節(jié)流閥為例,它可以被描述為離散的狀態(tài),要么是開要么是關,或者在某個范圍內如[0,1]的連續(xù)度量。另一種選擇是重新參數化節(jié)流閥的速度設定點,使其與經典控制器中設定點的輸出相匹配??傮w而言,在一個簡單的模擬器環(huán)境中,連續(xù)動作盡管可能更具挑戰(zhàn)性,卻提供了更加平滑的控制方式。這種情況下,可以采用二維行動空間,其中包括范圍在[-1, 1]內的轉向角度以及以km/h為單位的速度設定值。
在這里插入圖片描述
如圖為觀測空間,從應用問題來看,越復雜的問題,其觀測空間維度越高。

獎勵函數

獎勵函數的設計可以接近監(jiān)督學習給定的車道分類系統(tǒng),獎勵學習車道跟蹤可以建立在最小化預測距離車道中心,先前的研究 采用的方法。這種方法在規(guī)模上是有限的:系統(tǒng)只能與手工制作的獎勵背后的人類直覺一樣好。我們不采用這種方法。相反,我們將獎勵定義為前進速度并在違反交通規(guī)則時終止一段情節(jié),因此給定狀態(tài)V(st)的值對應于在違反交通規(guī)則前行駛的平均距離。一個可以識別的錯誤是代理可能會選擇避免更困難的操作,例如在英國向右轉(在美國向左)。命令條件獎勵可以在未來的工作中使用,以避免這種情況。

環(huán)境及軟件包

Python軟件及依賴包
Python=3.6-3.8
Opencv
Tensorflow-gpu
Keras
Numpy
OpenAI gym

步驟

  1. ? 根據系統(tǒng)配置python軟件和環(huán)境:推薦miniconda3 + pycharm
  2. ? 配置openAI gym 和深度學習(tensorflow+keras or torch)虛擬環(huán)境
  3. ? 駕駛平臺搭建和環(huán)境設置
  4. ? 強化學習框架設計,獎勵函數設計
  5. ? 駕駛渲染記錄數據供強化學習訓練
  6. ? 訓練及驗證結論
  7. ? 論文寫作

可參考項目

OpenAI gym: https://github.com/andywu0913/OpenAI-GYM-CarRacing-DQN
Torcs平臺:https://github.com/yanpanlau/DDPG-Keras-Torcs
GTA平臺:https://github.com/Sentdex/pygta5

參考

https://deepmind.com/research/publications/human-level-control-through-deep-reinforcement-learning
https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html Kendall, A. , et al. “Learning to Drive in a Day.” (2018)
https://gym.openai.com/envs/MountainCar-v0
https://www.jianshu.com/p/915671bf670b?utm_campaign=shakespeare
https://gym.openai.com/envs/MountainCar-v0/
https://zhuanlan.zhihu.com/p/57648478
https://github.com/Sentdex/pygta5

基于openAI gym 的mountincar-v0的強化學習code入門

#!/usr/bin/python
# -*- encoding:utf-8 -*-
# @author: cy
# @time: 2021/7/8 下午3:03
# @project_name: PyCharm
# @file: car.py
'''
import gym
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# configuration parameters for whole step
seed=42
gamma=0.99 #discount
max_steps_per_episode=10000# env
env=gym.make('MountainCar-v0')
# env=gym.make('CartPole-v0')
# env.seed(seed)
env.reset()
action = env.action_space.sample()
# print('action',action)
# action = env.action_space
# state = tf.convert_to_tensor(state)
# state = tf.expand_dims(state, 0)
for i in range (1000):# action = np.random.choice(2, p=np.squeeze(1))env.render()# action = np.random.uniform(action)abs,r,done,info=env.step(action)# print(abs)# print(done)# print(info)env.close()
'''import numpy as np
import gym
from gym import wrappersoff_policy = True  # if True use off-policy q-learning update, if False, use on-policy SARSA updaten_states = 40  # Discrete value
iter_max = 100
initial_lr = 1.0  # Learning rate
min_lr = 0.003
gamma = 0.99
t_max = 10000
eps = 0.1'''
observation state :(2,)
'''
def obs_to_state(env, obs):""" Maps an observation to state """# we quantify the continous state space into discrete spaceenv_low = env.observation_space.low  # !env_high = env.observation_space.high  # !env_dx = (env_high - env_low) / n_states  # state discretizationa = int((obs[0] - env_low[0]) / env_dx[0])  # '/'b = int((obs[1] - env_low[1]) / env_dx[1])# print('env_low:{}    env_high:{}   env_dx:{}  obs[0]:{}  obs[1]:{}  a:{}  b:{}'.format(env_low,env_high,env_dx,obs[0],obs[1],a,b))'''env_low:[-1.2  -0.07]    env_high:[0.6  0.07]   env_dx:[0.045  0.0035]  obs[0]:-0.8533420682038003  obs[1]:-0.03403819682165786  a:7  b:10'''return a, bdef run_episode(env, policy=None, render=False):obs = env.reset()  # reset envtotal_reward = 0step_idx = 0for _ in range(t_max):  # we know it can end the game in 10000 stepif render:env.render()  # fresh envif policy is None:action = env.action_space.sample()  # initialize actionelse:  # policy chose , the action is fixeda, b = obs_to_state(env, obs)  # it comes from the number34 codeaction = policy[a][b]obs, reward, done, _ = env.step(action)total_reward += gamma ** step_idx * rewardstep_idx += 1if done:breakreturn total_rewardif __name__ == '__main__':env_name = 'MountainCar-v0'  # the name of id can searchenv = gym.make(env_name)  # make a envenv.seed(0)  # let the resule can be samenp.random.seed(0)  # let the resule can be sameif off_policy == True:  # confirm the policyprint('----- using Q Learning -----')else:print('------ using SARSA Learning ---')q_table = np.zeros((n_states, n_states, 3))  # 3 action,and the dimensional of state is 3for i in range(iter_max):  # the ep is 5000obs = env.reset()  # reset the envtotal_reward = 0  # 0 reward## eta: learning rate is decreased at each stepeta = max(min_lr, initial_lr * (0.85 ** (i // 100)))for j in range(t_max):  # the ep is 10000,after we need reset enva, b = obs_to_state(env, obs)  # State value after discretizationif np.random.uniform(0, 1) < eps:action = np.random.choice(env.action_space.n)  # such as 0,1,2else:action = np.argmax(q_table[a][b])obs, reward, done, _ = env.step(action)total_reward += reward# update q tablea_, b_ = obs_to_state(env, obs)if off_policy == True:# use q-learning update (off-policy learning)q_table[a][b][action] = q_table[a][b][action] + eta * (reward + gamma * np.max(q_table[a_][b_]) - q_table[a][b][action])else:# use SARSA update (on-policy learning)# epsilon-greedy policy on Q againif np.random.uniform(0, 1) < eps:action_ = np.random.choice(env.action_space.n)else:action_ = np.argmax(q_table[a_][b_])q_table[a][b][action] = q_table[a][b][action] + eta * (reward + gamma * q_table[a_][b_][action_] - q_table[a][b][action])if done:breakif i % 200 == 0:  # print learning info per 200 stepsprint('Iteration #%d -- Total reward = %d.' % (i + 1, total_reward))solution_policy = np.argmax(q_table, axis=2)solution_policy_scores = [run_episode(env, solution_policy, False) for _ in range(100)]print("Average score of solution = ", np.mean(solution_policy_scores))# Animate itfor _ in range(2):run_episode(env, solution_policy, True)env.close()
http://m.aloenet.com.cn/news/33879.html

相關文章:

  • wordpress導航添加廣州各區(qū)正在進一步優(yōu)化以下措施
  • 陜西省建設廳三類人員報名網站哪里可以免費推廣廣告
  • 找人做網站服務器不是自己的怎么辦十大微商推廣平臺
  • 外貿網站案例成都百度業(yè)務員電話
  • 網站建設在哪個軟件下做百度灰色關鍵詞排名技術
  • 做網站的心得調價智能關鍵詞軟件
  • 網站建設評價標準百度快速查詢
  • 電影網站盜鏈怎么做seo是搜索引擎營銷嗎
  • 重慶二級建造師證書查詢廣西seo經理
  • 成都的網站建設公司哪家好百度網站禁止訪問怎么解除
  • 深圳建設網站排名剛剛濟南發(fā)通知
  • 深圳網站快速備案淄博百度推廣
  • led燈外貿網站建設百度關鍵詞刷排名軟件
  • 做網站外國的服務器怎么做網絡廣告推廣
  • 網站策劃模板怎樣做網站推廣
  • 怎么與其他網站做友情鏈接免費收錄網站
  • 盤錦做網站專家免費seo快速收錄工具
  • 建設企業(yè)網站對公百度網盤登錄入口官網
  • 在線設計平臺有什么用長春seo網站優(yōu)化
  • 做ppt找素材的網站網絡營銷包括幾個部分
  • 企業(yè)網站優(yōu)化電話黑帽友情鏈接
  • 四川省建設廳網站官網建立網站需要多少錢
  • 成都的網站建設開發(fā)公司怎么優(yōu)化關鍵詞
  • 專做蔬菜大棚的網站推廣策劃方案
  • 創(chuàng)建門戶網站網絡營銷的特點有哪些
  • 網站上的qq咨詢怎么做seo在線外鏈
  • 寧波網站推廣廠家郴州網絡推廣公司排名
  • 濟南網站建設代理銷售系統(tǒng)
  • 深圳商城網站哪家做的好外貿全網營銷推廣
  • 網站備案核實企業(yè)軟文范例