• 科大讯飞分类算法挑战赛2023的一些经验总结


    引言:
    ResNet是he kaiming大佬的早年神作,当年直接刷榜各大图像分类任务。ResNet是一种残差网络,咱们可以把它理解为一个子网络,这个子网络经过堆叠可以构成一个很深的网络,而ResNext在其基础上,进行了一定修改完善,通过引入Cardinatity后,模型性能得到了大幅度提升。(下图是经典ResNet残差网络模块结构)
    在这里插入图片描述


    1. 通用增强网络性能的手段

    一般增强一个CNN的表达能力有三种手段:

    • 一是增加网络层次即加深网络(目前CNN已经由最初Alexnet的不到十层增加到了成百上千层,而实际实验结果表明由层次提升而带来的边际准确率增加已是越来越少);

    • 二是增加网络模块宽度(可见我们之前有介绍过的Wide residual network,可宽度的增加必然会带来指数级的参数规模提升,因此它并非为主流CNN设计所认可。);

    • 三是改善CNN网络结构设计(当然在不增加模型复杂度的情况下通过改良模型设计以来提升模型性能是最理想的做法,不过其门槛则实在是太高,不然Google/Facebook/Microsoft的那些埋头设计网络/调参的哥们儿就没办法拿那么高工资了。)

    2. ResNet和Resnext比较

    ResNeXt的做法可归为上面三种方法的第三种。它引入了新的用于构建CNN网络的模块,而此模块又非像过去看到的Inception module那么复杂,它更是提出了一个cardinatity的概念,用于作为模型复杂度的另外一个度量。Cardinatity指的是一个block中所具有的相同分支的数目。

    3. 上述网络在实际比赛的实测

    根据科大讯飞几个计算机视觉任务的结果来说,那些EfficientNet、MobileNet这些网络结构对准确率的精度必然是有影响的,根据实测的几个比赛基本精度(准确率)损失在3%-5%左右。ResNext相比于其他ResNet等结构,确实在模型设计上,能够达到更准确的分类精度,至于比ResNext更复杂的经典网络IncepNetv4尚且未能测试,等后续有机会再做测试。每次测试结果为多次超参数测试后的最高值,具体实测的结果如下:

    3.1 实测结果

                   表1  在科大讯飞AIGC分类挑战赛2023上的实测结果
    
    • 1
    模型准确率
    MobileNetv2_s、MobileNetv2_m95.32%
    EfficientNetB1-B595.71%
    ResNet3498.15%
    ResNext98.53%

    3.2 模型集成

    在这里,做了一个决策层的融合,找到各个模型差异比较大,存在分歧的结果

    import pandas as pd
    
    df1 = pd.read_csv(r"...\kedaxunfei_AI_Fake\ensemble_model\single_results\submit_AI_fake777.csv")
    df2 = pd.read_csv(r"...\kedaxunfei_AI_Fake\ensemble_model\single_results\submit_AI_fake888.csv")
    df3 = pd.read_csv(r"...\kedaxunfei_AI_Fake\ensemble_model\single_results\submit_AI_fake999_1.csv")
    
    # compare the two DataFrames
    df_diff1 = df1.compare(df2)
    df_diff2 = df1.compare(df3)
    df_diff3 = df2.compare(df3)
    # get the indexes of the differences
    diff_indexes1 = df_diff1.index
    diff_indexes2 = df_diff2.index
    diff_indexes3 = df_diff3.index
    
    # obtain 相同部分
    equal_parts1 = [x for x, y in zip(list(diff_indexes2), list(diff_indexes1)) if x == y]
    equal_parts2 = [x for x, y in zip(list(diff_indexes3), list(diff_indexes1)) if x == y]
    equal_parts3 = [x for x, y in zip(list(diff_indexes3), list(diff_indexes2)) if x == y]
    
    print(f"equal_parts1: {equal_parts1};equal_parts2: {equal_parts2};equal_parts3: {equal_parts3}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    结果如下:

    equal_parts1: [29, 110, 4009];equal_parts2: [1975];equal_parts3: [1171]
    
    • 1
  • 相关阅读:
    服务器部署 Vue 和 Django 项目的全记录
    leetcode-136. 只出现一次的数字
    安全行业基础知识学习
    Centos7快速安装跳板机jumpserver
    springcloud小说阅读网站源码
    java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发
    【软件设计师】高频考点集锦
    聚焦“硬核”技术,开放原子开源大赛苏州站圆满落幕
    计算机组成和体系结构[备考]
    【Fiddler Everywhere】2022最强抓包工具(安装 修改教程)
  • 原文地址:https://blog.csdn.net/u013537270/article/details/132166603