(深度估计学习)STEPS复现Win11

论文链接:https://github.com/ucaszyp/STEPS?tab=readme-ov-file/
讲解链接:https://air.tsinghua.edu.cn/info/1008/2051.htm

1. 系统配置

本人系统:Win11 CUDA11.1 python3.7(下面的教程是安装CUDA12.2的)

这里附上几个CUDA安装链接:

  1. 安装CUDA和CudaNN
  2. CUDA Toolkit 12.2 Update 2 Downloads
  3. cuDNN Archive,这里我选择的:Download cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x
  4. windows下切换不同版本cuda

2. 拉取代码,配置环境

首先,克隆 github 仓库

git clone git@github.com:ucaszyp/STEPS.git
cd STEPS

下载权重

https://drive.google.com/drive/folders/16bqgIYBDg4dd9eGFWYL6Cyp5xCs4-DbI

创建 conda 环境。

conda create -n STEPS python=3.7 
conda activate STEPS  
pip install torch==1.8.0+cu111 torchvision==0.9.0 torchmetrics==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html 
pip install pytorch-lightning==1.6.4
pip install -r requirements.txt

4.数据集下载:

训练数据集-Nuscenes

作者只用了package1、2、5、9、10,下载着五个就行
全网首发 nuScenes数据集(百度网盘 + 迅雷网盘) + 下载方法

测试数据集-Nuscenes

https://drive.google.com/drive/folders/1n2WsaGtB-tRiPyee-vAYF6Cd7EZr4RGe
在这里插入图片描述

权重下载

https://drive.google.com/drive/folders/16bqgIYBDg4dd9eGFWYL6Cyp5xCs4-DbI
在这里插入图片描述
在这里插入图片描述

ResNet 预训练权重下载

由于在测试的时候报了一个缺少resnet预训练权重的错误,我们这里提前将其下载好
选择一个连接点进去下载就可以了,将其放到Res_Models下面

'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',

在这里插入图片描述

5.Test

数据组织

下载好的test_ns数据选择color或者color_denoise放入data/nuScenes-Night/test
在这里插入图片描述
注意文件位置不要放错了,不然报错很多

并修改datasets/common.py下的数据:

在这里插入图片描述

修改如下两处地方的代码:

加上 .split(“__”)[2]
在这里插入图片描述
因为作者给的gt没有前缀
在这里插入图片描述

运行代码:

sh scripts/test_ns.sh
#!/usr/bin/env bash

CUDA_VISIBLE_DEVICES=0 python test_nuscenes_disp.py night steps_ns best/ns_best_denoise.ckpt --test 1
cd evaluation
python eval_nuscenes.py night
cd ..
python show_predictions.py
# done

scripts/test_ns.sh中我添加了一个show_predictions.py让他输出predictions.npy中的内容,但是效果不尽人意,怀疑epoch=11太少了?所以效果不好?求求大佬解答!

# show_predictions.py

import os.path

import numpy as np
import numpy as np
from plyfile import PlyData, PlyElement
import cv2
import os

file_path = "evaluation/ns_result/predictions.npy"
output_dir = "output"
os.makedirs(output_dir, exist_ok=True)

# 加载 .npy 文件
data = np.load(file_path)  # [图片个数,深度图长,深度图宽]

# 循环遍历每一个深度图
for i in range(len(data)):
    depth_image = data[i]
    # 如果深度图的值需要归一化到16位图像的范围
    if depth_image.dtype != np.uint16:
        # 归一化到16位的范围
        depth_image = ((depth_image - depth_image.min()) / (depth_image.max() - depth_image.min()) * 65535).astype(
            np.uint16)
        depth_path = os.path.join(output_dir, str(i))
        cv2.imwrite(f"{depth_path}.png", depth_image)

运行结果

在这里插入图片描述

6.Train

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
策略梯度法(Policy Gradient)是一种强化学习算法,它属于深度强化学习的范畴。在深度强化学习中,策略梯度法是一种基于策略的方法,它通过对策略进行参数化,并使用梯度的方法来更新策略,从而实智能体的学习和决策。因此,策略梯度法是深度强化学习中非常重要的一种算法。 下面是一个使用策略梯度法解决CartPole问题的Python代码示例: ```python import gym import numpy as np import tensorflow as tf # 定义策略网络 class PolicyNetwork(tf.keras.Model): def __init__(self, num_actions): super(PolicyNetwork, self).__init__() self.dense1 = tf.keras.layers.Dense(32, activation='relu') self.dense2 = tf.keras.layers.Dense(num_actions, activation='softmax') def call(self, inputs): x = self.dense1(inputs) x = self.dense2(x) return x # 定义策略梯度算法 class PolicyGradient: def __init__(self, num_actions, learning_rate=0.01, gamma=0.99): self.num_actions = num_actions self.learning_rate = learning_rate self.gamma = gamma self.policy_network = PolicyNetwork(num_actions) self.optimizer = tf.keras.optimizers.Adam(learning_rate) def get_action(self, state): state = np.expand_dims(state, axis=0) action_probs = self.policy_network(state) action = np.random.choice(self.num_actions, p=np.squeeze(action_probs)) return action def update_policy(self, states, actions, rewards): with tf.GradientTape() as tape: action_probs = self.policy_network(states) actions_one_hot = tf.one_hot(actions, self.num_actions) action_probs = tf.reduce_sum(actions_one_hot * action_probs, axis=1) discounted_rewards = self._get_discounted_rewards(rewards) loss = -tf.reduce_mean(tf.math.log(action_probs) * discounted_rewards) grads = tape.gradient(loss, self.policy_network.trainable_variables) self.optimizer.apply_gradients(zip(grads, self.policy_network.trainable_variables)) def _get_discounted_rewards(self, rewards): discounted_rewards = np.zeros_like(rewards) running_total = 0 for i in reversed(range(len(rewards))): running_total = running_total * self.gamma + rewards[i] discounted_rewards[i] = running_total return discounted_rewards # 定义环境和训练参数 env = gym.make('CartPole-v0') num_actions = env.action_space.n policy_gradient = PolicyGradient(num_actions) num_episodes = 1000 max_steps_per_episode = 1000 # 训练策略网络 for episode in range(num_episodes): state = env.reset() episode_rewards = [] for step in range(max_steps_per_episode): action = policy_gradient.get_action(state) next_state, reward, done, _ = env.step(action) episode_rewards.append(reward) if done: break state = next_state policy_gradient.update_policy( states=np.array([state]), actions=np.array([action]), rewards=np.array(episode_rewards) ) if episode % 100 == 0: print("Episode {}/{}: Average reward = {}".format( episode, num_episodes, np.mean(episode_rewards) )) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值