Darknet19详细原理(含tensorflow版源码)

这篇具有很好参考价值的文章主要介绍了Darknet19详细原理(含tensorflow版源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Darknet19原理

        Darknet19是一个轻量级的卷积神经网络,用于图像分类和检测任务。 它是YOLOv2目标检测算法的主干网络,它的优点在于具有较少的参数和计算量,在计算速度和精度之间取得了良好的平衡,同时在训练过程中也具有较高的准确率和收敛速度。

        Darknet19主要由卷积层、池化层和批量归一化层组成。根据名称可以看出,这些层是计算密集型的,且在网络的后端叠加了几个全连接层来输出预测,网络结构如下:

Darknet19详细原理(含tensorflow版源码)

        输入层:输入尺寸为224x224x3的图像。

        卷积层1:使用32个3x3的卷积核,步长为1,填充为2,激活函数为ReLU。

        池化层1:使用2x2的最大池化,步长为2,不进行填充。

        卷积层2:使用64个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        池化层2:使用2x2的最大池化,步长为2,不进行填充。

        卷积层3:使用128个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        卷积层4:使用64个1x1的卷积核,步长为1,填充为0,激活函数为ReLU。

        卷积层5:使用128个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        池化层3:使用2x2的最大池化,步长为2,不进行填充。

        卷积层6:使用256个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        卷积层7:使用128个1x1的卷积核,步长为1,填充为0,激活函数为ReLU。

        卷积层8:使用256个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        池化层4:使用2x2的最大池化,步长为2,不进行填充。

        卷积层9:使用512个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        卷积层10:使用256个1x1的卷积核,步长为1,填充为0,激活函数为ReLU。

        卷积层11:使用512个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        卷积层12:使用256个1x1的卷积核,步长为1,填充为0,激活函数为ReLU。

        卷积层13:使用512个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        池化层5:使用2x2的最大池化,步长为2,不进行填充。

        卷积层14:使用1024个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        卷积层15:使用512个1x1的卷积核,步长为1,填充为0,激活函数为ReLU。

        卷积层16:使用1024个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        卷积层17:使用512个1x1的卷积核,步长为1,填充为0,激活函数为ReLU。

        卷积层18:使用1024个3x3的卷积核,步长为1,填充为1,激活函数为ReLU。

        全连接层1:输出维度为1000,表示1000个类别。

        激活层1:使用softmax激活函数,将输出转换为概率分布。

        Darknet19中使用3 x 3的卷积核来减少参数数量,并使用1 x 1的卷积核来降低计算负担。同时,池化层和批量归一化层用于提高模型的稳定性和泛化能力。

        总体来说,Darknet19是一个简单而高效的卷积神经网络,它通过一系列精心设计的层来达到高精度和高效率深度学习目标,也能够在对计算资源受限的环境下进行高效的物体识别和分类任务。

Darknet19源码(tensorflow版)

数据集请自行下载

链接:百度网盘 
提取码:bwx0 

如果没有GPU导致运行失败,就把device删除,使用默认CPU运行。


import os
import cv2
import numpy as np
import random
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from tensorflow.keras import layers,models,optimizers,losses
#开启GPU
device = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(device[0],True)


Data_dir = 'cat&dog'


def ReadLoad(Data_dir):
    images = []
    labels = []
    for i,class_name in enumerate(os.listdir(Data_dir)):
        sub_name = os.path.join(Data_dir,class_name)
        for img_name in os.listdir(sub_name):
            img = os.path.join(sub_name,img_name)
            img = cv2.imread(img) / 255.0
            img = cv2.resize(img,(256,256))
            b,g,r = cv2.split(img)
            img = cv2.merge([r,g,b])
            images.append(img)
            labels.append(i)
    return np.array(images),np.array(labels)

def ConvBnRelu(inputs,filters,kernels = 3):
    x = layers.Conv2D(filters,(kernels,kernels),padding='same')(inputs)
    x = layers.BatchNormalization()(x)
    x = layers.LeakyReLU(alpha=0.05)(x)
    return x

def DarkNet19(inputs):
    x = ConvBnRelu(inputs,32,3)
    x = layers.MaxPooling2D((2,2),strides=2)(x)

    x = ConvBnRelu(x, 64, 3)
    x = layers.MaxPooling2D((2, 2), strides=2)(x)

    x = ConvBnRelu(x, 128, 3)
    x = ConvBnRelu(x, 64, 1)
    x = ConvBnRelu(x, 128, 3)
    x = layers.MaxPooling2D((2, 2), strides=2)(x)

    x = ConvBnRelu(x, 256, 3)
    x = ConvBnRelu(x, 128, 1)
    x = ConvBnRelu(x, 256, 3)
    x = layers.MaxPooling2D((2, 2), strides=2)(x)

    x = ConvBnRelu(x, 512, 3)
    x = ConvBnRelu(x, 256, 1)
    x = ConvBnRelu(x, 512, 3)
    x = ConvBnRelu(x, 256, 1)
    x = ConvBnRelu(x, 512, 3)
    x = layers.MaxPooling2D((2, 2), strides=2)(x)

    x = ConvBnRelu(x, 1024, 3)
    x = ConvBnRelu(x, 512, 1)
    x = ConvBnRelu(x, 1024, 3)
    x = ConvBnRelu(x, 512, 1)
    x = ConvBnRelu(x, 1024, 3)

    x = ConvBnRelu(x,2,1)
    x = layers.GlobalAveragePooling2D()(x)
    x = layers.Activation('softmax')(x)
    return x



def main():
    images,labels = ReadLoad(Data_dir)

    train_x,test_x,train_y,test_y = train_test_split(images,labels,train_size=0.8)

    inputs = keras.Input((256,256,3))
    outputs = DarkNet19(inputs)
    model = models.Model(inputs,outputs)
    model.summary()
    model.compile(loss = losses.SparseCategoricalCrossentropy(),
                  optimizer=optimizers.Adam(1e-4),
                  metrics=['accuracy'])
    model.fit(train_x,train_y,epochs=10,batch_size=2)
    score = model.evaluate(test_x,test_y,batch_size=2)
    print('loss:',score[0])
    print('acc:',score[1])
    model.save('save',save_format='tf')
    del model

    new_model = keras.models.load_model('save')
    new_model.compile(loss = losses.SparseCategoricalCrossentropy(),
                      optimizer=optimizers.Adam(1e-4),
                      metrics=['accuracy'])
    score = new_model.evaluate(test_x, test_y,batch_size = 2)
    print('loss:', score[0])
    print('acc:', score[1])

    for i in range(9):
        r = random.randint(0,len(test_x) - 9)
        pre = tf.argmax(new_model(test_x[i + r:i + r + 1]),axis=1)[0]
        print(f"pre:{pre}---label:{test_y[i + r]}")
        plt.subplot(3,3,i + 1)
        if pre == test_y[r + i]:
            plt.imshow(test_x[r + i])
            plt.title('cat' if pre == test_y[r + i] else 'dog',c = 'black')
        else:
            plt.imshow(test_x[r + i])
            plt.title('cat' if pre == test_y[r + i] else 'dog', c='red')
        plt.axis('off')
        plt.savefig('mg.jpg')
    plt.show()
    pass


if __name__ == '__main__':
    main()

训练10个epoch的效果

Darknet19详细原理(含tensorflow版源码)

Darknet19详细原理(含tensorflow版源码)

Darknet19详细原理(含tensorflow版源码)文章来源地址https://www.toymoban.com/news/detail-421272.html

到了这里,关于Darknet19详细原理(含tensorflow版源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Tensorflow深度学习】实现手写字体识别、预测实战(附源码和数据集 超详细)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面用到的数据集基于IAM数据集的英文手写字体自动识别应用,IAM数据库主要包含手写的英文文本,可用于训练和测试手写文本识别以及执行作者的识别和验证,该数据库在ICDAR1999首次发布,并据此开发了基于隐马尔可夫

    2023年04月08日
    浏览(28)
  • 精通 TensorFlow 1.x:16~19

    原文:Mastering TensorFlow 1.x 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则 2.3.c {% raw %} TensorFlow 模型还可用于在移动和嵌入式平台上运行

    2023年04月21日
    浏览(31)
  • 深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍

    LeNet是最早的卷积神经网络之一 [1] ,其被提出用于识别手写数字和机器印刷字符。1998年,Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上,在手写数字识别任务中取得了巨大成功。算法中阐述了图像中像素特征之间的相关性能够由参数共享的卷积操作所提取,同时使用

    2024年02月08日
    浏览(31)
  • 遗传算法原理详细讲解(算法+Python源码)

    博主介绍:✌专研于前后端领域优质创作者、本质互联网精神开源贡献答疑解惑、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦! 🍅文末获取源码联系🍅 👇🏻 精彩专栏

    2024年01月25日
    浏览(38)
  • MobileNetV3详细原理(含torch源码)

    作者:爱笑的男孩。 个人简介:打工人。 持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及WindowsLinux实践小技巧。 如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 目录 MobileNetV3原理 MobileNetV3创新点

    2023年04月20日
    浏览(29)
  • MobileNetV1详细原理(含torch源码)

    目录 MobileNetV1原理 MobileNet V1的网络结构如下: 为什么要设计MobileNet: MobileNetV1的主要特点如下: MobileNetV1的创新点: MobileNetV1源码(torch版) 训练10个epoch的效果         MobileNet V1是一种轻量级的卷积神经网络,能够在保持较高准确率的情况下具有较少的参数量和计算时

    2023年04月19日
    浏览(28)
  • Vue项目中axios的原理(详细到源码)

    关于 axios 的基本使用,上篇文章已经有所涉及,这里再稍微回顾下: 构建一个 Axios 构造函数,核心代码为 request 导出 axios 实例 上述就已经能够实现 axios({ }) 这种方式的请求 下面是来实现下 axios.method() 这种形式的请求 将 Axios.prototype 上的方法搬运到 request 上 首先实现个工

    2024年01月20日
    浏览(66)
  • Springboot中SpringSecurity自动装配原理,源码级别绝对详细

    (1)Springboot有一个自动配置类 SecurityFilterAutoConfiguration , SecurityFilterAutoConfiguration 只要当项目中引入了SpringSecurity的相关jar包就会被自动加载。装载这个类是干嘛的呢? (2)如下图, SecurityFilterAutoConfiguration 自动配置类主要用于,当存在名字叫做\\\"springSecurityFilterChain\\\"的bea

    2024年02月05日
    浏览(39)
  • 使用TensorFlow和VGG-19模型实现艺术风格迁移:一步一步打造你的数字艺术世界

    在当下的AI领域,神经风格迁移是最富有创新性和艺术性的技术之一。这项技术可以将一种图像的风格迁移至另一种图像,创造出让人眼前一亮的视觉效果。这种转变所展现的技术之美,让我们深感人工智能所带来的可能性。本文将带领大家一步步通过TensorFlow和VGG-19模型实现

    2024年02月14日
    浏览(37)
  • 详细解读Java中Map集合的底层原理(干货+源码解读)

    本文将为大家详细讲解Java中的Map集合,这是我们进行开发时经常用到的知识点,也是大家在学习Java中很重要的一个知识点,更是我们在面试时有可能会问到的问题。 文章较长,干货满满,建议大家收藏慢慢学习。文末有本文重点总结,主页有全系列文章分享。技术类问题,

    2024年02月06日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包