1.环境配置
安装anaconda: 直接在anaconda.com官网里面下载然后安装
Anaconda的理解(到底需不需要它呢)?
总结:Anaconda 是一个“环境+包管理平台”,帮你快速配置、隔离、管理深度学习环境。
但深度学习不用 Anaconda 也完全可以跑,它只是帮你“更方便、更省心”地管理环境而已。
本质:一套 Python 发行版 + 虚拟环境管理器 + 常用科学计算库(numpy、pandas、torch 等)。
优点:“东西很全”
缺点:(尤其是在ubuntu环境)
修改 PATH 后容易“劫持”系统 Python;与 ROS、系统 Python 或 apt 安装的软件冲突严重
查看显卡信息和对应的可使用的最高等级的cuda版本:nvidia-smi
然后通过conda创建env:conda create -n envpytorch python=3.12.07
激活虚拟环境: conda activate envpytorch
配置环境: pip install -r requirements.txt
安装pytorch(Cuda会跟着一起安装下来): 直接在pytorch.com官网的指令在对应的虚拟环境里面安装
测试在env里是否安装成功pytorch: python; import torch; torch.cuda.is_available()-->True;
在vscode右下角可以选择当前文件使用的解释器,选择env\envpytorch解释器就行
2.使用tips
dir()可以查看某个包里面含有什么东西,如dir(torch)
help()解释某个函数的用法,如help(torch.cuda.is_available)
3.基础使用(多去pytorch.com里面的Doc里面查看用法,或者pytorch各种用法doc)
- tensorboard工具库,可以用来展示训练进程的图像:from torch.utils.tensorboard import SummaryWriter; 在终端查看:tensorboard --logdir="logs"
- torchvision.datasets.CIFAR10()可以获取pytorch官方的一些数据集,通过__getitem__查看这个实例化对象里面获取的是什么一般为img, target。(train_dataset[0])
train_dataset = torchvision.datasets.CIFAR10(root="./cifar10_dataset", train=True, transform=torchvision.transforms.ToTensor(), download=True) # ctrl+P可查看所需参数 -
dataloader用来批量抓取数据集数据:from torch.utils.data import DataLoader
test_dataset_dataloader = DataLoader(test_dataset, batch_size=64, shuffle=True, drop_last=True, num_workers=0) writer = SummaryWriter(log_dir="./logs") for epoch in range(2): writer_step = 0 for datas in test_dataset_dataloader: imgs, targets = datas writer.add_images("epoch:{}".format(epoch), imgs, global_step=writer_step) writer_step += 1 writer.close()
4. argparse()模块的使用
argparse 是 Python 标准库中专门用来处理 命令行参数 的模块
用途:可以通过命令行运行脚本时传入不同的参数,而不需要手动改代码,比如:
python train.py --epochs 50 --batch-size 16 --use-rgb 1
程序通过 argparse 自动解析这些参数,把它们变成可以用的变量。
# 基本使用架构
import argparse
def parse_args():
parser = argparse.ArgumentParser(description='说明你这个程序是干嘛的')
# 添加参数
parser.add_argument('--参数名', type=类型, default=默认值, help='参数说明')
# 解析参数
args = parser.parse_args()
return args
#使用示例
import argparse
def parse_args():
parser = argparse.ArgumentParser(description="Train network")
# normal argument
parser.add_argument('--network', type=str, default='grconvnet3',
help='Network name in inference/models')
parser.add_argument('--input-size', type=int, default=224,
help='Input image size for the network')
# bool flag # 只要你在命令行中写了 --vis,它就变成 True; 不写就为False
parser.add_argument('--vis', action='store_true',
help='Visualiable the training process')
args = parser.parse_args()
return args
if __name__ == "__main__":
args = parse_args()
print(args.input_size) # 注意,这里是下划线
# 命令行中
bash
python train.py --vis --input-size 224 # 注意,这里是中划线
# 原因:因为 Python 中的变量名不能包含 -,所以 argparse 会自动把 --input-size 转成 input_size 这个属性名。
5.关于运行ros2与conda冲突的案例
在使用conda创建的venv环境下运行一个包含gazebo的项目时候报错:
client-8] gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: typename boost::detail::sp_member_access<T>::type boost::shared_ptr<T>::operator->() const [with T = gazebo::rendering::Camera; typename boost::detail::sp_member_access<T>::type = gazebo::rendering::Camera*]: 断言 "px != 0" 失败。
[ERROR] [gzclient-8]: process has died [pid 69106, exit code -6, cmd 'gzclient --gui-client-plugin=libgazebo_ros_eol_gui.so'].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) aga
而通过conda deactivate退出来再用系统环境运行的时候是没错的。
分析:
这是典型的 Gazebo GUI(gzclient)在 Conda 环境下 crash 的情况。原因和 Python 环境无关,而是和 Conda 对系统库(尤其是 Qt / OpenGL / Boost)的隔离 有关。
原因分析
Gazebo GUI 依赖系统的 Qt、OpenGL、Boost 库。
Conda 环境可能带了自己版本的 libboost、libGL 或 Qt,和系统 Gazebo 的库冲突。
报错信息:gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: ... 断言 "px != 0" 失败。
表明 Boost smart_ptr 在访问渲染 Camera 时出错,典型是 ABI 不匹配 / 多版本冲突。
在系统环境下没问题,说明系统的 Qt / Boost / Gazebo 库正常。
Conda 环境隔离了系统库,可能:
加载了 Conda 自带的 libboost、libGL、libQt5Core.so 等
这些库版本和 ROS2 / Gazebo 预编译包不兼容 → gzclient crash
建议:
-
对于 ROS2 + Gazebo GUI,不要在 Conda 环境里运行 gzclient,用系统 Python/系统库环境运行 Gazebo。
-
Conda 环境可以用来运行你自己的 ROS2 节点、YOLO 等 Python 包,但不要让它接管系统的 GUI 库。
11万+

被折叠的 条评论
为什么被折叠?



