visual studio code python环境配置_visual-pushing-grasping环境配置及复现
0. 電腦硬件配置
ThinkpadE580-不帶獨立顯卡,這款電腦比較坑,有些包就是安裝不上去,比Thinkpad的T系列差多了(小吐一下),VPG的github地址貼一下
andyzeng/visual-pushing-grasping?github.com作者代碼可在CPU上直接跑,前提安裝的torch和torchvision與作者一致,這樣速度太慢,約150s一個循環。如果在GPU上跑,就要安裝高版本的torch,因為GPU和cuda版本相關,cuda又和torch版本有一定關聯
1. Pytorch安裝
Tsinghua Open Source Mirror
Tsinghua Open Source Mirror?mirrors.tuna.tsinghua.edu.cnbash anaconda文件名.sh使用如下命令可以將清華源添加到Anaconda倉庫
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes2. 然后使用conda創建python3.6的環境,vpg為環境名字
conda creat -n vpg python=3.63. 安裝pytorch,原文的pytorch版本太老,后來作者更新了安裝代碼,但是不建議使用,因為國內使用外網是一大限制,建議使用下面的代碼安裝:
Andy的VPG項目中pytorch安裝方法(不建議使用)pip --default-timeout=3600 install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision如果要安裝特定torch版本,或者采用Win或OS系統,可以參見官網這篇文章(包括cuda版本下的安裝)
PyTorch?s0pytorch0org.icopy.site使用上述辦法安裝的torch1.4.0,torchvision0.5.0(根據安裝時安裝源的版本確定的)
1.1 補充內容:pip安裝的幾個知識點,雖然沒使用,但是直覺告訴我應該可以用
- 將清華源設為 pip 默認源,如果報錯,升級pip
- 解決報錯 Could not find a version that satisfies the requirement torch
使用如下鏡像網站下載,可以先打開看看有沒有要安裝的包
http://pypi.doubanio.com/simple/?pypi.doubanio.com安裝的命令行如下:
pip install 安裝包名字 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com1.2 參考鏈接:
Could not find a version that satisfies the requirement tensorflow問題匯總+解決!!!
通過清華鏡像源加速下載pytorch--(pip版本)_人工智能_WannaSeaU的博客-CSDN博客
2. 其它包安裝
pip --default-timeout=3600 install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy scipy opencv-python matplotlib3. 代碼部分流程-training模式
- 運行main()參數 --is_sim --push_rewards --experience_replay --explore_rate_decay --save_visualizations
- 重啟仿真器 self.restart_sim()
- 設置虛擬相機 self.setup_sim_camera()
- 向仿真環境添加10個物體 self.add_objects() 通過函數vrep.simxCallScriptFunction放置物體,其中參數位置和姿態都是隨機的
- 初始化訓練 trainer = Trainer(method, push_rewards.....
- 創建保存數據的目錄 logger
- 檢查仿真環境是否正常 if is_sim: robot.check_sim()
- 獲取相機圖像 get_camera_data()
- 得到heightmap utils.get_heightmap()
- 保存images和heightmap logger.save_images/heightmap()
- 對heightmap應用2x scale
- 將經過旋轉后的color和depth圖像變換后送入定義的推和抓的網絡,得到記錄16次旋轉的output_prob, interm_feat
- 檢測兩幅圖像變化
- 計算訓練labels,然后后向傳播 trainer.backprop
- 對經驗回放采樣
- 保存模型 snapshot
- 同步動作線程和訓練線程
4. 疑問
- 利用作者訓練的模型測試,無效的pushing太多、抓取點和方位都不是很理想、即便物體分的很開的時候也不能有效抓取
- 純CPU運行,推和抓的準確性相比GPU會高很多,這是否跟densenet網絡前加with torch.no_grad()有關?
- 隨機種子作用域?Pushing位置計算原理?
- 抓取物體點是以整體物體為單位確定嗎?
- 推的位置誤差太大,且有些抓取位置計算也不對,并沒有附著到物體附近
- 自己訓練保存的模型參數是那幾個變量?
5. 軟硬件調試問題
問題1:加載與訓練模型時key值不匹配 Missing key(s) in state_dict:...,這是由于Pytorch版本升級帶來的問題,報錯如下圖
Missing keys報錯截圖問題原因:版本升級帶來的問題,報錯位置norm.1跟norm1的區別,具體解決辦法如下:
import re...if args.resume:print("Loading checkpoint from '{}'".format(args.resume))checkpoint = torch.load(args.resume)#modify:# '.'s are no longer allowed in module names, but pervious _DenseLayer# has keys 'norm.1', 'relu.1', 'conv.1', 'norm.2', 'relu.2', 'conv.2'.# They are also in the checkpoints in model_urls. # This pattern is used to find such keys.pattern = re.compile(r'^(.*denselayerd+.(?:norm|relu|conv)).((?:[12]).(?:weight|bias|running_mean|running_var))$')state_dict = checkpoint['state_dict']for key in list(state_dict.keys()):res = pattern.match(key)if res:new_key = res.group(1) + res.group(2)state_dict[new_key] = state_dict[key]del state_dict[key]model.load_state_dict(state_dict)#model.load_state_dict(checkpoint['state_dict'])start_epoch = checkpoint['epoch']參考鏈接:
https://github.com/KaiyangZhou/deep-person-reid/issues/23
https://github.com/pytorch/vision/blob/50b2f910490a731c4cd50db5813b291860f02237/torchvision/models/densenet.py#L28
Missing keys的另外一個原因:保存模型使用了nn.DataParallel導致的,解決辦法如下:
兩種解決辦法第二種j解決辦法的代碼示例:參考鏈接
[solved] KeyError: 'unexpected key "module.encoder.embedding.weight" in state_dict'
# original saved file with DataParallel state_dict = torch.load('myfile.pth.tar')# create new OrderedDict that does not contain `module.` from collections import OrderedDict new_state_dict = OrderedDict() for k, v in state_dict.items():name = k[7:] # remove `module.`new_state_dict[name] = v# load params model.load_state_dict(new_state_dict)這個方法有網友整理了更詳細的,鏈接如下
https://blog.csdn.net/qq_32998593/article/details/89343507
問題2:更新后,現在網上下載代碼已不再適用torch0.3.1版本(已增加with torch.no_grad)
問題3:robot文件中的代碼 async=False會報錯,作者最新版本的代碼更改為 asynch=False后報錯就消失了,報錯如圖所示:
問題4:內存不夠
報錯 RuntimeError: $ Torch: not enough memory: you tried to allocate 0GB. Buy new RAM! at /opt/conda/conda-bld/pytorch_1523244252089/work/torch/lib/TH/THGeneral.c:253問題5:雙GPU報錯
RuntimeError: Expected tensor for argument #1 'input' to have the same device as tensor for argument #2 'weight'; but device 0 does not equal 1 (while checking arguments for cudnn_convolution)暫時只使用一個GPU解決了本問題
問題6:配置Intel Realsense D435i 相機
安裝librealsense和realsense-ros包,這兩個安裝目錄及方法參照google教程, 注意兩者版本的匹配問題,版本匹配目錄見個人硬盤《Intel realsense設備驅動及ROS包版本匹配目錄》
問題7:pytorch版本升級后需修改地方(作者的代碼torch版本0.3.0較低)
- 沒有了Variable的概念
- 類似numpy().[0]的地方要修改
- with torch.no_grad()設置包含求解的densenet網絡,會大大提高計算時間,不至于內存溢出;
總結
以上是生活随笔為你收集整理的visual studio code python环境配置_visual-pushing-grasping环境配置及复现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于python的视频监控系统_Pyth
- 下一篇: python partition函数_如