## update: <br>2023.4.12<br> 
- 已修改get_param_flops.py, extract_ratio.py, ptq.py中与计算数据分布相似度、计算计算量、参数量加权权重相关的程序，使其能够适应于ResNet系列网络。<br>
(注： 目前需要在得到了param_flops_ResNet18/50/152.txt后，手动删除在layer中重复出现了一次的downsample module的统计数据，考虑到resnet18的只需要删3处，resnet50，152中的需要删4处，故直接手动进行了)
- 已补充ResNet18/50/152的PTQ训练测试结果，在ptq_result_ResNet18/50/152.xlsx中
- 拟合曲线图：
1. ResNet18 - 参数量加权 
<img src = "fig/res18-1.png" class="h-90 auto">
   ResNet18 - 计算量加权
<img src = "fig/res18-2.png" class="h-90 auto">

2. ResNet50 - 参数量加权
<img src = "fig/res50-2.png" class="h-90 auto">
   ResNet50 - 计算量加权
<img src = "fig/res50.png" class="h-90 auto">

3. ResNet152 - 参数量加权
<img src = "fig/res152-1.png" class="h-90 auto">
   ResNet152 - 计算量加权
<img src = "fig/res152-2.png" class="h-90 auto">

- 所有图中在左上方均存在一系列离群点，其中包括了INT量化在量化位宽较高时，acc骤降对应的点，也包括了一些其他的异常点，还需要再对程序、数据进一步分析，调整参数，使部分由于程序设置导致异常的点恢复过来。

- 后续待补充：
1. 分析为什么INT量化位宽较大时，acc骤降，并解决该问题
2. 检查网络量化是否存在细节错误
3. 检查计算数据分布相似度时是否正确加权计算
4. ResNet QAT相关实验
<br><br>
分割线
===============================================<br><br><br>
## update:<br> 2023.4.10 <br>
- 注：new_mzh中的程序改用了与游昆霖同学统一的度量方式、以及一些量化细节约定，将代码重新建立在游昆霖同学版本的程序上。<br>
在量化BN层的过程中遇到了较多问题，感谢游昆霖同学的帮助:D





### 程序改动：

为量化ResNet18，在module.py中新增的量化层包括QConvBNReLu层，QConvBN层，QElementwiseAdd层，QAdaptiveAvgPool2d层。在model.py中建立了ResNet18的量化架构，通过class BasicBlock, class Bottleneck, class MakeLayer等保障了ResNet的扩展性，能够较为方便的扩展成ResNet50和152 

### 待完善：

- ResNet的网络架构相比于AlexNet，VGG等更加的跳跃，各种MakeLayer, Residual的结构使得其不是一个平铺开来的网络，则过去的很多计算相似度等的算法不能直接适用在ResNet上(直接遍历网络参数时，会有包装在conv，bn等层外面的layer, sequential, block等)，关于参数相似度、梯度相似度的分析有待后续研究补充。
QAT方面有待后续补充


- 我在加上正确的QElementwiseAdd层前，PTQ后的acc都不超过15%，足以见到该层的重要性，他是负责残差的相加部分，因为两个层的输出结果是在不同量化范围，所以不能直接相加，而是需要做rescale。

- 目前看到INT量化随位宽增加而先增大后下降，我查看了量化后的参数分布，其整体趋势与全精度模型是较为相似的，因此问题不在Conv，BN等普通的量化层上，我猜想可能是因为量化位宽较大的时候，QElementwiseAdd做rescale的过程中出现了溢出，还有待后续观察确认。