当前位置:   article > 正文

草履虫都能学会—武大遥感计算机视觉课间实习(jsp)_package requirements 'scipy==1.2.1", 'numpy==1.17.

package requirements 'scipy==1.2.1", 'numpy==1.17.0 , 'opency python==4.1.2.

前言

  摄影测量方向的同学们想必都会比较苦恼计算机视觉这门课,笔者的感受就是上课如果没有提前预习和复习的话几乎听不懂。尤其是有“数学恐惧症”的人群,面对一堆算法的数学原理时,真的非常头疼。本文的创作初衷旨在帮助选择摄影测量方向,尚未接触过深度学习,尚未接触过项目配置的小白,能够顺利度过CV的课间实习。前人种树,后人乘凉,希望对读者有所帮助。
  介于本人在此之前是纯摆子,也没接触过深度学习的项目配置。在实习过程中真是处处碰壁,曾一度想要放弃。不过好在有其他同学的帮助,最终也是顺利的跑通了所有要求项目。于是,笔者决定创作此文,帮广大遥感学子指点迷津,也是对自己学习配置经验的一个记录。
  在此先叠甲~本人纯小白,初次接触深度学习项目,内容均为个人经验,如有错误,欢迎指正,大佬轻喷。

一、环境配置

本次实习要求如下:
在这里插入图片描述
实习需要在Windows和Ubuntu两种环境下进行。笔者仅对YOLOv3进行了Ubuntu实现,其他均在Windows进行。有关Ubuntu配置将在后文介绍。

Anaconda配置

本次实习所有项目皆为Python实现,推荐使用Anaconda。因为笔者初次尝试YOLOv3项目时,使用自行下载的Python解释器和Pycharm,虽然成功跑通了项目,但是识别框中的标签出现了乱码,推测应该是库的版本和python版本不适配的原因。所以不如使用conda,给每一个项目创造一个单独的专属虚拟环境,各个项目间井水不犯河水。

如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。——Conda官方网站

安装Anaconda

史上最全最详细的Anaconda安装教程
这篇文章详细介绍了Anaconda安装的流程,读者可以根据文章进行Anaconda的下载。但是要注意,如果已经安装了Python,那么下载Anaconda之前需要先将Python卸载了(已经安装了Pycharm的不用卸载Pycharm)。或者也可以根据文章中方法将其保留,但是貌似很多人并不太推荐,可能之后和Pycharm连接编译环境时会出现问题。所以最好先卸载Python再装Anaconda。

关于卸载Python的方法可以看这篇文章把python完全卸载干净
不过笔者按照这篇文章卸载时出现了一点差错:在上述文章第二步cmd输入where python时显示用提供的模式无法找到文件。关于这个问题,可以尝试把where去掉,直接在cmd输入python,此时如果显示'python'不是内部或外部命令,也不是可运行的程序或批处理文件。说明此时已经成功卸载Python,可以进行Anaconda的安装了。

按照上面那篇文章安装时,2.1.3更改源这一步(如下图),文章里的镜像源有点问题,使用pip安装的时候可能会连不上。文章内容如下:在这里插入图片描述
对于这个问题,读者可以将下段代码直接复制粘贴到.condarc文件中,更新镜像源

channels:
  - defaults
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
show_channel_urls: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

文章中后续的2.1.4更新操作其实也不用做,在之后需要更新的话可以进行操作。

此时,恭喜你,已经完成了Anaconda的安装!

更改虚拟环境安装路径

在这里插一段,如果将Anaconda装到了C盘之外的盘,在新建虚拟环境的时候,可能会有虚拟环境默认安装在C盘的情况,此时需要更改虚拟环境的安装路径。可以参考下面这篇文章进行更改。
Anaconda更改虚拟环境安装路径

安装Pycharm

已经安装了的同学可以跳过,未安装的同学可以自行在B站或者CSDN搜索下载方法,一般直接在官网下载。关于Pycharm专业版的破解程序,一般淘宝上就能淘到,自行解决即可。(这个真不是什么难事吧)

Ubuntu配置

关于Ubuntu环境,可以选择安装虚拟机或者在电脑上装Linux系统。笔者是草履虫,不会装系统,所以选用了安装虚拟机…

VMware安装

两分半钟完成VMware安装及Linux-Ubuntu安装(全程无废话)
关于VMware的安装,可以根据这个视频进行操作。

注意在分配虚拟磁盘内存的时候,尽量多分一点,因为需要在虚拟机里下载Anaconda和Pycharm。笔者第一次尝试的时候分配了20G内存,但是在下载完Anaconda之后就已经没有内存下载Pycharm了,虽然显示还是有空间,但是仍然无法下载,最后删除了当前磁盘,重新分配了35G内存才能正常下载。所以还是建议读者第一次就分配足够内存,以免内存不够又要重新分配…
在这里插入图片描述

虚拟机中下载Anaconda和Pycharm

关于虚拟机里Anaconda的安装流程,和Windows略有不同,需要在终端里进行操作,读者可以根据以下两篇文章进行下载安装:
Ubuntu安装Anaconda详细步骤
超详细Ubuntu安装Anaconda步骤+Anconda常用命令

关于Pycharm的安装,读者可以自行搜索教程进行下载。一般还是在浏览器里搜索Pycharm官网进行下载,同样需要一点终端操作,根据教程完成下载操作即可,此处不再赘述。这里给出一个参考:在Ubuntu上安装配置pycharm(linux)

二、YOLOv3目标识别

恭喜你,在此之前已经成功完成了基础环境的配置,那么接下来就要进行每个项目的具体实现了。首先是YOLOv3,读者可以先从GitHub上下载好该项目的文件,链接是https://github.com/bubbliiiing/yolo3-pytorch
注意下载的目标文件路径里尽量不要包含中文,在以后进行编程项目时也要注意这点,有些项目代码可能并不支持读取中文字符。(另外,电脑的用户名也请尽量不要有中文,否则以后会出现很多麻烦,这是笔者的深刻教训)

conda环境配置

首先配置yolov3项目所需要的环境。在安装好Anaconda后,从工具栏的“开始”中找到并打开Anaconda Prompt在这里插入图片描述
打开如下
在这里插入图片描述
现在需要创建一个专属于YOLOv3项目的虚拟环境,在命令行里输入

conda create -n yolov3 python=3.7
  • 1

这行命令代表创建一个名为“yolov3”的虚拟环境(环境名称可以自己起),并为这个环境配置3.7版本的Python解释器。(更高版本并未尝试,不过3.7是可以跑通的,不会出现标签乱码)

回车开始创建,会弹出以下内容
在这里插入图片描述
跟着提示输入y后按回车即可
弹出以下内容说明环境已经配置完成在这里插入图片描述
接下来在命令行里输入conda activate yolov3命令来激活刚刚创建的yolov3环境,之后会显示命令行前的括号内容变成了“yolov3”的环境名,说明激活成功,如图在这里插入图片描述
接下来输入如下命令将conda转到项目路径下

cd D:\Python objects\yolo3-pytorch-master
  • 1

注意这里输入的是你自己电脑上的项目文件夹绝对路径,读者自行更改代码。然后再输入盘符,如果在D盘就输入d:,显示如下在这里插入图片描述
可以看到路径已经成功更改。

接下来需要根据项目里的requirements.txt来下载项目所需要的各种库,不过由于YOLOv3项目的requirements写的有点问题,读者可以打开requirements.txt并将内容更改为如下文本:

torch==1.13.1
torchvision==0.14.1
tensorboard==2.0.2
scipy==1.2.1
numpy==1.17.0
matplotlib==3.1.2
opencv_python==4.1.2.30
tqdm==4.60.0
Pillow==8.2.0
h5py==2.10.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

更改后保存并关闭requirements.txt 。在刚刚的conda命令行中输入命令

pip install -r requirements.txt
  • 1

此时会自动下载项目需要的库,等待一段时间后,出现以下内容,说明下载安装成功在这里插入图片描述
至此,恭喜已经成功配置好了项目代码所需要的环境以及需要的所有库。那么接下来需要将创建好的环境在Pycharm里和项目相连接起来。

Pycharm中使用创建的虚拟环境

在Pycharm中打开解压好的yolo-pytorch-master文件夹,接下来需要用配置好的yolov3环境作为该项目的编译环境。首先点击上面四条杠在这里插入图片描述
点击设置Settings
在这里插入图片描述
选择项目—>Python解释器
在这里插入图片描述
在这里插入图片描述
点击添加解释器
在这里插入图片描述
选择刚刚创建好的conda环境
在这里插入图片描述
点击右侧的文件夹图标,找到下载的anaconda文件夹中的condabin,将里面的conda.bat添加到此处,然后在下面选择创建的yolov3环境,点击确认即可在这里插入图片描述
此时即完成yolov3项目解释器的配置。不过笔者在打开anaconda文件夹的时候并没有找到condabin,如果读者也出现了这种情况,可以选择System Interpreter系统解释器在这里插入图片描述
在envs中找到对应的虚拟环境中的python.exe,选择并点击确定。注意,不要选成第一行的Virtualenv环境。在这里插入图片描述
至此,恭喜你成功将项目的解释器设置为了自己创建的yolov3虚拟环境!接下来就可以开始代码的运行了。

修改部分代码

**在下载GitHub上的项目时,一定要多读README文档。**一个好的项目,其README一般也会写的比较清晰,多读多看,可以帮助你解决很多疑惑,更好的理清项目结构。

例如这个YOLOv3项目,在README里把相关事项说的已经比较清晰。笔者由于电脑性能不足,且训练时间会很长,故不再自己进行模型训练,直接在github下载预训练权重,并按照README文档将其放在model_data文件夹中。

项目运行主要依靠predict.py这个函数。读者可以将函数中的模式mode改为"dir_predict"。

mode = "dir_predict"
  • 1

这个模式代表遍历文件夹进行检测并保存。默认遍历img文件夹,保存img_out文件夹。如果想要改变遍历文件夹路径和保存文件夹路径,可以在下方寻找相关代码进行路径更改,如

  dir_origin_path = "yolov3/VOCdevkit/VOC2007/JPEGImages"#遍历文件夹路径
  dir_save_path   = "img_out/"#保存文件夹路径
  • 1
  • 2

项目作者在其中写了很多帮助理解的注释,读者可仔细阅读注释,此处不再过多赘述。

然后再打开yolo.py函数,这里记录了YOLOv3算法的相关内容。在函数中可以设置预训练模型的路径,如下

"model_path"        : 'model_data/yolo_weights.pth',
  • 1

读者下载预训练模型后可以放进model_data文件夹中,项目代码默认地址在这里。不过当然也可以放在别处,只需要修改代码中的路径即可。
如果电脑没有GPU,或者不想使用cuda,可以在其中把cuda选项改为False,该选项同样在yolo.py中。笔者电脑就是没有显卡,故所有实习项目都没有使用cuda。

"cuda"              : False,
  • 1

项目运行与mAP评估

在完成上述代码修改之后,就可以进入predict.py进行预测了。点击运行predict.py函数,得到输出结果,默认保存在img_out文件夹中。street.jpg的预测结果如下
在这里插入图片描述
预测效果还蛮不错的)

关于项目模型评估,实习要求使用mAP指标。在最后老师会发一个测试文件,里面会有测试使用的图片和对应的测试代码。当然,测试用的图片都是从VOCdevkit数据集里抽出来的,读者可以提前在GitHub下载VOCdevkit数据集,自己选取10-20张图片进行评估。

评估使用的代码是get_map.py,打开该函数,这个函数中需要修改的仅仅是测试集的路径以及想要输出测试结果的路径,例如

VOCdevkit_path = 'yolov3/VOCdevkit'#测试集路径
map_out_path    = 'yolov3/map_out'#评估结果输出路径
  • 1
  • 2

修改完成后点击运行,得到测试结果和评估结果
在这里插入图片描述
笔者使用的是全部VOCdevkit数据,一共有4000多张图片,花费大概一个小时,读者可以挑选十几张进行评估即可。输出的结果保存在map_out文件夹中,包括AP,Recall,mAP等结果。

Ubuntu环境测试YOLOv3

成功在Windows上完成YOLOv3后,我们转战Ubuntu。

创建yolov3虚拟环境

这一部分和在Windows系统下是相似的,确保下载好Anaconda和Pycharm后,打开终端,并输入conda,如下
在这里插入图片描述
这时已经成功进入conda环境,接下来流程和Windows类似。输入

conda create -n yolov3 python=3.7
  • 1

按照提示输入y,再输入

conda activate yolov3
  • 1

来激活环境。然后下载requirements.txt。如果在当前终端下载不了的话,可以稍后在Pycharm的终端命令行中下载。

接下来需要打开Pycharm,如果一开始没有在桌面创建Pycharm的快捷键的话,需要在文件中找到Pycharm的文件,找到bin,并将bin在终端中打开,如下
在这里插入图片描述

点击 “在终端中打开 ”后输入命令

./pycharm.sh
  • 1

即可打开Pycharm软件。接下来依旧是打开已经下载解压好的yolo-pytorch-master文件夹,并选择已配置好的yolov3虚拟环境。同样在系统解释器中找到anaconda的envs文件夹中的yolov3,在yolov3的bin中找到python解释器,点击选择并确定。
在这里插入图片描述
配置完成后在Pycharm终端命令行中输入

pip install -r requirements.txt
  • 1

下载项目所需要的库,注意下载前按照Windows环境下的修改规范将requirements.txt内容进行修改。
下载完成后就可以按前文下载预训练模型并对代码进行修改,运行predict.py即可得到结果
在这里插入图片描述
笔者没有在Ubuntu上进行mAP测试,测试流程和Windows系统一样,有兴趣可以尝试。

至此,恭喜你已经完成了实习任务的第一个项目了!可喜可贺!

三、U-net语义分割

接下来进行第二个项目,U-net语义分割。项目地址如下
https://github.com/milesial/Pytorch-UNet
下载解压到合适的地方。(记得路径不要有中文

环境配置

首先依然是环境配置,和YOLOv3创建过程相同,打开Anaconda Prompt,创建unet虚拟环境,命令行输入:

conda create -n unet python=3.9
  • 1

注意python版本至少需要3.9,因为项目中的一些库只支持3.9以上的版本,此处我们就选用3.9。按提示输入y后成功创建,然后再输入

conda activate unet
  • 1

来激活环境。然后更换路径到项目路径之下,和YOLOv3流程类似。
更换后下载requirements.txt,在Anaconda Prompt中输入

pip install requirements.txt
  • 1

即可。

然后在Pycharm中打开该项目,选择刚刚创建的unet虚拟环境后,点击predict.py并尝试运行。在运行后会发现有报错,会提示没有安装torch库,这是因为作者的requirements.txt中并没有写出torch库的安装语句,此时需要找到python版本对应的torch库和vision库进行下载安装。笔者在该项目中使用的torch库和vision库版本如下

torch = 1.10.2
torchvision=0.11.3

读者可以沿用这两个版本的库,在终端手动进行下载,依次输入下面两条命令来下载两个库

pip install torch ==1.10.2
pip install torchvision ==0.11.3
  • 1
  • 2

如果出现下载报错,那么就需要手动下载torch的whl文件,然后再进入Anaconda Prompt进行下载,whl文件下载地址可参考以下链接
python安装torch的详细步骤
whl文件可以下载到U-net项目文件夹中,然后在Prompt中激活环境并更改到项目路径,输入

pip install torch-1.4.0+cpu-cp36-cp36m-win_amd64.whl 
  • 1

其中,install后面跟的是下载好的whl文件的全名,例如在文件夹中显示如下
在这里插入图片描述
所以直接复制全部名称进行pip下载即可,例在这里插入图片描述
torchvision库的下载方法和上述torch下载方法相同,自行下载安装对应的版本即可。

测试

从GitHub上下载好项目需要的预训练模型unet-carvana_scale0.5_epoch2.pth(笔者只使用了这一个0.5模型,另一个1.0也可以尝试预测),把该模型放在合适的路径下(建议就放在该项目文件夹中)

由于该项目的数据集全部都是Kaggle的Carvana数据,能进行语义分割的只有car,所以用来测试的图片还是从GitHub上下载吧,最后一次课给的需要测试的数据也是从Carvana数据集里抽的。

下载好之后可以自己挑选一辆喜欢的车,例如在这里插入图片描述
然后创建一个新文件夹MyTest,用来进行自己的测试。把刚刚挑选的车辆图片放进子文件夹In中,如图
在这里插入图片描述
Out是用来存放输出图片的文件夹。当然文件夹名字都是可以自己起的,并没有严格要求,随读者喜好即可。

读者可能想问:为什么要搞这么麻烦,不直接运行predict.py?大家务必还是多去读读README,这个项目是需要在命令行中进行输入操作的。同样在命令行操作的项目还有三维重建,后文再进行详述。

那么接下来打开Anaconda Prompt(建议一开始就别关)。激活unet环境并转换到项目路径之后,输入如下命令

python predict.py -m "D:\Pytorch-UNet-master\unet-carvana_scale0.5_epoch2.pth" -i "D:\Pytorch-UNet-master\MyTest\In\1.jpg" -o "D:\Pytorch-UNet-master\MyTest\Out\1_out.jpg" -v
  • 1

其中-m代表预训练好的模型路径,在后面输入你的模型路径即可。-i代表输入待预测图片的路径,-o代表输出结果的路径,这里使用的就是刚刚创建的MyTest文件夹中的图片。-v代表输出可视化结果,回车即可开始测试。
PS:路径能别写中文就别写中文

得到运行可视化结果如图
在这里插入图片描述
输出的语义分割图如下
在这里插入图片描述

模型评估

从官网下载Carvana数据集之后进行测试。将原始车辆图片和对应的语义分割图分别放在data文件的imgs和masks子文件夹中,如下在这里插入图片描述
对于模型的评估,需要用到evaluate.py,但是直接运行该py文件无法得到结果,需要调用该evaluate并自己编写一个用于评估的代码。当然,课程最后给出的测试文件中会包含评估用到的代码,不必担心不会写的问题。这里给出一个评估的代码,读者可以直接创建一个py文件并复制粘贴如下代码使用:

import torch
from torch.utils.data import DataLoader
from utils.data_loading import BasicDataset, CarvanaDataset
from pathlib import Path
from evaluate import evaluate
from unet import UNet

def main():
    # 加载预训练模型
    model_path = r"D:\Pytorch-UNet-master\MODEL_0.5.pth"#这里写预训练模型的路径
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    print("Device: ", device)
    net = UNet(n_channels=3, n_classes=2, bilinear=False)
    net.load_state_dict(torch.load(model_path, map_location=device))
    net.eval()
    print("Model loaded!")

    # 加载测试集
    dir_img = Path(r'D:\Pytorch-UNet-master\data\imgs')  # 原图片的路径
    dir_mask = Path(r'D:\Pytorch-UNet-master\data\masks')  # 语义分割图路径
    img_scale = 0.5
    try:
        dataset = CarvanaDataset(dir_img, dir_mask, img_scale)
    except (AssertionError, RuntimeError):
        dataset = BasicDataset(dir_img, dir_mask, img_scale)
    data_loader = DataLoader(dataset, batch_size=1, shuffle=False, pin_memory=True)

    # 评估模型
    use_amp = True
    dice_score = evaluate(net, data_loader, device,use_amp)
    Iou=dice_score/(2-dice_score)
    print("DICE: ", dice_score)#输出DICE指标
    print("IOU: ", Iou)#输出IOU指标

if __name__ == '__main__':
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

注意修改代码中的预训练模型路径和测试图片路径。修改完毕后点击运行即可得到评估结果,笔者选用其中10张进行评估,得到输出如下:
在这里插入图片描述
对于课程给出的测试代码,依然修改图片和模型路径即可。注意项目自带的evaluate.py只给出了DICE指标,对于IoU指标需要进行换算(换算过程在上文代码中已经给出),换算公式为: I o U = D i c e 2 − D i c e IoU=\frac{Dice}{2-Dice} IoU=2DiceDice
至此,本次实习的第二个项目完成。

四、Mask R-CNN实例分割

关于后两部分,笔者由于各种事情搁置了2个月,对于草履虫般的记忆,具体操作内容有些遗忘,如有遗漏多多担待。不懂的地方可以多阅读项目的README文档。

对于第三个项目,链接如下:https://github.com/bubbliiiing/mask-rcnn-tf2
下载并解压后进行环境配置。

环境配置

依然按照前两个实习项目的配置方法,利用Prompt创建虚拟环境,并下载对应的requirement.txt。注意Mask R-CNN的Python环境使用3.6的版本,高版本的Python可能会出现错误。创建好虚拟环境后,在Pycharm中选择创建好的虚拟环境。

下载好预训练的权重后,放在项目的model_data文件夹中,如下:
在这里插入图片描述

预测

环境配置好之后,打开predict.py,进行代码的更改。由于这个项目和YOLOv3项目的作者是同一人,所以代码风格也很相似,可以更快的上手。
更改测试模式为’dir_predict’

mode = "dir_predict"
  • 1

该模式可以遍历img文件夹,将结果输出在img_out文件夹中。读者可以把测试用的图片放在img文件夹中,例:
在这里插入图片描述
另外,在predict.py中,可以看到默认读取和输出的文件路径,如下

dir_origin_path ="img/"#输入图片路径
dir_save_path   = "img_out/"#输出结果路径
  • 1
  • 2

读者后续测试时可根据需要自行修改路径。

然后打开mask_rcnn.py进行修改。修改预训练权重的路径如下:

#修改路径为自己下载的权重地址,默认放在model_data中
 "model_path"        : 'model_data/mask_rcnn_coco.h5',
 "classes_path"      : 'model_data/coco_classes.txt',
  • 1
  • 2
  • 3

完成修改之后,就可以运行predict.py文件,得到输出的实例分割结果了。例图:
在这里插入图片描述

模型评估

使用下发的coco_20验证集以及对应的标签test_annotations.json进行模型评估。如果没有下发文件,可以自行在官网下载coco数据集和对应标签,下载过程不再详述。在这里插入图片描述
使用eval.py进行模型评估。打开eval.py并进行代码修改,由于使用的就是coco数据集进行评估,所以classes_path无需修改。修改评估图片路径和标签路径如下

Image_dir       = "maskrcnn/datatsets/coco_20/JPEGImages"
Json_path       = "maskrcnn/datatsets/coco_20/Jsons/test_annotations.json"
#还可以修改输出图片的路径
map_out_path    = 'maskrcnn/map_out'
  • 1
  • 2
  • 3
  • 4

修改完成之后运行eval.py文件,输出结果保存在 ‘maskrcnn/map_out’ 文件中。因为实例分割=目标识别+语义分割,故有目标识别和语义分割的两种评价指标。
运行得到的bbox评价指标(有关目标识别的精度)如下
在这里插入图片描述
其中AP是平均查准率,AR是平均召回率。

segm评价指标(有关像素语义分割的精度)如下:
在这里插入图片描述
输出的bbox和mask结果在map_out中,在这里插入图片描述
Mask R-CNN项目到此结束。另外一个项目E2EC是由季顺平老师带领完成的一种基于端对端的分割方法,必须在Ubuntu环境下(好像还得用GPU),没有硬性要求要完成,此处不再给出,有兴趣可以自行尝试。

五、GwcNet三维重建

终于到了最后一个项目,下载地址为:https://github.com/xy-guo/GwcNet
自行下载并解压,同样不要有中文路径。

环境配置

依然是使用Prompt进行配置,使用3.6版本的Python,该项目没有requirement.txt,下载对应的torch和torchvision,依次在终端输入如下语句:

pip install torch==1.7.0 
pip install torchvision 0.3.0
  • 1
  • 2

注意此处可能出现下载错误,要解决错误可以直接下载库对应的whl文件(如何操作查看上文),然后在Prompt里面安装即可。

PS:在save_disp.py中,对于未使用到的tensorboardX库,如果无法下载,可以将该行引入命令注释掉。
注释
另外,如果不能使用cuda,也需要在save_disp.py中找到对应代码并注释

# model, optimizer  
model = __models__[args.model](args.maxdisp)  
model = nn.DataParallel(model)  
#model.cuda() 注释这一行
  • 1
  • 2
  • 3
  • 4

然后修改代码中有关cuda的部分为:

state_dict = torch.load(args.loadckpt,map_location=torch.device('cpu'))
  • 1

在这里插入图片描述
如上,这样就可以不使用cuda进行预测。

预测

完成配置之后,开始预测。此项目依然需要命令行操作,可在项目文件目录下新建命令行文件mypredict.bat,输入如下代码命令:

python save_disp.py --datapath ./ --testlist ./filenames/my.txt --model gwcnet-g --loadckpt ./checkpoints/kitti15/gwcnet-g/best.ckpt
  • 1

其中--datapath代表存储数据文件的地址,./代表在当前文件路径下寻找。--testlist是存放预测图片地址的txt文件。注意需要下载测试图片以及预训练权重checkpoints。

按照命令内容,创建my.txt放在filenames文件夹中,输入需要测试的左右图片名称,例如

image_2/000000_10.png image_3/000000_10.png
image_2/000000_11.png image_3/000000_11.png
image_2/000001_10.png image_3/000001_10.png
  • 1
  • 2
  • 3

当然,需要在项目中创建存放图片的文件夹image_2和image_3,并把相应的图片放入文件夹中,如下:
在这里插入图片描述

预训练权重checkpoint从官网下载后,放在项目文件夹中即可。上述mypredict.bat命令使用的是kitti15权重。

然后在命令行中运行命令即可

>.\mypredict.bat
  • 1

得到的输出结果保存在prediction文件中,例图:
在这里插入图片描述

评估

课程下发的测试文件依然包含评估代码文件。首先同样需要先利用测试图片生成视差图,然后利用视差图、地面真实视差图以及用于区分前景和背景的对象图,得到模型评估结果。

编写命令行文件test.bat,用于输出视差图,也就是predictions。参考如下:

python save_disp.py --datapath ./ --testlist ./GWCNET_TEST/kitti15_test_20.txt --model gwcnet-g --loadckpt ./checkpoints/kitti15/gwcnet-g/best.ckpt
  • 1

其中图片地址指向测试集kitti15_test_20.txt。然后命令行运行test.bat文件对测试集进行预测,结果默认存储在prediction文件夹中。然后修改评估代码文件kitti_disp_test.py中的路径,如下:

if __name__ =="__main__":   
    pred_disp_dir =r"D:\predictions"  
    gt_disp_dir = r"D:\GWCNET_TEST\disp_occ_0"  
    obj_map_dir =r"D:\GWCNET_TEST\obj_map"  
    outputpath = r"D:\GWCNET_TEST\output_with_mae"
  • 1
  • 2
  • 3
  • 4
  • 5

注意输出路径不要包含中文,否则会报错。其中pred_disp_dir指向的是前一步预测的视差图,gt_disp_dir指向的是地面真实视差图,obj_map_dir指向的是用于区分前景和背景的对象图,最后得到的评估结果保存在outputpath所在目录中。

运行kitti_disp_test.py文件,得到的输出结果包括误差参数、原始预测误差图和插值预测误差图。例图如下:
在这里插入图片描述
图中白色区域表示存在误差的像素位置。白色区域越少,表示误差越少,视差图的精度越高。

得到的所有误差参数如下:

#背景误差像素数和背景像素总数
interpolated_error_count_bg	 = 320
interpolated_pixel_count_bg	 = 71084
ori_error_count_bg	 = 320
ori_pixel_count_bg	 = 71084
#前景误差像素数和前景像素数
interpolated_error_count_fg	 = 1
interpolated_pixel_count_fg	 = 17891
ori_error_count_fg	 = 1
ori_pixel_count_fg	 = 17891
#全部误差像素数和全部像素总数
interpolated_error_count_all	 = 321
interpolated_pixel_count_all	 = 88975
ori_error_count_all	 = 321
ori_pixel_count_all	 = 88975
pred_density	 = 1.0
#原始预测误差比例和插值预测误差比例
original prediction error ration = 0.003608
interpolated prediction error ration = 0.003608
MAE = 0.30363
ABS_THRESH	 = 3
REL_THRESH	 = 0.05
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

分析数据可以看出,原始预测和插值预测的误差比例是相同的。最后得到的平均绝对误差为MAE=0.30363

另外注意:关于torch库的版本,读者可以自己查找Python3.6对应的到底是哪个版本,因为本人写三维重建部分时,距离实习已经过了2月有余,再次运行代码时莫名奇妙出现了torch库不存在的报错,但是conda list查看时确有下载,我也深感无奈。希望读者出现类似问题时可以多多尝试,多多思考,解决报错。

结语

至此,CV的课间实习全部完成,可喜可贺。

虽然实习只要求能够下载代码,配好环境跑出结果就好。但是对于首次接触深度学习的同学,难免会遇到各种各样奇怪的、让人崩溃的、无语的问题。如果没有人引导,靠自己摸索完成还是相当有难度的,于是本人写下了这篇博文。读者实践的时候也可以多去询问老师和同学,可以避免很多不必要的麻烦,少走一些弯路。同时自己的独立思考和尝试也非常重要,相信实践出真知,一定不要轻言放弃,多去探索求知。

介于这是本人的第一篇博文,写作略显生疏,也难免会有错误或遗漏,欢迎读者指出!

最后感谢实习过程中帮助过我的老师和同学。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/882578
推荐阅读
相关标签
  

闽ICP备14008679号