Pytorch 加载保存模型【直播】2019 年县域农业大脑AI挑战赛---(三)保存结果
在模型训练结束,结束后,通常是一个分割模型,输入 1024x1024 输出 4x1024x1024。
一种方法就是将整个图切块,然后每张预测,但是有个不好处就是可能在边界处断续。
由于这种切块再预测很ugly,所以直接遍历整个图预测(这就是相当于卷积啊),防止边界断续,还有一个问题就是防止图过大不能超过20M。
很有意思解决上边的问题。话也不多说了。直接上代码:
from farmlanddataset import FarmDataset
import torch as tc
from osgeo import gdal
from torchvision import transforms
import png
import numpy as np
use_cuda=True
model=tc.load('./tmp/model30') #torch.save(model,'./tmp/model{}'.format(epoch))
device = tc.device("cuda" if use_cuda else "cpu")
model=model.to(device)
model.eval()
ds=FarmDataset(istrain=False) def createres(d,outputname):
#创建一个和ds大小相同的灰度图像BMP
driver = gdal.GetDriverByName("BMP")
#driver=ds.GetDriver()
od=driver.Create('./tmp/'+outputname,d.RasterXSize,d.RasterYSize,1)
return od def createpng(height,width,data,outputname):
w=png.Writer(width,height,bitdepth=2,greyscale=True)
of=open('./tmp/'+outputname,'wb')
w.write_array(of,data.flat)
of.close()
return
def predict(d,outputname='tmp.bmp'):
wx=d.RasterXSize #width
wy=d.RasterYSize #height
print(wx,wy)
od=data=np.zeros((wy,wx),np.uint8)
#od=createres(d,outputname=outputname)
#ob=od.GetRasterBand(1) #得到第一个channnel
blocksize=1024
step=512
for cy in range(step,wy-blocksize,step):
for cx in range(step,wx-blocksize,step):
img=d.ReadAsArray(cx-step,cy-step,blocksize,blocksize)[0:3,:,:] #channel*h*w
if (img.sum()==0): continue
x=tc.from_numpy(img/255.0).float()
#print(x.shape)
x=x.unsqueeze(0).to(device)
r=model.forward(x)
r=tc.argmax(r.cpu()[0],0).byte().numpy() #512*512
#ob.WriteArray(r,cx,cy)
od[cy-step//2:cy+step//2,cx-step//2:cx+step//2]=r[256:step+256,256:step+256]
print(cy,cx)
#del od
createpng(wy,wx,od,outputname)
return print("start predict.....")
predict(ds[0],'image_3_predict.png')
print("start predict 2 .....")
predict(ds[1],'image_4_predict.png')
然后看看我的结果:提交了,晚上希望有个不错的结果


看上边的分类结果,真是感慨深度学习大法好,传统的遥感分类完全没有办法,上边结果在比赛中评测指标>0.2。
有了这些就可以发挥想象力和搬家能力,训练模型。

Pytorch 加载保存模型【直播】2019 年县域农业大脑AI挑战赛---(三)保存结果的更多相关文章
- Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练
对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024. 我没有使用二分类,直接使用了四分类. 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始 ...
- Pytorch dataset自定义【直播】2019 年县域农业大脑AI挑战赛---数据准备(二),Dataset定义
在我的torchvision库里介绍的博文(https://www.cnblogs.com/yjphhw/p/9773333.html)里说了对pytorch的dataset的定义方式. 本文相当于实 ...
- Pytorch【直播】2019 年县域农业大脑AI挑战赛---初级准备(一)切图
比赛地址:https://tianchi.aliyun.com/competition/entrance/231717/introduction 这次比赛给的图非常大5万x5万,在训练之前必须要进行数 ...
- 开园第一篇---有关tensorflow加载不同模型的问题
写在前面 今天刚刚开通博客,主要想法跟之前某位博主说的一样,希望通过博客园把每天努力的点滴记录下来,也算一种坚持的动力.我是小白一枚,有啥问题欢迎各位大神指教,鞠躬~~ 换了新工作,目前手头是OCR项 ...
- live2d web端加载moc3模型
大佬博客链接:https://blog.csdn.net/weixin_44128558/article/details/104792345 照着大佬的博客做一下,可以先学会怎么生成bundle.js ...
- 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题
笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...
- pytorch 加载mnist数据集报错not gzip file
利用pytorch加载mnist数据集的代码如下 import torchvision import torchvision.transforms as transforms from torch.u ...
- ceisum_加载倾斜摄影模型
osgb转换为3Dtiles格式(使用工具转换) 然后加载到cesium中(加载代码见下,可以控制模型高度) var offset = function(height,tileset) { conso ...
- xBIM 实战02 在浏览器中加载IFC模型文件并设置特效
系列目录 [已更新最新开发文章,点击查看详细] 在模型浏览器中加载模型后,可以对模型做一些特殊操作.下图是常用的设置. 都是通过 xbim-viewer.js 中的 API 来设置以达到一定的 ...
随机推荐
- iOS NSMutableDictionary中UIImage的存储和读取
思路:将UIImage转换成NSData,然后插入到NSMutableDictionary中.读取时,用NSData读出来,然后再转换成UIImage -存储 UIImage *image = [se ...
- sublime text3编辑器经常使用快捷方式
1.简单语法的自己主动补全 preferences->setting user 输入例如以下代码,保存. { "auto_complete":true, "auto ...
- Visual Studio静态编译
1.Visual Studio静态编译设置: [Project]-[prj_name Properties],按例如以下框设置 2.why配置成静态编译? 假设动态编译,在没有安装Visual Stu ...
- Servlet+JSP 原理
Servlet是用Java编写的Server端程序,与协议和平台无关,可移植行较强. Servlet在编辑时须要导入特定的Servlet API 的包,类似于普通Java程序的写法. Servlet採 ...
- 【bzoj1303】[CQOI2009]中位数图
一个大于b的数和一个小于b的数可以互相抵消,所以我们用1和-1表示. 从b向两边扩展,left[i]表示b左边抵消后有i个数比b小的可能数,right[i]表示b右边抵消后有i个数比b大的可能数. a ...
- HDU 5752Sqrt Bo
Sqrt Bo Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- 基于Jquery插件Uploadify实现实时显示进度条上传图片
网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们 ...
- 22.Extjs Panel中显示多行工具栏(tbar)
转自:http://blog.sina.com.cn/s/blog_454fbf740100t0xj.html 在应用程序的制作中,我们经常性的会用到工具栏,在Extjs中Panel中提供了tbar和 ...
- 通过usb访问mtp设备(ubuntu12.04) (转载)
转自:http://robert.penz.name/658/howto-access-mtp-devices-via-usb-on-ubuntu-12-04/ A friend asked me h ...
- 关于Webpack的的认识及傻瓜式教学
刚学习了Webpack,ememememememememem就赶脚是一个打包工具,将js.css.json.img等等通通打包为最终的文件,最后渲染为一个页面. 也是终于捋清了Webpack的思路,在 ...