前言
刚刚接触图像,做了简单的图像分类,下面一一会有说明,希望能给到大家帮助,其中会借鉴其他大佬博客,有的可能忘记标记引用,如看到,可以联系本人,进行及时更改。
使用的resnext、efficientnet等图像分类网络
参考的git原文:https://github.com/lxztju/pytorch_classification
本文的git地址:https://github.com/yanyide123/picture_classification_pytorch
实现功能
- 基础功能利用pytorch实现图像分类
- 包含带有warmup的cosine学习率调整
- warmup的step学习率优调整
- 添加label smooth的pytorch实现(标签平滑)
- 可视化特征层
运行环境
- python3.7
- torch 1.9.0+cu111
- torchvision 0.10.0+cu111
模型介绍
仓库中模型mobilenet,resnext模型来自于torchvision
efficientnet来自于 https://github.com/lukemelas/EfficientNet-PyTorch
预测结果
预测结果是将图片的路径和lable存入到result中,存放的形式路径+标签
move_result.py是将result结果的.csv文件存储的图片路径根据分出类别进行创建新的文件夹将分类好的结果移动到对应标签里面
图片:
其他文件介绍
picture_show.ipynb:查看数据集中的图片,每一个类别展示5张照片
画图
两种作图的介绍:
下面来介绍一下TSNE和UMAP的差别,首先,在高维空间内,描述两个点(两个张量)的距离不一样,tSNE采取的是“概率算法”,即把两个点的距离转换成概率,若 i 与 j 这两个点距离比较近的话,它所对应的概率较大;而UMAP采取的是传统的欧式距离。
在做图像分类结果进行展示,两种方式作图提取的特征都是使用的resnet做的特征提取,区别点就是在于两者的降为和点雨点之间的比较的差异。
更多详细资料参考:
https://blog.csdn.net/weixin_33295562/article/details/113029121?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-1-113029121.pc_agg_new_rank&utm_term=UMAP
TSNE作图
1.在draw_image文件夹中TSNE_draw,直接运行tsne.py,相关联的程序petrolem_dataset.py(这里设置对应分类类别的颜色,按照自己的标签进行设置),resnet.py对应做图片映射使用的网络,这里使用的resNet101网络。
借鉴文献:https://learnopencv.com/t-sne-for-feature-visualization/
分类的结果图片展示:
UMAP作图
1.在draw_image文件夹中UMAP_draw,直接运行umap_show.ipynb,相关联的程序petrolem_dataset.py,resnet.py对应做图片映射使用的网络,这里使用的resNet101网络。
下面是umap的效果:
参考文献
https://github.com/lxztju/pytorch_classification
https://learnopencv.com/t-sne-for-feature-visualization/
https://umap-learn.readthedocs.io/en/latest/basic_usage.html