【小白做科研(五)】复现代码(下)

本文分享了作者在复现深度学习模型过程中关于数据处理、训练、测试的经验。通过重构数据迭代器,作者体会到代码逻辑并非想象中复杂,并提醒不要盲目崇拜原始代码。使用`tqdm`库进行训练过程的动态显示,利用`torchmetrics`进行模型评估。目前,作者已将模型训练和评测封装为外部函数,并提供了代码仓库链接供读者参考。

前言

上次说到了复现模型,欠着训练和评测都没讲,这周把训练评测都搞定了,然后又复现了一篇新的,有一个感触就是深度学习这些模型看着感觉怪吓人,但是代码逻辑不是特别复杂;而且自己写一写这些代码,真的感觉入了门,以及pytorch forum竟然给我发了邮件说把我提升了用户评级(因为我经常看他们博客)hh~

这一篇也主要分享一些看到的好的博客,以及遇到的各种困难, 还有解决的过程。

数据处理

之前搬了微软在TensorFlow平台实现的手写iterator到Pytorch上,心里其实一直有个疙瘩因为没有用pytorch自带的DatasetsDataloader,再加上新复现的模型有一些特别的要求,我想的就索性重构一下原来手写的Iterator,实现过程调用了好几个torchtext的api(因为感觉很帅hh),但是我中间测试了一下发现新写的比原来的慢了5s。。。 具体原因还在探究,心态血崩后觉得以后还是不能盲目崇拜,有时候原始丑陋的代码也是很管用的。

训练

训练过程其实没啥说的,有一个好东西叫做tqdm是python的一个包,可以包装iterator然后动态显示进程。个性化显示数据等等,截张图放下面hh
在这里插入图片描述
我这里数据及比较小(毕竟还没传服务器),大家可以自己去试试效果。

测试

要评测模型肯定少不了各种metricsklearn.metrics里面有很多api都很方便,比如roc_auc_

资源下载链接为: https://pan.quark.cn/s/5c50e6120579 目标检测是计算机视觉领域的一项关键任务,其目的是在图像或视频中识别并定位特定对象。最近,一份名为“目标检测-20种常用深度学习算法论文、复现代码汇总.zip”的资源包引起了广泛关注。它涵盖了20种不同的深度学习算法在目标检测领域的最新研究成果及其实现代,以下是对这些算法的简要介绍: YOLO(You Only Look Once):YOLO是一种高效的实时目标检测系统,凭借其快速的检测速度和良好的精度而广受关注。从YOLOv1到YOLOv3,该系列不断优化模型结构和损失函数,逐步提升检测性能。 SSD(Single Shot MultiBox Detector):SSD通过在一个网络中同时完成目标的分类和定位,有效平衡了速度与精度。它利用不同尺度的特征图来检测不同大小的目标,尤其提升了小目标检测的准确性。 Faster R-CNN:Faster R-CNN是一种基于Region Proposal Network(RPN)的目标检测框架,将候选区域生成和分类合并为一步,显著提高了检测速度。 Mask R-CNN:Mask R-CNN在Faster R-CNN的基础上增加了分割任务,不仅能定位目标,还能进行像素级别的语义分割,适用于需要精确分割的场景。 RetinaNet:RetinaNet引入了Focal Loss,有效解决了类别不平衡问题,显著提升了小目标的检测性能。 CornerNet:CornerNet将目标检测转换为检测边界框的角点,这种创新方法在COCO数据集上取得了优异的性能。 CenterNet:CenterNet以目标中心点作为检测基础,简化了检测流程,同时具备较高的检测精度。 DETR(Deformable DETR):DETR是Transformer架构在目标检测中
在图像处理入门代码复现方面,有多个方向的示例。 在图像拼接领域,有相关专栏可以帮助科研工作者根据源理解论文中的公式算法,从而快速入门图像拼接,跟着专栏学习能提升代码能力以及对图形学、数学等原理的理解[^1]。 在图像去噪方面,有适合新手小白的Pytorch版本CBDNet复现代码复现步骤如下:cv2读取的图像是Numpy类型,维度为hwc,而Pytorch模型输入的Tensor为bchw,并且是归一化后的float类型(一般为float32)。所以需要将cv2读取的图像归一化转为float32类型的np,将维度hwc转为chw,模型输出后再逆归一化(*255),维度chw转为hwc,最后使用cv2保存图像[^2]。 还有DnCNN的Pytorch源训练测试全流程解析代码。由于源的DenoisingDataset中图像是以Tensor形式加噪的,对于超分和JPEG去块,先将Tensor图像转为PIL,在缩放或JPEG encoder后,再转回Tensor形式,实现输入的制作[^3]。 另外,在CBDNet复现代码基础上,将模型由CBDNet改为RIDNet,其他代码基本保持不变即可完成RIDNet的复现,CBDNet复现文章对数据处理、模型训练和验证、推理测试全流程有详细讲解,简单修改路径就能训练自己的数据集,代码也有详细注释[^2][^4]。 以下是部分示例代码: ```python import cv2 import numpy as np import torch # 以CBDNet复现中图像维度转换为例 def preprocess_image(image): # 归一化并转为float32类型 image = image.astype(np.float32) / 255.0 # 维度hwc转为chw image = np.transpose(image, (2, 0, 1)) # 转为torch.Tensor image = torch.from_numpy(image) return image def postprocess_image(image): # 逆归一化 image = image * 255 # 转为numpy image = image.numpy() # 维度chw转为hwc image = np.transpose(image, (1, 2, 0)) return image # 读取图像 image = cv2.imread('your_image_path.jpg') # 预处理 preprocessed_image = preprocess_image(image) # 假设这里有模型处理 # processed_image = model(preprocessed_image) # 后处理 # postprocessed_image = postprocess_image(processed_image) # 保存图像 # cv2.imwrite('output_image.jpg', postprocessed_image) ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值