飞桨新人赛:钢铁缺陷检测挑战赛-第1名方案
本文介绍了基于PaddleDetection套件进行钢铁表面缺陷识别的实践过程。先介绍赛题及NEU数据集,含6种热轧带钢缺陷。接着说明数据准备步骤,包括解压、安装工具、改名、拆分及格式转换。然后详述用faster_rcnn_swin_tiny_fpn_3x_coco模型的训练流程,涉及配置文件修改、训练评估,最后提及推理及生成比赛数据的方法。

0.引言
作为一个新人练习赛,这个比赛可以非常好的帮助大家熟悉使用Paddle。在这里我使用PaddleDetection套件中的网络进行训练,本项目将带大家对PaddleDetection套件使用有一个实践的过程。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
1.赛题介绍
本次比赛聚焦图像目标识别技术,需要选手从图像中识别出钢铁表面的缺陷位置,并给出锚点框的坐标,同时对不同的缺陷进行分类,以期产出泛化性更好、性能更稳定的钢铁表面缺陷识别模型。2.数据介绍及数据准备
本数据集来自NEU表面缺陷检测数据集,收集了6种典型的热轧带钢表面缺陷,即氧化铁皮压入(RS)、斑块(Pa)、开裂(Cr)、点蚀(PS)、夹杂(In)和划痕(Sc)。
可在比赛页面看到详情:https://aistudio.baidu.com/aistudio/competition/detail/114/0/task-definition
数据格式转换,数据拆分
下面是Paddle提供的两个处理数据的命令说明文档。PadlleX:
https://github.com/PaddlePaddle/PaddleX/tree/develop/docs/data
PaddleDetection: https://github.com/PaddlePaddle/PaddleDetection/blob/release%2F2.3/docs/tutorials/PrepareDataSet.md
In [ ]# 解压文件并移除多余的目录! unzip /home/aistudio/data/data105746/train.zip -d /home/aistudio/data/steel!rm -r /home/aistudio/data/steel/__MACOSX! unzip /home/aistudio/data/data105747/test.zip -d /home/aistudio/data/steel!rm -r /home/aistudio/data/steel/__MACOSX登录后复制 In [ ]
# 安装paddlex 用于拆分数据集# 升级pip!pip install --upgrade pip -i https://mirror.baidu.com/pypi/simple!pip install "paddlex>2.0.0" -i https://mirror.baidu.com/pypi/simple登录后复制 In [ ]
# 修改文件名字 JPEGImages Annotations!mv /home/aistudio/data/steel/train/ANNOTATIONS /home/aistudio/data/steel/train/Annotations!mv /home/aistudio/data/steel/train/IMAGES /home/aistudio/data/steel/train/JPEGImages登录后复制 In [ ]
#使用paddleX拆分数据集!paddlex --split_dataset --format VOC --dataset_dir /home/aistudio/data/steel/train --val_value 0.001 --test_value 0.0登录后复制 In [ ]
# 下载PaddleDetection%cd /home/aistudio/work!git clone https://gitee.com/paddlepaddle/PaddleDetection.git -b release/2.3登录后复制 In [ ]
# 进入PaddleDetection%cd /home/aistudio/work/PaddleDetection# 安装其它依赖!pip install -r /home/aistudio/work/PaddleDetection/requirements.txt # 临时环境安装!pip install pycocotools -i https://mirror.baidu.com/pypi/simple!pip install lap -i https://mirror.baidu.com/pypi/simple登录后复制 In [ ]
%cd /home/aistudio/work/PaddleDetection/#转换train!python tools/x2coco.py \ --dataset_type voc \ --voc_anno_dir /home/aistudio/data/steel/train/ \--voc_anno_list /home/aistudio/data/steel/train/train_list.txt \--voc_label_list /home/aistudio/data/steel/train/labels.txt \--voc_out_name /home/aistudio/data/steel/train/voc_train.json#转换test!python tools/x2coco.py \ --dataset_type voc \ --voc_anno_dir /home/aistudio/data/steel/train/ \--voc_anno_list /home/aistudio/data/steel/train/val_list.txt \--voc_label_list /home/aistudio/data/steel/train/labels.txt \--voc_out_name /home/aistudio/data/steel/train/voc_val.json!rm -r /home/aistudio/data/steel/train/Annotations/*!mv /home/aistudio/data/steel/train/*.json /home/aistudio/data/steel/train/Annotations/登录后复制
3. 训练流程
在试了多种模型后,我发现faster_rcnn_swin_tiny_fpn_3x_coco效果最好。接下来就带着大家走一遍训练流程把。3.1 配置好训练文件
3.1.1 faster_rcnn_swin_tiny_fpn_1x_coco
首先打开work/PaddleDetection/configs/faster_rcnn下的faster_rcnn_swin_tiny_fpn_1x_coco.yml 一般来说,需要修改的就是weights即模型保存路径。及训练轮次,学习率等。可以将一些需要改动的参数放到此文件中,这样就不会防止改动了里面得文件导致使用其他模型时还要再去那个文件进行改动。此文件的参数优先级高于其他base文件。
3.1.2 faster_rcnn_swin_tiny_fpn_1x_coco
然后打开_BASE_的路径,即faster_rcnn_swin_tiny_fpn_1x_coco.yml文件
我们最需要改的是 第一个得数据集配置文件,以及训练参数配置文件。
3.1.3 coco_detection
打开work/PaddleDetection/configs/datasets/路径下的coco_detection.yml改成如下。具体路径可以自己琢磨一下
3.1.4 其他
其他基本不用动。打开work/PaddleDetection/configs/faster_rcnn/_base_/路径下的faster_rcnn_swin_tiny_fpn.yml。可以修改其中的batch_size。这些事基本的超参,其他的可以自行研究。4. 训练及评估
In [ ]# 训练!python tools/train.py -c configs/faster_rcnn/faster_rcnn_swin_tiny_fpn_3x_coco.yml --use_vdl=true --vdl_log_dir=vdl_dir/scalar --eval登录后复制 In [ ]
# 单卡断点续训# !python tools/train.py -c configs/faster_rcnn/faster_rcnn_swin_tiny_fpn_3x_coco.yml \# -r /home/aistudio/work/output/faster_rcnn_swin_tiny_fpn_3x_coco/best \# --eval \# --use_vdl=true \# --vdl_log_dir=vdl_dir/scalar \# --eval登录后复制
5. 生成比赛数据
In [ ]# 推理图像和生成txt文件!python tools/infer.py -c configs/faster_rcnn/faster_rcnn_swin_tiny_fpn_3x_coco.yml \-o weights=/home/aistudio/work/PaddleDetection/output/faster_rcnn_swin_tiny_fpn_3x_coco/34 \--infer_dir=/home/aistudio/data/steel/test/IMAGES/ \--output_dir=/home/aistudio/data/steel/infer_output\--draw_threshold=0.005 --save_txt=True登录后复制 In [ ]
import csvimport osheaders = ['image_id','bbox','category_id','confidence']classList = ['crazing','inclusion','pitted_surface','scratches','patches','rolled-in_scale']rows = []rootdir = '/home/aistudio/data/steel/infer_output'list = os.listdir(rootdir) #列出文件夹下所有的目录与文件for i in range(0,len(list)): path = os.path.join(rootdir,list[i]) if os.path.isfile(path) and path.endswith('txt'): txtFile = open(path) print(path) result = txtFile.readlines() for r in result: ls = r.split(' ') Cls = ls[0] sco = float(ls[1]) xmin = float(ls[2]) ymin = float(ls[3]) w = float(ls[4]) h = float(ls[5]) xmax = xmin+w ymax = ymin+h clsID = classList.index(Cls) imgID = list[i][:-4] row = [imgID,[xmin,ymin,xmax,ymax],clsID,sco] rows.append(row)with open('submission.csv','w')as f: f_csv = csv.writer(f) f_csv.writerow(headers) f_csv.writerows(rows)登录后复制 In [ ]import pandas as pddatafile = pd.read_csv('/home/aistudio/work/PaddleDetection/submission.csv')# 按照列值排序data = datafile.sort_values(by="image_id", ascending=True)data.to_csv('submission_final.csv', mode='a+', index=False)登录后复制 相关攻略
Pywinrm 通过Windows远程管理(WinRM)协议,让Python能够像操作本地一样执行远程Windows命令,真正打通了跨平台管理的最后一公里。 在混合IT环境中,Linux机器管理Wi
早些时候,聊过 Python 领域那场惊心动魄的供应链攻击。当时我就感叹,虽然我们 JavaScript 开发者对这类套路烂熟于心,但亲眼目睹这种规模的“投毒”还是头一次。 早些时候,聊过 Pyth
Toga 是 BeeWare 家族的核心成员,号称“写一次,跑遍所有平台”,而且用的是系统原生控件,不是那种一看就是网页套壳的界面 。 写了这么多年 Python,你是不是也想过:要是能一套代码跑
异常处理的核心:让错误在正确的地方被有效处理。正确的地方,就是别在底层就把异常吞了,也别在顶层还抛裸奔的 Exception。 异常处理写得好,半夜不用起来改 bug。1 你是不是也这么干过?tr
1 Skills机制概述 提起OpenClaw的Skills机制,不少人可能会把它想象成传统意义上的可执行插件。其实,它的内涵要更精妙一些。 简单说,Skills本质上是一套基于提示驱动的能力扩展机制。它并不是一个可以独立“跑”起来的程序模块,而是通过一份结构化描述文件(核心就是那个SKILL m
热门专题
热门推荐
加密货币行业翘首以盼的监管里程碑,终于有了实质性进展。美国证券交易委员会(SEC)主席保罗·阿特金斯(Paul Atkins)近日证实,那份允许加密项目在早期获得注册豁免权的“安全港”框架提案,已经正式送抵白宫,进入了最终审查阶段。 在范德堡大学与区块链协会联合举办的数字资产峰会上,阿特金斯透露了这
微策略Strategy报告:第一季录得144 6亿美元浮亏 再斥资约3 3亿美元买进4871枚比特币 市场震荡的威力有多大?看看Strategy的最新季报就明白了。根据其最新向美国证管会(SEC)提交的8-K报告,受市场剧烈波动影响,这家公司所持的比特币在第一季度录得了一笔惊人的数字——144 6亿
稳定币巨头Tether的动向,向来是加密世界的风向标。这不,它向Web3基础设施的版图扩张,又迈出了关键一步。公司执行长Paolo Ardoino在社交平台X上透露,其工程团队正在全力“烹制”一个新项目——去中心化搜索引擎 “Hypersearch”。这个消息一出,立刻引发了行业的广泛猜想。 采用D
基地位于Coinbase旗下以太坊Layer2网络Base的Seamless Protocol,日前正式宣告了服务的终结。这个曾经吸引了超过20万用户的原生DeFi借贷协议,在运营不到三年后,终究没能跑赢时间。它主打的核心产品是Integrated Leverage Markets(ILMs)——一
PAAL代币揭秘:深度解析Web3社区治理的核心钥匙 在去中心化自治组织的浪潮中,谁真正掌握了项目的话语权?PAAL代币提供了一套系统化的答案。它不仅是生态内流转的价值媒介,更是开启链上治理大门的核心凭证。通过持有并质押PAAL代币,用户能够对协议升级、资金分配乃至战略方向等关键事务投出决定性的一票





