新人赛 钢铁缺陷检测挑战赛baseline改良方案
本文针对钢铁缺陷检测挑战赛,提出baseline改良方案。将模型由yolov3换为PPYOLO,调整数据增强,改batch_size为16,采用lr预热策略,选ResNet50_vd_ssld作为backbone并调学习率。经训练预测,得分4.9285,较原基线高0.5。还提及后续可用PPYOLOV2、优化数据增强及模型融合进一步提升。

新人练习赛 钢铁缺陷检测挑战赛baseline改良方案
赛事简介
赛题介绍
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
本次比赛为图像目标识别比赛,要求参赛选手基于给定图像建立模型,识别出钢铁表面出现缺陷的位置,并给出锚点框的坐标,同时对不同的缺陷进行分类。
数据简介
本数据集来自NEU表面缺陷检测数据集,收集了6种典型的热轧带钢表面缺陷,即氧化铁皮压入(RS)、斑块(Pa)、开裂(Cr)、点蚀(PS)、夹杂(In)和划痕(Sc)。
提交内容及格式
结果文件命名:submission.csv(否则无法成功提交) 结果文件格式:.csv(否则无法成功提交) 结果文件内容:submission.csv结果文件需包含多行记录,每行包括4个字段,内容示例如下
各字段含义如下:
image_id(int): 图片id
bbox(list[float]): 检测框坐标(XMin, YMin, XMax, YMax)
category_id: 缺陷所属类别(int),类别对应字典为:{‘ crazing’:0,’inclusion’:1, ’pitted_surface’:2, ,’scratches’:3,’patches’:4,’rolled-in_scale’:5}
confidence(float): 置信度
备注: 每一行记录1个检测框,并给出对应的category_id;同张图片中检测到的多个检测框,需分别记录在不同的行内。
本次方案是参考原作者提出baseline:https://aistudio.baidu.com/aistudio/projectdetail/2319492
本文真正的应用PaddleX的代码非常简单,并且新手友好!
根据最新文档,所有的PaddleX都由三步组成:
本次执行过程可分为:
1、安装需要的PaddleX版本
2、解压数据
3、分割数据集
4、引入包并设为GPU训练
5、定义图像处理流程transforms
6、定义数据集Dataset
7、正式训练
8、进行预测
9、将结果写入目标文件
本次方案
在基线的基础上,更换了目标检测模型,由yolov3更换成了PPYOLO。
减少了原有的数据增强,虽然数据增强可以优化过拟合问题,但是过多的数据增强反而会使得准确率下降。
调整了batch_size值,调整Lr策略增加warmup步骤。
最后得分4.9285,比原作者baseline得分高出了0.5。
1、安装需要的PaddleX版本
In [1]# 安装paddlex# 需要注意paddlex1对于版本有所要求,所以最好更新对应的包版本!pip install "numpy<=1.19.5" -i https://mirror.baidu.com/pypi/simple!pip install "paddlex<2.0.0" -i https://mirror.baidu.com/pypi/simple登录后复制
2、解压数据
数据集已经直接被放在./work/目录下,直接解压即可
In [ ]# 解压文件并移除多余的目录! unzip work/train.zip -d ./work/! rm -f -r work/__MACOSX! unzip work/test.zip -d ./work/! rm -f -r work/__MACOSX登录后复制
3、按比例分割数据集
按比例9:1分割数据集
(PS:原作者是8:2分割数据集)
In [ ]import os# 遍历训练集name = [name for name in os.listdir('work/train/IMAGES') if name.endswith('.webp')]train_name_list=[]for i in name: tmp = os.path.splitext(i) train_name_list.append(tmp[0])# 构造图片-xml的链接文件ori_train.txtwith open("./work/train/ori_train.txt","w") as f: for i in range(len(train_name_list)): if i!=0: f.write('\n') line='IMAGES/'+train_name_list[i]+'.webp'+" "+"ANNOTATIONS/"+train_name_list[i]+'.xml' f.write(line)# 构造label.txtlabels=['crazing','inclusion','pitted_surface','scratches','patches','rolled-in_scale']with open("./work/train/labels.txt","w") as f: for i in range(len(labels)): line=labels[i]+'\n' f.write(line)# 将ori_train.txt随机按照eval_percent分为验证集文件和训练集文件# eval_percent 验证集所占的百分比import randomeval_percent=0.1;data=[]with open("work/train/ori_train.txt", "r") as f: for line in f.readlines(): line = line.strip('\n') data.append(line)index=list(range(len(data)))random.shuffle(index)# 构造验证集文件cut_point=int(eval_percent*len(data))with open("./work/train/val_list.txt","w") as f: for i in range(cut_point): if i!=0: f.write('\n') line=data[index[i]] f.write(line)# 构造训练集文件with open("./work/train/train_list.txt","w") as f: for i in range(cut_point,len(data)): if i!=cut_point: f.write('\n') line=data[index[i]] f.write(line)登录后复制 训练集文件
验证集文件
标签文件
4、引入包并设为GPU训练
引入包并设为GPU训练,如果没有GPU则使用CPU训练
In [2]import matplotlibmatplotlib.use('Agg') import osos.environ['CUDA_VISIBLE_DEVICES'] = '0'import paddlex as pdx登录后复制 5、定义图像处理流程transforms
In [3]from paddlex.det import transformstrain_transforms = transforms.Compose([ transforms.MixupImage(mixup_epoch=250), transforms.RandomDistort(), transforms.RandomExpand(), transforms.RandomCrop(), transforms.Resize(target_size=608, interp='RANDOM'), transforms.RandomHorizontalFlip(), transforms.Normalize(),])eval_transforms = transforms.Compose([ transforms.Resize(target_size=608, interp='CUBIC'), transforms.Normalize(),])登录后复制
6、定义数据集Dataset
In [4]train_dataset = pdx.datasets.VOCDetection( data_dir='work/train', file_list='work/train/train_list.txt', label_list='work/train/labels.txt', transforms=train_transforms, shuffle=True)eval_dataset = pdx.datasets.VOCDetection( data_dir='work/train', file_list='work/train/val_list.txt', label_list='work/train/labels.txt', transforms=eval_transforms)登录后复制
7、正式训练
本次方案采取了pdx.det.PPYOLO方案,并且batch_size设为16,加快训练的速度。还有采取lr预热warmup策略。PPYOLO的backbone选为ResNet50_vd_ssld,并且对学习率进行了调整。经过以上的调整,最后得分为4.9285,比原作者的4.49872,高出了约0.5。证明此方案可行。
In [5]num_classes = len(train_dataset.labels)model = pdx.det.PPYOLO(num_classes=num_classes, backbone='ResNet50_vd_ssld')model.train( num_epochs=300, train_dataset=train_dataset, train_batch_size=16, eval_dataset=eval_dataset, learning_rate=0.000125, warmup_steps=1000, warmup_start_lr=0.0, lr_decay_epochs=[210,240], save_interval_epochs=10, save_dir='output/ppyolo_ResNet50_vd_ssld', use_vdl=True)登录后复制
8、 进行预测
遍历文件夹获得需要检测的图片列表
test数据是在之前和train数据一起解压的,这里就直接遍历文件夹即可~
如果有小伙伴为了保护存储器删除了数据,还请重新解压一次~如果一路运行下来什么都没进行操作就直接运行就可以了~
In [6]import osname = [name for name in os.listdir('work/test/IMAGES') if name.endswith('.webp')]test_name_list=[]for i in name: tmp = os.path.splitext(i) test_name_list.append(tmp[0])登录后复制 进行检测
模型预测结果为: [{'category_id': int64, 'bbox': float:[x,y,x_length,y_length], 'score': float, 'category': str},
其中,category_id是编号,bbox是锚框,score是置信度,category是类别名称。需要注意bbox的格式和题目中格式不同,这里分别表明了框的左下角坐标,以及长宽长
度,题目要求为左下角坐标和右上角坐标;这里的编号和题目中编号并不对应,所以需要根据类别信息进行转化。
In [7]import paddlex as pdx# 读取模型model = pdx.load_model('output/ppyolo_ResNet50_vd_ssld/best_model')# 建立一个标号和题目要求的id的映射num2index={'crazing':0,'inclusion':1,'pitted_surface':2,'scratches':3,'patches':4,'rolled-in_scale':5}result_list = []# 将置信度较好的框写入result_listfor index in test_name_list: image_name = 'work/test/IMAGES/'+index+'.webp' predicts = model.predict(image_name) for predict in predicts: if predict['score']<0.5: continue; # 将bbox转化为题目中要求的格式 tmp=predict['bbox'] tmp[2]+=tmp[0] tmp[3]+=tmp[1] line=[index,tmp,num2index[predict['category']],predict['score']] result_list.append(line)登录后复制 9、将结果写入目标文件
将上述list转化为csv就可以直接提交了!
In [8]import numpy as npresult_array = np.array(result_list)import pandas as pddf = pd.DataFrame(result_array,columns=['image_id','bbox','category_id','confidence'])df.to_csv('submission.csv',index=None)登录后复制 10、总结
针对目标检测比赛,大家在选定了一个baseline之后可以尝试各种技巧,包括学习率调整策略,模型调参等等。关于目标检测竞赛的一些技巧,大家可以去网上搜索相关的trick。
改进方案:
可使用精度更好的模型,例如PPYOLOV2。
另外数据扩增方法一定要反复尝试,会很大程度上影响模型精度,合理选择数据增强方式。
后期上分可使用模型融合。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
一篇讲透:豆包、元宝、DeepSeek、Kimi、WorkBuddy,职场里到底怎么分工
别再把所有 AI 当成一个东西:WorkBuddy 和豆包、元宝、DeepSeek、Kimi,到底该怎么选? 这一年,AI 的进化速度着实叫人眼花缭乱。 大家的关注点,早就从“这工具能写文章吗”跳到了“它能不能帮我做方案、改稿子、整理会议纪要,甚至把任务往前推一步”。 于是,一个新问题浮出水面。 很
我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的
如何使用WorkBuddy深度学习我的说话方式,让每一份文案都自带个人风格 作为一名企业培训师,每年主讲上百场课程是行业常态。无论是线下公开课、线上直播,还是视频号、公众号的内容创作,每天的工作状态不是在授课,就是在准备各种讲稿的路上。早期借助通用AI工具辅助创作,写作效率确实有所提升,但生成的内容
英国视障跑者挑战马拉松,将借助智能眼镜“看”到赛道、辨别方向
英国视障跑者挑战马拉松,将借助智能眼镜“看”到赛道、辨别方向 最近有一则科技助残的新闻,让人眼前一亮。当地时间4月2日,英国BBC报道称,视障跑者克拉克·雷诺兹正计划借助一项创新技术,参加一场全程马拉松。这项技术的巧妙之处在于,它能让世界另一端有视力的志愿者,实时“看到”雷诺兹眼前的景象,并为他提供
彻底卸载 OpenClaw (龙虾) 指南
彻底卸载 OpenClaw (龙虾) 指南 想把 OpenClaw(大家常叫它“龙虾”)从你的系统里清理干净?这事儿得讲究个章法,胡乱删除往往治标不治本,残留的服务和文件就像散落在角落的贝壳,时不时硌你一下。接下来,咱们就按一套稳妥的流程,帮你把它请走。 卸载原则 核心原则就一句话:先停服务,再卸工
AI 让英国学生“不会思考”,近 6000 名英格兰中学教师表示担忧
AI让英国学生“不会思考”?近6000名教师敲响教育警钟 一项来自英国教育界的深度调查,为当前AI技术涌入课堂的热潮带来了冷静思考。据英国《卫报》4月2日报道,英格兰的中学教师们普遍观察到一种现象:随着人工智能在教育中的应用日益广泛,学生的批判性思维能力与深度思考习惯正面临下滑风险。这项由英国全国教
- 日榜
- 周榜
- 月榜
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

