Darknet网络代码

 import math
 from collections import OrderedDict
 import torch
 import torch.nn as nn
 import torch.nn.functional as F
 ​
 class Mish(nn.Module):
     def __init__(self):
         super(Mish, self).__init__()
     def forward(self, x):
         x = x * torch.tanh(F.softmax(x))
     # F.softmax(x) = ln(1+e^x)
     # tanh(x) = (e^x-e^(-x))/(e^x+e^(-x))
         return x
 ​
 # 卷积+归一化+激活
 class CB(nn.Module):
     def __init__(self, in_channels, out_channels, kernel_size, stride=1):
         super(CB, self).__init__()
         self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, padding=kernel_size // 2, bias=False)
         self.bn = nn.BatchNorm2d(out_channels)
         self.activation = Mish()
     def forward(self, x):
         x = self.conv(x)
         x = self.bn(x)
         x = self.activation(x)
         return x
 ​
 class Resblock(nn.Module):
     def __init__(self, channels, hidden_channels=None):
         super(Resblock, self).__init__()
         if hidden_channels is None:
             hidden_channels = channels
         self.resblock = nn.Sequential(
             nn.Conv2d(in_channels = channels, out_channels= hidden_channels, kernel_size=1),
             nn.Conv2d(in_channels=hidden_channels, out_channels=channels, kernel_size=3, padding=1)
        )
     def forward(self, x):
 ​
         x = x + self.resblock(x)
         return x
 ​
 class Resblock_body(nn.Module):
     def __init__(self, in_channels, out_channels, num_blocks, first):
         super(Resblock_body, self).__init__()
         self.downsample_conv = CB(in_channels=in_channels, out_channels=out_channels, kernel_size=3, stride=2)
         if first:
             self.split_conv0 = CB(in_channels=out_channels, out_channels=out_channels, kernel_size=1)
             self.split_conv1 = CB(in_channels=out_channels, out_channels=out_channels, kernel_size=1)
             self.blocks_conv = nn.Sequential(
                 Resblock(channels=out_channels, hidden_channels=out_channels//2),
                 CB(in_channels=out_channels, out_channels=out_channels, kernel_size=1)
            )
             self.concat_conv = CB(in_channels=out_channels * 2, out_channels=out_channels, kernel_size=1)
         else:
             self.split_conv0 = CB(in_channels=out_channels, out_channels=out_channels // 2, kernel_size=1)
             self.split_conv1 = CB(in_channels=out_channels, out_channels=out_channels // 2, kernel_size=1)
             self.blocks_conv = nn.Sequential(
                 *[Resblock(out_channels // 2) for _ in range(num_blocks)],
                 CB(in_channels=out_channels // 2, out_channels=out_channels // 2, kernel_size=1)
            )
             self.concat_conv = CB(in_channels=out_channels, out_channels=out_channels, kernel_size=1)
     def forward(self, x):
         x = self.downsample_conv(x)
         x0 = self.split_conv0(x)
         x1 = self.split_conv1(x)
         x1 = self.blocks_conv(x1)
         x = torch.cat([x0, x1], dim=1)
         x = self.concat_conv(x)
         return x
 class CspDarknet(nn.Module):
     def __init__(self, layers):
         super(CspDarknet, self).__init__()
         self.inplanes = 32
         self.conv1 = CB(in_channels = 3, out_channels=self.inplanes, kernel_size=3, stride=1)
         self.feature_channels = [64, 128, 256, 512, 1024] 
       self.stages =nn.ModuleList 
       self.stages = nn.ModuleList([ 
           # 416,416,32 -> 208,208,64 
           Resblock_body(in_channels=self.inplanes, out_channels=self.feature_channels[0], num_blocks=layers[0], first=True), 
           # 208,208,64 -> 104,104,128 
           Resblock_body(in_channels=self.feature_channels[0], out_channels=self.feature_channels[1], num_blocks=layers[1], first=False), 
           # 104,104,128 -> 52,52,256 
           Resblock_body(in_channels=self.feature_channels[1], out_channels=self.feature_channels[2], num_blocks=layers[2], first=False), 
           # 52,52,256 -> 26,26,512 
           Resblock_body(in_channels=self.feature_channels[2], out_channels=self.feature_channels[3], num_blocks=layers[3], first=False), 
           # 26,26,512 -> 13,13,1024 
           Resblock_body(in_channels=self.feature_channels[3], out_channels=self.feature_channels[4], num_blocks=layers[4], first=False) 
      ]) 
       self.num_features=1 
       for m in self.modules(): 
           if isinstance(m, nn.Conv2d): 
               n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels 
               m.weight.data.normal_(0, math.sqrt(2. / n)) 
           elif isinstance(m, nn.BatchNorm2d): 
               m.weight.data.fill_(1) 
               m.bias.data.zero_() 
   def forward(self, x): 
       x = self.conv1(x) 
       x = self.stages[0](x) 
       x = self.stages[1](x) 
       out3 = self.stages[2](x) 
       out4 = self.stages[3](out3) 
       out5 = self.stages[4](out4) 
       return out3, out4, out5 
def darknet53(pretrained): 
   model = CspDarknet([1, 2, 8, 8, 4]) 
   if pretrained: 
       model.load_state_dict(torch.load("D:/finishi_project/model_data/CSPdarknet53_backbone_weights.pth")) 
   return model 
​ 
# from torchsummary import summary 
# dar = darknet53(False) 
# device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') 
# summary(dar, input_size=(3, 416, 416)) 
​ 

代码没有注释,欢迎留言共同讨论,顺便给个关注,感谢。

Darknet网络代码的更多相关文章

  1. 学习构建调试Linux内核网络代码的环境MenuOS系统

    构建调试Linux内核网络代码的环境MenuOS系统 一.前言 这是网络程序设计的第三次实验,主要是学习自己编译linux内核,构建一个具有简易功能的操作系统,同时在系统上面进行调试linux内核网络 ...

  2. team foundation server——网络代码管理工具

    像我们平时有时会莫名的弹出一个如下图所示的提示框,这个是什么呢?这个就是有人用team foundation server进行过代码管理的项目 那么team foundation server到底是什 ...

  3. 修复Microsoft Store 无法连接网络 代码: 0x80072EFD

    事情的经过是这样的,我的Windows版本是1709,前两天刚从1703升上来,今天突然发现它自己给我装了个skype,我上Microsoft商店里查一下是什么情况,结果突然发现它又双双双不正常工作了 ...

  4. h5 网络断网时,返回上一个页面 demo (与检测网络代码相结合,更直观看到结果)

    页面一: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...

  5. 构建调试Linux内核网络代码的环境MenuOS系统

    构建MenuOS系统 1.将指定文件拷贝到本地: git clone https://github.com/mengning/linuxnet.git 此过程可能需要输入github账号和密码. 2. ...

  6. Git学习:利用Git和TortoiseGit把代码传输到网络服务器

    版本控制这块,一直用SVN.感觉挺好用,比VSS要好用些.不过,近期在网上,又谈到时下很流行的Git.就想看看Git到底是何方神圣.趁着五一在家无事,就静下心来,简单研究一下. 当下,网络上提供的基于 ...

  7. 第二十四节,TensorFlow下slim库函数的使用以及使用VGG网络进行预训练、迁移学习(附代码)

    在介绍这一节之前,需要你对slim模型库有一些基本了解,具体可以参考第二十二节,TensorFlow中的图片分类模型库slim的使用.数据集处理,这一节我们会详细介绍slim模型库下面的一些函数的使用 ...

  8. 目标检测网络之 YOLOv2

    YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体. 每个格子预测B个bounding b ...

  9. c 网络与套接字socket

    我们已经知道如何使用I/O与文件通信,还知道了如何让同一计算机上的两个进程进行通信,这篇文章将创建具有服务器和客户端功能的程序 互联网中大部分的底层网络代码都是用C语言写的. 网络程序通常有两部分组成 ...

  10. Linux就这个范儿 第11章 独霸网络的蜘蛛神功

    Linux就这个范儿 第11章  独霸网络的蜘蛛神功  第11章 应用层 (Application):网络服务与最终用户的一个接口.协议有:HTTP FTP TFTP SMTP SNMP DNS表示层 ...

随机推荐

  1. 题解 P4317 花神的数论题

    并不难,但是因为各种 SB 原因调了 1145141919810min(悲 我们会发现 \(\operatorname{sum}\) 其实很小,顶多就 \(50\),这启发我们统计每个 \(\oper ...

  2. dom添加样式可以这样写

    1.原生 js添加样式很多时可以合并在一起写: var oPopwin = document.getElementById('vpage'); oPopwin.style.margin = 'init ...

  3. 轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor

    轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor 授人以鱼不如授人以渔,如果说的别人都没明白,说明自己实际也不是太明白   1,下载docker-compose sudo c ...

  4. 工业仿真:Chai 3D之点云技术

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 介绍   点云是三维坐标系中的一组数据点.在 CHAI3D 中,这些点由 X.Y 和 Z 坐标定义,通常用于表示对象的外表面.   点云可以由3 ...

  5. MTU设置不当导致ssh运行命令卡死

    MTU:最大网络传输单元,计算机网络课会介绍. 场景: 本地通过VPN连接某个机房内网的linux服务器,连接上之后,运行top命令.vi命令.yum update等需要刷新大量内容时导致ssh卡死, ...

  6. Access数据库使用

    简单介绍创建表,设置表属性,内容 双击打开软件,新建空白数据库 上面创建--表,右侧右键点击表1,选择保存,输入表名称. 左侧右键点击表--打开设计视图 设置表内容及格式,首行默认为主键,需右键点主键 ...

  7. K8s集群版本升级

    k8s组件升级流程: 升级主管理节点→升级其他管理节点→升级工作节点 首先备份主管理节点的etcd,检查版本号,为了保证版本的兼容性,跨度最好不要超过两个版本. [root@master ~]# ku ...

  8. 【剑指Offer】【树】【双向链表】二叉搜索树与双向链表

    题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. A:二叉树中每个节点都有一个left指针指向左节点,一个right指针指向右节 ...

  9. 如何删除Word文档中的空白页

    需求 平常我们写 Office 文档的时候,经常会不小心多加几页空白,那么如何删除 word 文档中的空白页呢? 小编结合网友提供的办法和亲身测试的操作经验,给大家提供几个可行的方案. 原文:如何删除 ...

  10. Windows10使用VMware安装centos

    系统环境: Windows 10 安装步骤: 1.下载centos http://mirrors.aliyun.com/centos/ 2.使用VMware安装centos 3.配置网络 $ cd / ...