赞
踩
对于datawhale的开源学习计划,我眼馋很久了,只是之前在学校,不敢轻易尝试。此次寒假终于能够克服畏难情绪进行尝试,终归是有所进步的。
第一个任务即是构建自己的图像分类数据集,看起来还是一个比较简单的任务,没想到还是让我头大许久。
身为一名机械工程学院学生,我采用了一百个标准件构建数据集。
构建方法是,通过solidworks的运动算例生成标准件改变视图的动画,再将动画视频按帧读取。因为solidworks中的帧数可以自己调整,所以我制作的多是40~80帧、4~5秒的动画视频。
用opencv读取每一帧。这里出现了一个问题,cv.imwrite()不支持中文路径,因此我直接采用0~99的数字为名字创建文件夹,随后用os库与之前读取的零件名称列表对文件夹名进行了修改。
这样最初的图片文件夹就建立完成了。
由于这些零件在图片中所处位置、颜色等方面都比较相似,与ImageNet数据集的相似度也比较低,我对这样一个数据集能否进行有效的分类心存疑虑。选择了25种零件进行了迁移学习微调训练,仅30个轮次,在测试集上的准确率就达到了77%,这二十五种零件都是螺栓、轴承的种类,相互之间本就没有很大的差别。这让我意识到,我这个刚刚接触深度学习的小白还是太孤陋寡闻了。
先经过统计得出图像宽高的dataframe
然后用matplotlib将分布表达出来
可以看到我的图像似乎大多数集中在800*800上,实际上不是这样的,接近800*800的主要是上文所说用来迁移学习的25种零件,是拖动录屏的。在600*450处的图像实际上是最多的,是用运动算例直接生成的。
在最初的数据集文件夹下创建“train”与“test”两个文件夹,并创建子类。
- import os
-
- dataset_path = ""
-
- classes = os.listdir(dataset_path)
- # 创建 train 文件夹
- os.mkdir(os.path.join(dataset_path, 'train'))
-
- # 创建 test 文件夹
- os.mkdir(os.path.join(dataset_path, 'val'))
-
- # 在 train 和 test 文件夹中创建各类别子文件夹
- for ling in classes:
- os.mkdir(os.path.join(dataset_path, 'train', ling))
- os.mkdir(os.path.join(dataset_path, 'val', ling))
然后再给出训练集与测试集的比例,随机进行文件的移动。
下面就是拆分后的文件夹结构。
- mechanicalling_split/
- ├── train
- │ ├── Erings挡圈
- │ ├── O型圈A系列
- │ ├── O型圈G系列
- │ ├── 侧面带孔圆螺母
- │ ├── 储能焊用焊接螺柱
- │ ├── 六角头头部带孔螺栓细杆B级
- │ ├── 六角头头部带槽螺栓A级和B级
- │ ├── 六角头自攻锁紧螺栓
- │ ├── 六角头螺杆带孔螺栓A级和B级
- │ ├── 六角头螺杆带孔螺栓细杆B级
- │ ├── 六角头螺杆带孔铰制孔用螺栓A级和B级
- │ ├── 六角头螺栓带孔螺栓细牙A和B级
- │ ├── 六角钢
- │ ├── 内六角平圆头螺钉
- │ ├── 内锯齿锁紧垫圈
- │ ├── 内齿锁紧垫圈
- │ ├── 加强半圆头方颈螺栓
- │ ├── 十字槽凹穴六角头自攻螺钉
- │ ├── 十字槽凹穴六角头螺栓
- │ ├── 十字槽沉头螺钉
- │ ├── 十字槽锁紧自钻自攻螺钉
- │ ├── 半圆头带榫螺栓
- │ ├── 半圆头方颈螺栓
- │ ├── 单耳止动垫圈
- │ ├── 双列圆柱滚子轴承NNU型
- │ ├── 双列圆柱滚子轴承NN型
- │ ├── 双头螺柱
- │ ├── 双耳止动垫圈
- │ ├── 圆柱滚子轴承
- │ ├── 圆螺母用止动垫圈
- │ ├── 圆锥滚子轴承
- │ ├── 外舌止动垫圈
- │ ├── 外调心推力球轴承
- │ ├── 外锯齿锁紧垫圈
- │ ├── 外齿锁紧垫圈
- │ ├── 大半圆头带榫螺栓
- │ ├── 大半圆头方颈螺栓C级
- │ ├── 夹紧挡圈
- │ ├── 孔用弹性挡圈
- │ ├── 小半圆头低方颈螺栓B级
- │ ├── 小方头螺栓B级
- │ ├── 嵌装圆螺母
- │ ├── 工字钢用异形垫圈
- │ ├── 带锁圈的螺钉锁紧挡圈
- │ ├── 平垫圈
- │ ├── 开口垫圈
- │ ├── 开口销
- │ ├── 开槽半沉头螺钉
- │ ├── 开槽沉头不脱出螺钉
- │ ├── 开槽球面圆柱头轴位螺钉
- │ ├── 开槽锥端定位螺钉
- │ ├── 拉环螺钉
- │ ├── 推力圆柱滚子轴承
- │ ├── 推力球轴承
- │ ├── 推力调心滚子轴承
- │ ├── 方头螺栓C级
- │ ├── 方螺母
- │ ├── 无头焊钉
- │ ├── 普通切向键
- │ ├── 标准型弹簧垫圈
- │ ├── 正齿轮
- │ ├── 沉头双榫螺栓
- │ ├── 沉头带榫螺栓
- │ ├── 沉头方颈螺栓
- │ ├── 波形弹性垫圈
- │ ├── 波形弹簧垫圈
- │ ├── 深沟球轴承
- │ ├── 滚花高头螺钉
- │ ├── 热轧工字钢
- │ ├── 焊接六角头螺母
- │ ├── 球面垫圈
- │ ├── 直斜接齿轮
- │ ├── 直齿伞
- │ ├── 直齿内齿轮
- │ ├── 直齿条
- │ ├── 精密机械用十字槽自攻螺钉刮削端
- │ ├── 蝶形螺母
- │ ├── 螺旋齿轮
- │ ├── 螺栓紧固轴端挡圈
- │ ├── 螺钉紧固轴端挡圈
- │ ├── 螺钉锁紧挡圈
- │ ├── 角接触球轴承
- │ ├── 调心滚子轴承
- │ ├── 调心球轴承
- │ ├── 轴用弹性挡圈
- │ ├── 轴肩挡圈
- │ ├── 轻中系列滚针轴承
- │ ├── 轻型弹簧垫圈
- │ ├── 轻轨
- │ ├── 重型弹簧垫圈
- │ ├── 钢丝挡圈
- │ ├── 钢丝锁圈
- │ ├── 钢网架螺栓球节点用高强度螺栓
- │ ├── 钩头楔键
- │ ├── 锥形斜垫圈
- │ ├── 锥形锁紧垫圈
- │ ├── 锥形锯齿锁紧垫圈
- │ ├── 锥销锁紧挡圈
- │ ├── 鞍形弹性垫圈
- │ └── 鞍形弹簧垫圈
- └── val
- ├── Erings挡圈
- ├── O型圈A系列
- ├── O型圈G系列
- ├── 侧面带孔圆螺母
- ├── 储能焊用焊接螺柱
- ├── 六角头头部带孔螺栓细杆B级
- ├── 六角头头部带槽螺栓A级和B级
- ├── 六角头自攻锁紧螺栓
- ├── 六角头螺杆带孔螺栓A级和B级
- ├── 六角头螺杆带孔螺栓细杆B级
- ├── 六角头螺杆带孔铰制孔用螺栓A级和B级
- ├── 六角头螺栓带孔螺栓细牙A和B级
- ├── 六角钢
- ├── 内六角平圆头螺钉
- ├── 内锯齿锁紧垫圈
- ├── 内齿锁紧垫圈
- ├── 加强半圆头方颈螺栓
- ├── 十字槽凹穴六角头自攻螺钉
- ├── 十字槽凹穴六角头螺栓
- ├── 十字槽沉头螺钉
- ├── 十字槽锁紧自钻自攻螺钉
- ├── 半圆头带榫螺栓
- ├── 半圆头方颈螺栓
- ├── 单耳止动垫圈
- ├── 双列圆柱滚子轴承NNU型
- ├── 双列圆柱滚子轴承NN型
- ├── 双头螺柱
- ├── 双耳止动垫圈
- ├── 圆柱滚子轴承
- ├── 圆螺母用止动垫圈
- ├── 圆锥滚子轴承
- ├── 外舌止动垫圈
- ├── 外调心推力球轴承
- ├── 外锯齿锁紧垫圈
- ├── 外齿锁紧垫圈
- ├── 大半圆头带榫螺栓
- ├── 大半圆头方颈螺栓C级
- ├── 夹紧挡圈
- ├── 孔用弹性挡圈
- ├── 小半圆头低方颈螺栓B级
- ├── 小方头螺栓B级
- ├── 嵌装圆螺母
- ├── 工字钢用异形垫圈
- ├── 带锁圈的螺钉锁紧挡圈
- ├── 平垫圈
- ├── 开口垫圈
- ├── 开口销
- ├── 开槽半沉头螺钉
- ├── 开槽沉头不脱出螺钉
- ├── 开槽球面圆柱头轴位螺钉
- ├── 开槽锥端定位螺钉
- ├── 拉环螺钉
- ├── 推力圆柱滚子轴承
- ├── 推力球轴承
- ├── 推力调心滚子轴承
- ├── 方头螺栓C级
- ├── 方螺母
- ├── 无头焊钉
- ├── 普通切向键
- ├── 标准型弹簧垫圈
- ├── 正齿轮
- ├── 沉头双榫螺栓
- ├── 沉头带榫螺栓
- ├── 沉头方颈螺栓
- ├── 波形弹性垫圈
- ├── 波形弹簧垫圈
- ├── 深沟球轴承
- ├── 滚花高头螺钉
- ├── 热轧工字钢
- ├── 焊接六角头螺母
- ├── 球面垫圈
- ├── 直斜接齿轮
- ├── 直齿伞
- ├── 直齿内齿轮
- ├── 直齿条
- ├── 精密机械用十字槽自攻螺钉刮削端
- ├── 蝶形螺母
- ├── 螺旋齿轮
- ├── 螺栓紧固轴端挡圈
- ├── 螺钉紧固轴端挡圈
- ├── 螺钉锁紧挡圈
- ├── 角接触球轴承
- ├── 调心滚子轴承
- ├── 调心球轴承
- ├── 轴用弹性挡圈
- ├── 轴肩挡圈
- ├── 轻中系列滚针轴承
- ├── 轻型弹簧垫圈
- ├── 轻轨
- ├── 重型弹簧垫圈
- ├── 钢丝挡圈
- ├── 钢丝锁圈
- ├── 钢网架螺栓球节点用高强度螺栓
- ├── 钩头楔键
- ├── 锥形斜垫圈
- ├── 锥形锁紧垫圈
- ├── 锥形锯齿锁紧垫圈
- ├── 锥销锁紧挡圈
- ├── 鞍形弹性垫圈
- └── 鞍形弹簧垫圈
-
- 202 directories, 0 files
然后我们可以得到这100种图片数目统计。
然后就可以使用这个数据集进行训练了吧。
找数据真的很麻烦。虽然我是机械工程学院的,但我同时还是一个op。前天晚上从百度图片上爬了28个原神角色每人200张图片,但是质量真的很低,热度高的角色还好,热度低的角色搜索结果种常常会出现热度高的角色。手动删了十几个文件夹,最后放弃了这条路子。
随后才打算回到自己的专业上来。本来是打算全部标准件都弄上,但是终究没有这样做。一方面即使是用运动算例生成动画也是足够久;另一方面很多标准件也并不是靠三维图像就能分辨得了的,加进去很多反而会导致数据集质量变差。最后凑整录入了100个标准件,处理后共得到了21828张图像。感觉还是够多了吧大概。
另一个难住我了的就是在Ubuntu上进行matplotlib中文画图的配置。老是搞不好,网上的说法我都试过了,自己下字体,移动到matplotlib的fonts文件夹并修改配置文件我也试过了。连系统的默认字体我都给修改了,还是搞不好,原因是我无法导入“_rebuild”这个重构函数。最后的图像还是在自己的Windows上面搞出来的。
对的,我上面用的是云GPU平台,恒源云。放个链接:恒源云_GPUSHARE-恒源智享云
也没必要隐瞒大家什么,这是个邀请连接,不过只要你不充100块以上,对我来说没有所谓的邀请奖励。QAQ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。