代码以及数据集后面会在我的ai studio主页公开
拿到这个题目的思路
1.VOC2007,VOC2012怎么统一到一起?
参考:基于PaddlePaddle框架的YOLOv1复现 - 飞桨AI Studio星河社区 (baidu.com)
本地:基于PaddlePaddle框架的YOLOv1复现 - 飞桨AI Studio星河社区 (baidu.com)
2.在页面写代码怎么运行?
参考:飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com)
想法:也不一定要写成在页面运行的,只是在页面展示
3.想法:用GPT辅助自己去写代码
相关项目
FCN语义分割 - 飞桨AI Studio星河社区 (baidu.com)
FCN对Pascal VOC2012数据集进行语义分割 - 飞桨AI Studio星河社区 (baidu.com)
实际解决
1.统一VOC2007,VOC2012
在github上搜到相关资料,告诉我们要手动合并数据集。
观察发现,构建数据集的函数里面,只读取了这些内容,完全可以把图片以及txt文件手动整合到一起,取一个新名字,最后调用也要改一下
常见的训练模式
07+12: 使用 VOC2007 和 VOC2012 的 train+val。(16551) 上训练,然后使用 VOC2007 的test(4952) 测试
07++12: 使用 VOC2007 的 train+val+test(9963) 和 VOC2012的train+val(11540) 训练,然后使用 VOC2012 的 test 测试,这种法需提交到 PASCAL VOC Evaluation Server 上评估结果,因为VOC2012 test 没有公布。
这里我们采用07+12的模式训练,需手动构建数据集
手动构建train.txt,val.txt
.....
问题
1.pred形状不匹配?
训练的时候,发现“Valid loss nan, Valid Acc 0.7289, Valid mIoU 0.3159”这种情况
这几天先尝试自己解决,不行的话,在ddl的时候,提交读取PSACAL VOC,训练FCN全流程! - 飞桨AI Studio星河社区 (baidu.com)里面现有的模型
解决
属于偶然事件,有时候就可以正常运行
2.违反了卷积操作的规则
在卷积操作中,输入数据的通道数应该等于卷积核的通道数乘以分组数(groups)。然而,实际情况是输入数据的通道数为2048,而卷积核的通道数为512,分组数为1。这违反了卷积操作的规则,因此引发了错误。
解决
resnet从34换成50导致的问题,需要更改fcn网络,先理解fcn网络是怎么构建的,然后去借鉴下fcn网络
后面更改了很久还是有报错,最后不使用迁移学习去写以resnet50为backbone的fcn网络了,使用一般的方法
3.训练完后的模型怎么只有不?
解决
模型能跑就行,这个我实在是不想去debug了,大概率也是偶然事件,之前数据集的问题导致的,后面模型能跑之后我没有尝试过去跑一遍完整的代码
经验总结
有现成的经验要去借鉴,比如去github找到的手动合并数据集的方法,还有在paddle项目里面找到的现成的对VOC进行分割的项目
走捷径没错,但是太过于依赖捷径只会让自己越慢,不要妄想去用gpt帮助自己更改代码,它只能提供思路!!!
之前一直不敢去改模型,经过这次项目经历,对深度学习的熟练度以及自我学习能力得到了很大的提升。比如在程序中间打断点,看输出,匹配形状,增加卷积层,做数据预处理等等..