日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

R(2+1)D理解与MindSpore框架下的实现

發布時間:2024/3/24 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R(2+1)D理解与MindSpore框架下的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、R(2+1)D算法原理介紹

論文地址:[1711.11248] A Closer Look at Spatiotemporal Convolutions for Action Recognition (arxiv.org)

Tran等人在2018年發表在CVPR 的文章《A Closer Look at Spatiotemporal Convolutions for Action Recognition》提出了R(2+1)D,表明將三位卷積核分解為獨立的空間和時間分量可以顯著提高精度,R(2+1)D中的卷積模塊將 N×t×d×dN \times t \times d \times dN×t×d×d 的3D卷積拆分為 N×1×d×dN \times 1 \times d \times dN×1×d×d 的2D空間卷積和 M×t×1×1M \times t \times 1 \times 1M×t×1×1 的1D時間卷積,其中N和M為卷積核的個數,超參數M決定了信號在空間卷積和時間卷積之間投影的中間子空間的維數,論文中將M的值設置為:
Mi=?td2Ni?1Nid2Ni?1+tNi?M_{i}= \left \lfloor \frac{td^{2}N_{i-1}N_{i}}{d^{2}N_{i-1}+tN_{i}} \right \rfloor Mi?=?d2Ni?1?+tNi?td2Ni?1?Ni???

i表示殘差網絡中第i個卷積塊,通過這種方式以保證(2+1)D模塊中的參數量近似于3D卷積的參數量。


與全三維卷積相比,(2+1)D分解有兩個優點,首先,盡管沒有改變參數的數量,但由于每個塊中2D和1D卷積之間的額外激活函數,網絡中的非線性數量增加了一倍,非線性數量的增加了可以表示的函數的復雜性。第二個好處在于,將3D卷積強制轉換為單獨的空間和時間分量,使優化變得更容易,這表現在與相同參數量的3D卷積網絡相比,(2+1)D網絡的訓練誤差更低。

下表展示了18層和34層的R3D網絡的架構,在R3D中,使用(2+1)D卷積代替3D卷積就能得到對應層數的R(2+1)D網絡。


實驗部分在Kinetics 上比較了不同形式的卷積的動作識別準確性,如下表所示。所有模型都基于 ResNet18,并在 8 幀或 16 幀剪輯輸入上從頭開始訓練,結果表明R(2+1)D 的精度優于所有其他模型。


在Kinetics上與sota方法比較的結果如下表所示。當在 RGB 輸入上從頭開始訓練時,R(2+1)D 比 I3D 高出 4.5%,在 Sports-1M 上預訓練的 R(2+1)D 也比在 ImageNet 上預訓練的 I3D 高 2.2%。

二、R(2+1)D的mindspore代碼實現

功能函數說明

數據預處理

  • 使用GeneratorDataset讀取了視頻數據集文件,輸出batch_size=16的指定幀數的三通道圖片。

  • 數據前處理包括混洗、歸一化。

  • 數據增強包括video_random_crop類實現的隨機裁剪、video_resize類實現的調整大小、video_random_horizontal_flip實現的隨機水平翻轉。

  • 模型主干

  • R2Plus1d18中,輸入首先經過一個 (2+1)D卷積模塊,經過一個最大池化層,之后通過4個由(2+1)D卷積模塊組成的residual block,再經過平均池化層、展平層最后到全連接層。

  • 最先的(2+1)D卷積模塊具體為卷積核大小為(1,7,7)的Conv3d再接一個卷積核大小為(3,1,1)的Conv3d,卷積層之間是Batch Normalization和Relu層。

  • R2Plus1d18中包含4個residual block,每個block在模型中都堆疊兩次,同時每個block都由兩個(2+1)D卷積模塊組成,每個(2+1)D卷積都由一個卷積核大小為(1,3,3)的Conv3d再接一個卷積核大小為(3,1,1)的Conv3d組成,卷積層之間仍然是Batch Normalization和Relu層,block的輸入和輸出之間是殘差連接的結構。

  • 具體模型搭建中各個類的作用為:

    • Unit3D類實現了輸入經過Conv3d、BN、Relu、Pooling層的結構,其中BN層、Relu層和Pooling層是可選的。
    class Unit3D(nn.Cell):"""Conv3d fused with normalization and activation blocks definition.Args:in_channels (int): The number of channels of input frame images.out_channels (int): The number of channels of output frame images.kernel_size (tuple): The size of the conv3d kernel.stride (Union[int, Tuple[int]]): Stride size for the first convolutional layer. Default: 1.pad_mode (str): Specifies padding mode. The optional values are "same", "valid", "pad".Default: "pad".padding (Union[int, Tuple[int]]): Implicit paddings on both sides of the input x.If `pad_mode` is "pad" and `padding` is not specified by user, then the paddingsize will be `(kernel_size - 1) // 2` for C, H, W channel.dilation (Union[int, Tuple[int]]): Specifies the dilation rate to use for dilatedconvolution. Default: 1group (int): Splits filter into groups, in_channels and out_channels must be divisibleby the number of groups. Default: 1.activation (Optional[nn.Cell]): Activation function which will be stacked on top of thenormalization layer (if not None), otherwise on top of the conv layer. Default: nn.ReLU.norm (Optional[nn.Cell]): Norm layer that will be stacked on top of the convolutionlayer. Default: nn.BatchNorm3d.pooling (Optional[nn.Cell]): Pooling layer (if not None) will be stacked on top of all theformer layers. Default: None.has_bias (bool): Whether to use Bias.Returns:Tensor, output tensor.Examples:Unit3D(in_channels=in_channels, out_channels=out_channels[0], kernel_size=(1, 1, 1))"""def __init__(self,in_channels: int,out_channels: int,kernel_size: Union[int, Tuple[int]] = 3,stride: Union[int, Tuple[int]] = 1,pad_mode: str = 'pad',padding: Union[int, Tuple[int]] = 0,dilation: Union[int, Tuple[int]] = 1,group: int = 1,activation: Optional[nn.Cell] = nn.ReLU,norm: Optional[nn.Cell] = nn.BatchNorm3d,pooling: Optional[nn.Cell] = None,has_bias: bool = False) -> None:super().__init__()if pad_mode == 'pad' and padding == 0:padding = tuple((k - 1) // 2 for k in six_padding(kernel_size))else:padding = 0layers = [nn.Conv3d(in_channels=in_channels,out_channels=out_channels,kernel_size=kernel_size,stride=stride,pad_mode=pad_mode,padding=padding,dilation=dilation,group=group,has_bias=has_bias)]if norm:layers.append(norm(out_channels))if activation:layers.append(activation())self.pooling = Noneif pooling:self.pooling = poolingself.features = nn.SequentialCell(layers)def construct(self, x):""" construct unit3d"""output = self.features(x)if self.pooling:output = self.pooling(output)return output
    • Inflate3D類使用Unit3D實現了(2+1)D卷積模塊。
    class Inflate3D(nn.Cell):"""Inflate3D block definition.Args:in_channel (int): The number of channels of input frame images.out_channel (int): The number of channels of output frame images.mid_channel (int): The number of channels of inner frame images.kernel_size (tuple): The size of the spatial-temporal convolutional layer kernels.stride (Union[int, Tuple[int]]): Stride size for the second convolutional layer. Default: 1.conv2_group (int): Splits filter into groups for the second conv layer,in_channels and out_channelsmust be divisible by the number of groups. Default: 1.norm (Optional[nn.Cell]): Norm layer that will be stacked on top of the convolutionlayer. Default: nn.BatchNorm3d.activation (List[Optional[Union[nn.Cell, str]]]): Activation function which will be stackedon top of the normalization layer (if not None), otherwise on top of the conv layer.Default: nn.ReLU, None.inflate (int): Whether to inflate two conv3d layers and with different kernel size.Returns:Tensor, output tensor.Examples:>>> from mindvision.msvideo.models.blocks import Inflate3D>>> Inflate3D(3, 64, 64)"""def __init__(self,in_channel: int,out_channel: int,mid_channel: int = 0,stride: tuple = (1, 1, 1),kernel_size: tuple = (3, 3, 3),conv2_group: int = 1,norm: Optional[nn.Cell] = nn.BatchNorm3d,activation: List[Optional[Union[nn.Cell, str]]] = (nn.ReLU, None),inflate: int = 1,):super(Inflate3D, self).__init__()if not norm:norm = nn.BatchNorm3dself.in_channel = in_channelif mid_channel == 0:self.mid_channel = (in_channel * out_channel * kernel_size[1] * kernel_size[2] * 3) // \(in_channel * kernel_size[1] * kernel_size[2] + 3 * out_channel)else:self.mid_channel = mid_channelself.inflate = inflateif self.inflate == 0:conv1_kernel_size = (1, 1, 1)conv2_kernel_size = (1, kernel_size[1], kernel_size[2])elif self.inflate == 1:conv1_kernel_size = (kernel_size[0], 1, 1)conv2_kernel_size = (1, kernel_size[1], kernel_size[2])elif self.inflate == 2:conv1_kernel_size = (1, 1, 1)conv2_kernel_size = (kernel_size[0], kernel_size[1], kernel_size[2])self.conv1 = Unit3D(self.in_channel,self.mid_channel,stride=(1, 1, 1),kernel_size=conv1_kernel_size,norm=norm,activation=activation[0])self.conv2 = Unit3D(self.mid_channel,self.mid_channel,stride=stride,kernel_size=conv2_kernel_size,group=conv2_group,norm=norm,activation=activation[1])def construct(self, x):x = self.conv1(x)x = self.conv2(x)return x
    • Resnet3D類實現了輸入經過Unit3D、Max Pooling再接4個residual block的結構,residual block的堆疊數量可以通過參數進行指定。
    class ResNet3D(nn.Cell):"""ResNet3D architecture.Args:block (Optional[nn.Cell]): THe block for network.layer_nums (Tuple[int]): The numbers of block in different layers.stage_channels (Tuple[int]): Output channel for every res stage.Default: [64, 128, 256, 512].stage_strides (Tuple[Tuple[int]]): Strides for every res stage.Default:[[1, 1, 1],[1, 2, 2],[1, 2, 2],[1, 2, 2]].group (int): The number of Group convolutions. Default: 1.base_width (int): The width of per group. Default: 64.norm (nn.Cell, optional): The module specifying the normalization layer to use.Default: None.down_sample(nn.Cell, optional): Residual block in every resblock, it can transfer the inputfeature into the same channel of output. Default: Unit3D.kwargs (dict, optional): Key arguments for "make_res_layer" and resblocks.Inputs:- **x** (Tensor) - Tensor of shape :math:`(N, C_{in}, T_{in}, H_{in}, W_{in})`.Outputs:Tensor of shape :math:`(N, 2048, 7, 7, 7)`Supported Platforms:``GPU``Examples:>>> import numpy as np>>> import mindspore as ms>>> from mindvision.msvideo.models.backbones import ResNet3D, ResidualBlock3D>>> net = ResNet(ResidualBlock3D, [3, 4, 23, 3])>>> x = ms.Tensor(np.ones([1, 3, 16, 224, 224]), ms.float32)>>> output = net(x)>>> print(output.shape)(1, 2048, 7, 7)About ResNet:The ResNet is to ease the training of networks that are substantially deeper thanthose used previously.The model explicitly reformulate the layers as learning residual functions withreference to the layer inputs, instead of learning unreferenced functions."""def __init__(self,block: Optional[nn.Cell],layer_nums: Tuple[int],stage_channels: Tuple[int] = (64, 128, 256, 512),stage_strides: Tuple[Tuple[int]] = ((1, 1, 1),(1, 2, 2),(1, 2, 2),(1, 2, 2)),group: int = 1,base_width: int = 64,norm: Optional[nn.Cell] = None,down_sample: Optional[nn.Cell] = Unit3D,**kwargs) -> None:super().__init__()if not norm:norm = nn.BatchNorm3dself.norm = normself.in_channels = stage_channels[0]self.group = groupself.base_with = base_widthself.down_sample = down_sampleself.conv1 = Unit3D(3, self.in_channels, kernel_size=7, stride=2, norm=norm)self.max_pool = ops.MaxPool3D(kernel_size=3, strides=2, pad_mode='same')self.layer1 = self._make_layer(block,stage_channels[0],layer_nums[0],stride=stage_strides[0],norm=self.norm,**kwargs)self.layer2 = self._make_layer(block,stage_channels[1],layer_nums[1],stride=stage_strides[1],norm=self.norm,**kwargs)self.layer3 = self._make_layer(block,stage_channels[2],layer_nums[2],stride=stage_strides[2],norm=self.norm,**kwargs)self.layer4 = self._make_layer(block,stage_channels[3],layer_nums[3],stride=stage_strides[3],norm=self.norm,**kwargs)def _make_layer(self,block: Optional[nn.Cell],channel: int,block_nums: int,stride: Tuple[int] = (1, 2, 2),norm: Optional[nn.Cell] = nn.BatchNorm3d,**kwargs):"""Block layers."""down_sample = Noneif stride[1] != 1 or self.in_channels != channel * block.expansion:down_sample = self.down_sample(self.in_channels,channel * block.expansion,kernel_size=1,stride=stride,norm=norm,activation=None)self.stride = stridebkwargs = [{} for _ in range(block_nums)] # block specified key word argstemp_args = kwargs.copy()for pname, pvalue in temp_args.items():if isinstance(pvalue, (list, tuple)):Validator.check_equal_int(len(pvalue), block_nums, f'len({pname})')for idx, v in enumerate(pvalue):bkwargs[idx][pname] = vkwargs.pop(pname)layers = []layers.append(block(self.in_channels,channel,stride=self.stride,down_sample=down_sample,group=self.group,base_width=self.base_with,norm=norm,**(bkwargs[0]),**kwargs))self.in_channels = channel * block.expansionfor i in range(1, block_nums):layers.append(block(self.in_channels,channel,stride=(1, 1, 1),group=self.group,base_width=self.base_with,norm=norm,**(bkwargs[i]),**kwargs))return nn.SequentialCell(layers)def construct(self, x):"""Resnet3D construct."""x = self.conv1(x)x = self.max_pool(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)return x
    • R2Plus1dNet類繼承了Resnet3D類,主要是使用了Resnet3D中的4個residual block,實現了輸入經過(2+1)D、Max Pooling,再通過4個residual block,最后經過平均池化層、展平層到全連接層的結構。
    class R2Plus1dNet(ResNet3D):"""Generic R(2+1)d generator.Args:block (Optional[nn.Cell]): THe block for network.layer_nums (Tuple[int]): The numbers of block in different layers.stage_channels (Tuple[int]): Output channel for every res stage. Default: (64, 128, 256, 512).stage_strides (Tuple[Tuple[int]]): Strides for every res stage.Default:((1, 1, 1),(2, 2, 2),(2, 2, 2),(2, 2, 2).conv12 (nn.Cell, optional): Conv1 and conv2 config in resblock. Default: Conv2Plus1D.base_width (int): The width of per group. Default: 64.norm (nn.Cell, optional): The module specifying the normalization layer to use. Default: None.num_classes(int): Number of categories in the action recognition dataset.keep_prob(float): Dropout probability in classification stage.kwargs (dict, optional): Key arguments for "make_res_layer" and resblocks.Returns:Tensor, output tensor.Examples:>>> from mindvision.msvideo.models.backbones.r2plus1d import *>>> from mindvision.msvideo.models.backbones.resnet3d import ResidualBlockBase3D>>> data = Tensor(np.random.randn(2, 3, 16, 112, 112), dtype=mindspore.float32)>>>>>> net = R2Plus1dNet(block=ResidualBlockBase3D, layer_nums=[2, 2, 2, 2])>>>>>> predict = net(data)>>> print(predict.shape)"""def __init__(self,block: Optional[nn.Cell],layer_nums: Tuple[int],stage_channels: Tuple[int] = (64, 128, 256, 512),stage_strides: Tuple[Tuple[int]] = ((1, 1, 1),(2, 2, 2),(2, 2, 2),(2, 2, 2)),num_classes: int = 400,**kwargs) -> None:super().__init__(block=block,layer_nums=layer_nums,stage_channels=stage_channels,stage_strides=stage_strides,conv12=Conv2Plus1d,**kwargs)self.conv1 = nn.SequentialCell([nn.Conv3d(3, 45,kernel_size=(1, 7, 7),stride=(1, 2, 2),pad_mode='pad',padding=(0, 0, 3, 3, 3, 3),has_bias=False),nn.BatchNorm3d(45),nn.ReLU(),nn.Conv3d(45, 64,kernel_size=(3, 1, 1),stride=(1, 1, 1),pad_mode='pad',padding=(1, 1, 0, 0, 0, 0),has_bias=False),nn.BatchNorm3d(64),nn.ReLU()])self.avgpool = AdaptiveAvgPool3D((1, 1, 1))self.flatten = nn.Flatten()self.classifier = nn.Dense(stage_channels[-1] * block.expansion,num_classes)# init weightsself._initialize_weights()def construct(self, x):"""R2Plus1dNet construct."""x = self.conv1(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = self.avgpool(x)x = self.flatten(x)x = self.classifier(x)return xdef _initialize_weights(self):"""Init the weight of Conv3d and Dense in the net."""for _, cell in self.cells_and_names():if isinstance(cell, nn.Conv3d):cell.weight.set_data(init.initializer(init.HeNormal(math.sqrt(5), mode='fan_out', nonlinearity='relu'),cell.weight.shape, cell.weight.dtype))if cell.bias:cell.bias.set_data(init.initializer(init.Zero(), cell.bias.shape, cell.bias.dtype))elif isinstance(cell, nn.BatchNorm2d):cell.gamma.set_data(init.initializer(init.One(), cell.gamma.shape, cell.gamma.dtype))cell.beta.set_data(init.initializer(init.Zero(), cell.beta.shape, cell.beta.dtype))
    • R2Plus1d18類繼承了R2Plu1dNet類,主要的作用是指定residual block的堆疊次數,在此類中指定的數量即為每個block都堆疊兩次。
    class R2Plus1d18(R2Plus1dNet):"""The class of R2Plus1d-18 uses the registration mechanism to register,need to use the yaml configuration file to call."""def __init__(self, **kwargs):super(R2Plus1d18, self).__init__(block=ResidualBlockBase3D,layer_nums=(2, 2, 2, 2),**kwargs)

    三、可執行案例

    notebook文件鏈接

    數據集準備

    代碼倉庫使用 Kinetics400 數據集進行訓練和驗證。

    預訓練模型

    預訓練模型是在 kinetics400 數據集上訓練,下載地址:r2plus1d18_kinetic400.ckpt

    環境準備

    git clone https://gitee.com/yanlq46462828/zjut_mindvideo.git cd zjut_mindvideo# Please first install mindspore according to instructions on the official website: https://www.mindspore.cn/installpip install -r requirements.txt pip install -e .

    訓練流程

    from mindspore import nn from mindspore import context, load_checkpoint, load_param_into_net from mindspore.context import ParallelMode from mindspore.communication import init, get_rank, get_group_size from mindspore.train import Model from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor from mindspore.nn.loss import SoftmaxCrossEntropyWithLogitsfrom msvideo.utils.check_param import Validator,Rel
    數據集加載

    通過基于VideoDataset編寫的Kinetic400類來加載kinetic400數據集。

    from msvideo.data.kinetics400 import Kinetic400 # Data Pipeline. dataset = Kinetic400(path='/home/publicfile/kinetics-400',split="train",seq=32,num_parallel_workers=1,shuffle=True,batch_size=6,repeat_num=1) ckpt_save_dir = './r2plus1d' /home/publicfile/kinetics-400/cls2index.json
    數據處理

    通過VideoRescale對視頻進行縮放,利用VideoResize改變大小,再用VideoRandomCrop對Resize后的視頻進行隨機裁剪,再用VideoRandomHorizontalFlip根據概率對視頻進行水平翻轉,利用VideoReOrder對維度進行變換,再用VideoNormalize進行歸一化處理。

    from msvideo.data.transforms import VideoRandomCrop, VideoRandomHorizontalFlip, VideoRescale from msvideo.data.transforms import VideoNormalize, VideoResize, VideoReOrdertransforms = [VideoRescale(shift=0.0),VideoResize([128, 171]),VideoRandomCrop([112, 112]),VideoRandomHorizontalFlip(0.5),VideoReOrder([3, 0, 1, 2]),VideoNormalize(mean=[0.43216, 0.394666, 0.37645],std=[0.22803, 0.22145, 0.216989])] dataset.transform = transforms dataset_train = dataset.run() Validator.check_int(dataset_train.get_dataset_size(), 0, Rel.GT) step_size = dataset_train.get_dataset_size() [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-10:30:59.929.412 [mindspore/dataset/core/validator_helpers.py:804] 'Compose' from mindspore.dataset.transforms.py_transforms is deprecated from version 1.8 and will be removed in a future version. Use 'Compose' from mindspore.dataset.transforms instead.
    網絡構建
    from msvideo.models.r2plus1d import R2Plus1d18 # Create model network = R2Plus1d18(num_classes=400) from msvideo.schedule.lr_schedule import warmup_cosine_annealing_lr_v1 # Set learning rate scheduler. learning_rate = warmup_cosine_annealing_lr_v1(lr=0.01,steps_per_epoch=step_size,warmup_epochs=4,max_epoch=100,t_max=100,eta_min=0) # Define optimizer. network_opt = nn.Momentum(network.trainable_params(),learning_rate=learning_rate,momentum=0.9,weight_decay=0.00004) # Define loss function. network_loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean") # Set the checkpoint config for the network. ckpt_config = CheckpointConfig(save_checkpoint_steps=step_size,keep_checkpoint_max=10) ckpt_callback = ModelCheckpoint(prefix='r2plus1d_kinetics400',directory=ckpt_save_dir,config=ckpt_config) # Init the model. model = Model(network, loss_fn=network_loss, optimizer=network_opt, metrics={'acc'}) # Begin to train. print('[Start training `{}`]'.format('r2plus1d_kinetics400')) print("=" * 80) model.train(1,dataset_train,callbacks=[ckpt_callback, LossMonitor()],dataset_sink_mode=False) print('[End of training `{}`]'.format('r2plus1d_kinetics400')) [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-10:41:43.490.637 [mindspore/dataset/core/validator_helpers.py:804] 'Compose' from mindspore.dataset.transforms.py_transforms is deprecated from version 1.8 and will be removed in a future version. Use 'Compose' from mindspore.dataset.transforms instead. [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-10:41:43.498.663 [mindspore/dataset/core/validator_helpers.py:804] 'Compose' from mindspore.dataset.transforms.py_transforms is deprecated from version 1.8 and will be removed in a future version. Use 'Compose' from mindspore.dataset.transforms instead.[Start training `r2plus1d_kinetics400`] ================================================================================ epoch: 1 step: 1, loss is 5.998835563659668 epoch: 1 step: 2, loss is 5.921803951263428 epoch: 1 step: 3, loss is 6.024421691894531 epoch: 1 step: 4, loss is 6.08278751373291 epoch: 1 step: 5, loss is 6.014780044555664 epoch: 1 step: 6, loss is 5.945815086364746 epoch: 1 step: 7, loss is 6.078174114227295 epoch: 1 step: 8, loss is 6.0565361976623535 epoch: 1 step: 9, loss is 5.952683448791504 epoch: 1 step: 10, loss is 6.033120632171631 epoch: 1 step: 11, loss is 6.05575704574585 epoch: 1 step: 12, loss is 5.9879350662231445 epoch: 1 step: 13, loss is 6.006839275360107 epoch: 1 step: 14, loss is 5.9968180656433105 epoch: 1 step: 15, loss is 5.971335411071777 epoch: 1 step: 16, loss is 6.0620856285095215 epoch: 1 step: 17, loss is 6.081112861633301 epoch: 1 step: 18, loss is 6.106649398803711 epoch: 1 step: 19, loss is 6.095144271850586 epoch: 1 step: 20, loss is 6.00246000289917 epoch: 1 step: 21, loss is 6.061524868011475 epoch: 1 step: 22, loss is 6.046009063720703 epoch: 1 step: 23, loss is 5.997835159301758 epoch: 1 step: 24, loss is 6.007784366607666 epoch: 1 step: 25, loss is 5.946590423583984 epoch: 1 step: 26, loss is 5.9461164474487305 epoch: 1 step: 27, loss is 5.9034929275512695 epoch: 1 step: 28, loss is 5.925591945648193 epoch: 1 step: 29, loss is 6.176599979400635 ......

    評估流程

    from mindspore import context from msvideo.data.kinetics400 import Kinetic400context.set_context(mode=context.GRAPH_MODE, device_target="GPU")# Data Pipeline. dataset_eval = Kinetic400("/home/publicfile/kinetics-400",split="val",seq=32,seq_mode="interval",num_parallel_workers=1,shuffle=False,batch_size=8,repeat_num=1) /home/publicfile/kinetics-400/cls2index.json from msvideo.data.transforms import VideoCenterCrop, VideoRescale, VideoReOrder from msvideo.data.transforms import VideoNormalize, VideoResizetransforms = [VideoResize([128, 171]),VideoRescale(shift=0.0),VideoCenterCrop([112, 112]),VideoReOrder([3, 0, 1, 2]),VideoNormalize(mean=[0.43216, 0.394666, 0.37645],std=[0.22803, 0.22145, 0.216989])] dataset_eval.transform = transforms dataset_eval = dataset_eval.run() from mindspore import nn from mindspore import context, load_checkpoint, load_param_into_net from mindspore.train import Model from mindspore.nn.loss import SoftmaxCrossEntropyWithLogits from msvideo.utils.callbacks import EvalLossMonitor from msvideo.models.r2plus1d import R2Plus1d18# Create model network = R2Plus1d18(num_classes=400)# Define loss function. network_loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")param_dict = load_checkpoint('/home/zhengs/r2plus1d/r2plus1d18_kinetic400.ckpt') load_param_into_net(network, param_dict)# Define eval_metrics. eval_metrics = {'Loss': nn.Loss(),'Top_1_Accuracy': nn.Top1CategoricalAccuracy(),'Top_5_Accuracy': nn.Top5CategoricalAccuracy()}# Init the model. model = Model(network, loss_fn=network_loss, metrics=eval_metrics)print_cb = EvalLossMonitor(model) # Begin to eval. print('[Start eval `{}`]'.format('r2plus1d_kinetics400')) result = model.eval(dataset_eval,callbacks=[print_cb],dataset_sink_mode=False) print(result) [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-11:35:48.745.627 [mindspore/train/model.py:1077] For EvalLossMonitor callback, {'epoch_end', 'step_end', 'epoch_begin', 'step_begin'} methods may not be supported in later version, Use methods prefixed with 'on_train' or 'on_eval' instead when using customized callbacks. [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-11:35:48.747.418 [mindspore/dataset/core/validator_helpers.py:804] 'Compose' from mindspore.dataset.transforms.py_transforms is deprecated from version 1.8 and will be removed in a future version. Use 'Compose' from mindspore.dataset.transforms instead. [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-11:35:48.749.293 [mindspore/dataset/core/validator_helpers.py:804] 'Compose' from mindspore.dataset.transforms.py_transforms is deprecated from version 1.8 and will be removed in a future version. Use 'Compose' from mindspore.dataset.transforms instead. [WARNING] ME(150956:140289176069952,MainProcess):2023-03-13-11:35:48.751.452 [mindspore/dataset/core/validator_helpers.py:804] 'Compose' from mindspore.dataset.transforms.py_transforms is deprecated from version 1.8 and will be removed in a future version. Use 'Compose' from mindspore.dataset.transforms instead.[Start eval `r2plus1d_kinetics400`] step:[ 1/ 2484], metrics:[], loss:[3.070/3.070], time:1923.473 ms, step:[ 2/ 2484], metrics:['Loss: 3.0702', 'Top_1_Accuracy: 0.3750', 'Top_5_Accuracy: 0.7500'], loss:[0.808/1.939], time:169.314 ms, step:[ 3/ 2484], metrics:['Loss: 1.9391', 'Top_1_Accuracy: 0.5625', 'Top_5_Accuracy: 0.8750'], loss:[2.645/2.175], time:192.965 ms, step:[ 4/ 2484], metrics:['Loss: 2.1745', 'Top_1_Accuracy: 0.5417', 'Top_5_Accuracy: 0.8750'], loss:[2.954/2.369], time:172.657 ms, step:[ 5/ 2484], metrics:['Loss: 2.3695', 'Top_1_Accuracy: 0.5000', 'Top_5_Accuracy: 0.8438'], loss:[2.489/2.393], time:176.803 ms, step:[ 6/ 2484], metrics:['Loss: 2.3934', 'Top_1_Accuracy: 0.4750', 'Top_5_Accuracy: 0.8250'], loss:[1.566/2.256], time:172.621 ms, step:[ 7/ 2484], metrics:['Loss: 2.2556', 'Top_1_Accuracy: 0.4792', 'Top_5_Accuracy: 0.8333'], loss:[0.761/2.042], time:172.149 ms, step:[ 8/ 2484], metrics:['Loss: 2.0420', 'Top_1_Accuracy: 0.5357', 'Top_5_Accuracy: 0.8571'], loss:[3.675/2.246], time:181.757 ms, step:[ 9/ 2484], metrics:['Loss: 2.2461', 'Top_1_Accuracy: 0.4688', 'Top_5_Accuracy: 0.7969'], loss:[3.909/2.431], time:186.722 ms, step:[ 10/ 2484], metrics:['Loss: 2.4309', 'Top_1_Accuracy: 0.4583', 'Top_5_Accuracy: 0.7639'], loss:[3.663/2.554], time:199.209 ms, step:[ 11/ 2484], metrics:['Loss: 2.5542', 'Top_1_Accuracy: 0.4375', 'Top_5_Accuracy: 0.7375'], loss:[3.438/2.635], time:173.766 ms, step:[ 12/ 2484], metrics:['Loss: 2.6345', 'Top_1_Accuracy: 0.4318', 'Top_5_Accuracy: 0.7159'], loss:[2.695/2.640], time:171.364 ms, step:[ 13/ 2484], metrics:['Loss: 2.6395', 'Top_1_Accuracy: 0.4375', 'Top_5_Accuracy: 0.7292'], loss:[3.542/2.709], time:172.889 ms, step:[ 14/ 2484], metrics:['Loss: 2.7090', 'Top_1_Accuracy: 0.4231', 'Top_5_Accuracy: 0.7308'], loss:[3.404/2.759], time:216.287 ms, step:[ 15/ 2484], metrics:['Loss: 2.7586', 'Top_1_Accuracy: 0.4018', 'Top_5_Accuracy: 0.7232'], loss:[4.012/2.842], time:171.686 ms, step:[ 16/ 2484], metrics:['Loss: 2.8422', 'Top_1_Accuracy: 0.3833', 'Top_5_Accuracy: 0.7167'], loss:[5.157/2.987], time:170.363 ms, step:[ 17/ 2484], metrics:['Loss: 2.9869', 'Top_1_Accuracy: 0.3750', 'Top_5_Accuracy: 0.6875'], loss:[4.667/3.086], time:171.926 ms, step:[ 18/ 2484], metrics:['Loss: 3.0857', 'Top_1_Accuracy: 0.3603', 'Top_5_Accuracy: 0.6618'], loss:[5.044/3.194], time:197.028 ms, step:[ 19/ 2484], metrics:['Loss: 3.1945', 'Top_1_Accuracy: 0.3403', 'Top_5_Accuracy: 0.6458'], loss:[3.625/3.217], time:222.758 ms, step:[ 20/ 2484], metrics:['Loss: 3.2171', 'Top_1_Accuracy: 0.3355', 'Top_5_Accuracy: 0.6513'], loss:[1.909/3.152], time:207.416 ms, step:[ 21/ 2484], metrics:['Loss: 3.1517', 'Top_1_Accuracy: 0.3563', 'Top_5_Accuracy: 0.6625'], loss:[4.591/3.220], time:171.645 ms, step:[ 22/ 2484], metrics:['Loss: 3.2202', 'Top_1_Accuracy: 0.3631', 'Top_5_Accuracy: 0.6667'], loss:[3.545/3.235], time:209.975 ms, step:[ 23/ 2484], metrics:['Loss: 3.2350', 'Top_1_Accuracy: 0.3693', 'Top_5_Accuracy: 0.6591'], loss:[3.350/3.240], time:185.889 ms,

    Code

    代碼倉庫地址如下:

    Gitee地址
    Github地址

    總結

    以上是生活随笔為你收集整理的R(2+1)D理解与MindSpore框架下的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日韩a在线| 日韩久久精品一区二区三区 | 亚洲欧美国产精品久久久久 | 国产精品久久久久久一区二区三区 | 久久首页 | 成人免费色 | 91色网址 | 久久三级视频 | 视频在线观看入口黄最新永久免费国产 | 99精品国产99久久久久久97 | www.久久视频 | 狠狠干狠狠久久 | 最近在线中文字幕 | 黄p网站在线观看 | 国产高清免费在线观看 | 免费看国产曰批40分钟 | 99热九九这里只有精品10 | 国产精品视频全国免费观看 | 搡bbbb搡bbb视频 | 国产免费一区二区三区最新6 | 欧美成人xxxx | 欧美精品一区二区在线观看 | 亚洲精品tv久久久久久久久久 | 五月开心六月婷婷 | 91传媒在线看| 免费看网站在线 | 国产福利91精品 | 国产手机在线精品 | 91亚洲国产成人 | 免费av网站观看 | 国产四虎影院 | 国产精品久免费的黄网站 | 99国产视频 | 黄色小网站在线观看 | 欧美精品被 | 国产99久久久国产精品成人免费 | 免费看三级网站 | 91精品视频一区二区三区 | 国产精品久久久久永久免费 | 婷婷精品国产欧美精品亚洲人人爽 | 在线观看黄色小视频 | 成人天堂网 | 国产一二三四在线观看视频 | 国产超碰在线 | 国产中文字幕在线视频 | 久久理论视频 | 夜色资源站wwwcom | 日日日日干| 日韩欧美在线播放 | 男女激情网址 | av永久网址 | 久草在线视频在线观看 | 国产成人av网址 | 国产区精品 | 久久99日韩 | 日韩久久网站 | 在线观看一区 | av在线网站免费观看 | 九九免费精品视频 | 日韩三级在线观看 | 中文字幕在线观看1 | av免费网| 亚洲国产精品人久久电影 | www日 | www.黄色片网站 | 亚州av网站 | 国产91精品一区二区绿帽 | 在线免费观看一区二区三区 | 免费日韩在线 | 曰韩精品| 97av视频| 狠狠色噜噜狠狠狠合久 | 精品一区二三区 | 国产一区二区三区免费在线观看 | 69av免费视频 | 波多野结衣在线观看视频 | 免费国产在线观看 | 久久久久久久久久久久影院 | 日韩视频一区二区 | 国产激情小视频在线观看 | 美女网站在线观看 | 在线观看一区视频 | 国产精品ⅴa有声小说 | 综合网成人 | 国产精品久久久久三级 | 99精品久久久久 | 国产视频精品免费 | 一区二区不卡 | 欧美一级在线观看视频 | 波多野结衣最新 | 亚洲春色成人 | 国产精品麻豆免费版 | 一区二区三区国 | 国产永久免费高清在线观看视频 | 99精品在线免费 | 操处女逼| 欧美 亚洲 另类 激情 另类 | 草 免费视频| 中文一区二区三区在线观看 | 午夜色站 | 亚洲精品视频在线免费播放 | 成人久久久久久久久久 | 久久久观看 | 天天爱天天射 | 高清av网站 | 中文字幕 国产 一区 | 天天色.com | 人人插人人草 | 五月婷婷中文网 | 国内精品久久久久久中文字幕 | 日韩一级电影在线观看 | 在线 成人 | 欧美精品久久人人躁人人爽 | 97在线影院| 国产在线播放一区 | 六月色婷婷 | 国产精品一区二区久久 | 免费观看午夜视频 | 99热最新在线 | 天天干天天操天天爱 | 日日爽夜夜爽 | 国产黄色精品在线 | 亚洲精品a区 | 在线亚洲欧美视频 | 97精品国产aⅴ | 最近中文字幕mv免费高清在线 | 午夜免费在线观看 | 国产精品久久久久免费 | 在线97| 五月视频 | 欧美性天天 | 韩国在线一区二区 | www久久久 | 在线观看黄色小视频 | 亚洲成人国产精品 | av在线com| 毛片视频电影 | 黄色官网在线观看 | 九九99| www.97视频 | 在线观看韩日电影免费 | 国产精品97| 97视频免费在线看 | 国产精品一区二区三区观看 | 日本三级不卡 | 一区二区三区在线免费播放 | 国产精品9999久久久久仙踪林 | 国产无遮挡又黄又爽馒头漫画 | 久久高视频 | 久久久精品国产一区二区 | 色午夜| 免费av网址大全 | 亚洲闷骚少妇在线观看网站 | 激情久久久久久久久久久久久久久久 | 成人在线观看av | 久久久精品视频成人 | 精品久久久久久综合日本 | 色在线国产 | 久久久久久久久久久高潮一区二区 | 国产亚洲精品女人久久久久久 | 天堂va在线观看 | www四虎影院 | 日韩三级成人 | 在线黄色av | 色婷婷久久一区二区 | 正在播放亚洲精品 | 久久综合狠狠综合 | 激情影院在线观看 | 91精品免费在线视频 | 青青草国产精品 | 五月开心色 | 天天av综合网 | 久久成人午夜视频 | 日韩在线字幕 | 成人av网站在线观看 | 99爱精品视频 | 人人澡超碰碰97碰碰碰软件 | 高清av免费观看 | 国产最新在线视频 | 在线免费黄 | 激情xxxx | 九九热在线视频免费观看 | 成人动图 | 亚洲无吗视频在线 | 欧美亚洲免费在线一区 | 999在线精品 | 色偷偷88欧美精品久久久 | 日本高清中文字幕有码在线 | 免费网站在线 | 99麻豆久久久国产精品免费 | 91在线观看黄 | 国产精品 国产精品 | 亚洲h视频在线 | 麻豆va一区二区三区久久浪 | 国产视频精品久久 | 日韩精品一区二区三区中文字幕 | 中文字幕乱码电影 | 国产精品网在线观看 | 午夜在线观看 | 午夜国产福利在线观看 | 国产婷婷精品av在线 | 亚洲午夜久久久综合37日本 | 午夜精品一区二区三区在线观看 | 91亚色免费视频 | 中文字幕中文 | 国产精品伦一区二区三区视频 | 园产精品久久久久久久7电影 | 国内外成人在线视频 | 国产黄av| 麻花豆传媒mv在线观看 | 中文字幕最新精品 | 2017狠狠干 | 美女网站在线观看 | 播五月婷婷 | 超薄丝袜一二三区 | av字幕在线 | 高清中文字幕 | 五月婷婷在线观看视频 | 国产在线播放观看 | 中文字幕一区二区三区视频 | 日本高清中文字幕有码在线 | 久草视频免费在线播放 | 999国产| 久久成人午夜 | 99精品视频99 | 久久亚洲精品电影 | 国产精品午夜久久久久久99热 | 久久综合毛片 | 色婷婷激情电影 | 亚洲精品观看 | 黄色在线视频网址 | 在线国产专区 | 日本动漫做毛片一区二区 | 亚洲精品ww | 亚洲经典视频在线观看 | 亚洲视频在线观看免费 | 色噜噜狠狠色综合中国 | 日韩理论片在线观看 | 97人人添人澡人人爽超碰动图 | 黄色av网站在线免费观看 | 亚洲九九九在线观看 | 毛片基地黄久久久久久天堂 | 国产精品99久久免费黑人 | 久久理论电影网 | 激情亚洲综合在线 | 中文字幕日韩精品有码视频 | 在线久热 | av综合av | 人人舔人人爱 | 97精品国产97久久久久久免费 | 日韩欧美一区二区三区免费观看 | 91麻豆操 | 在线性视频日韩欧美 | 久久人人爽爽人人爽人人片av | 99久久精品网 | 黄网站免费大全入口 | 中文字幕在线免费观看视频 | 夜夜骑日日操 | 国产精品综合久久久久久 | 国产视频久 | 九九热只有这里有精品 | 成人 亚洲 欧美 | 欧美孕交vivoestv另类 | av网站播放 | 91精品国产成人 | .国产精品成人自产拍在线观看6 | 麻豆精品传媒视频 | 欧美91成人网 | 亚洲午夜在线视频 | 黄色国产精品 | 色人久久 | 日本韩国欧美在线观看 | 亚洲久久视频 | 久久综合色播五月 | 91在线精品秘密一区二区 | 国产成人99av超碰超爽 | 国产黄色免费看 | 中文亚洲欧美日韩 | 91高清完整版在线观看 | 黄色在线看网站 | 久久精品一区八戒影视 | 人人射人人 | 久久九九久久精品 | 亚洲国产精品小视频 | 免费亚洲片 | 欧美成年黄网站色视频 | 久久免费电影网 | 欧美日韩在线观看一区二区 | 国产又粗又长又硬免费视频 | 午夜久久久久久久 | 在线观看中文字幕一区 | 国产精品毛片一区视频 | 国产一区二区精品久久 | 西西www4444大胆在线 | 91视频高清| 91精品一区二区三区久久久久久 | 在线综合 亚洲 欧美在线视频 | 亚洲少妇xxxx| 97人人模人人爽人人喊网 | 91伊人| 日韩电影中文字幕在线 | 国产二级视频 | 国产中文字幕一区 | 亚洲精品网址在线观看 | 在线观看视频99 | 亚洲精品乱码久久久久久写真 | av性网站| 亚洲精品视频在线播放 | 久久国产成人午夜av影院潦草 | 国产精品国产三级国产不产一地 | www好男人 | 久久精品视频国产 | 黄色在线免费观看网址 | 免费观看国产视频 | 91麻豆精品一区二区三区 | 亚洲成人资源 | 国产视频资源 | 天天搞天天 | 六月天综合网 | 欧美午夜久久 | 亚洲国产字幕 | 国产丝袜网站 | 狠狠操狠狠插 | 久草视频网 | 婷婷在线免费观看 | 男女免费av| 国产专区视频 | 日本中出在线观看 | 久久综合免费视频影院 | 国产精品xxxx18a99 | 亚洲精品人人 | 国产小视频在线观看 | 毛片99| 精品天堂av | 99久久精品久久亚洲精品 | 99久久99久久精品国产片果冰 | 午夜视频导航 | 人人爽人人爽人人爽学生一级 | a v在线视频 | 久久久久久久久久久高潮一区二区 | 免费观看www小视频的软件 | 天天操天天摸天天干 | 一级片免费观看 | 2022久久国产露脸精品国产 | 国产资源精品 | 国产手机在线精品 | 丁香综合激情 | 午夜美女福利直播 | 国产综合在线视频 | 欧美日本啪啪无遮挡网站 | 91视频91色| 亚洲精品视频免费观看 | 91中文字幕网 | 91精品在线免费观看视频 | 午夜电影av| 日韩免费电影一区二区 | 97av在线视频免费播放 | 午夜精品久久久久久久久久久 | 国产精品久久久久久久午夜 | 又爽又黄在线观看 | 欧美久久久久 | 久久国产美女视频 | 成人免费观看视频网站 | 黄色电影网站在线观看 | 蜜臀久久99精品久久久酒店新书 | 在线免费av播放 | 日本久久久久久久久久久 | 在线观看国产亚洲 | 色婷婷久久一区二区 | 在线看日韩av | 久久8精品| 96久久精品 | 国产精品视频免费 | 国产裸体永久免费视频网站 | 色婷婷精品 | 国产人免费人成免费视频 | 亚洲一区二区精品在线 | 欧美在线视频一区二区 | 欧美久久久久久 | 久久狠狠亚洲综合 | 日韩精品一区二区三区在线播放 | 日日夜夜亚洲 | 一区二区欧美日韩 | 久久福利在线 | 国产v在线| 成片免费 | 国产精品黑丝在线观看 | 久久久久久久免费看 | 中文在线字幕免费观 | 国产69精品久久久久99 | 国产999精品久久久影片官网 | 免费在线播放视频 | 亚洲国产中文字幕 | 国产黄色成人 | 欧美男同网站 | 日韩欧美在线综合网 | 久久午夜影院 | 在线视频区 | 色国产在线 | av在线收看 | 久久国产精品免费 | 国产成人综合精品 | 日韩一区二区三区高清免费看看 | 日韩精品中字 | 成人在线视频在线观看 | 久久精品国产亚洲a | 又黄又爽的免费高潮视频 | 亚洲欧美国产精品va在线观看 | 最新一区二区三区 | 国产视频一区精品 | 婷婷福利影院 | 深夜免费网站 | 亚洲男男gaygay无套 | 日韩精品视频一二三 | 91一区啪爱嗯打偷拍欧美 | av在线a| 日韩中文在线字幕 | 久久 在线 | 二区三区毛片 | 国产美女视频免费 | 成人网在线免费视频 | 日本中出在线观看 | 国产精品久久久精品 | 天天操人人要 | 亚洲资源网 | 婷婷日| 国产精品久久久久999 | 国产香蕉97碰碰久久人人 | 国产99区 | 91精品久久久久久久久久久久久 | 亚洲精品国产欧美在线观看 | 在线免费观看的av | 中文字幕精品在线 | 国产麻豆精品久久一二三 | 91成人在线观看高潮 | 在线观看亚洲成人 | 伊人网站| 国产欧美久久久精品影院 | 日韩一区二区三区高清免费看看 | 久久福利 | 日日干天天射 | 五月天堂色 | 粉嫩av一区二区三区四区五区 | 欧美一区日韩精品 | 麻豆视频免费播放 | 日韩国产欧美视频 | 久草视频在线看 | 亚洲免费在线观看视频 | 国产破处视频在线播放 | 婷五月激情 | 成人a免费看 | 亚洲草视频 | 99热国产在线观看 | 日韩欧美在线不卡 | 久久激情久久 | 三日本三级少妇三级99 | 四虎影院在线观看av | 色诱亚洲精品久久久久久 | 激情综合网五月激情 | 81精品国产乱码久久久久久 | 免费看黄电影 | 国产一区二区在线免费 | 人成电影网| 国产一级免费在线 | 激情综合五月天 | 亚洲三级影院 | 国产精品福利午夜在线观看 | 91香蕉视频在线 | 国产午夜小视频 | 亚洲人在线 | 中文伊人| 精品国产成人av在线免 | 国产视频1 | 麻豆系列在线观看 | 亚洲女同ⅹxx女同tv | 久久人91精品久久久久久不卡 | 亚洲国产精品第一区二区 | 色在线网站 | 97人人网 | 亚洲欧美精品在线 | 亚洲狠狠婷婷综合久久久 | 九九爱免费视频 | 日韩r级在线| 精品欧美一区二区三区久久久 | 国产免费av一区二区三区 | 色福利网站 | 精品在线观看免费 | 人人擦| 亚洲国内精品在线 | 成年人黄色大片在线 | 亚洲成人资源在线 | 日韩中文字幕免费视频 | 日韩丝袜视频 | 91av中文 | 精品99免费 | 欧美日韩aa| 日本最新高清不卡中文字幕 | 精品一区二区免费视频 | 欧洲精品视频一区二区 | 悠悠av资源片 | 国产精彩视频 | 中文字幕综合在线 | 一个色综合网站 | 亚洲aⅴ在线观看 | 国产高清福利在线 | 久久久私人影院 | 日本在线免费看 | 综合色在线观看 | 免费av试看 | 超碰在线人 | 波多野结衣在线观看一区 | 免费黄色看片 | av 在线观看 | 国产成a人亚洲精v品在线观看 | 久久精品中文字幕一区二区三区 | 日韩av电影国产 | 人人草在线视频 | av电影免费在线看 | 天天爽夜夜爽人人爽曰av | 久草电影在线观看 | 免费看在线看www777 | 欧美孕交vivoestv另类 | 91精品在线看 | 免费观看视频黄 | a在线观看视频 | 在线观看91精品国产网站 | 国产精品久久久久影院日本 | 欧美精品一区二区免费 | 91福利视频久久久久 | 日批视频在线观看免费 | 国产精品日韩久久久久 | 在线国产能看的 | 国产精品久久久久久欧美 | 欧美国产精品久久久久久免费 | 精品久久久久久国产偷窥 | 青青河边草观看完整版高清 | 久久96国产精品久久99软件 | 国产精品孕妇 | 婷婷草 | 国产亚洲成人精品 | 国产视频黄 | 丰满少妇一级片 | 97超碰资源 | 9999精品| 日本中文字幕视频 | 日韩在线免费电影 | 久久久久免费看 | 精品久久久久久久 | 欧美日韩不卡在线观看 | 一区二区三区视频在线 | 日韩精品极品视频 | 狠狠色丁婷婷日日 | 缴情综合网五月天 | 免费看黄色毛片 | 亚洲国产精品视频在线观看 | 国产精品视频区 | 草樱av| 成片免费观看视频大全 | 亚洲va男人天堂 | 久久久免费 | 久久久久国产精品免费免费搜索 | 色a4yy| 91亚洲精品久久久蜜桃网站 | 欧美福利片在线观看 | 亚洲成色| 亚洲无毛专区 | 婷婷激情综合五月天 | 人人玩人人添人人澡超碰 | 91精品国产亚洲 | 日日干天天操 | 免费日韩电影 | 99热精品免费观看 | 日韩欧美一区二区在线 | 国产a级片免费观看 | 91视频久久久久 | 精品中文字幕在线观看 | 五月婷婷一级片 | 国产亚洲精品日韩在线tv黄 | 亚洲区色 | 久草在线观 | 精品视频久久久 | 免费一级片在线观看 | 91麻豆精品国产午夜天堂 | 亚洲 欧美 另类人妖 | 国产视频手机在线 | 国产专区第一页 | 国产精品视频在线观看 | 91福利试看 | 四虎国产精品永久在线国在线 | 成人综合免费 | 国产精品12 | www.av在线.com| 不卡国产视频 | 久久久久久久久久久久久9999 | 99草在线视频 | 国产高清 不卡 | 日韩欧美在线免费 | 精品国产aⅴ麻豆 | 国产超碰97 | 久久无码av一区二区三区电影网 | 999久久| 久久久久久久99 | www.夜夜爱 | 国产精品久久久久aaaa九色 | 五月色婷| 中文字幕在 | 免费在线成人av电影 | 日韩免费大片 | 中文字幕一区二区三区视频 | 91精选在线| 最新成人在线 | www狠狠操| 欧美在线观看视频一区二区三区 | 国产在线精品区 | 日本特黄一级片 | 在线观看国产区 | 久久99久久久久久 | 黄色在线看网站 | 视频成人永久免费视频 | 在线免费91 | 亚洲一区日韩 | 国产手机在线观看视频 | 成人网在线免费视频 | 精壮的侍卫呻吟h | 成人av一级片 | 国产无套视频 | 伊人影院在线观看 | 精品国产99国产精品 | 日韩高清免费无专码区 | 一区二区三区在线免费观看视频 | 91探花国产综合在线精品 | 精品国产一区二区三区久久久蜜月 | 五月激情丁香图片 | 日韩视频免费观看高清完整版在线 | 国产精品12| 六月丁香在线观看 | 欧美一区二区在线免费观看 | 久久久久久久久久影视 | 天天干天天草天天爽 | 久久国产美女视频 | 91中文字幕在线 | 国产精品专区在线观看 | 免费观看一区二区三区视频 | 在线观看国产中文字幕 | 一本一本久久aa综合精品 | 国内精品99| 日韩videos| 九九热在线视频 | 青草草在线视频 | 久久艹在线 | 精品久久一二三区 | 激情五月五月婷婷 | 国产色视频网站 | 精品国自产在线观看 | 最近2019好看的中文字幕免费 | 一区二区久久久久 | 成人免费毛片aaaaaa片 | 亚洲资源网 | 国产精品永久免费在线 | 欧美国产在线看 | 99久久精品国产一区二区三区 | 亚洲成色| 亚洲成人精品久久 | 国产亚洲综合在线 | 中文在线资源 | 色婷婷电影网 | 国产精品一区二区美女视频免费看 | 亚洲 欧美变态 另类 综合 | 精品福利网 | 在线观看视频免费播放 | 日韩专区av | 欧洲精品码一区二区三区免费看 | 久久国产精品影片 | 亚州精品一二三区 | 精品一二三区 | 久久久精品国产一区二区 | 国产亚洲精品综合一区91 | 日韩美女av在线 | 国产资源中文字幕 | 婷婷色综合色 | 国产精品免费麻豆入口 | 青青河边草免费视频 | 日本性久久 | 久久综合爱 | 欧美成人中文字幕 | 在线99视频 | 精品国产成人在线影院 | 欧美日韩国产精品一区二区亚洲 | 日韩精品视频免费在线观看 | 婷婷免费在线视频 | 日韩在线观看不卡 | 99精彩视频在线观看免费 | 欧美成亚洲 | 日韩精品久久久久久 | 在线影视 一区 二区 三区 | 精品中文字幕在线播放 | 免费高清在线观看成人 | 国产在线2020 | 国产精彩视频一区二区 | 亚洲专区欧美专区 | 国产丝袜高跟 | 91亚洲精品国产 | 国产一区二区三区在线 | 久久精品99国产精品 | 日韩www在线 | 国产精品成人免费精品自在线观看 | 日韩黄色免费电影 | 夜夜高潮夜夜爽国产伦精品 | 天天干天天玩天天操 | 激情网站免费观看 | 国产日产精品一区二区三区四区 | 天堂av色婷婷一区二区三区 | 999久久a精品合区久久久 | 欧美伦理一区二区三区 | 久久黄色小说 | 国产高清av免费在线观看 | 精品国产一区二区三区久久久蜜臀 | 久久国产一二区 | 中文字幕在线视频国产 | av免费在线网站 | 五月天狠狠操 | 六月婷色 | 国产成人99av超碰超爽 | 国产视频精选 | 国产又粗又猛又黄又爽视频 | 亚洲日b视频 | 亚洲精品91天天久久人人 | 久久96| 亚洲一区二区视频在线播放 | 天天草天天草 | 国产生活一级片 | 国产精品成人一区二区三区 | 亚洲国内精品在线 | 波多野结衣一区二区 | 国产午夜小视频 | 久久一区二区三区国产精品 | 精品国产理论 | 欧美最新另类人妖 | 婷婷色网| 国产精品久久久久久一区二区三区 | 天天操天天干天天 | 国产精品久久影院 | 天天操欧美 | 国产最新视频在线 | 白丝av在线 | 久久天| 国产97视频 | av黄色一级片 | 在线成人av| 一区二区中文字幕在线播放 | 久久视频一区二区 | 国内丰满少妇猛烈精品播放 | 国产精品大尺度 | 黄色免费看片网站 | 亚洲激情小视频 | av观看网站| 在线观看资源 | 美女啪啪图片 | 99精品视频免费在线观看 | 国产无套精品久久久久久 | 一区二区视频网站 | 男女视频国产 | 日韩在线 | 99在线视频播放 | 最新av网站在线观看 | 中文字幕高清 | 黄色av一级片 | 香蕉在线观看 | 五月婷婷在线视频 | 亚洲性xxxx| 欧美-第1页-屁屁影院 | 欧美在一区 | 婷婷综合在线 | 色综合色综合色综合 | 欧美视频网址 | 日韩激情视频 | 久久这里精品视频 | 人人添人人 | 狠狠色综合网站久久久久久久 | 国产999精品久久久影片官网 | 91在线观看视频 | 一区二区影院 | 久久免费的精品国产v∧ | 69视频在线 | 日日躁夜夜躁aaaaxxxx | 一本一道久久a久久综合蜜桃 | 国产福利91精品一区二区三区 | 免费观看av网站 | 91亚洲精品在线观看 | 日韩中文字幕在线观看 | 激情五月开心 | 日韩在线观看高清 | 在线国产激情视频 | 婷婷av色综合 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 亚洲三级网 | 伊人小视频 | 中日韩三级视频 | 欧美性视频网站 | 国产又粗又硬又爽视频 | 少妇性xxx | av高清一区 | 伊人久久电影网 | 青草视频在线 | 91精品视频免费观看 | 99久久精品午夜一区二区小说 | 日本少妇久久久 | 亚洲开心激情 | 久久久资源 | 91av网址 | 久久精品国产免费 | 最新国产中文字幕 | 色婷婷六月天 | 高清一区二区三区 | 久久久片 | 久久免费视频网站 | 免费一级毛毛片 | 在线观看爱爱视频 | 日韩精品一区电影 | 亚洲在线网址 | 最新精品视频在线 | 国产精品不卡一区 | 亚洲 成人 一区 | 久久视| 人人看人人 | 特级西西444www大精品视频免费看 | 国产人在线成免费视频 | 国产香蕉视频在线播放 | 天天干夜夜操视频 | 精品国产伦一区二区三区观看说明 | 91亚洲欧美激情 | 97成人免费 | 国产精品综合久久久 | 在线观看视频精品 | 久久免费99精品久久久久久 | 成年人网站免费观看 | 日韩在线观看一区二区 | 91精品一区二区在线观看 | 天天色天 | av大全免费在线观看 | 日日日操操| 国产精品入口传媒 | 成人9ⅰ免费影视网站 | 麻豆视频免费入口 | 在线免费色 | 欧美日韩精品久久久 | 日韩美一区二区三区 | 欧美在线视频第一页 | 九色精品 | 香蕉久久国产 | 五月婷婷黄色网 | 欧美久久99 | 在线观看亚洲 | 亚洲欧美日本国产 | 一区二区成人国产精品 | 香蕉在线视频观看 | 欧美日韩一级久久久久久免费看 | 午夜影视一区 | 成人91视频 | 国产伦精品一区二区三区照片91 | 久久99精品久久久久久三级 | 91免费观看国产 | 夜色成人av | 92精品国产成人观看免费 | 日韩免费电影网 | 九九涩涩av台湾日本热热 | 国产成人亚洲在线电影 | 国产视频一区精品 | 激情视频久久 | 亚洲精品美女在线观看播放 | 在线免费观看国产视频 | 久久久久女教师免费一区 | 99久久久精品| 9999精品免费视频 | av性在线| 美女久久精品 | 婷婷丁香在线视频 | 日韩欧美在线高清 | www.色午夜,com | 91视频 - 88av | 五月婷婷视频在线 | 日日夜夜人人精品 | 国产伦精品一区二区三区无广告 | av免费在线看网站 | www.天天成人国产电影 | 国产日韩精品在线观看 | 中文字幕乱码在线播放 | 日本性生活一级片 | 日韩免费一区二区 | 亚洲精区二区三区四区麻豆 | 亚洲三级黄色 | 在线视频一区二区 | 久久1区| 91丨porny丨九色 | av在线短片| 国产成人精品av在线观 | 91av电影网| 免费在线| 久久久国产精品网站 | 日韩在线观看网址 | 欧美 日韩 久久 | 午夜美女wwww| 国产视频网站在线观看 | 国产精品欧美激情在线观看 | 网站在线观看你们懂的 | 国产精品24小时在线观看 | 国产精品久久久久久久久蜜臀 | 五月天,com| 亚洲 欧美 精品 | 日韩综合在线观看 | 一区二精品| 很污的网站 | 久草在线视频在线观看 | 国产一级片直播 | 欧美激情第一页xxx 午夜性福利 | 久久精品国产一区二区 | 日韩二区在线 | 色一级片| 国产亚洲视频中文字幕视频 | 久久精品国产成人 | 99久久er热在这里只有精品15 | 在线成人观看 | 人人模人人爽 | 国产福利91精品张津瑜 | 人人草人 | 高清av在线免费观看 | 黄a在线观看 | 精品国产1区 | 久久国产电影院 | www.激情五月.com | 不卡的av电影在线观看 | 91视频亚洲 | 国产手机精品视频 | 欧美亚洲免费在线一区 | 亚洲乱码在线观看 | 日本特黄一级片 | 国产69久久 | 久久激情日本aⅴ | av理论电影| 国产精品99久久久久久人免费 | 久久久久国产一区二区三区 | 天海冀一区二区三区 | 日韩一级黄色大片 | 久久美女精品 | 国产精品久久久久久吹潮天美传媒 | 中文字幕av一区二区三区四区 | 国产高清视频免费最新在线 | 中文字幕一区二区三区在线观看 | 91精品啪在线观看国产线免费 | 亚洲午夜精品电影 | 国产日韩精品在线 | 欧美性脚交 | 国产三级av在线 | 91人人澡 | 91观看视频 | 亚洲春色综合另类校园电影 | 欧美日韩国产xxx | 久久国产精品99久久人人澡 | 在线观看日韩视频 | 亚洲综合激情五月 | 国产精品美女久久 | 免费av片在线 | 人人干97 | 日韩免费高清在线观看 | 西西www4444大胆视频 | 欧美一级片免费观看 | 91精品毛片| 精品久久久久久亚洲综合网站 | 亚洲精品乱码久久久久久写真 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 91精品国产乱码久久桃 | av在线播放国产 | 亚洲日b视频 | 黄色毛片网站在线观看 | 国产一二三四在线视频 | 国产a视频免费观看 | 日韩字幕 | 亚洲欧美少妇 | 国精产品永久999 | 91视频在线观看免费 | 美国av片在线观看 | 97精产国品一二三产区在线 | 黄色官网在线观看 | 亚洲综合在线五月 | 天天草天天摸 | 中文字幕在线视频一区二区 | 狠狠操欧美 | 欧美日韩精品在线观看 | 在线国产一区 | 久福利| 免费人成网ww44kk44 | 日韩在线精品一区 | 91 在线视频播放 | 深爱激情五月婷婷 | 国内外激情视频 | 日日夜夜天天人人 | 久久99精品久久久久久清纯直播 | 日韩色在线 |