引言:
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上的实测结果
| 模型 | 准确率 |
|---|---|
| MobileNetv2_s、MobileNetv2_m | 95.32% |
| EfficientNetB1-B5 | 95.71% |
| ResNet34 | 98.15% |
| ResNext | 98.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}")
结果如下:
equal_parts1: [29, 110, 4009];equal_parts2: [1975];equal_parts3: [1171]