/TIANCHI_XUELANG_AI_2

天池雪浪布匹瑕疵检测,复赛线上746,排名14/2403

Primary LanguagePython

比赛信息

  • 本次大赛要求选手开发算法模型,通过布样影像,基于对布样中疵点形态、长度、面积以及所处位置等的分析,判断瑕疵的种类 。通过探索布样疵点精确智能诊断的优秀算法,提升布样疵点检验的准确度,降低对大量人工的依赖,提升布样疵点质检的效果和效率。
  • 比赛链接

文件说明

  • src : 存放所有相关代码的文件夹
    • main.py : finetune主函数
    • extract_pic_xml.py : 将所有原始数据的xml提取整合到目标xml文件夹中,pic提取整合到pic文件夹中
    • cname2ename.py : 包含中文名和拼音的dict
    • split_10.py : 将原始数据按照比赛要求分成10个文件夹, 取一部分作为validation数据另外存放
    • DataAugmentForObejctDetection.py : 数据增强脚本
    • DataAugForTrainAndTest.py : 训练数据增强
    • xml_helper.py : 处理xml文件的辅助脚本
    • cp_to_train.py : 将data_split_train中原图copy到data_for_train文件夹下面,将增强后的图移动到 data_for_train文件夹下面
    • merge.py : 融合脚本
  • models : 存放预训练模型以及训练输出的模型
  • data : 存放训练数据以及test数据
  • submit : 存放预测的中间结果
  • result.csv : 根据submit中的结果文件进行融合后的最后结果
  • run.sh : 复现线上结果的脚本(需下载我预先训练好的模型,同时在main函数中注释掉训练即测试部分,取消复现部分代码)
  • run_all.sh : 从头开始训练并得到预测结果的脚本。

操作说明

  • step1 : 手动解压原始数据压缩文件,得保证解压后的文件名没有乱码!!!!!!!
  • step2 : 手动在keras源码中修改插值方式
    • 在~/anaconda3/envs/tianchi/lib/python2.7/site-packages/keras_preprocessing/imge.py(imge.py路径)的第33行后面加入 'antialias': pil_image.ANTIALIAS
    • 变成: ''' _PIL_INTERPOLATION_METHODS = { 'nearest': pil_image.NEAREST, 'bilinear': pil_image.BILINEAR, 'bicubic': pil_image.BICUBIC, 'antialias': pil_image.ANTIALIAS, #added by mao } '''
  • step3 : 运行run.sh可以复现线上的结果(需要先下载训练好的模型 密码: qp9k);或者运行run_all.sh可以从头开始训练并得到预测结果。

思路说明

  • 数据输入部分:
    • 输入:
      1. 图片大小:H,W=[550, 600]
      2. batch : 4
    • 数据增强线下:每张瑕疵图片扩充到三到四张,加入了裁剪,改变亮度,加噪声,cutout等方式,当然增强的时候利用了xml文件的信息,保证了框也随之变化
    • 数据增强线上:使用keras内置的增强方法,开启了镜像
  • 模型及trick部分:
    • 模型:densenet169
    • trick:
    1. 使用LSR(Label smoothing Regularization)损失,超参e={0.25,0.3}。增加模型泛化能力。
    2. 尝试balanced CE 以及 balanced CE + focal loss损失,但是均未带来提升。
    3. 尝试增加attetion,也未带来提升。
    4. 模型融合.单模730, 双模融合746。
  • 训练策略:
    • 每个类别的10%图片作为validation集合
    • 剩下90%中只对带瑕疵图片进行图像增强。每张扩充到3到4张。
  • 输出结果说明:
    • 输出模型存放位置:./models/final
    • 输出模型名称:1) model_weight_0.7296.hdf5; 2) model_weight_0.7239.hdf5
    • 输出模型大小:均为102.5Mb
  • 另:
    • 单模730的参数:LSR损失的e=0.25, 图片增强的时候每张扩充到3张
    • 单模72+的参数:LSR损失的e=0.3, 图片增强的时候每张扩充到4张
    • 其他参数两者均一致,具体间main.py函数
  • 注意,模型初始化用的是imagenet预训练权值,在开始模型训练前会自行下载

随机性

  • 线下线上增强是随机增强的,这会有一个随机性,重新训练的话结果可能会在线上最好成绩附近波动

初赛和复赛的数据链接: