自制训练集训练FCN(对上一篇Caffe时间的补充)
上次由于测试数据不足导致最后的model的训练效果并不是特别好,这里需要扩充训练集,但是看了一圈也没有太好的方法来实现自动抠图,于是自己动手丰衣足食,不就是1.5K张图吗(实际上笔者抠这些图用了4天,有三天是抠图8个小时以上,还有一天由于是周末就没都用来抠图,一把辛酸泪)。
跟之前那个博客中实践的内容相比,这里我们只是将训练集换成了自己制作的数据集,其中原始图片来自于imagenet,至于groundtruth图没有提供所以只能自己像上面一样手动抠图。
借助的工具就是Photoshop了,方法如下,但是PS处理后有问题,下面我们再讲
1、首先导入图片
2、使用快速选择工具(按w键进行切换),对主体进行选择,按直接拖动即可进行选择,通过按住alt同时拖动可以进行减操作(因为有的时候快速选择工具会包含不需要的区域,需要这一步去除多余部分)
3、点击菜单栏 图像-模式-灰度
将图转为灰度图
4、ctrl + j 复制一层
5、然后按shift+f5将主体(即新产生的图层1)涂成白色
6、再选择另外一个图层(即背景图层),同样按住shfit+f5将背景图层涂成黑色
7、最后另存外PNG文件,文件名和原来保持一致,扩展名变为png
将任意一张处理后生成的图片导入matlab可以看到,在一些不规则的边缘像素的数值不是二值的除了我们期望的0和255还有其它值
当然发现这个也都是后话,是在训练过程中报错才发现的,报错的提示是:Check failed: status == CUBLAS_STATUS_SUCCESS (11 vs. 0) CUBLAS_STATUS_MAPPING_ERROR ,而且在往上查看别的网友用ps处理之后也出现了这样的问题。
于是这里我们还是选择使用matlab来对这些抠出来的groundtruth图像进行二值化的处理
下面附上matlab代码:
1 | %请大家根据自己的路径进行相应地修改 |
再导入matlab验证可以看到值只有0和255,。但是当这个groundtruth改好之后,重新运行又出现了新问题,报出如下错误,大概就是传进来的数组没有这么多维
在出现问题的那句之前添加了 print(in_.shape) 查看维数出了什么问题
输出如下
可以看到有的图片的维度是不对的,但是1.5k张照片怎么去找呢。。
于是有了老于的写的下面的检测代码
1 | # -*- coding: utf-8 -*- |
最后是发现由两张图片是灰度图。。图片来自于imagenet,折腾到这里就差不多了,然后再按照上一篇中的方法训练就行,写到这的时候还在等训练结果,还有7w迭代,慢慢等。。。。
p.s. 生成标签.txt文件:
这里再介绍之前说的生成.txt文件的另一种方法,代码如下
1 | # import sys |
更改相应内容即可生成train.txt和val.txt文件
附一些其他的参考链接: