eft and spin

  • Post author:
  • Post category:其他


eft and spin

  1. 环境搭建:torch(cuda)版安装,命令行:

    pip install torch=

    1.7.1 torchvision

    =0.8.2 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
  2. tensorboard的使用方法:tensorboard –logdir logs/fit

    打开http://localhost:6006,查看TensorBoard
  3. 论文阅读:
  • smpl:

Once learned they are held fixed and new body shapes and poses are created and animated by varying and respectively.

每一个joint对应一定控制区域,对应一定权重。Joint over a vertex

  • spin:

首先图片通过网络后得到人体姿态的描述参数



Θ

r

e

g

\Theta_{reg}







Θ











r


e


g






















(2D关键点检测网络对应的就是关节点的图像坐标),然后作为初始参数输入到迭代优化模块(SMPLify),迭代得到优化后的人体姿态



Θ

o

p

t

\Theta_{opt}







Θ











o


p


t






















。接下来就是”相互促进”的地方,在计算网络的损失时候,不是直接使用groundtruth,而是使用迭代优化模块的输出来计算,得到



Θ

r

e

g

Θ

o

p

t

||\Theta_{reg}-\Theta_{opt}||













Θ











r


e


g































Θ











o


p


t




























这种情况下,迭代优化的效果越好,网络训练的越好;网络训练的越好,迭代初始值越好,优化结果越好,达到self-improving in the loop。

其中SMPLify第一步是保持模型的pose和shape固定,优化相机的平移和人体的朝向;相机的平移估计好之后,通过一个四步的拟合过程最小化上面说的目标函数。在这片文章中,因为使用网络的输出作为优化的初始值,只需要一步的优化和较少的迭代次数就可以收敛到一个较好的拟合结果。

  • eft:

Eft fine-tuning的过程类似于spin的迭代过程

  1. 代码细节:
  2. spin:dataset类的用法
  • torch.utils.data.Dataset是一个抽象类,

    自定义的Dataset需要继承它并且实现两个成员方法:


    • getitem

      ()

    • len

      ()
def
__getitem__(self, index):
    img_path, label = self.data[index].img_path, self.data[index].label
    img = Image.open(img_path)
return img,label

def __len__(self):
        return len(self.data)
  • torch.utils.data.DataLoader

    类定义为:
class torch.utils.data.DataLoader(dataset,batch_size=1,
shuffle=False, sampler=None, batch_sampler=None, num_workers=0,
collate_fn=<function default_collate>, pin_memory=False, drop_last=False)

其中参数

  • dataset (Dataset) – 加载数据的数据集。
  • batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。
  • shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).
  • sampler (Sampler, optional) –定义从数据集中提取样本的策略,即生成index的方式,可以顺序也可以乱序
  • num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)
  • collate_fn (callable, optional) –将一个batch的数据和标签进行合并操作。
  • pin_memory (bool, optional) –设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。
  • drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)
  • timeout,是用来设置数据读取的超时时间的,但超过这个时间还没读取到数据的话就会报错。

    2. eft:

    int_fn:初始化dataset这个类



版权声明:本文为lsq_sj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。