DeepLab2:用于深度标记的TensorFlow库(2021)

人工智能67

深度标记是指通过深度神经网络为图像中的每个像素分配预测值来解决计算机视觉问题。只要感兴趣的问题可以用这种方式表述,DeepLab2 就应该达到目的。此外,此代码库包括我们最近的和最先进的深度标签研究模型。我们希望您会发现它对您的项目有用。

DeepLab2 是一个用于深度标记的 TensorFlow 库,旨在为计算机视觉中的一般密集像素预测问题提供最先进且易于使用的 TensorFlow 代码库。DeepLab2 包括我们最近开发的所有带有预训练检查点的 DeepLab 模型变体以及模型训练和评估代码,允许社区复制和进一步改进最先进的系统。为了展示 DeepLab2 的有效性,我们采用 AxialSWideRNet 作为网络主干的 Panoptic-DeepLab 在 Cityscaspes 验证集上实现了 68.0% PQ 或 83.5% mIoU,仅使用单尺度推理和 ImageNet-1K 预训练检查点。我们希望公开共享我们的库可以促进未来对密集像素标记任务的研究,并设想该技术的新应用。代码在 https://github.com/googleresearch/deeplab2 上公开提供。

深度标记是指通过使用深度神经网络为图像或视频中的每个像素分配预测值(即标记每个像素)来解决某些计算机视觉问题 [38, 44, 6]。典型的密集预测问题包括但不限于语义分割 [26, 37, 19],实例分割 [23, 42],全景分割 [36, 48],深度估计 [47, 21],视频全景分割 [34] , 70] 和深度感知视频全景分割 [55]。超越我们在 2018 年之前的开源库1(只能使用前几个 DeepLab 模型变体 [6、7、8、11] 处理图像语义分割),我们引入了 DeepLab2,这是一个用于深度标记的现代 TensorFlow 库 [1], 旨在为一般密集像素标记任务提供统一且易于使用的 TensorFlow 代码库。在 TensorFlow2 中重新实现,此版本包括我们最近开发的所有 DeepLab 模型变体 [13、67、66、70、55]、模型训练和评估代码以及几个预训练的检查点,允许社区重现并进一步改进此先进系统。我们希望开源 DeepLab2 将促进未来对密集像素标记任务的研究,并期待采用该技术的新突破和新应用。在以下部分中,我们详细介绍了一些流行的密集预测任务以及 DeepLab2 库中提供的最先进模型。

几个计算机视觉问题可以表述为密集像素标记。在本节中,我们简要介绍一些密集像素标记任务的典型示例。

  • 图像语义分割 比用于场景理解的图像级分类 [56] 更进一步,以像素级精度识别图像中的对象,需要对象的精确轮廓。它通常被表述为逐像素分类 [44, 6],其中每个像素都由编码其语义类别的预测值标记。
  • 图像实例分割 在图像中以像素级精度识别和定位对象实例。现有模型 [17, 41, 24, 43, 4] 大多基于自上而下的方法(即,边界框检测然后分割)并将问题表述为掩码检测(比边界框检测更进一步,以便于实例级理解)。相反,我们的系统从自下而上的角度处理实例分割,在分割预测之上检测(或更准确地说,分组)实例。因此,我们的系统通过编码语义类和实例身份的预测值标记每个"事物"像素(并且"东西"像素被忽略)。请注意,与其他基于提案的模型不同,我们的模型生成不重叠的实例掩码。
  • 图像全景分割 统一语义分割和实例分割。该任务不允许重叠实例掩码,并需要使用编码语义类和实例身份的预测值标记每个像素(包括"事物"和"东西"像素)。我们想强调的是,我们的整个系统,包括训练和评估管道,使用全景标签格式(即全景标签 = 语义标签 × 标签除数 + 实例 id),因此不会(在训练模式期间)或生成 (在推理模式期间)任何重叠的掩码 [12]。这与大多数现有的现代全景分割模型 [35, 72, 40, 52, 39, 45, 69, 54] 非常不同,后者使用重叠实例掩码进行训练。
  • 单目深度估计试图通过用估计的深度值标记每个像素来理解场景的 3D 几何形状。
  • 视频全景分割将图像全景分割扩展到视频域,其中在整个视频序列中强制执行时间一致的实例标识。
  • 深度感知视频全景分割通过解决深度估计、全景分割和像素级跟踪的联合任务,提供深入的场景理解。视频中的每个像素都标有语义类、时间一致的实例身份和估计的深度值。

在此,我们简要介绍我们开发的 DeepLab2 库中包含的 DeepLab 模型变体。

  • DeepLab 其中多孔卷积 [6](也称为带孔卷积或扩张卷积 2 )被大量用于语义分割(参见以前的几项工作 [28、22、50、59],它们以不同的方式有效地使用了多孔卷积)。具体来说,DeepLabv1 [6] 采用多孔卷积来明确控制由卷积神经网络主干 [59、60、25、14、53] 计算的特征分辨率。此外,多孔卷积使我们能够在不增加参数数量的情况下有效地扩大模型的视野。因此,后续 DeepLab 模型 [7, 8, 11] 中提出的 ASPP 模块(Atrous Spatial Pyramid Pooling)通过采用具有多个采样率的并行多孔卷积有效地聚合了多尺度信息。
  • Panoptic-DeepLab 用于全景分割的简单、快速且强大的自下而上(即无提议)基线。Panoptic-DeepLab 分别采用特定于语义和实例分割的 dualASPP 和双解码器结构。语义分割分支与 DeepLab 相同,而实例分割分支与类别无关,涉及简单的实例中心回归 [33, 51, 62, 49, 73]。尽管很简单,但 Panoptic-DeepLab 在多个全景分割基准上产生了最先进的性能。
  • Axial-DeepLab建立在提议的 Axial-ResNet [67] 骨干之上,该骨干有效地捕获具有精确位置信息的远程上下文。Axial-ResNet 通过将空间卷积替换为轴向注意力层 [27, 32],依次应用于高度和宽度轴,从而在主干的所有层中实现巨大甚至全局的感受野。此外,还提出了一种位置敏感的自注意公式,以在巨大的感受野中保留上下文位置。因此,Axial-DeepLab 采用提议的 Axial-ResNet 作为 Panoptic-DeepLab 框架 [13] 中的主干,在多个全景分割基准上优于最先进的卷积对应物。
  • MaX-DeepLab第一个完全端到端的全景分割系统。MaX-DeepLab 使用掩码转换器直接预测一组分割掩码及其相应的语义类,消除了对以前手工设计的模块(例如框锚 [24]、事物合并启发式 [35] 或模块 [72] 的需求])。掩码转换器使用建议的 PQ 式损失函数进行训练,并采用双路径架构,使 AxialResNet 能够读取和写入全局内存,从而允许任何 Axial-ResNet 层与转换器之间的高效通信(特征信息交换)。MaX-DeepLab 在 COCO [42] 上实现了最先进的全景分割结果,优于基于提案和无提案的方法。
  • Motion-DeepLab视频全景分割任务的统一模型,需要对每个像素进行分割和跟踪。它建立在 Panoptic-DeepLab 之上,并使用一个额外的分支将每个像素回归到前一帧的中心位置。网络输入不是使用单个 RGB 图像作为输入,而是包含两个连续的帧,即当前帧和前一帧,以及前一帧的中心热图 [76]。输出用于为整个视频序列中的所有实例分配一致的轨道 ID。
  • ViP-DeepLab联合处理单目深度估计和视频全景分割的统一模型。它通过添加深度预测头来执行单目深度估计和下一帧实例分支以生成具有时间一致的视频实例 ID 的全景预测,从而扩展了 Panoptic-DeepLab [13]。ViP-DeepLab 在多个基准测试中实现了最先进的性能,包括 KITTI 单目深度估计 [21, 63]、KITTI 多目标跟踪和分割 [21, 65] 以及 Cityscapes 视频全景分割 [15, 34] 。

在本节中,我们将简要介绍 DeepLab2 库支持的网络主干。

  • MobileNetv3为移动设备设计的轻量级主干 [30, 57],因此可以用作快速设备上模型比较的基准。
  • ResNet以及一些现代修改(例如, Inception stem [61]、随机丢弃路径 [31])。
    该主干可用作一般基线。
  • SWideRNet它在宽度(通道数)和深度(层数)上扩展了 Wide ResNets [74, 71, 5]。 这可用于强模型比较。
  • Axial-ResNetAxial-SWideRNet它在最后几个阶段用轴向注意力 [27, 32, 67] 块替换了 ResNet [25] 和 SWideRNet [9] 残差块。这种混合 CNN-Transformer(更准确地说,只有自注意力模块作为 Transformer 编码器)架构可用作基于自注意力模型比较的基线。除了默认的轴向注意块,我们还支持全局或非局部注意 [64, 68] 块。
  • MaX-DeepLab它以双路径方式将转换器块 [64] 与 Axial-ResNets [67] 相结合,允许任何 Axial-ResNet 层和转换器之间进行有效通信。当关闭变压器路径时,该主干也可以用于 Panoptic-DeepLab 框架 [13]。

为了简要强调 DeepLab2 的有效性,我们的 Panoptic-DeepLab 采用 Axial-SWideRNet 作为网络主干,在 Cityscapes 验证集上实现了 68.0% PQ 或 83.5% mIoU,具有单尺度推理和 ImageNet-1K 预训练检查点。对于更详细的结果,我们将读者推荐给提供的模型动物园。

最后,我们想强调的是,我们已经以一种通用的方式实现了 Axial-Block,它不仅包含基于 Transformer 的块(即,axis-attention [67]、global-attention [64]、双路径 Transformer ]) 以及卷积残差块(即基本块、瓶颈块 [25]、宽残差块 [9],每个都有或没有可切换 Atrous 卷积 [54])。我们的设计允许用户轻松开发新颖的神经网络,这些网络有效地结合了卷积 [38]、注意力 [2] 和变换器 [64](即自注意力和交叉注意力)操作。

除了用于密集预测任务的典型数据增强(即随机缩放、左右翻转和随机裁剪)之外,我们还支持:

  • AutoAugment [16] 发现的随机颜色抖动。在 [9] 中,我们分别在 COCO 和 Cityscapes 数据集上应用了 1.0 和 0.2 级的增强策略。

我们开源 DeepLab2,其中包含我们所有最近的研究成果,希望它能促进未来对密集预测任务的研究。代码库仍在积极开发中,非常欢迎社区对代码库的任何贡献。最后,重申一下,代码和模型动物园可以在 https://github.com/google-research/deeplab2 中找到。

Original: https://blog.csdn.net/studyeboy/article/details/118176951
Author: studyeboy
Title: DeepLab2:用于深度标记的TensorFlow库(2021)



相关阅读1

Title: python、tensorflow、pycharm的安装过程总结

python版本: python3.6.4

tensorflow版本: tensorflow 2.4.0(CPU版)

pycharm版本: pycharm 2017.3

python版本和tensorflow版本需要保证一定的对应关系,否则会在使用的时候出现问题,具体对应关系参见网站:

https://tensorflow.google.cn/install/source#gpu

如图,下面还有GPU版本的对应关系,可以自行查找。

DeepLab2:用于深度标记的TensorFlow库(2021)

一、Python 安装

python官网:https://www.python.org

  1. 在官网中点击Download,然后找到对应的版本进行下载,这里我装的是3.6.4版的。

DeepLab2:用于深度标记的TensorFlow库(2021)

DeepLab2:用于深度标记的TensorFlow库(2021)

  1. 双击下载的程序,点击 Customize installation,勾选 Add Python 3.6 to path,勾选了这一步就自动进行了环境配置,不用手动配置。

DeepLab2:用于深度标记的TensorFlow库(2021)

  1. 点击 next, 勾选 install for all users,选择安装路径,建议不要装在c盘,可以在其他盘新建一个python3.6.4的文件夹存放。

  2. 点击 install,等几分钟就安好了。

安装过程可以参见文章:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程_pdcfighting的博客-CSDN博客

二、Pycharm 安装

  1. Pycharm 官网下载地址:https://www.jetbrains.com/pycharm/download/other.html

  2. 在官网中找到对应的2017.3版的pycharm,点击windows版本进行下载。

DeepLab2:用于深度标记的TensorFlow库(2021)

  1. 安装及激活过程参见文章:

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程_pdcfighting的博客-CSDN博客

三、使用pip安装tensorflow

  1. tensorflow是在机器学习的算法编程中要用到的包,如果有这方面需求的小伙伴可以提前装好,后期在进行代码调试时可以避免很多错误。

  2. 右键点击电脑左下角的 开始按钮,点击 搜索,输入 cmd回车,

DeepLab2:用于深度标记的TensorFlow库(2021)

  1. 在命令提示框中输入以下的命令,回车。开始下载。
pip install tensorflow-cpu==2.4.0
  1. 这里可能有点久,要保证 不能断网。它会另外安装其他的包,这些包在机器学习中也会经常用到。如果出现红字,再安装一次。直到出现successfull installed ...,表明已经成功安装好了tensorflow包。

DeepLab2:用于深度标记的TensorFlow库(2021)

  1. 如果总是安装失败,可能是由于外网限速。尝试在后面加一个:

-i https://pypi.tuna.tsinghua.edu.cn/simple ,采用镜像服务器,再进行安装。如图:

pip install tensorflow-cpu==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 这里我下载的是 cpu版的 tensorflow,如果直接用 pip install tensorflow就默认装最新版。这里如果出现红字失败了,就重复以上步骤。

  2. 后期在使用python时,也可以使用pip安装包,在cmd命令提示框中用pip安装,格式如下:

直接装最新版: pip install 包名

装指定版: pip install 包名==版本号

  1. 另一种方法是直接在python代码中下载。如果在一个python文件中的包名出现了红色波浪线,左键单击出现红色波浪线的包名,然后等待左上角出现红色灯泡,单击灯泡,点击install package ...进行下载。待下面出现 Successfull并且没有进度条之后安装成功,红色波浪线消失。

DeepLab2:用于深度标记的TensorFlow库(2021)

DeepLab2:用于深度标记的TensorFlow库(2021)

参考文章:

tensorflow使用出错的解决方法:https://blog.csdn.net/Athena_Tintin/article/details/107550335

Python环境搭建—安利Python小白的Python和Pycharm安装详细教程_pdcfighting的博客-CSDN博客

tensorflow的安装:https://blog.csdn.net/qq_41683065/article/details/108702408

Original: https://blog.csdn.net/Luo__Yi_/article/details/118185195
Author: Luo__Yi_
Title: python、tensorflow、pycharm的安装过程总结

相关阅读2

Title: KenLM使用教程

  1. 安装
git clone https://github.com/kpu/kenlm.git
cd kenlm/
mkdir -p build
cd  build
cmake ..

make -j 32

安装过程中可能会出现没有libboost库,engin3,执行命令:

sudo yum install boost-devel
sudo yum install eigen3

其他linux发行版,自行查找对应的安装方式。
测试安装是否成功, build/bin/lmplz,有显示则安装成功。 将bin目录加入PATH,这样在任意目录下都可以使用bin下面的命令。

  1. 训练

基本用法:

lmplz -o N --verbose_header --text your_corpus --arpa model.arpa

.arpa转成 .bin效果是一样的,但是速度会更快。

build_binary -s test.arpa test.bin

参数解释:
(1) --vocab_estimate
为了在corpus count计算预分配内存,默认词表大小为1000000,可以根据实际的词表大小进行设置(稍大词表大小)
(2) --verbose_header
生成的arpa文件头部显示一些信息,如各个文法元组的个数
(3) --text
需要训练的文本,事先得预处理好,去标点,正则化等等,训练词级别的N-gram需要进行分词,字级别的N-gram,只要把各个字符用空格空开就可
(4) --arpa
生成的arpa文件的名称
(5) --prune
剪枝操作,使用方法如: --prune 1 1 3 4,首先这四个位置的数字表示对应元组词频的阈值,即小于这个词频的元组会被剪枝掉,如 4 表示4-gram中元组出现次数小于4的需要被剪枝。另外需要注意,这一串数字需要满足 非递减
(6) --limit_vocab_file
指定词表文件,不在词表的字都会被剪枝掉。词表的形式是,用空格隔开每个单元,如 我 你 他
(7) --discount_fallback
平滑操作
(8) --interpolate_unigrams
为了模拟srilm的实现,这个几乎用不上

  1. Python接口

安装

pip install kenlm

kenlm/lm/test.arpa为例:

import kenlm
model=kenlm.LanguageModel('test.arpa')
print(model.score('this is a sentence.',bos = True,eos = True))

结果如下:
DeepLab2:用于深度标记的TensorFlow库(2021)

Original: https://blog.csdn.net/qq_33424313/article/details/120726582
Author: 爱可乐的松鼠
Title: KenLM使用教程

相关阅读3

Title: 基于PaddleOCR无法准确识别小图、长图的问题

目的

飞浆开源的PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地,但是经过我的测试,在小图和长图上,PaddleOCR文本检测模型的效果就大大降低,如果没有大量的数据集就很难解决这个问题,这篇文章将好好讲解下如何解决这个棘手的问题。

问题展现

以下面几个图进行测试,在不修改任何代码的情况下执行命令,看下实际效果

python tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./inference/ch_PP-OCRv3_det_infer/" --image_dir="./test/"

测试的小图

DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021)

前三张,没有任何检测框,最后一张检测出了两个框,如下图:

DeepLab2:用于深度标记的TensorFlow库(2021)

测试的长图

DeepLab2:用于深度标记的TensorFlow库(2021)DeepLab2:用于深度标记的TensorFlow库(2021)DeepLab2:用于深度标记的TensorFlow库(2021)

前一张,没有任何检测框,下两张效果很差,如下图:

DeepLab2:用于深度标记的TensorFlow库(2021)DeepLab2:用于深度标记的TensorFlow库(2021)

解决方式

1、增加小图数据集然后进行检测训练

优点:无需修改代码

缺点:耗时

2、对图片进行预处理,增加图片的大小,给图片加一定大小的边框

优点:提高了图片的检测效果

缺点:降低检测速度

下面我们看看如何实现第二种方式,代码如下

if __name__ == "__main__":
    ...

    image_names = os.listdir(args.image_dir)
    index = 0

    for image_file in image_file_list:
        index += 1
        img, flag = check_and_read_gif(image_file)
        if not flag:
            img = cv2.imread(image_file)
        if img is None:
            logger.info("error in loading image:{}".format(image_file))
            continue
        st = time.time()

        # *******************开始*********************
        h, w = img.shape[0], img.shape[1]
        border = [0, 0]
        transform_size = 320  # 图片增加边框到320大小
        if w < transform_size or h < transform_size:
            if h < transform_size:
                border[0] = (transform_size - h) / 2.0
            if w < transform_size:
                border[1] = (transform_size - w) / 2.0
            # top&#xFF0C;buttom&#xFF0C;left&#xFF0C;right &#x5BF9;&#x5E94;&#x8FB9;&#x754C;&#x7684;&#x50CF;&#x7D20;&#x6570;&#x76EE;&#xFF08;&#x5206;&#x522B;&#x4E3A;&#x56FE;&#x50CF;&#x4E0A;&#x9762;&#xFF0C; &#x4E0B;&#x9762;&#xFF0C; &#x5DE6;&#x9762;&#xFF0C;&#x53F3;&#x9762;&#x586B;&#x5145;&#x8FB9;&#x754C;&#x7684;&#x957F;&#x5EA6;&#xFF09;
            img = cv2.copyMakeBorder(img, int(border[0]), int(border[0]), int(border[1]), int(border[1]),
                                     cv2.BORDER_CONSTANT,
                                     value=[215, 215, 215])
        # &#x4FDD;&#x5B58;&#x56FE;&#x7247;
        image_file = "inference_results/test/" + image_names[index-1]
        cv2.imwrite(image_file, img)
        # *******************&#x7ED3;&#x675F;***********************

        dt_boxes, _ = text_detector(img)

我将图片增加边框到320大小,下面我们来看看实际效果,如下图:

DeepLab2:用于深度标记的TensorFlow库(2021)

DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021)

可以看到,上面无法检测的小图都检测到了,两个长图效果也大大增加。

上面是为了观察流程,现在看如何把边框去掉,接上上面的代码,如下:

        # &#x5220;&#x9664;&#x8FD9;&#x4E24;&#x884C;&#x4EE3;&#x7801;
        # image_file = "inference_results/test/" + image_names[index-1]
        # cv2.imwrite(image_file, img)
        # *******************&#x7ED3;&#x675F;***********************

        dt_boxes, _ = text_detector(img)

        for bno in range(len(dt_boxes)):
            tmp_box = copy.deepcopy(dt_boxes[bno])
            if transform:
                if border[0] > 0 or border[1] > 0:
                    for i in range(len(tmp_box)):
                        pos = [0, 0]

                        if 0 <= 0 tmp_box[i][0] - border[1] <="w:" pos[0]="tmp_box[i][0]" elif 0: else: if border[0] pos[1]="tmp_box[i][1]" tmp_box[i][1] dt_boxes[bno][i]="pos</code"></=>

结果如下:

DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021) DeepLab2:用于深度标记的TensorFlow库(2021)

DeepLab2:用于深度标记的TensorFlow库(2021)

DeepLab2:用于深度标记的TensorFlow库(2021)

DeepLab2:用于深度标记的TensorFlow库(2021)

总结

经过上面方式2的调整,基本上小图和长图文字检测有个质的飞跃,如还有其他方式能够提高图片的检测,希望在评论区提供出来,共同进步。

Original: https://blog.csdn.net/YY007H/article/details/124973777
Author: 番茄小能手
Title: 基于PaddleOCR无法准确识别小图、长图的问题