【第30天】最终回

玉山竞赛心得

  1. 从朋友口中得知玉山银行和趋势科技举办了中文手写字辨识的比赛,於是我们召集资策会夥伴们组团参加。
  2. 拿到资料後,我们兴奋地讨论要如何处理图片、训练模型...等步骤,整个流程都是夥伴们激烈碰撞而来。印象最深刻的是连续一周疯狂训练模型,那个疲惫感真是够了。直到比赛结束後才松了一口气,取而代之的是满满的成就感。
  3. 接下来,让我们再次回顾这次的比赛的重点...

过程回顾

  1. 资料前处理

    1.1 YoloV4

    • 以YoloV4模型自动框选中文字。
    • 利用YoloV4的物件侦测框,裁切文字以外的空白处。

    1.2 去除杂讯与灰阶(OpenCV影像处理)

    • 以HSV进行颜色追踪,去除不需要的颜色或杂讯。
    • 分别将图档灰阶与二值化,比较後发现灰阶图档内含较多资讯,模型训练准确度较好。
  2. 资料扩增

    2.1 椒盐杂讯:

    • 采取mask的方式,制造小方块随机遮挡部分文字。
    • 增加资料集训练模型,较没有资料扩增的准确度高。

    2.2 其他队伍经验分享

    • 以中文字加上空白背景图合成图片。
    • 以GAN自动生成中文字的图片。
  3. 资料不平衡

    3.1 说明:资料中各类别样本数不平衡,可能导致模型训练後,样本较少的类别辨识度效果差。

    3.2 处理方法

    • 以中文字加上空白背景图合成新样本,使每个类别的样本数一致。
    • 以Keras内建的class_weight,将样本数少的类别权重调高,样本数多的类别权重调低。
  4. 训练模型

    4.1 CUDA加速与迁移学习:可提高模型训练效率。

    4.2 EarlyStopping与ModelCheckpoint:避免模型过拟合。

    4.3 Learning Rate

    • 采用固定Learning Rate训练模型,可能掉入局部最佳解或者是卡在鞍点。
    • 采用Reduce Learning Rate或Cyclical Learning Rate,可避免上述问题,提高模型训练效果。

    4.4 优化器:

    • 我们训练模型时,使用Adam + ReduceLROnPlateau,得到不错的效果。
    • 建议尝试各种优化器与Learning Rate训练模型。实际尝试过,才知道是否合适。

    4.5 预训练模型

    • 提及五种模型架构:Xception、ResNet152V2、DenseNet、InceptionResNetV2与InceptionV4。
    • 以五种预训练模型进行迁移学习,比较模型辨识效果。

    4.6 优化模型:以多个模型进行加权组合。

    4.7 判定isnull(第801类)

    • 模型训练时仅分成800类,无法判定其他类别(第801类)。
    • 利用模型输出的机率值(softmax),设定阈值判断800类以外的类别。
  5. GCP服务

    • 利用Python撰写Flask框架。
    • 从开启GCP免费服务,到设定VM,最终上传打包的模型与API文件至VM。
    • 忘记关闭付费功能的惨痛代价,多缴了好多钱啊。

总结

  1. 首先,感谢夥伴们一同参加玉山竞赛,读万卷书不如行万里路,我们一起踏出了第一步。
  2. 这次跟大家分享经验的同时,将玉山竞赛内容重新实作一次,并加入得奖者分享的技巧。期间数次碰壁想放弃,尤其是中秋节,亲朋好友都在庆祝,我只能苦坐在电脑前,太痛苦了。所幸最终还是坚持了下来,希望此次分享能为你们带来启发。
  3. 感谢找我一起参加IT铁人赛的帅哥,恭喜我们顺利完赛!大家也可以去看看他的文章
  4. 未来,我们还会持续参加影像辨识竞赛,让我们继续看下去...

<<:  总结篇 — Nightwatch.js E2E 之旅

>>:  [Day30]检视表、索引实作

Day3 WordPress 架设 - 寻找最适合我们的 WordPress 架站平台

首先我们要找一个地方架设 WordPress 作为内容管理系统 (CMS)。 因为是开发阶段,暂时不...

OAuth 2.0

Golang OAuth 2.0 在一开始的开赛目标就是希望可以完成golang + OAuth 2...

【从零开始的 C 语言笔记】第五篇-基本资料型态

不怎麽重要的前言 上一篇我们介绍的运算子跟运用的方式,不晓得大家有没有比较理解了呢,也可以自己多尝试...

20 - Husky - Git Hooks 工具

为了维护专案程序码的品质,我们需要对提交的代码做各式的检查(例如: Lint 、 Format 、 ...

Day 07: Python基础必备小知识(下)

Python基础语法 列印讯息 print(“所输入的讯息”, 变数名称) 这是一个会将输入的讯息所...