一大波PyTorch图像分割模型来袭,俄罗斯程序员出品新model zoo
一个新的图像分割model zoo来啦!
一大波基于PyTorch的图像分割模型整理好了就等你来用~
这个新集合由俄罗斯的程序员小哥Pavel Yakubovskiy一手打造,包含四种模型架构和30种预训练骨干模型(backbone),官方文档列举了四条主要特点:
- 高级API(两行代码构建神经网络)
- 4种模型架构:Unet,Linknet,FPN,PSPNet
- 每个架构有30种可用的编码器
- 所有编码器都具有预先训练的权重,可实现更快、更好的收敛
授人以鱼不如授人以渔,放出了model zoo还不算,小哥还贴心地提供了如何使用CamVid数据集进行训练的示例。
效果怎么样
CamVid数据集是计算机视觉领域常用的一个数据集,通常用来进行街景分割。
俄罗斯小哥用这个数据集训练了一个能识别出图片中汽车的新模型。无论这辆车是隐藏在暗夜之中还是只有黄豆大小,都逃不出图像分割模型的手掌心。
构建模型时他选择了传奇的Unet架构,并使用了se_resnext50_32x4d这个预训练骨干模型。
听上去好像很厉害的样子,但群众都相信眼见为实,不看看模型训练效果如何,心里难免有一丢丢怀疑。
嗯,看来不管是昏天黑地还是目标只有一丁点大,新模型的预测结果都挺不错。
再加大难度呢?
量子位表示眼已瞎,模型是真强。
Pavel Yakubovskiy小哥还在Colab上放了用Catalyst(PyTorch上的高级框架)训练模型的代码,感兴趣的话可以直接在浏览器上跑一下。
入园指南
model zoo已开源,免票入场,快来围观。
先来了解一下都有哪些预训练模型可以用:
以及它们的权重:
pip一下:
$ pip install segmentation-models-pytorch
$ pip install git+https://github.com/qubvel/segmentation_models.pytorch
python库安装完成,就可以轻松地创建模型啦:
1import segmentation_models_pytorch as smp
2model = smp.Unet()
根据训练任务的不同,可以通过调整骨干模型来改变网络结构,并且使用预训练权重来进行初始化:
1model = smp.Unet('resnet34', encoder_weights='imagenet')
也可以改变模型的输出类型:
1model = smp.Unet('resnet34', classes=3, activation='softmax')
所有的模型都有预训练编码器,因此准备数据的方法必须与进行权重训练时一致:
1from segmentation_models_pytorch.encoders import get_preprocessing_fn
2preprocess_input = get_preprocessing_fn(‘renset18’, pretrained=’imagenet’)
One More Thing
其实Pavel Yakubovskiy小哥早在去年就发布了一个基于Keras的图像分割model zoo,一经推出就颇受欢迎。
一样的配方,一样的味道,简单易用,一脉相承。麻麻再也不用担心我找不到合适的预训练模型。
不过基于Keras的版本预训练模型要少一些,小哥也没有放出对应的示例,效果如何,就需要自己去检验啦~
传送门
PyTorch版Github地址: https://github.com/qubvel/segmentation_models.pytorch
Keras版Github地址: https://github.com/qubvel/segmentation_models
Colab上手: https://colab.research.google.com/gist/Scitator/e3fd90eec05162e16b476de832500576/cars-segmentation-camvid.ipynb#scrollTo=A40deTWg-WJ1
— 完 —
- Immutable(不可变)集合
- nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡
- 使用WiX制作简单MSI安装程序
- 企业应用通用架构图
- CacheManager:–个通用缓存接口抽象类库
- silverlight: http请求的GET及POST示例
- 如何判断AI创造物能够成为“作品”?附独家视频讲解
- 程序员最喜欢的五大神器
- UE4新手编程之创建C++项目
- 如何启动“Microsoft File Transfer Manager”
- 职责链(Chain of Responsibility)模式在航空货运中的运用实例
- 灵活的 overflow
- 制作WordPress侧边栏“热门文章”小工具并集成在主题中的方法
- 好用的WCF Visualizers
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法