跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery

感受:代码、路径方面有点混乱,需要大改,怎么改的过程未及时记录,记录改完后的一些思考,还在慢慢更新中,写的比较乱,还存在许多问题为想明白,已在文中标红,欢迎大佬们评论区或者私信帮我答答疑惑 orz  orz  orz !

paper:CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery | IEEE Journals & Magazine | IEEE Xplore

使用的源代码仓库:GitHub - mj129/CoANet: CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery


目录

一、前期准备

1. 环境、安装包

2. 根据操作形成的文件夹结构

二、训练与测试过程

1. train

2. test过程

三、遇到的问题

1. train时,关于网络结构

2. test时的一些操作

(8)test.py中对每个batch里的数据进行操作的流程

3. 关于训练和测试时所使用的数据的疑问

四、其他操作

1. 查看特征图


一、前期准备

1. 环境、安装包

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第1张图片

 torch、torchvision、torchaudio的安装参考:

Anaconda虚拟环境中安装cuda和cuDNN

其他包:

(写在前面)如果有下载不下来的包,可以在后面加上国内镜像地址Anaconda镜像源整理与使用_ligous的博客-CSDN博客),具体操作可以参考6

1. tqdm

pip install tqdm

2. matplotlib

pip install matplotlib

3. pillow

pip install pillow

4. tensorboardX

pip install tensorboard
pip install ​tensorboardX

 5. prefetch_generator

pip install prefetch_generator

如果下载不下来,可以使用豆瓣的镜像源,也可以使用其他源

pip install torchsummary -i https://pypi.douban.com/simple/

6. cv2

# windows

conda install -c conda-forge opencv

# linux

pip install opencv-python

  7. scikit-image

pip install prefetch_generator

如果下载不下来,可以使用豆瓣的镜像源,也可以使用其他源

pip install torchsummary -i https://pypi.douban.com/simple/

         安装完这些包应该就没什么问题了。

2. 根据操作形成的文件夹结构

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第2张图片

 进入crops文件夹的结构

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第3张图片

二、训练与测试过程

1. train

train时

(1)需要修改mypath.py中的return路径

(2)修改train.py中的

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第4张图片

(3)修改init中的

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第5张图片

2. test过程

1. 修改test.py

(1)修改“ --ckpt "

        ckpt指向的是训练好的模型,所在的位置,即你要用哪个模型去test

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第6张图片

(2)修改test结果保存的地址

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第7张图片

 2. 修改dataloaders中的_init_.py

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第8张图片

         换成修改好的test时使用的代码段

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第9张图片

三、遇到的问题

1. train时,关于网络结构

(1)损失分支与损失函数设计

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第10张图片

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第11张图片

 (2)优化器的设计

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第12张图片

 (3) 是否使用类别平衡权重

        代码中没有使用

 跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第13张图片

 (4)做一系列图像增强

        在生成dalaloader后,逐batchsize获取数据时,不同的数据集进行不同的数据增强操作。

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第14张图片

        train和val的图像增强都在deepglobe_crop.py中,即训练过程采用的是裁剪后的512×512大小的图进行训练。

        训练集的操作

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第15张图片

使用的tr.Normalize()中的参数是Imagenet数据集的均值和方差

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第16张图片

        验证集的操作(比训练集的操作少,只做了归一化)

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第17张图片

        test(采用的是val集的数据)的图像增强操作在deepglobe.py中,即测试过程采用的是原图1024×1024大小的图。

        测试集的操作

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第18张图片

        normalize的参数是怎么获得的呢?这个是在数据输入网络前做的normalize,可以预先自己算一下数据集的mean和std,在填入其中,本次的训练中,可以直接用源码中提供的参数,如果要训练自己的私有数据集,可以自己算一下这个参数,换一下。

(5)BN的设置

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第19张图片

2. test时的一些操作

(6)test.py读取数据后的操作,不太明白

        读取的图像是原图像,1024的,读取了image,target(gt),con0,con1,con2这三个是d=1时的connection图,没看到读取d=3时的,不知道是想干嘛

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第20张图片

与train.py中读取数据的操作对比

读取了image,target(gt)

con0,con1,con2 这三个是d=1时的connection图

con_d1_0,con_d1_1,con_d1_2 这三个是d=3时的connection图(比test时多读取的部分)

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第21张图片

(7)test.py对输入图像的操作以及输入模型得到结果

虽然读取了图片的connection信息图像connect_label,但是后面好像没有用到

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第22张图片

(8)test.py中对每个batch里的数据进行操作的流程

  1. 读取image,gt,connection(d=1)
  2. 对image一系列操作得到三种结果,并将与原来的image连接起来
    跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第23张图片
         它在测试时候,读取完image后,对它做了很多操作,img[batch, channel, height, weight]],第一行应该是垂直翻转【这里面的不对:水平翻转】,第二个是水平翻转【这里面的不对:对batchsize里的每个图片反向排列一下】,第三个是第一第二的结合,【这里面的应该不对:其实它代码里,测试的时候,batchsize设置的是1,也就是说它有效的只进行了翻转】。在这些操作进行完,计算完结果后,还是要再恢复的,具体的,就是在5,6,7中,list的append操作
         这里对image进行一系列的操作,是为了“测试时图像增强”(TTA)可以了解一下。
  3. 将读取到的三个d=1时的connection连接起来
  4. 使用model,对连接起来的image预测,得到output,out_connect(d=1),out_connect(d=3)
  5. 对out_connect(d=1)进行一系列操作(4种),并添加到一个out_connect_full的list中,对列表中的4种out_connect进行sum相加操作,形成pred_connect,对其判断,阈值小于0.9的设为0,大于等于0.9的设为1
    跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第24张图片
  6. 与5相似,对out_connect_d1(d=3)进行一系列操作(4种),并添加到一个out_connect_d1_full的list中,将列表中的4种out_connect_d1进行sum相加操作,形成pred_connect_d1,对其判断,阈值小于2.0的设为0,大于等于2.0的设为1,不太懂为什么
    跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第25张图片
  7. 将ouput变成numpy生成pred,将target变成numpy生成target_n,对pred进行一系列操作(4种),并添加到一个pred_full的list中,将列表中的4种pred进行mean平均操作,形成pred_full,对其判断,阈值小于0.1的设为0,大于0.1的设为1
    跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第26张图片
  8. 对5,6,7中生成的pred_connect,pred_connect_d1,pred_full相加+,形成su,对其判断,阈值大于0的设为1
  9. make_grid操作
    将image(也就是一开始读取进来后进行了一系列变换的image),保存至out_image图像
    将target(也就是一开始读取进来的没有进行一系列变换的target),保存至out_GT图像
    将su(也就是8中生成的最终图像),保存至out_pred_label_sum图像
    跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第27张图片

RandomScaleCrop是随机重新剪裁了吗,可是读取的数据就是512大小的呀

3. 关于训练和测试时所使用的数据的疑问

           在他的源码里,在train.py中,读取了train_crops.txt和val_crop.txt里的数据,在test.py中,读取了val.txt里的数据,而val_crop.txt也就是进行了分割的val.txt,也就是,他这个代码里的val集就是他所说的test集,整个数据集中就只有tain和val,在测试计算评估指标时,用的是在train.py训练时所用来验证的val集,如果真的是这样的话,那么在训练时,所选取获得的模型,就已经偏向于测试集了,也不算是test(也作为val)影响了训练过程,只是在训练阶段,选择了一个对test集最好的模型。这样就和平时的不太一样,是在刷指标叭。测试集原本应该是看不到的数据,或许应该在划分出来的train里再划分一个val。train:val:test=7:1:2 ?

四、其他操作

1. 查看特征图

步骤:

(1)把model换成查看feature_map的model,会导致引用medel的加载语句有问题,需要修改成medeling。(目前没问题了)

(2)运行的是test_feature_map.py

        修改 '--ckpt' 模型的地址  

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第28张图片

(3)修改 draw_feature.py中特征图保存的路径

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第29张图片

(4)修改val_feature_map.txt中要检测的文件名字

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第30张图片

2. 生成新的crop文件,且按阈值提出全黑的图像

(1)生成crop文件

        运行image_process中的create_crops_***_***.py,在train/crops_***_***文件夹中生成带有overlap的裁剪图像,images和gt文件夹,这两个文件夹里是全部的train+val的图像。同时在train下生成train_***_***_crops.txt,和val_***_***_crops.txt两个文件,里面分别是train、val的图像名称。

(2)从train/***_***_crops文件夹中把train、val分别挑出来

  • 运行image_process/copy_to_another_file.py,修改路径,读取train/train_***_***_crops.txt,把train的图像转移到新的文件夹中
  • 运行image_process/copy_to_another_file.py,修改路径,读取train/val_***_***_crops.txt,把val的图像转移到新的文件夹中
  • 这就生成了一个crops_***_***_all
  • 跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第31张图片

(3)按照阈值将符合条件的crops的train集图像移到另一个文件夹中crops_***_***_剔除阈值

        运行move_proportion_of_white_pixels.py,将train中符合阈值的图像复制转移,并生成新的train_***_***_tichu_crops.txt,这些图片转移到另一个命名为crops_***_***_剔除阈值/train_gt,train_images,untrain_gt,untrain_images

跑通代码---2021_TIP_CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery_第32张图片

(4)将生成的符合阈值的train集和只经过裁剪的val集混在一起

你可能感兴趣的:(深度学习,python,python,开发语言)