《动手学深度学习》-48全连接卷积神经网络FCN实现

全连接神经网络通过卷积神经网络CNN实现特征提取,然后通过1x1的卷积将通道数转换为类别个数,最后通过转置卷积层将图像的高宽变换为原输入图的尺寸大小

一、代码

1.构建net

(1)框架

pretrained_net=torchvision.models.resnet18(pretrained=True) # print(list(pretrained_net.children())[-3:])#最后两层为AdaptiveAvgPool2d、Linear去掉 net=nn.Sequential(*list(pretrained_net.children())[:-2])
num_classes=21 net.add_module('final_conv',nn.Conv2d(in_features=512, out_features=num_classes,kernel_size=1)) net.add_module('Transposed_conv',nn.ConvTranspose2d(num_classes,num_classes,kernel_size=64,padding=16,stride=32))

(2)初始化

def bilinear_kernel(in_channel,out_channel,kernel_size): factor=(kernel_size+1)//2 #上采样放大倍数 if kernel_size %2==1: center=factor-1 else: center=factor-0.5 og=(torch.arange(kernel_size).reshape(-1,1),torch.arange(kernel_size).reshape(1,-1))#og[0]是行向量kx1,ogp[1]列向量1xk,广播之后变成kxk, filt=(1-torch.abs(og[0]-center)/factor)*(1-torch.abs(og[1]-center)/factor)#kxk的矩阵,中心大,周围小 weight=torch.zeros((in_channel,out_channel,kernel_size,kernel_size)) weight[range(in_channel),range(out_channel),:,:]=filt#让输入通道c只影响同编号C’输出,不进行混合,只改变对角线上的K初始化 return weight
W=bilinear_kernel(num_classes,num_classes,64) net.Transposed_conv.weight.data.copy_(W)

(3)测试

conv_transopsed=nn.ConvTranspose2d(3,3,kernel_size=4,padding=1,stride=2,bias=False) conv_transopsed.weight.data.copy_(bilinear_kernel(3,3,4)) img=torchvision.transforms.ToTensor()(Image.open('D:/PycharmDocument/limu/data/dogcat.png').convert('RGB')) X=img.unsqueeze(0) Y=conv_transopsed(X) out_img=Y[0].permute(1,2,0).detach() print('input image shape',img.permute(1,2,0).shape) print('output image shape',out_img.shape) d2l.set_figsize() fig,axes=plt.subplots(1,2) axes[0].imshow(img.permute(1,2,0)) axes[0].set_title('input image') axes[1].imshow(out_img) axes[1].set_title('output image') d2l.plt.show()

输入一张图,采用conv_transopsed操作,看一下大小,可以看出经过转置卷积,输出图片尺寸大一倍,

2.读取数据

batch_size,crop_size=36,(320,480)
train_iter,test_iter=test46SemanticSegmentation.load_data_voc(batch_size=batch_size,crop_size=crop_size)
voc_dir = 'D:/VOCtrainval_11-May-2012/VOCdevkit/VOC2012'
def read_voc_images(voc_dir, is_train=True):
"""读取所有VOC图像并标注"""
# 这里代码会自动拼路径:voc_dir + ImageSets + Segmentation + train.txt
txt_fname = os.path.join(voc_dir, 'ImageSets', 'Segmentation',
'train.txt' if is_train else 'val.txt')
mode = torchvision.io.image.ImageReadMode.RGB
with open(txt_fname, 'r') as f:
images = f.read().split()
features, labels = [], []
for i, fname in enumerate(images):
# 读取原始图片
features.append(torchvision.io.read_image(os.path.join(
voc_dir, 'JPEGImages', f'{fname}.jpg')))
# 读取语义分割标签图
labels.append(torchvision.io.read_image(os.path.join(
voc_dir, 'SegmentationClass' ,f'{fname}.png'), mode))
return features, labels

3.训练

def loss(inputs,targets):
return F.cross_entropy(inputs,targets,reduction='none').mean(1).mean(1)
num_epochs,lr,wd,device=5,0.01,1e-3,d2l.try_gpu()
trainer=torch.optim.SGD(net.parameters(),lr=lr,weight_decay=wd)
d2l.train_ch3(net,trainer,num_epochs,batch_size,device)
4.预测
def predect(img):
X=test_iter.dataset.normalize_image(img).unsqueeze(0)#(1,3,h,w,)
pred=net(X.to(device)).argmax(dim=1)#(1,h,w)
return pred.reshape(pred.shape[1],pred.shape[2])#(h,w)
#根据类别反向找对应的rgb,将像素点涂对应的颜色
def label2image(pred):
colormap=torch.tensor(test46SemanticSegmentation.VOC_COLORMAP,device=device)
X=pred.long()
return colormap[X,:]
test_images,test_labels=read_voc_images(voc_dir,is_train=False)
n,imags=4,[]
for i in range(n):
crop_rect=(0,0,320,480)
X=torchvision.transforms.functional.crop(test_images[i],*crop_rect)
pred=label2image(predect(X))
imags+=[X.permute(1,2,0),pred.cpu(),torchvision.transforms.functional.crop(test_labels[i],*crop_rect).permute(1,2,0)]
d2l.show_images(imags[::3]+imags[1::3]+imags[2::3],3,n,scale=2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯优图Youtu-2B多模型协作方案

腾讯优图Youtu-2B多模型协作方案 1. 引言 随着大语言模型(Large Language Model, LLM)在自然语言理解与生成任务中的广泛应用,如何在资源受限的环境中实现高效、低延迟的推理服务成为工程落地的关键挑战。腾讯优图实验室推出的 Youtu-LLM-2…

MinerU质量检测:5步评估PDF提取准确率

MinerU质量检测:5步评估PDF提取准确率 在日常工作中,质量专员经常需要处理大量PDF文档——科研论文、技术报告、合同文件、财务报表等等。这些文档格式复杂、结构多样,传统人工提取方式不仅耗时耗力,还容易出错。随着AI技术的发展…

QSPI地址与数据复用总线原理:图解说明多路复用

QSPI地址与数据复用总线原理:深入浅出图解多路复用机制一个现实问题:MCU引脚不够用了怎么办?在设计一款工业物联网终端时,你选中了一颗功能强大的Cortex-M7微控制器——性能强劲、集成度高。但当你准备外挂一颗大容量NOR Flash用于…

Emotion2Vec+ Large情感类型有哪些?9类Emoji标签详细解读

Emotion2Vec Large情感类型有哪些?9类Emoji标签详细解读 1. 引言 随着人机交互技术的不断发展,语音情感识别(Speech Emotion Recognition, SER)正逐渐成为智能客服、心理健康监测、虚拟助手等场景中的关键技术。Emotion2Vec Lar…

RetinaFace魔改实战:基于预装环境快速实现GhostNet轻量化改造

RetinaFace魔改实战:基于预装环境快速实现GhostNet轻量化改造 你是不是也遇到过这样的问题:在做边缘设备上的人脸检测项目时,RetinaFace精度很高、效果很好,但模型太大,跑在树莓派这种资源受限的设备上卡得像幻灯片&a…

小白也能懂的YOLOE目标检测:官版镜像保姆级教程

小白也能懂的YOLOE目标检测:官版镜像保姆级教程 在人工智能领域,目标检测一直是计算机视觉的核心任务之一。然而,传统模型如YOLO系列虽然推理速度快,但受限于封闭词汇表——只能识别训练时见过的类别。而随着开放词汇表&#xff…

2026必备10个降AIGC工具,研究生必看

2026必备10个降AIGC工具,研究生必看 AI降重工具:研究生论文的得力助手 在当前学术研究日益重视原创性的背景下,越来越多的研究生面临一个共同难题——如何有效降低论文的AIGC率,同时保持内容的逻辑性和语义通顺。随着AI写作工具的…

GLM-4.6V-Flash-WEB轻量秘籍:如何在低配环境高效运行?

GLM-4.6V-Flash-WEB轻量秘籍:如何在低配环境高效运行? 你是不是也遇到过这样的问题:想用最新的多模态大模型做点小项目,结果发现动辄需要A100、显存32G起步,本地设备根本带不动?更别说部署到边缘设备上了。…

LangFlow智能招聘系统:HR的AI面试官搭建指南

LangFlow智能招聘系统:HR的AI面试官搭建指南 你是不是也经常被堆积如山的简历压得喘不过气?每天花几个小时看简历、初筛候选人,却总觉得效率低、漏人多?别担心,现在有一套零代码、可视化、可落地的解决方案——用 Lan…

批量传输在USB over Network驱动中的优化策略

如何让远程U盘快如本地?揭秘 USB over Network 批量传输的底层优化你有没有过这样的体验:在远程办公时,插上一个“映射”的U盘,想拷贝个大文件,结果速度慢得像拨号上网?明明本地千兆网络,为什么…

全网最全8个AI论文平台,本科生搞定毕业论文!

全网最全8个AI论文平台,本科生搞定毕业论文! 论文写作的救星,AI工具正在改变一切 在如今这个信息爆炸的时代,本科生撰写毕业论文的压力日益增大。从选题、资料收集到结构搭建、内容撰写,每一个环节都可能成为阻碍。而随…

Speech Seaco Paraformer ASR代码实例:调用API实现自动化语音转写

Speech Seaco Paraformer ASR代码实例:调用API实现自动化语音转写 1. 引言 随着人工智能技术的不断演进,语音识别(Automatic Speech Recognition, ASR)在会议记录、访谈整理、语音笔记等场景中发挥着越来越重要的作用。Speech S…

社交网络影响力分析:大数据方法与实践

社交网络影响力分析:从大数据方法到实践落地的全指南 摘要/引言:为什么你需要重新理解“影响力”? 去年双11,某美妆品牌的市场部犯了愁: 他们花50万找了一位“百万粉小红书KOL”推广新品,结果笔记点赞破1…

初学者掌握 claude code 的一些进阶知识

目录1.发展史2.斜杠命令 commands3.skill 技能包4.钩子 HOOK5. MCP 服务器6.插件 plugins7.子代理 SubAgents8.项目记忆文件 CLAUDE.md9.Plan模式暂时的结语 很少有人真的喜欢天天学新东西,我一个 java 技术栈的朋友,…

如何通过服装管理ERP软件实现生产流程的高效优化?

如何选择适合的服装管理ERP软件以提升企业效益 在选择适合的服装管理ERP软件时,首先要考虑企业的具体需求。不同企业在规模、业务流程和管理模式上存在差异,因此定制化解决方案尤为关键。其次,软件的易用性也是重要考量之一,高效的…

机器学习中的性能指标

摘要:机器学习性能指标是评估模型表现的关键工具。分类问题常用指标包括:混淆矩阵(TP/TN/FP/FN)、准确率、精确率、召回率、F1分数、ROC-AUC和对数损失;回归问题则使用MAE、MSE和R分数。这些指标从不同角度量化模型性能…

打包 Python 项目

本教程将带你一步步打包一个简单的 Python 项目。你将学习如何添加必要的文件和目录结构来创建一个可发布的包,如何构建这个包,并将其上传到 Python Package Index (PyPI)。 部分命令需要较新版本的 pip,因此请先确保你已安装最新版&#xf…

搞定提示工程优化文本生成

💓 博客主页:借口的CSDN主页 ⏩ 文章专栏:《热点资讯》 提示工程的优化艺术:从理论到高效文本生成的实践指南目录提示工程的优化艺术:从理论到高效文本生成的实践指南 引言:提示工程的核心价值与时代挑战 一…

尺寸约束下商业卫星编码器系统的抗辐照MCU性能边界研究

摘要:随着低轨商业卫星星座的规模化部署,星载编码器系统对抗辐照微控制器单元(MCU)的性能、体积及成本提出了严苛的多重要求。本文基于国科安芯AS32S601系列MCU的完整辐照试验数据体系,系统性地研究在LQFP144塑封封装所…

AI原生应用可解释性:如何说服利益相关者?

AI原生应用可解释性:从技术落地到利益相关者说服的全维指南 关键词 AI可解释性(XAI)、利益相关者沟通、决策透明度、信任构建、合规性工程、可解释性成熟度模型、多模态解释框架 摘要 本报告系统解析AI原生应用可解释性的核心机制与利益相关者…