日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機(jī)站
  • 小程序

    汽車測試網(wǎng)

  • 公眾號
    • 汽車測試網(wǎng)

    • 在線課堂

    • 電車測試

小白都會玩的自動駕駛算法

2018-09-17 09:57:04·  來源:Ethon 九三智能控  
 
今天,我們介紹一個(gè)可實(shí)現(xiàn)自動駕駛的簡單算法。本算法是在Udacity的Self-Driving Car Simulator模擬器環(huán)境下開發(fā),將攝像頭的圖像輸入到深度學(xué)習(xí)模型中,可以讓汽車學(xué)會如何自動運(yùn)行。在模擬器中,我們從三個(gè)不同的視角創(chuàng)建了1551個(gè)畫面,同時(shí)記錄了車輛在517個(gè)不同狀態(tài)下的轉(zhuǎn)角、速度、油門和剎車等數(shù)據(jù)。本算法是在keras
今天,我們介紹一個(gè)可實(shí)現(xiàn)自動駕駛的簡單算法。本算法是在Udacity的Self-Driving Car Simulator模擬器環(huán)境下開發(fā),將攝像頭的圖像輸入到深度學(xué)習(xí)模型中,可以讓汽車學(xué)會如何自動運(yùn)行。



在模擬器中,我們從三個(gè)不同的視角創(chuàng)建了1551個(gè)畫面,同時(shí)記錄了車輛在517個(gè)不同狀態(tài)下的轉(zhuǎn)角、速度、油門和剎車等數(shù)據(jù)。

本算法是在keras環(huán)境下開發(fā)的。首先,將數(shù)據(jù)劃分為訓(xùn)練集和驗(yàn)證集。

1def load_data():
2 data_df = pd.read_csv(os.path.join(os.getcwd(),data_dir, 'driving_log.csv'), names=['center', 'left', 'right', 'steering', 'throttle', 'reverse', 'speed'])
3 X = data_df[['center', 'left', 'right']].values
4 y = data_df['steering'].values
5 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
6 return X_train, X_test, y_train, y_test

然后,我們進(jìn)行模型的創(chuàng)建。模型包含5個(gè)卷積層、1個(gè)Dropout層和4個(gè)壓縮層(Dense layer)。

1def build_model():
2 model = Sequential()
3 model.add(Lambda(lambda x: x/127.5-1.0, input_shape=INPUT_SHAPE))
4 model.add(Conv2D(24, kernel_size=(5, 5),strides=(2,2) ,activation='elu'))
5 model.add(Conv2D(36, kernel_size=(5, 5),strides=(2,2) ,activation='elu'))
6 model.add(Conv2D(48, kernel_size=(5, 5),strides=(2,2),activation='elu'))
7 model.add(Conv2D(64, kernel_size=(3, 3), activation='elu'))
8 model.add(Conv2D(64, kernel_size=(3, 3), activation='elu'))
9 model.add(Dropout(0.5))
10 model.add(Flatten())
11 model.add(Dense(100, activation='elu'))
12 model.add(Dense(50, activation='elu'))
13 model.add(Dense(10, activation='elu'))
14 model.add(Dense(1))
15 #model.summary()
16 return model

整個(gè)模型只輸出一個(gè)值:車輛轉(zhuǎn)角(steering angle)。將訓(xùn)練圖像輸入模型前,我們需要先做些預(yù)處理。

首先,為了增加訓(xùn)練樣本數(shù),我們需要進(jìn)行數(shù)據(jù)增強(qiáng)處理:對已有圖像進(jìn)行翻轉(zhuǎn)、平移、增加隨機(jī)陰影或改變亮度等。

1image, steering_angle = choose_image(data_dir, center, left, right, steering_angle)
2image, steering_angle = random_flip(image, steering_angle)
3image, steering_angle = random_translate(image, steering_angle, range_x, range_y)
4image = random_shadow(image)
5image = random_brightness(image)

然后,我們對圖像進(jìn)行剪裁和重設(shè)大?。╮esize),以便輸入圖像能適合訓(xùn)練模型。

1def preprocess(image):
2 image = crop(image)
3 image = resize(image)
4 image = rgb2yuv(image)
5 return image
接下來,進(jìn)行訓(xùn)練:

1def train_model(model, X_train, X_valid, y_train, y_valid):
2 model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.001))
3
4 #Fits the model on data generated batch-by-batch by a Python generator.
5 model.fit_generator(batch_generator(data_dir, X_train, y_train, batch_size, True),
6 steps_per_epoch,
7 num_epochs,
8 verbose=1,
9 validation_data=batch_generator(data_dir, X_valid, y_valid, batch_size, False),
10 validation_steps=40
11 )

現(xiàn)在,我們獲得了訓(xùn)練好的模型。然后,利用一個(gè)簡單的服務(wù)器(socketio server)將模型預(yù)測的轉(zhuǎn)角實(shí)時(shí)的傳輸給模擬器。

1steering_angle = float(data["steering_angle"])
2throttle = float(data["throttle"])
3speed = float(data["speed"])
4image = Image.open(BytesIO(base64.b64decode(data["image"])))
5image = np.asarray(image)
6image = preprocess_data.preprocess(image)
7image = np.array([image])
8
9steering_angle = float(model.predict(image, batch_size=1))
10throttle = 1.0 - steering_angle ** 2 - (speed / speed_limit) ** 2
11
12#send prediction to the simulator
13send_control(steering_angle, throttle)

車輛的運(yùn)行情況如下:



可以看到,本算法實(shí)現(xiàn)了基本的自動駕駛功能,非常適合于初學(xué)者進(jìn)行嘗試。 
分享到:
 
反對 0 舉報(bào) 0 收藏 0 評論 0
滬ICP備11026917號-25