感谢网友lihe2019提供的资料——《Ubuntu 16.04 Nvidia驱动安装(run方式)》
感谢网友xunan003提供的资料——《ubuntu16.04系统run方式安装nvidia显卡驱动》
独立显卡:NVIDIA GeForce GTX 1660
集成显卡:(无)
CUDA: 10.0.130
可以使用代码
cat /usr/local/cuda/version.txt
step 1:首先需要在Ubuntu系统的官方网站的可选资料中下载镜像,https://ubuntu.com/download/alternative-downloads,
我们可以获得Ubuntu系统的.iso文件;
step 2:将.iso文件制作成系统U盘,(需要使用U盘),
首先在Windows上安装软件UltraISO,然后打开软件;
step 3:进入工作界面后,点击菜单栏文件(F),在弹出的选项卡里点击打开,选择刚刚下载好的Ubuntu镜像;
step 4:插入U盘;点击菜单栏上的启动,在弹出的选项卡里点击写入硬盘映像;
step 5:在弹出的对话框中进行如下设置:
硬盘驱动器:选择刚刚插入的U盘
写入方式:设置为USB-HDD+
然后点击写入按钮,
step 6:写入界面上会显示数据写入的剩余时间,大概是7~8分钟,
step 7:安装完成之后,会提示“刻录成功!”;
step 8:将制作好的系统盘插入到GPU服务器上,并重启服务器系统;
step 9:对于服务器系统,使用Delete键或F2进入BIOS启动设置;
按下F8进入启动选项的菜单,选择U盘对应的“SATA”选项进入安装界面;
step 10:使用键盘的↑↓键选择中文语言,然后选择“安装Ubuntu”;
在安装选项的设置中选择手动分区,
step 11:接下来进行分区,
首先来看看我们的分区方案:
分区名 | 大小 | 大小(MB) | 分区类型 | 分区位置 | 分区格式 | 挂载点 |
---|---|---|---|---|---|---|
EFI引导区 | 512MB | – | 主分区 | 起始位置 | EFI系统分区 | – |
swap交换分区 | 32GB 32768MB | 逻辑分区 | – | 交换空间 | – |
step 9: 使用CUDA直接安装显卡驱动失败,报错“code: 256”,于是还是改用“驱动+CUDA”分开进行安装的方式;
step 10: 从Nvidia官网下载显卡的驱动,https://www.nvidia.cn/geforce/drivers/ ;
step 11:禁用nouveau驱动(否则会出现循环登录的问题)
sudo gedit /etc/modprobe.d/blacklist.conf
使用gedit编辑blacklist.conf文件;
在文件的末尾加入以下内容,
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
step 10: 检验显卡驱动是否安装成功:
Ubuntu-16.04在系统更新之后可能会出现异常,具体表现为,
输入nvidia-smi,出现以下输出,
Terminal outputs:
NVIDIA-SMI has failed because it couldn‘t communicate with NVIDIA driver. Make sure that the latest driver is installed and running.
目前不知道出现这种异常的原因,解决方法是参考的博文《Ubuntu 16.04 Nvidia驱动安装(run方式)》,
需要安装dkms,
sudo apt-get install dkms
然后使用命令,
sudo dkms install -m nvidia -v gpu-driver-number
示例代码如下:
sudo dkms install -m nvidia -v 450.07
然后输入nvidia-smi看看显卡驱动是否可以正常使用;
安装完成后重启电脑,看看显示界面的分辨率是否恢复正常;
环境迁移速查表:
我们暂时不使用HRSC2016数据集,该数据集的目标尺寸太大了,(一张图里面大概只有1到2个目标),对于小目标不适用;
我们就用这个数据集来做预训练;
数据集地址:https://www.kaggle.com/c/airbus-ship-detection/data
图像尺寸全部相同,且为768×768;
在Kaggle-Airbus-Ship(KAS)中,标注信息的格式是“run-length encoding format”,所以还需要单独进行解析;
由于KAS数据集是一个二分类问题,标注图像相当于是一个二值图像,所以可以使用游程编码来对标注信息进行编码;
对于标注格式的解析,可以参考
repo:https://github.com/pascal1129/kaggle_airbus_ship_detection/blob/master/0_rle_to_coco/0_csv_show_RLE.py
我们使用OpenCV来进行这样的处理:将mask标注转成正矩形标注;
使用的代码为
contours, hierarchy = cv2.findContours(all_masks, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# 参数解释:
# cv2.RETR_EXTERNAL:取二值区域的外轮廓,(不会检测内轮廓)
# cv2.CHAIN_APPROX_NONE:将物体边界上所有连续的轮廓点保存到contours向量内
使用gdal库来读取 .tiff格式的数据;
安装gdal库,
conda install gdal
在切分图像时,需要使用overlap,overlap比例为 50 % 50\% 50%;
所以还需要计算步长stride;
在切分图像时,使用norm的方法处理标签,也就是将label的矩形框clip到当前窗口的范围之内;
在处理标签时,只保留IoU大于阈值的检测框,(根据赵博士的经验),这里IoU的阈值选择0.8;
读取通道数,使用类属性ds.RasterCount
input单通道: 复制成三通道;
input三通道: 无需进行处理;
input四通道: 删除掉最后一个通道;
统计直方图是十分耗时的操作,这一点要注意,不要在循环中重复地进行直方图运算;
网友王大王也在他的博文《GDAL计算栅格图像统计值相关说明》中写到:
输入图像:768×768(跟KAS数据集保持一致)
对于目标区域的分类,我们准备使用shufflenet_v2_x1_0网络模型,它的FPS比较高;
在对分割图像进行可视化时,有时需要进行数值类型的转换;
需要进行转换的情况是:当使用PIL显示图像时,出现“PIL TypeError: Cannot handle this data type: (1, 1, 768),
其中一个原因时,数值类型不正确,
因为Image.fromarray()
函数默认接受uint8类型的numpy数组,而如果数值类型是uint16的话,就会出现类型不符合的错误;