* 我在实验Git;
* 再次尝试,貌似可以随便登录一个人的账号;
* 学习解决冲突问题(见git或MMdetection文档);
* 在COCO上训练PVT模型1个epoch,对比参数的增加(参数无明显增加);
* Swin模型不能直接在COCO的训练结果上微调;
* 证明Mem可以通过修改Coco_detection.py文件实现图片尺寸(448*448),线程(2)和Batchsize(2)进行修改(也许这样一来,原本不能使用的模型就能用了.);
* 测试PVT模型是否能在coco数据集上训练的预训练模型上微调(./trainpy);
* 将PVT_AtrousLSHTransformer的框架注册到MMdetection,之后用于修改;
涉及的文件:
tool/train_Atrous.py
config/pvt/my_pvt_AtrousLSHTransformer.py
mmdet/model/backbone/PVT_AtrousLSHTransformer.py
__init__.py
* 证明MMdetection与darknet存在不同,在mmdetection的config文件下设置的epoch不会受到预训练模型的干扰;
* MMdetection提供了很多有趣的检测和测量方法,例如log曲线的分析 \ 结果分析 \ 模型和数据集可视化 \ 数据集类别错误分析 \ 模型转换 \ 模型复杂度计算 \ 数据集转换 \ FPS计算 \ 度量计算 \ 优化检测框 \ 混合矩阵计算
* PVT v1代码梳理
* 修改结构
* 检测
* 修改无空间缩减注意力
* 修改图像尺寸,尽在最开始进行图片的嵌入和位置的嵌入
* 原始网络的情况:
PVT: [ [patch, [pos_embed,layer1,layer2], norm],[patch, [pos_embed,layer1,layer2], norm],[patch, [pos_embed,layer1,layer2], norm], [patch, [pos_embed,layer1,layer2], norm], ]
* 目前网络的情况:
patchSize大小为5,Stride大小为5,保证不重叠的进行图片嵌入;
图片的特征和位置嵌入只在输入网络前进行一次;
Atrous: [ patch, pos_embed, [PVT, norm], [PVT, norm], [PVT, norm], [PVT, norm] ]
* 计划修改网络:
[ [[patch, pos], [[layer1,layer2], norm]],
[[reshape,linear], [[layer1,layer2], norm]],
[[reshape,linear], [[layer1,layer2], norm]],
[[reshape,linear], [[layer1,layer2], norm]] ]
* 目前网络的特征图尺寸不变,PatchSize不变.因为删除了空间注意并修改了特征图尺寸,导致模型的Memery变大,不得不减小图片的尺寸为(224*224),或者降低BatchSize
* 下一步:检查各环节是否存在问题,计划将注意力进行修改(可以参考利用膨胀卷积的部分)
* 修改计算方式,让其可以运行
* 测试github的reset功能
* 整理代码
* 测试修改的无特征金字塔和空间缩减注意力的代码,并训练之.
* 查找Atrous self attention相关代码实现
Generating Long Sequences with Sparse Transformers
* workdir/my_pvt_AtrousLSHTrasnformer
此文件是不采用空间缩减注意力(即采用全注意力)的非FPN架构pvt v1模型;
训练了12epoch
[需要对其实验结果进行测试,测试在COCO下的map,IOU,fps,flops等;最好实现Attention的可视化.]
* workdir/retinanet_pvt-t_fpn_1x_coc
此文件是基准pvt v1训练后的结果,同样需要进行测试与验证,作为对照组.
*测试workdir/my_pvt_AtrousLSHTrasnformer和workdir/retinanet_pvt-t_fpn_1x_coc的实验数据;
*设置软链接,链接VOC格式的自定义数据集.
*终端输出的东西在mmdet/datasets/pipline/loading.py下改.
*制作自定义的数据集,训练之
*测试结果:workdir/my_pvt_AtrousLSHTrasnformer_voc和workdir/retinanet_pvt-t_fpn_1x_coc_voc的实验数据;
*重新测试workdir/my_pvt_AtrousLSHTrasnformer和workdir/retinanet_pvt-t_fpn_1x_coc的图像实验数据.
[制定GPU] python tools/test.py [config] [weights] --out [save_dir, 必须制定文件格式哦,写为xxx/results.pkl] --show [show_images] --show-dir [image_save_dir]
eg: CUDA_VISIBLE_DEVICES="2" python tools/test.py work_dirs/retinanet_pvt-t_fpn_1x_coco/retinanet_pvt-t_fpn_1x_coco.py work_dirs/retinanet_pvt-t_fpn_1x_coco/epoch_12.pth --out results/retinanet_pvt-t_fpn_1x_coco/results.pkl --show-dir results/retinanet_pvt-t_fpn_1x_coco
*目标:画出自定义数据集的融合矩阵,并遍历保存测试图片.
*整理查找Atrous self attention相关代码实现,梳理代码结构
*完成代码梳理,参考VideoGPT进行代码修改,使用其设计的稀疏注意力
*选择添加稀疏注意力机制
在PVT_Atrous下进行修改,利用膨胀卷积降低参数量,并保证每一阶段都是FPN的合适输出.
* 原始网络的情况:
PVT: [ [patch, [pos_embed,layer1,layer2], norm],[patch, [pos_embed,layer1,layer2], norm],[patch, [pos_embed,layer1,layer2], norm], [patch, [pos_embed,layer1,layer2], norm], ]
* 计划修改网络:
[ [[patch, pos], [[layer1,layer2], norm]],
[[reshape,linear], [[layer1,layer2], norm]],
[[reshape,linear], [[layer1,layer2], norm]],
[[reshape,linear], [[layer1,layer2], norm]] ]
存在问题:模型依旧不收敛,怀疑是没有进行位置嵌入或直接线性映射不可取.
从根源进行替换:
1. 恢复整体的网络结构PVT, 取消patchEmbed的步长和尺度,进行1*1conv(尝试),看看是否会收敛.
2. 减少进入FPN的参数量,利用膨胀卷积进行构造,但保证骨干网络中计算的参数量不变.
*现在的问题:
1. pvt_try可以收敛,1day可以训练出结果;
2. PVTLSH不收敛,可能是因为我大量的改动了结构.
*解决办法:
1. 收敛PVTLSH:直接套用pvt的结构,不做修改.
A. 取消pvt的分辨率变化;(samefeaturemap)
B. 改用膨胀卷积方式缩减分辨率;
(与pvt类似,只是在samefeaturemap的基础上增加膨胀卷积或者直接膨胀卷积计算嵌入)
*现在的问题:
1. pvt_try和pvt_LSH是完全一样的配置参数,为什么训练出来的结果有差异;
(可能是这一轮收敛的效果不太好导致的,因为其实大致的趋势差不多,甚至还处于上升阶段);
*下一步:
1. 在pvt_LSH的基础上,不改变featuremap分辨率大小(存在参数量过大的问题),看与pvt有什么区别.
2. 在pvt_LSH的基础上看,仅仅去掉SA会有什么结果.
3. 基于1.的结果在pvt_LSH上增加膨胀卷积部分.
*现在的问题:
1. pvt_try取消了SA注意力,改用普通的自注意力,训练结果比采用SA注意力的提高了2%左右;
SA注意力log:work_dirs/my_pvt_AtrousLSHTransformer_voc_same/20220916_103109.log;
自注意力log:work_dirs/my_pvt_AtrousLSHTransformer_voc_same/20220919_101302.log.
2. 直接修改patchembed中的patchsize和stride会导致模型训练loss不下降.
*下一步:
1. 试一试patchembed下的pad=same的方式,保证分辨率不变;
2. 调研一下ViT是怎么进行分辨率不变的训练的;
3. 基于1.的结果在pvt_LSH上增加膨胀卷积部分.