0

随笔

画了两天 = =,感觉整体上没有什么太违和的地方,但是细节的地方需要更好的处理。

0

端午啦

端午节,画了两天,才画了一张带颜色的图,感觉颜色啥的,好难画,阴影的过渡有待进步~

0

随便画画

好久没有练习画画了。今天总算动起手来。这张画,我是先找了个淘宝的图片,然后大致画了下姿势,之后就完全不参考了,慢慢的一点点的画。还是使用之前的 Sakimichan大大的画法,只使用了19号画笔和套索工具。

画完的时候在看最开始的草稿,完全无法想象这两个居然是同一次的产物。

肚子上的褶皱。也是参考Sakimichan大大的方式,使用高光和暗光的两种线条随意涂画,看起来效果还不错。比较遗憾的是,到现在还不会上色。还是先把黑白练好再说。 read more

1

2B

昨天晚上,终于把Nier的一周目打通了。最后2B小姐姐的眼罩居然掉了。真心好看。所以今天呢,就在没有任何参考的情况下,自己练习了一下头像,感觉效果似乎还可以。难道说,我的插画生涯终于要开始了吗,嘻嘻。

0

TICTOC: Header Only C++ Timer

感觉最近的更新频率略高啊~哈哈~

这次的带来的是一个十分简单便利的C++计时库。

项目地址:https://github.com/miaoerduo/tictoc 欢迎Start和提MR

项目中有详细的说明和Demo,可以很直观的体验到这个库的易用性。

先看一下效果,如果我们正确使用的话,大致会出现类似下面的信息:

可以显示,我们的每个区域的代码(包括行号)的消耗时间。精确到微秒。

起因是这样的,之前有很长时间的工作内容是优化一些特定的函数,保证新旧的SDK的速度的对齐。然后C++虽然有一些工具可以分析运行状态,但通常还是简单的打印时间来的方便 /* Print大法好 */ 。之后,和工程的小伙伴一起Debug的时候,就发现他写了一个头文件,然后用绝对路径的方式去include,而头文件里面就是各种常用的小工具,而最常用到的就是时间的打印。 read more

2

Easy Pipeline,一种轻量级的Python Pipeline库

嗯,很久没有写博客了,最近的工作都是偏开发性质的,以至于没有时间对自己感兴趣的领域进行探索,感觉个人的成长停滞了一些。如何在枯燥的工作中,提取出有助于自己成长的养分,对于每个人来说都是不小的考验。

这次,带来的是之前编写的一下挺简单的库,用来简化流水线作业的小框架。

Github: https://github.com/miaoerduo/easy-pipeline 欢迎Star和提交MR。

起因是这样的,组内有一个需求,需要挖掘视频中的检测难样本,这样可以极大地减少标注的量,从而降低成本。难样本挖掘的策略,简单来说就是如果视频的前几帧和后几帧都能检测到目标,而就只有当前帧没有检测到,就说明当前帧很可能存在漏检(没有检测本到该检测到的目标);反之,如果前后都没有检测到目标,而当前帧检测到了,那就很可能是误检(检测到不是目标的东西)。 read more

0

vim配置

下面是我的VIM的主要配置。应该就是网上找到的一个,加了点功能。权当在这里备份一下了。

将下面的内容写入自己的~/.vimrc文件即可。

针对自动跳转到上次关闭位置的这个功能,我在Ubuntu 14这个系统上失败了一次。是由于viminfo文件的权限不对。使用ls -l ~/.viminfo。如果发现其创建用户不是当前用户的话,那么可以将其删除。下次打开vim的时候会自动新建。这样就搞定了!

另外,附上Ubuntu下,VIM 8升级的命令:

0

嗯,此刻一个非技术板块诞生了

先贴上一张昨晚的作品,这样这篇博客会自动有个插图。:P

左边的男生是想象着随便画的,右边的女生其实是参考的一个插画画的,画的和原图一点都不像就是了。

之前一直在博客里面记录一下自己学习的技术技能,最近写博客的频率已经降到了一个很可怕的数值。一方面是工作的内容过于枯燥,没有什么新技术的使用,不知道要写些什么有意思的内容,另一方面就是工作确实太忙了,写一篇博客需要至少半天的时间,平时肯定是没有的,周末又要陪女票大人出去逛街。这真是现实和生活之间的巨大的矛盾啊,果然有句话是对的:成人的世界里,没有容易二字。实在伐开心。 read more

0

_rebuild_tensor_v2?pytorch版本间模型兼容性脱坑实践

最近使用Pytorch 0.4.0 进行模型训练,之后使用一个转模型的工具时,报了一个错,就是标题里面的_rebuild_tensor_v2相关的错误。最后发现是本地使用的pytorch的版本是0.3.0,和0.4.0模型上不兼容。各论坛上的解决方案都是说pytorch版本不向后兼容,建议升级pytorch。无奈我这里不方便升级pytorch版本。那么问题就来了,有没有什么不需要修改pytorch源码,或是不升级pytorch,又能让老版本的pytorch读取新版本模型的方案呢?

当然是有的,而且工作量很小。

一、Pytorch模型存储和读取的流程

首先,我们使用pytorch存储模型会使用 torch.save 这个函数,直接将模型的state_dict()保存下来。类似下面的代码:

读取参数的代码也十分简单:

而低版本的pytorch就是在load_state_dict这里报了错。

二、State Dict

我们首先要知道,model.state_dict()的返回值究竟是什么。

这里我直接给出结论:

model.state_dict()的返回值是一个collections.OrderedDict对象,它的键是一个字符串,它的值是Tensor的对象。所以造成兼容性问题的其实是Tensor对象的不兼容。

那么是不是可以将Tensor转化成一个新的非Pytorch内置的数据类型呢?这样就可以避免兼容性问题。

numpy.ndarray就是我们需要的中间态。

三、模型转换

首先,我们需要将state_dict的参数转换成numpy.ndarray保存下来。这里使用高版本的pytorch。

之后,用低版本的pytorch载入这个numpy的state_dict。

四、总结

对于这个问题,还有很多的解决方案,这里是比较简单的一种。

PS. 这是目前为止,写的最快的一篇博客了。。。

 

转载请注明出处,谢谢!