论文复现|Panoptic Deeplab(全景分割PyTorch)

摘要:这是发表于CVPR 2020的一篇论文的复现模型。

本文分享自华为云社区《Panoptic Deeplab(全景分割PyTorch)》,作者:HWCloudAI 。

这是发表于CVPR 2020的一篇论文的复现模型,B. Cheng et al, “Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation”, CVPR 2020,此模型在原论文的基础上,使用HRNet作为backbone,得到了高于原论文的精度,PQ达到了63.7%,mIoU达到了80.3%,AP达到了37.3%。该算法会载入Cityscapes上的预训练模型(HRNet),我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。

具体算法介绍:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=33d3239f-8f0b-4432-a842-f787662ed6a0

注意事项:

1.本案例使用框架:PyTorch1.4.0

2.本案例使用硬件:GPU: 1*NVIDIA-V100NV32(32GB) | CPU: 8 核 64GB

3.运行代码方法: 点击本页面顶部菜单栏的三角形运行按钮或按Ctrl+Enter键 运行每个方块中的代码

4.JupyterLab的详细用法: 请参考《ModelAtrs JupyterLab使用指导》

5.碰到问题的解决办法: 请参考《ModelAtrs JupyterLab常见问题解决办法》

1.下载数据和代码

运行下面代码,进行数据和代码的下载

本案例使用cityscapes数据集。

import os
import moxing as mox
数据代码下载
mox.file.copy_parallel('s3://obs-aigallery-zc/algorithm/panoptic-deeplab','./panoptic-deeplab')

2.模型训练

2.1依赖库加载

#!/usr/bin/env python3
-*- coding: utf-8 -*-
from __future__ import print_function
import os
root_path = './panoptic-deeplab/'
os.chdir(root_path)
获取当前目录结构信息,以便进行代码调试
print('os.getcwd():', os.getcwd())
import time
import argparse
import time
import datetime
import math
import sys
import shutil
import moxing as mox # ModelArts上专用的moxing模块,可用于与OBS的数据交互,API文档请查看:https://github.com/huaweicloud/ModelArts-Lab/tree/master/docs/moxing_api_doc
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

2.2训练参数设置

parser = argparse.ArgumentParser(description='Panoptic Deeplab')
parser.add_argument('--training_dataset', default='/home/ma-user/work/panoptic-deeplab/', help='Training dataset directory') # 在ModelArts中创建算法时,必须进行输入路径映射配置,输入映射路径的前缀必须是/home/work/modelarts/inputs/,作用是在启动训练时,将OBS的数据拷贝到这个本地路径中供本地代码使用。
parser.add_argument('--train_url', default='./output', help='the path to save training outputs') # 在ModelArts中创建训练作业时,必须指定OBS上的一个训练输出位置,训练结束时,会将输出映射路径拷贝到该位置
parser.add_argument('--num_gpus',  default=1, type=int, help='num of GPUs to train')
parser.add_argument('--eval', default='False', help='whether to eval')
parser.add_argument('--load_weight', default='trained_model/model/model_final.pth',type=str) # obs路径 断点模型 pth文件 如果是评估 则是相对于src的路径
parser.add_argument('--iteration', default=100, type=int)
parser.add_argument('--learning_rate', default=0.001, type=float)
parser.add_argument('--ims_per_batch', default=8, type=int)
args, unknown = parser.parse_known_args() # 必须将parse_args改成parse_known_args,因为在ModelArts训练作业中运行时平台会传入一个额外的init_method的参数
dir
fname = os.getcwd()
project_dir = os.path.join(fname, "panoptic-deeplab")
detectron2_dir = os.path.join(fname, "detectron2-0.3+cu102-cp36-cp36m-linux_x86_64.whl")
panopticapi_dir = os.path.join(fname, "panopticapi-0.1-py3-none-any.whl")
cityscapesscripts_dir = os.path.join(fname, "cityscapesScripts-2.1.7-py3-none-any.whl")
requirements_dir = os.path.join(project_dir, "requirements.txt")
output_dir = "/home/work/modelarts/outputs/train_output"
config strings
evalpath = ''
MAX_ITER = 'SOLVER.MAX_ITER ' + str(args.iteration+90000)
BASE_LR = 'SOLVER.BASE_LR ' + str(args.learning_rate)
IMS_PER_BATCH = 'SOLVER.IMS_PER_BATCH ' + str(args.ims_per_batch)
SCRIPT_PATH = os.path.join(project_dir, "tools_d2/train_panoptic_deeplab.py")
CONFIG_PATH = os.path.join(fname, "configs/config.yaml")
CONFIG_CMD = '--config-file ' + CONFIG_PATH
EVAL_CMD = ''
GPU_CMD = ''
OPTS_CMD = MAX_ITER + ' ' + BASE_LR + ' ' + IMS_PER_BATCH
RESUME_CMD = ''
#functions
def merge_cmd(scirpt_path, config_cmd, gpu_cmd, eval_cmd, resume_cmd, opts_cmd):
 return "python " + scirpt_path + " "+ config_cmd + " " + gpu_cmd + " " + eval_cmd + " " + resume_cmd + " " + OPTS_CMD
if args.eval == 'True':
 assert args.load_weight, 'load_weight empty when trying to evaluate' # 如果评估时为空,则报错
 if args.load_weight != 'trained_model/model/model_final.pth':
 #将model拷贝到本地,并获取模型路径
 modelpath, modelname = os.path.split(args.load_weight)
 mox.file.copy_parallel(args.load_weight, os.path.join(fname, modelname))
 evalpath = os.path.join(fname,modelname)
 else:
 evalpath = os.path.join(fname,'trained_model/model/model_final.pth')
    EVAL_CMD = '--eval-only MODEL.WEIGHTS ' + evalpath
else:
    GPU_CMD = '--num-gpus ' + str(args.num_gpus)
 if args.load_weight:
        RESUME_CMD = '--resume'
 if args.load_weight != 'trained_model/model/model_final.pth':
 modelpath, modelname = os.path.split(args.load_weight)
 mox.file.copy_parallel(args.load_weight, os.path.join('/cache',modelname))
 with open('/cache/last_checkpoint','w') as f: #创建last_checkpoint文件
 f.write(modelname)
 f.close()
 else:
 os.system('cp ' + os.path.join(fname, 'trained_model/model/model_final.pth') + ' /cache/model_final.pth')
 with open('/cache/last_checkpoint','w') as f: #创建last_checkpoint文件
 f.write('model_final.pth')
 f.close()
os.environ['DETECTRON2_DATASETS'] = args.training_dataset #添加数据库路径环境变量
cmd = merge_cmd(SCRIPT_PATH, CONFIG_CMD, GPU_CMD, EVAL_CMD, RESUME_CMD, OPTS_CMD)
os.system('mkdir -p ' + args.train_url)
print('*********Train Information*********')
print('Run Command: ' + cmd)
print('Num of GPUs: ' + str(args.num_gpus))
print('Evaluation: ' + args.eval)
if args.load_weight:
 print('Load Weight: ' + args.load_weight)
else:
 print('Load Weight: None (train from scratch)')
print('Iteration: ' + str(args.iteration))
print('Learning Rate: ' + str(args.learning_rate))
print('Images Per Batch: ' + str(args.ims_per_batch))

2.3安装依赖库

安装依赖库需要几分钟,请耐心等待

def install_dependecies(r,d, p, c):
 os.system('pip uninstall pytorch> out1.txt')
 os.system('pip install  torch==1.7.0> out2.txt')
 os.system('pip install --upgrade pip')
 os.system('pip install --upgrade numpy')
 os.system('pip install torchvision==1.7.0> out3.txt')
 os.system('pip install pydot')
 os.system('pip install --upgrade pycocotools')
 os.system('pip install tensorboard')
 os.system('pip install -r ' + r + ' --ignore-installed PyYAML')
 os.system('pip install ' + d)
 os.system('pip install ' + p)
 os.system('pip install ' + c)
 os.system('pip install pyyaml ==5.1.0')
安装依赖
print('*********Installing Dependencies*********')
install_dependecies(requirements_dir,detectron2_dir, panopticapi_dir, cityscapesscripts_dir)
*********Installing Dependencies*********

2.4开始训练

print('*********Training Begin*********')
print(cmd)
start = time.time()
ret = os.system(cmd+ " >out.txt")
if ret == 0:
 print("success")
else:
 print('fail')
end_time=time.time()
print('done')
print(end_time-start)
if args.eval == 'False':
 os.system('mv /cache/model_final.pth ' + os.path.join(fname, 'output/model_final.pth')) #/cache模型移动到输出文件夹
if os.path.exists(os.path.join(fname, 'pred_results')):
 os.system('mv ' + os.path.join(fname, 'pred_results') + ' ' + args.train_url)

训练完成之后,可以在out.txt中看运行日志
在./panoptic-deeplab/output/pred_results/文件目录下,有该模型全景分割,实例分割,语义分割的评估结果

3.模型测试

3.1加载测试函数

from test import *

3.2开始预测

if __name__ == '__main__':
 img_path = r'/home/ma-user/work/panoptic-deeplab/cityscapes/leftImg8bit/val/frankfurt/frankfurt_000000_003920_leftImg8bit.png' # TODO 修改测试图片路径
 model_path = r'/home/ma-user/work/panoptic-deeplab/output/model_final.pth' # TODO 修改模型路径
 my_model = ModelClass(model_path)
    result = my_model.predict(img_path)
 print(result)

论文复现|Panoptic Deeplab(全景分割PyTorch)

点击关注,第一时间了解华为云新鲜技术~

Original: https://www.cnblogs.com/huaweiyun/p/16921152.html
Author: 华为云开发者联盟
Title: 论文复现|Panoptic Deeplab(全景分割PyTorch)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/807304/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python 引入模块的四种方法(超详细)

    使用import调用模块可以调用第三方库和标准库,以及自己做的,自己做的import+py文件名就可以了,我们使用requests第三方库举例: import requests# …

    Python 2023年8月1日
    037
  • Java用户管理系统【完整版】

    💂 个人主页: 陶然同学 🤟 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 💅 想寻找…

    Python 2023年11月7日
    038
  • FAQ os.system调用失效问题

    有个学员反馈allure无法生成报告 示例代码 import pytest,os def test_os(): pass if __name__ == ‘__main__’: py…

    Python 2023年6月12日
    073
  • Frida-trace常用命令

    转载:https://blog.csdn.net/tslx1020/article/details/128250777 1、spawn – 冷启动 frida-trac…

    Python 2023年10月29日
    040
  • Java 中的一些知识点

    Java 中的知识点 与C++相关 toString方法 super 与C++相关【了解的不是很多】 在Java程序中:一个方法以 ; 结尾,并且修饰符列表中有 native 关键…

    Python 2023年6月3日
    061
  • nginx目录遍历漏洞复现

    nginx目录遍历漏洞复现 漏洞描述: Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露。 漏洞原理: 修改nginx.conf,在如…

    Python 2023年8月6日
    096
  • 又是一年中秋至|Python Pygame制作中秋兔子接月饼游戏【源码+解析】

    一年中秋又快到了,今年加入了 Python_的学习行列,得益于 Python_的开发效率和易读性,网上写文章的次数多了起来,既然是中秋节那肯定要搞个应景的游戏才行。 左思右想没有头…

    Python 2023年9月20日
    055
  • python如何屏幕输入_Pygam中的屏幕输入

    在学校的一个编程项目中,我必须用pygame创建一个拼写游戏。然而,由于我对这一切都很陌生,所以我无法想出如何允许用户输入字母并使它们出现在游戏显示屏上。这是我目前为止的代码(以及…

    Python 2023年9月23日
    041
  • flask搭建一个图书管理平台01-环境配置和项目初始化

    最近在看了一些flask的入门书籍和官方的文档,想通过一个简单的实例,来练习一下flask中的一些技术点 权限控制: 未登录-可查看书籍列表,可点击查看,跳转电子书籍预览页 已登录…

    Python 2023年8月12日
    055
  • python魂斗罗源码_Python魂斗罗小游戏源代码

    Contra.py import pygame import sys from pygame.locals import * from settings import Settin…

    Python 2023年9月22日
    034
  • 浅尝:Django与go-cphttp搭建QQ机器人

    所谓QQ机器人就是对QQ事件产生响应。如戳一戳、加好友申请,文字甚至语音消息等等事件,当你机器人收到这些事件时在服务端产生操作,如回复、发邮件、新建文件夹等等。炉火纯青者可以试试用…

    Python 2023年8月3日
    0122
  • 【面试总结】APP测试面试问题(版本2)

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/upstudy/p/16712701.htmlAutho…

    Python 2023年6月15日
    076
  • anaconda及库安装

    1.安装anaconda(全英文文件夹下) 2.验证:输入下面命令出现版本信息即成功 conda –version 3.在Anaconda Prompt中分别运行如下两条命令:(…

    Python 2023年9月27日
    035
  • 极限学习机(ELM)从原理到程序实现(附完整代码)

    摘要:极限学习机( ELM)是当前一类非常热门的机器学习算法,被用来训练单隐层前馈神经网络( SLFN)。本篇博文尽量通俗易懂地对极限学习机的原理进行详细介绍,之后分析如何用 _M…

    Python 2023年10月25日
    033
  • appinventor飞机大战案例_Python飞机大战实战项目案例

    来源:博学谷 作者:照照 都说实践是检验知识掌握程度的最好测试。随着Python学习者的增长,越来越多的零基础入门课程让人眼花缭乱。虽然说基础理论的学习十分重要,但是如果仅仅只学习…

    Python 2023年9月23日
    068
  • 字符串常用操作与列表增加数据方法

    文章目录 106_字符串常用操作方法之字符串对齐 107_字符串常用操作方法之判断开头或结尾 108_字符串常用操作方法之判断 110_列表简介 112_查找函数 113_判断是否…

    Python 2023年8月15日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球