mmClassification学习
课程
mim
很好用,感觉需要更多地研究一下
流程
下载配置文件和模型
1 | mim download mmcls --config mobilenetblablabla --dest . |
使用API
1 | from mmcls.apis import init_model, inference_model |
修改配置文件
1 | num_classes = 10 |
开始训练
1 | mim train mmcls mobilenet-v2_fruit.py |
作业记录
作业很简单。top-1能到95以上。进阶作业比较同质化,又没啥原创性的想法改网络结构,懒得做了。一些注意事项记录如下。
解决ImportError: cannot import name 'blablabla' from 'mmcv'
问题:重装mmcv-full
pip list | grep mmcv
发现有mmcv
和mmcv-full
- 卸载
mmcv
- 重装
mmcv-full
:mim uninstall mmcv-full
+mim install mmcv-full
更新pip包:pip install -U
mim
命令行工具很好用,调config文件的时候用非常方便,且下载的config文件是完整而非基于__base__
的。
1 | mim download mmcls --config mobilenet-v2_8xb32_in1k --dest . |
关于保存最好的一次,请见issue和我的回答。
关于evaluation
其实有一些令人迷惑的地方,比如这里的metric='accuracy'
和ClsHead
里的topk=(1, 5)
之间有什么关系?config文件中是这样写的:
1 | evaluation = dict(interval=1, metric='accuracy', save_best='accuracy_top-1') |
这里的interval
和save_best
是传给EvalHook
的,而metric
等其他参数则是传给CustomDataset
(或其他数据集类)的。实际上还有别的metric,base_dataset.py
代码文件中evaluate
函数是这样写的
1 | # def evaluate(...): |
所以这个save_best
传递的accuracy_top-1
实际上是eval_result
的一个key
。