使用Faster-RCNN进行指定GPU训练
时间:2022-07-23
本文章向大家介绍使用Faster-RCNN进行指定GPU训练,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实验内容
- 解决了昨日环境配置剩下的问题(三~六),接着昨日第7步继续
- 测试库中用例,检查是否能跑通
- 在"faster-rcnn.pytorch"文件夹中打开终端
- 指定GPU训练
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py --dataset pascal_voc --net res101 --bs $BATCH_SIZE --nw $WORKER_NUMBER --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP --cuda
- 参数意义:
-
CUDA_VISIBLE_DEVICES=$GPU_ID
:指明所使用的GPU ID,$GPU_ID
需修改为指定ID -
--dataset pascal_voc --net res101
:在pascal_voc上使用resnet101进行训练 -
--bs $BATCH_SIZE --nw $WORKER_NUMBER
:可以根据GPU内存大小来自适应地设置BATCH_SIZE(批处理尺寸)和WORKER_NUMBER。在具有12G内存的Titan Xp上,它最多可以为4 -
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP
:**学习率(Learning rate)**作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。
-
- 参数意义:
- 多GPU训练(这一步实验没有做,“指定GPU实验”居然从下午三点多跑到了晚上11点多…) python trainval_net.py --dataset pascal_voc --net res101 --bs 24 --nw 8 --lr $LEARING_RATE --lr_decay_step $DECAY_STEP --cuda --mGPUs # (pascal_voc.py self._classes 类别修改)
问题
- 问题一:
RuntimeError: The expanded size of the tensor (2) must match the existing size (0) at non-singleton dimension 1
- 解决:原因在于计算二分类交叉熵损失函数时是在每个batch中进行的,而总的图片数量并不能被所设置的batch_size整除,造成最后一个batch的图片数量与batch_size不相等。
- 问题二:
AttributeError: 'int' object has no attribute 'astype'
- 解决:将
/lib/roi_data_layer/roibatchLoader.py
中第52行的target_ratio = 1
改为target_ratio = np.array(1)
- 解决:将
- 问题三:
AttributeError: 'Tensor' object has no attribute 'index'
- 解决: 将torch的版本改为0.4.0…所以昨天的错误到时出在哪个依赖上了???
- php中使用time获取到当前小时数不对
- Spring Boot开启的2种方式
- mysql中创建表实例全析及查询基本操作
- Spring Boot - Profile不同环境配置
- $.each()与$(selector).each()区别详解
- javascript typeof
- php中json_encode
- Java高级进阶:自定义ClassLoader
- 字符串拼接+和concat的区别
- Spring Boot Runner启动器
- Spring Boot自动配置原理、实战
- Spring Aware容器感知技术
- 深入探究frame和bounds的区别以及setbounds使用
- 如何生成二维码过程详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【疑难杂症】解决-TensorFlow “FutureWarning: Conversion of the”
- [Deep-Learning-with-Python] 文本序列中的深度学习
- TN-SCUI2020挑战赛详细讲解
- QSignalMapper使用以及替换方法
- 对于组件的可重用性,大佬给出来6个级别的见解,一起过目一下!
- 多个线程为了同个资源打起架来了,该如何让他们安分?
- 实战|记录一次渗透测试项目
- SVN工具分析
- 客服MM被投诉说下单耗时很长,老板下令必须控制在1秒以内
- 介绍两个刷 SQL 题的网站
- Spring MVC 你必须关注点
- 微信小程序开发实战(12):滑杆组件(slider)和form组件
- pandas按照指定的列排序、paste命令指定分隔符、ggplot2添加拟合曲线
- 连连看
- 交叉验证