声明:开源只是为了方便大家交流学习,数据请勿用于商业用途!!!!
背景
很早之前开源过 pytorch 进行图像分类的代码(从实例掌握 pytorch 进行图像分类),历时两个多月的学习和总结,近期也做了升级。在此基础上写了一个 Ai Challenger 农作物竞赛的 baseline 供大家交流。
2018 年 12 月 13 日更新
新增数据集下载链接:百度网盘 提取码:iksk
数据集是 10 月 23 日 更新后的新数据集,包含训练集、验证集、测试集A/B.
另外最近有同学拿到类似的数据,想做分类的任务,但是这份代码是针对这次比赛开源的,在数据读取方式上会有区别,对于新手来说不太友好,我开源了一份针对图像分类任务的代码,并附上简单教程,相信看完后能比较轻松使用 pytorch 进行图像分类。
代码: pytorch-image-classification
2018年 10 月 30 日更新
新增 data_aug.py
用于线下数据增强,由于时间问题,这个比赛不再做啦,这些增强方式大家有需要可以研究一下,支持的增强方式:
- 高斯噪声
- 亮度变化
- 左右翻转
- 上下翻转
- 色彩抖动
- 对比度变化
- 锐度变化
注:对比度增强在可视化后,主观感觉特征更明显了,目前我还未跑完。提醒一下,如果做了对比度增强,在测试集的时候最好也做一下。
个人博客:超杰
比赛地址:农作物病害检测
完整代码地址:plants_disease_detection
注:
欢迎大佬学习交流啊,这份代码可改进的地方太多了,
如果大佬们有啥改进的意见请指导!
联系方式:zhuchaojie@buaa.edu.cn
成绩:线上 0.8805,线下0.875,由于划分存在随机性,可能复现会出现波动,已经尽可能排除随机种子的干扰了。
提醒
main.py
中的test函数已经修正,执行后在 ./submit/
中会得到提交格式的 json 文件,现已支持 Focalloss 和交叉验证,需要的自行修改一下就可以了。
依赖中的 pytorch 版本请保持一致,不然可能会有一些小 BUG。
1. 依赖
python3.6 pytorch0.4.1
2. 关于数据的处理
首先说明,使用的数据为官方更新后的数据,并做了一个统计分析(下文会给出),最后决定删除第 44 类和第 45 类。
并且由于数据分布的原因,我将 train 和 val 数据集合并后,采用随机划分。
数据增强方式:
- RandomRotation(30)
- RandomHorizontalFlip()
- RandomVerticalFlip()
- RandomAffine(45)
图片尺寸选择了 650,暂时没有对这个尺寸进行调优(毕竟太忙了。。)
3. 模型选择
模型目前就尝试了 resnet50,后续有卡的话再说吧。。。
4. 超参数设置
详情在 config.py 中
5.使用方法
- 第一步:将测试集图片复制到
data/test/
下 - 第二步:将训练集合验证集中的图片都复制到
data/temp/images/
下,将两个json
文件放到data/temp/labels/
下 - 执行 move.py 文件
- 执行 main.py 进行训练
6.数据分布图
训练集
验证集
全部数据集
感觉楼主博客页面非常好看!能否参考下画数据分布直方图的代码?@(捂嘴笑)
我不是原作,使用的是 Typecho,主题是 MIrages~~
你好,我们小组现在想下载这个数据集,但报名时间已过,官网下载不了。你能提供下载链接或者发我份吗,谢谢!
不好意思啊,这个要看举办方是否允许的
你好,请问数据集还有吗
给了链接,你看一下吧
将两个 json 文件放到 data/temp/labels/ 下
请问楼主,这两个文件在哪里
RuntimeError: cuda runtime error (38) : no CUDA-capable device is detected at . 博主我在运行您的main代码出现说cuda不可用,但是我在检测torch.cuda.is_available()时是显示True的,我还没运行过GPU上,博主能给我解答下如何解决吗~
您好,修改一下 config.py 中的 gpu 为 "0" 即可
谢谢,我后来发现了这个错误。
楼主你好,这个数据集分布不均衡,想问一下你是怎么处理的。谢谢
数据不平衡的话,我是做了对弱样本(数据量较少的)做了增强,增加了若干倍;在损失函数上尝试了 focalloss,没有较大提升;最后选择了多模型融合,不同的模型学习到的样本特征不同,可以在一定程度上提高学习的能力
谢谢楼主的解答
博主,有沒有多模型融合的code,能不能參考下
raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not int。博主我在运行main代码的时候出现了这个错误请问是什么原因呢
博主您好,想请问一下有没有什么方式可以将数据集里面关于马铃薯的照片单独分类出来呀?想试试只训练马铃薯的不知道行不行。
可以在获取图片标签的时候,讲其他类别统一置为0,把马铃薯的类别置为1,然后做个二分类就好了
博主您好 ,不知您是否方便发一下那两个20181021.json标注信息的文件?非常感谢!我邮箱yulingxing701@163.com。冒昧打扰,麻烦您啦。
在网盘文件找到啦,感谢感谢,打扰博主啦。
想问下博主为什么要在训练前把图片按照类别分到不同的文件夹里呀?
当初只是为了数据读取方便,不放也行,自己重写dataloader
博主您好,冒昧的打扰您,请问您这个代码训练的时候是组的服务器跑的吗?用的什么规格的gpu呢?
服务器使用的是实验室的,1080Ti
好的,谢谢博主
我可能楼主的迭代次数40次就可以迭代好嘛,为什么我迭代了很多次。。
调参的活,没那么死板的。
AssertionError: Torch not compiled with CUDA enabled
博主你好,想这种问题怎么解决呀?
感谢博主分享!想问一下博主有没有CPU版的代码,小白想学习一下
把.cuda()相关的都去掉就行
File "F:\program\plants_disease_detection-master\dataset\dataloader.py", line 96, in get_files
labels.append(int(file.split("/")[-2]))
ValueError: invalid literal for int() with base 10: 'train'
运行main文件时遇到了这个问题,请问下博主该如何解决这个问题呀?
win7系统,改成labels.append(int(file.split('\\')[-2].split('/')[-1]))就可以了
win7系统,改成labels.append(int(file.split('\\')[-2].split('/')[-1]))就可以了
改了依然报错怎么解决呢?
已解决
请问是怎么解决的呢,我是win10系统,按照层主的方法改了还是不行。@(小乖)
已解决
submit文件夹下的baseline.json 文件是什么?没找到。。。
麻烦博主发一下给我,1024598454@qq.com,谢谢!
已弄懂,打扰博主了
请问怎么去单独预测呢
您好,我看您在评论里说了多模型融合的问题,想问问具体都用到了哪几个模型呢