2021.03.18更新 上传仿真坏境和代码
由于config文件忘记上传了,内容直接贴在文末啦。
注意:因为加了opencv目标跟踪的 CSR-DCF 函数,所以第一次跑代码要在显示窗口上手动圈一下要跟踪的小车。(圈的不好会影响 CSR-DCF 的效果)
网络框架
vrep仿真环境
训练结果
不同的小车运动速度 实验结果
不同的小车运动速度 不同的环境 实验结果
2020.07.01更新 历史新突破:loss收敛,reward收敛
问题:智能体在训练后期只执行一个动作,也就是在不同的输入状态下,神经网络的参数、输出结果固定不变了。
我尝试的方法:
0、将输入进行归一化。img/255.0
1、将cnn的卷积核调整合适。因为输入图像是64*64的大小,而行人在相机视野里只占很小的一部分。但是我关注的不是图像的细节,而是行人在无人机的哪个方向,所以卷积核应该稍微大一点。(将3*3,stride=1调整为6*6,8*8,stride=2)
2、参数初始化。一般权重参数0.01均方差,0均值的高斯分布是万能的,不行就试更大的。偏差参数全0即可。
3、将relu激活函数换成了leaky_relu。relu梯度消失的问题。
4、增加神经网络深度。增加两层全连接层。
5、调整随机explore的概率。在之前的训练中,1000step左右loss就下降到0.5以内了,所以随机探索的概率是这样的:<200steps rate=0.9,保证有足够多的随机探索状态; 200-1000 由0.9下降到0.15;>1000steps rate保持0.15。
6、把value和advantage去了,化繁为简。
原始版本网络参数
新版本网络参数
结果展示:
无人机跟踪行人
最后保持在0.15左右
reward其实设计的不好,就是-distance
2020.06.30更新
经过好几个版本的修改,在6.25版本的前5000步,loss有了下降趋势。但是5000后又上升了我去
reward惨不忍睹:
2020.06.12更新
1、键盘控制无人机运动并保存图像、位置信息(Python)
code:
功能:
1、键盘 w s a d up down left right 八个按键控制无人机 向前 向后 向左 向右 上升 下降 左旋 右旋 \
2、记录与行人的距离、动作序号、图像
3、有前置摄像、下置摄像两个场景
2、前置摄像opencv行人识别
功能:将图像中的行人标出
缺点:模糊的、不完整的不能识别
3、DRQN训练无人机跟踪行人
代码:还在修改还在跑,仿真太慢了。
结果:上一阶段,前置摄像头的结果不太理想,我认为很大的原因是摄像头容易看不到行人。所以换了下置摄像头,
先放一个150局的结果图,reward有上升趋势,loss不收敛。继续改吧。
(内容不多,但是真的花了很多时间去研究vrep怎么用。感兴趣就坚持吧!)
config.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
""" parameters setting """
import numpy as np
restore = False
valid_actions = ['FWD','BCK','Left','Right','UP','DWN']#'UP','DWN','STOP','ROT_CW','ROT_CCW'
# rad/s (pioneer 3dx: 5.6 rad/s: ~ 0.56m/s) # similar to human's normal speed
wait_response = False # True: Synchronous response(too much delay)
valid_actions_dict = {valid_actions[0]: np.array([1, 0, 0]),
valid_actions[1]: np.array([-1, 0, 0]),
valid_actions[2]: np.array([0, 1, 0]),
valid_actions[3]: np.array([0,-1, 0]),
valid_actions[4]: np.array([0, 0, 0])}
# network
batch_size = 32 # How many experiences to use for each training step.
update_freq = 4 # How often to perform a training step.
gamma = .99 # Discount factor on the target Q-values
startE = 1 # Starting chance of random action
endE = 0.1 # Final chance of random action
path = "./DQN_trainedModel" # The path to save our model to.
annealing_steps = 10000. # How many steps of training to reduce startE to endE.
num_episodes = 500 # How many episodes of game environment to train network with.
pre_train_steps = 5000 # How many steps of random actions before training begins.
max_epLength = 50 # The max allowed length of our episode.
tau = 0.001 # Rate to update target network toward primary network
replay_memory = 50000
time_step = 0.05
best_distance = 3.5/2
il_steps = 1000000 # total imitation learning step
il_update_freq = 4