当前位置:网站首页>工业缺陷检测项目实战(四)——基于HRNet的陶瓷缺陷检测
工业缺陷检测项目实战(四)——基于HRNet的陶瓷缺陷检测
2022-04-22 07:48:00 【夏融化了这季节】
基于HRNet的陶瓷缺陷检测
1.原理:
参考大佬们的文章
HRNet: HRNet原理.
2.数据集准备和代码
数据下载链接:https://aistudio.baidu.com/aistudio/datasetdetail/32615
代码下载链接:https://gitee.com/wxyfmq123456/HRNet-Image-Classification?_from=gitee_search
3.原图二值化
这里数据集已经提供了二值化图像的png,我们需要用png图像进行训练。因为原图像特别不明显。

总共6个类别。
4. 参数配置
(1) 数据存放位置:

(2) 数据存放方式:

每个文件夹代表一个类型,里面的图片全部都是二值化图片(.png),原图(.jpg)可以删去或者备份在其他地方。
(3) 修改代码

打开cls_hrnet.py,修改
self.classifier = nn.Linear(2048, 1000)
为
self.classifier = nn.Linear(2048, 6)
也就是后面的参数为类别数。
(4) 选择配置文件

我们选择第一个,即:
cls_hrnet_w18_sgd_lr5e-2_wd1e-4_bs32_x100.yaml
修改里面的参数,将
DATASET:
DATASET: 'imagenet'
DATA_FORMAT: 'jpg'
ROOT: 'data/imagenet/'
TEST_SET: 'val'
TRAIN_SET: 'train'
修改为
DATASET:
DATASET: 'data'
DATA_FORMAT: 'png'
ROOT: 'imagenet'
TEST_SET: 'val'
TRAIN_SET: 'train'
原因是我们设置的路径跟代码的不一样。
其他参数,比如迭代次数epoch,bath_size等,可以自己调参。
(5) 在train.py中增加如下代码
train_dataset = datasets.ImageFolder(
traindir,
transforms.Compose([
transforms.RandomResizedCrop(config.MODEL.IMAGE_SIZE[0]),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
])
)
#以下为增加的代码,上面几行是原有的代码
#print(train_dataset.classes) #根据分的文件夹的名字来确定的类别
with open("class.txt","w") as f1:
for classname in train_dataset.classes:
f1.write(classname + "\n")
#print(train_dataset.class_to_idx) #按顺序为这些类别定义索引为0,1...
with open("classToIndex.txt", "w") as f2:
for key, value in train_dataset.class_to_idx.items():
f2.write(str(key) + " " + str(value) + '\n')
#print(train_dataset.imgs) #返回从所有文件夹中得到的图片的路径以及其类别
可以保持类别对应的index。
5.训练
python tools/train.py --cfg experiments/cls_hrnet_w18_sgd_lr5e-2_wd1e-4_bs32_x100.yaml
训练完在output文件夹里面有
权重偏置文件:final_state.pth.tar
6.测试
测试的图片,注意这里还是读取验证集vaild,所以为了测试一张图片,我们可以把验证集的图片变为一张,放在例如名为test的文件夹里面,路径如图:

在HRNet-Image-Classification-master\lib\core\function.py里面的def validate函数,添加
print('class:{}'.format(output.argmax(1)))
以打印识别的类别index。
运行:
python tools/vaild.py --cfg experiments/cls_hrnet_w18_sgd_lr5e-2_wd1e-4_bs32_x100.yaml
会打印出所属类别的index。
版权声明
本文为[夏融化了这季节]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_39735688/article/details/122081337
边栏推荐
- Postgres + PostGIS + GeoServer offline path planning function (record)
- Shell command script
- Level 1: create / delete nodes
- Level 3: node quota and other commands
- Disk management - raid creation
- mysql插入自由列
- mysqlbin log日志回放进行操作步骤
- SQL query removes empty data and null fields
- How to view port occupied in window
- Lambda expression
猜你喜欢

C语言之scanf/sprintf、fscanf/fprintf、sscanf/sprintf、snprintf

129. Find the sum of numbers from root node to leaf node (medium)

RHEL7 逻辑卷管理-笔记

PCIe learning - basic concepts of PCIe bus (6)

Pointer and array (detailed operation)

安卓开发——SQLite和SQLiteDatabase应用实验6笔记

xfs 文件系统的备份和恢复(包含磁盘挂载)

236. The nearest common ancestor of a binary tree (medium)

RHEL 用户和组的管理-笔记

HyperLedger Explorer 0.3.9环境搭建
随机推荐
Shell script learning notes - circular statements
解决磁盘有空间但创建不了文件---修复服务器文件系统
Installation de MySQL par CentOS
RHEL7 配置本地yum源
Linux(CentOS)下安装 PostgreSQL
235. Nearest common ancestor of binary search tree (easy)
Cesium realizes the monomer of buildings (divided into buildings and layers)
617. Merge binary tree (easy)
INSTALL_FAILED_MISSING_SHARED_LIBRARY
RHEL7 逻辑卷管理-笔记
Level 2: polymorphism
Nessus漏洞扫描简介
Aircrack 破解无线网密码 (跑字典法)
226. Flip binary tree (easy)
129. Find the sum of numbers from root node to leaf node (medium)
navicat连接oracle数据库失败:cannot load OCI DLL,87:Instant Client package is ...
PCIe学习-PCIe总线怎样做到在软件上兼容PCI总线(七)
PCIe learning - Introduction to PCIe bus architecture: transaction layer - data link layer - physical layer (8)
DTV terminology
Use of stream