Pythorch扩展用于快速研发原型和Kaggle农业

pytorch-toolbelt的Python项目详细描述


Pythorch工具带

Build StatusDocumentation Status

apytorch-toolbelt是一个python库,它为pytorch提供了一组铃声和口哨,用于快速研发原型和kaggle农场:

里面是什么

    LI>采用灵活的编码器-解码器结构的简易模型构建。
  • 模块:coordconv,scse,超柱,反方向可分离卷积等。
  • gpu友好的测试时间扩展tta用于分割和分类
  • 对大型(5000x5000)图像的GPU友好推断
  • 每天常见的例程(修复/恢复随机种子、文件系统实用程序、度量)
  • 损失:双星对焦,对焦,缩小对焦,洛瓦兹,提卡和骰子损失,机翼损失等。
  • Catalyst库的附加功能(批预测的可视化,其他度量)

展示台:Catalyst, Albumentations, Pytorch Toolbelt example: Semantic Segmentation @ CamVid

为什么

诚实的回答是“我需要一个方便的方法来重用代码,为我的Kaggle职业生涯”。 2018年,我获得了Kaggle Master徽章,这是一条漫长的道路。 我经常发现自己一遍又一遍地重复使用大多数旧管道。 在某个时候,它结晶成了这个储存库。

这个lib不是用来替换catalyst/ignite/fast.ai。相反,它是为了补充它们而设计的。

安装

pip install pytorch_toolbelt

展示

编码器-解码器模型构造

frompytorch_toolbelt.modulesimportencodersasEfrompytorch_toolbelt.modulesimportdecodersasDclassFPNSegmentationModel(nn.Module):def__init__(self,encoder:E.EncoderModule,num_classes,fpn_features=128):self.encoder=encoderself.decoder=D.FPNDecoder(encoder.output_filters,fpn_features=fpn_features)self.fuse=D.FPNFuse()input_channels=sum(self.decoder.output_filters)self.logits=nn.Conv2d(input_channels,num_classes,kernel_size=1)defforward(self,input):features=self.encoder(input)features=self.decoder(features)features=self.fuse(features)logits=self.logits(features)returnlogitsdeffpn_resnext50(num_classes):encoder=E.SEResNeXt50Encoder()returnFPNSegmentationModel(encoder,num_classes)deffpn_mobilenet(num_classes):encoder=E.MobilenetV2Encoder()returnFPNSegmentationModel(encoder,num_classes)

构成多重损失

frompytorch_toolbeltimportlossesasLloss=L.JointLoss(L.FocalLoss(),1.0,L.LovaszLoss(),0.5)

测试时间增加

frompytorch_toolbelt.inferenceimporttta# Truly functional TTA for image classification using horizontal flips:logits=tta.fliplr_image2label(model,input)# Truly functional TTA for image segmentation using D4 augmentation:logits=tta.d4_image2mask(model,input)# TTA using wrapper module:tta_model=tta.TTAWrapper(model,tta.fivecrop_image2label,crop_size=512)logits=tta_model(input)

大图像推断:

importnumpyasnpimporttorchimportcv2frompytorch_toolbelt.inference.tilesimportImageSlicer,CudaTileMergerfrompytorch_toolbelt.utils.torch_utilsimporttensor_from_rgb_image,to_numpyimage=cv2.imread('really_huge_image.jpg')model=get_model(...)# Cut large image into overlapping tilestiler=ImageSlicer(image.shape,tile_size=(512,512),tile_step=(256,256),weight='pyramid')# HCW -> CHW. Optionally, do normalization heretiles=[tensor_from_rgb_image(tile)fortileintiler.split(image)]# Allocate a CUDA buffer for holding entire maskmerger=CudaTileMerger(tiler.target_shape,1,tiler.weight)# Run predictions for tiles and accumulate themfortiles_batch,coords_batchinDataLoader(list(zip(tiles,tiler.crops)),batch_size=8,pin_memory=True):tiles_batch=tiles_batch.float().cuda()pred_batch=model(tiles_batch)merger.integrate_batch(pred_batch,coords_batch)# Normalize accumulated mask and convert back to numpymerged_mask=np.moveaxis(to_numpy(merger.merge()),0,-1).astype(np.uint8)merged_mask=tiler.crop_to_orignal_size(merged_mask)

高级示例

  1. Inria Sattelite Segmentation
  2. CamVid Semantic Segmentation

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
线程“main”java中的socket异常。网SocketException:在java上重置连接。木卫一。缓冲读取器。读线(未知源)   java原子参考   如何使用Java以编程方式确定两个XML文件(如XPATH)之间的差异?   java使用ApachePOI从存在于不同行中的两列中提取公共值   java在JavaFX中使用WebView会破坏Linux上的UI   Java中for循环中的If语句   Java中Hilberts空间填充曲线算法   由于出现错误,使用Reformation2下载的java文件停止工作   java是否可以通过编程方式控制setjaxbvalidationeventhandler?   没有Eclipse GUI的java Eclipse RCP应用程序   多线程在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?   swing Java LWJGL和JOptionPane   java JPA:设置@JoinColumn(updateable=false)以避免OptimisticLockException   java GL VertexBuffer无效操作   java在Swing中实现后退/前进按钮   java在同一个JTable上创建两个表   类文件中的java不兼容魔术值1008813135   在Java中使用“@”的c#文字字符串?