yolo darknet的启示(残差相加放在leakrelu之后)

发布时间:2026/7/11 2:22:10

yolo darknet的启示(残差相加放在leakrelu之后)
之前的训练cifar10的lenet网络架构修改后的网络架构看到没残差后的relu被我注释掉了我们再看前版本残差块residualExt2再看新版本residualExt2改了什么class residualExt2 :public Layer {//改进成先降维再升维202607101844public:residualExt2(cudnnHandle_t cudnn_, int batch_, int c, int h, int w) : cudnn(cudnn_), batch(batch_), _c(c), _h(h), _w(w) {layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c, _c , _h, _w, 1, 1));//c3,6*12*12-16*8*8layers.emplace_back(std::make_sharedBN(cudnn, batch, _c , _h, _w));layers.emplace_back(std::make_sharedLeakyRL(cudnn, batch, _c , _h, _w)); //c3,6*12*12-16*8*8layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c , _c, _h, _w, 3, 1, 1));//尝试残差此处要记住输入X//layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c, _c/2, _h, _w, 1, 1));//c3,6*12*12-16*8*8//layers.emplace_back(std::make_sharedBN(cudnn, batch, _c/2, _h, _w));//layers.emplace_back(std::make_sharedLeakyRL(cudnn, batch, _c /2, _h, _w)); //c3,6*12*12-16*8*8//layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c/2, _c, _h, _w, 3, 1, 1));layers.emplace_back(std::make_sharedBN(cudnn, batch, _c, _h, _w));layers.emplace_back(std::make_sharedLeakyRL(cudnn, batch, _c, _h, _w));//20260710收到darknet的启发1506cudaMalloc(output, batch * _c * _h * _w * sizeof(float));//输出32*32*32-----------------------显然输入也是32*32*32cudaMalloc(input2, batch * _c * _h * _w * sizeof(float));cudaMalloc(d_residual, batch * _c * _h * _w * sizeof(float));// cudaMalloc(output, batch * 10 * sizeof(float));//这里的10代表10个类所以不能用cudaMalloc(grad_input, batch * _c * _h * _w * sizeof(float));//反向和梯度计算不管}void forward(float* input_)override {input input_;input2 input_;for (const auto l : layers) {l-forward(input);input l-get_output();}int NN batch * _c * _h * _w;residual_forward_kernel (NN 255) / 256, 256 (output, input, input2, NN);error_handling(cudaGetLastError());//cudaMemcpy(input2, inputTemp, sizeof(float)*batch * 10, cudaMemcpyDeviceToDevice);}void forward2(float* input_)override {input input_;input2 input_; //batch 1;for (const auto l : layers) {l-forward2(input);input l-get_output();}int NN batch * _c * _h * _w;//int NN batch * 32 * 32 * 32;residual_forward_kernel (NN 255) / 256, 256 (output, input, input2, NN);// error_handling(cudaGetLastError());// cudaMemcpy(input2, inputTemp, sizeof(float)*batch * 10, cudaMemcpyDeviceToDevice);/*const float alpha 1.0f, beta 0.0f;forward(input);*/}/*void forward2(float* inputtest)override {input inputtest;const float alpha 1.0f, beta 0.0f;forward(input);}*/void backward(float* grad_output)override {//梯度来自残差块后的relu当前只有一个残差块float* grad grad_output;//要记住这个梯度即备份一个float* grad备用 grad_output;for (int i layers.size() - 1; i 0; i--) {layers[i]-backward(grad);grad layers[i]-get_grad_input();}//float* d_residual grad备用*X输入数据;//input2 input_;// float* d_residual grad备用*input2;//input2 input_;int NN batch * _c * _h * _w;/*for (int i 0; i NN; i){d_residual[i] grad备用[i]*input2[i];}*/int threads 256;int blocks (NN threads - 1) / threads;//mulext blocks, threads (NN, batch, _c, _h, _w, input2, _c, grad备用);//// mul blocks, threads (grad备用, input2, d_residual, NN);//c为输出d_residual//error_handling(cudaGetLastError());//residual_backprop_kernel blocks, threads (grad, grad_input, grad备用, NN);//error_handling(cudaGetLastError());//// cudaMemcpy(grad_input, grad, sizeof(float)*batch * 32 * 32 * 32, cudaMemcpyDeviceToDevice);//使用yolo 的残差试一试看两个bn有什么情况mul blocks, threads (grad备用, input2, d_residual, NN);//c为输出d_residualerror_handling(cudaGetLastError());shortcut_gpu(batch, _w, _h, _c, d_residual, _w, _h, _c, grad);//虚线l.out_c12,l.c16,在这里是实线l.out_c16,l.c16cudaMemcpy(grad_input, grad, sizeof(float) * NN, cudaMemcpyDeviceToDevice);error_handling(cudaGetLastError());//仍然是第二个bn层方差均值为零}int getname() override { return 3; }float* get_output() override { return output; }float* get_grad_input() override { return grad_input; }void update(float lr) {for (const auto l : layers) {l-update(lr);}}~residualExt2() {cudaFree(output);cudaFree(grad_input);}private:// cublasHandle_t cublas;int _c, _h, _w;cudnnHandle_t cudnn;int batch;float* input, * output, * grad_input;float* input2;float* d_residual;public:std::vectorstd::shared_ptrLayer layers;};上面红色加粗的是新增及修改过的mul函数修改如下__global__ voidmul(float* a, float* b, float* c, int N) {int index blockIdx.x * blockDim.x threadIdx.x;if (index N) {//c[index] a[index] * (b[index] 0 ? 1 : 0.1);//之前最优版本leakyrelu放在add之后c[index] a[index] * b[index] ;//借鉴darknetleakyrelu放在add之前了202607101514// c[index] a[index] * (1 - b[index]* b[index]);//tanhx方式}}

相关新闻

实战:利用 NVD API 与 Python 脚本批量获取并分析 1000 个 CVE 的 CVSS 3.1 分数

实战:利用 NVD API 与 Python 脚本批量获取并分析 1000 个 CVE 的 CVSS 3.1 分数

2026/7/11 2:22:10

实战:基于NVD API与Python的CVE批量分析系统开发指南 1. 环境准备与API基础 在开始构建CVE分析系统前,我们需要配置合适的开发环境。推荐使用Python 3.8版本,这是目前大多数安全工具链兼容性最好的版本。以下是基础环境配置步骤:…

终极指南:让老款Mac免费升级到最新macOS的完整教程

终极指南:让老款Mac免费升级到最新macOS的完整教程

2026/7/11 2:22:10

终极指南:让老款Mac免费升级到最新macOS的完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老款Mac无法安装最新macOS而烦恼吗&…

逻辑与物理的完美桥梁:深度解析Oracle表空间与数据文件的“容器与仓库”关系

逻辑与物理的完美桥梁:深度解析Oracle表空间与数据文件的“容器与仓库”关系

2026/7/11 2:22:10

逻辑与物理的完美桥梁:深度解析Oracle表空间与数据文件的“容器与仓库”关系一、开篇类比:为什么Oracle要发明表空间?二、全景架构图:从逻辑到物理的完整映射三、核心概念拆解:表空间与数据文件的精准定义1. 表空间&am…

2026年想克服上台紧张?天河口才培训为成人职场人提供有效解决方案

2026年想克服上台紧张?天河口才培训为成人职场人提供有效解决方案

2026/7/11 4:02:18

在职场中,许多成人职场人都面临着上台紧张的困扰。无论是工作汇报、项目展示,还是会议发言,只要站在众人面前,就会心跳加速、声音颤抖,原本准备好的内容也忘得一干二净。这种紧张情绪不仅影响了个人的表达效果&#xf…

EM3080-W解码芯片与PIC18LF45K22微控制器的嵌入式条码识别方案

EM3080-W解码芯片与PIC18LF45K22微控制器的嵌入式条码识别方案

2026/7/11 4:02:18

1. EM3080-W解码芯片与PIC18LF45K22微控制器的黄金组合在嵌入式条码识别领域,EM3080-W解码芯片和PIC18LF45K22微控制器的组合堪称经典搭档。EM3080-W是新大陆自动识别技术推出的一款高性能条码解码专用芯片,它内置了先进的解码算法,支持包括U…

Unity UI渲染性能深度对比:IMGUI与UIElements架构解析与实战选型

Unity UI渲染性能深度对比:IMGUI与UIElements架构解析与实战选型

2026/7/11 4:02:18

1. 项目概述:为什么我们需要关心UI渲染性能?如果你在Unity里做过编辑器扩展,或者开发过需要复杂运行时调试界面的游戏,那你一定对IMGUI和UIElements这两个名字不陌生。它们就像是Unity UI世界的“老将”与“新秀”,一个…

STM32F439ZG与L9958电机控制方案设计与实现

STM32F439ZG与L9958电机控制方案设计与实现

2026/7/11 4:02:18

1. 项目概述:L9958与STM32F439ZG的电机控制方案在工业自动化和机器人领域,电机控制系统的性能直接决定了设备的动态响应和运动精度。L9958作为意法半导体(ST)推出的专用电机驱动芯片,与STM32F439ZG高性能MCU的组合,为开发者提供了…

八奇技的传承脉络

八奇技的传承脉络

2026/7/11 4:02:18

《一人之下》中八奇技的传承脉络错综复杂,不仅涉及师承与血脉,还交织着各大门派的恩怨与阴谋。以下是八奇技各自的传承脉络详细介绍: 1. 炁体源流 创始人:张怀义(张楚岚的爷爷)。 传承脉络:张怀义在临死前,将炁体源流(表现为“老农功”)传给了冯宝宝。随后,冯宝宝将…

197、可观测性入门:Prometheus 指标暴露、OpenTelemetry 追踪与 Grafana 面板

197、可观测性入门:Prometheus 指标暴露、OpenTelemetry 追踪与 Grafana 面板

2026/7/11 3:52:17

197、可观测性入门:Prometheus 指标暴露、OpenTelemetry 追踪与 Grafana 面板 一个让我熬夜的线上事故 凌晨两点,生产环境的Python服务突然响应变慢,用户反馈“页面转圈圈”。我登录服务器,top一看CPU才30%,内存也没爆,日志里全是正常200状态码。最崩溃的是——我完全不…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…