舰船目标检测的学习笔记

1 致谢

感谢网友lihe2019提供的资料——《Ubuntu 16.04 Nvidia驱动安装(run方式)》
感谢网友xunan003提供的资料——《ubuntu16.04系统run方式安装nvidia显卡驱动》

2 服务器配置

2.1 服务器硬件配置

独立显卡:NVIDIA GeForce GTX 1660
集成显卡:(无)

2.2 软件环境配置

CUDA: 10.0.130

2.2.1 查看CUDA版本

可以使用代码

cat /usr/local/cuda/version.txt

2.2 安装Ubuntu-16.04-lts系统

step 1:首先需要在Ubuntu系统的官方网站的可选资料中下载镜像,https://ubuntu.com/download/alternative-downloads,
我们可以获得Ubuntu系统的.iso文件;
step 2:将.iso文件制作成系统U盘,(需要使用U盘),
首先在Windows上安装软件UltraISO,然后打开软件;
step 3:进入工作界面后,点击菜单栏文件(F),在弹出的选项卡里点击打开,选择刚刚下载好的Ubuntu镜像;
舰船目标检测的学习笔记_第1张图片
step 4:插入U盘;点击菜单栏上的启动,在弹出的选项卡里点击写入硬盘映像;
step 5:在弹出的对话框中进行如下设置:
硬盘驱动器:选择刚刚插入的U盘
写入方式:设置为USB-HDD+
然后点击写入按钮,
step 6:写入界面上会显示数据写入的剩余时间,大概是7~8分钟,
舰船目标检测的学习笔记_第2张图片
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 逻辑分区 交换空间

2.2.1 安装显卡驱动

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

2.2.1.1 检验显卡驱动是否安装成功

step 10: 检验显卡驱动是否安装成功:

  1. 桌面的分辨率是否显示正常;
  2. 命令nvidia-smi是否可以正常使用。

2.2.2 Ubuntu-16.04系统更新之后显卡驱动出现异常

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看看显卡驱动是否可以正常使用;
安装完成后重启电脑,看看显示界面的分辨率是否恢复正常;

2.2.2 安装CUDA

3 环境迁移

环境迁移速查表:

  • CUDA版本保持一致
  • 安装conda
  • 重现环境(参考:https://zhuanlan.zhihu.com/p/87344422)

4 数据集收集

4.1 HRSC2016数据集

我们暂时不使用HRSC2016数据集,该数据集的目标尺寸太大了,(一张图里面大概只有1到2个目标),对于小目标不适用;

4.2 Kaggle-Airbus-Ship:Kaggle舰船检测比赛的数据集

我们就用这个数据集来做预训练;
数据集地址:https://www.kaggle.com/c/airbus-ship-detection/data

4.2.1 数据集特点

图像尺寸全部相同,且为768×768;

4.2.2 标注文件的格式——RLE编码

在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

4.2.3 数据格式预处理——将mask标注转成正矩形标注

我们使用OpenCV来进行这样的处理:将mask标注转成正矩形标注;
使用的代码为

contours, hierarchy = cv2.findContours(all_masks, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# 参数解释:
# cv2.RETR_EXTERNAL:取二值区域的外轮廓,(不会检测内轮廓)
# cv2.CHAIN_APPROX_NONE:将物体边界上所有连续的轮廓点保存到contours向量内

5 数据读取与预处理

5.1 遥感图像格式读取——.tiff格式等等格式

使用gdal库来读取 .tiff格式的数据;
安装gdal库,

conda install gdal

5.1.1 切分图像时需要使用overlap(比例为 50 % 50\% 50%

在切分图像时,需要使用overlap,overlap比例为 50 % 50\% 50%
所以还需要计算步长stride;

5.1.2 切分图像时使用norm的方法处理标签

在切分图像时,使用norm的方法处理标签,也就是将label的矩形框clip到当前窗口的范围之内;
在处理标签时,只保留IoU大于阈值的检测框,(根据赵博士的经验),这里IoU的阈值选择0.8;

5.1.2 关于输入通道数的处理

读取通道数,使用类属性ds.RasterCount
input单通道: 复制成三通道;
input三通道: 无需进行处理;
input四通道: 删除掉最后一个通道;

5.2 图像预处理

5.2.1 统计直方图是耗时操作

统计直方图是十分耗时的操作,这一点要注意,不要在循环中重复地进行直方图运算;
网友王大王也在他的博文《GDAL计算栅格图像统计值相关说明》中写到:
舰船目标检测的学习笔记_第3张图片

6 模型设计

输入图像:768×768(跟KAS数据集保持一致)

6.1 目标区域分类——shufflenet_v2_x1_0

对于目标区域的分类,我们准备使用shufflenet_v2_x1_0网络模型,它的FPS比较高;

7 数据的可视化

7.1 数值类型转换

在对分割图像进行可视化时,有时需要进行数值类型的转换;
需要进行转换的情况是:当使用PIL显示图像时,出现“PIL TypeError: Cannot handle this data type: (1, 1, 768), 从错误信息上,可以看到,这是跟数据类型相关的错误;
其中一个原因时,数值类型不正确,
因为Image.fromarray()函数默认接受uint8类型的numpy数组,而如果数值类型是uint16的话,就会出现类型不符合的错误;

你可能感兴趣的:(实验室资料,舰船检测)