• 论文投稿指南——收藏|SCI写作投稿发表全流程


    关注“PandaCVer”公众号

    >>>深度学习Tricks,第一时间送达<<<

    目录

    一、规范写作标准格式

    二、明确论文投稿流程

    三、了解论文修改意见

    四、论文投稿相关建议


    一、规范写作标准格式

    Abstract 摘要:文章的简介和概述目的、方法、结果、结论。

    Keyword 关键词:3 ~ 5 个本文最相关的词语,可以从标题和摘要中提取。

    Main text 正文:包括 introduction 、method(方法学)、results(结果)、discussion 。

    Reference 参考文献:文章的参考文献,需要按照杂志社要求更改参考文献的格式。

    注意,文章的图表需要按照期刊的要求制作,放在文章参考文献后。Figure legend 图注和 Table legend 表注,需要你对图表中的关键内容和标识的介绍描述。

    二、明确论文投稿流程

    筛选期刊需要考虑以下 4 个维度:影响因子、期刊领域、审稿或见刊时间是否在你的预期以及版面费。

    全部权衡后可以放心选刊。在投递后,期刊编辑先进行初审,初审通过后派发给审稿人,2~4 日内审稿人给予修稿意见。

    三、了解论文修改意见

    责任编辑会根据审稿人的意见给出一些修改建议,包括:拒稿(Rejected);大修(Major Revision);小修(Minor Revision);录用(Accepted)。

    投稿系统中通常会显示以下 3 类状态:

    (1)Required review completed:已收集到足够数量的审稿人意见

    (2)Decision in Process:责任编辑正在酝酿意见

    (3)Rejected/Major Revision/Minor Revision/Accepted:最终意见

    四、论文投稿相关建议

    (一)正视投稿

    对于第一次投稿的同学们来说,投稿、改稿也是一个提高自身学术表达水平的过程。因此,不要把投稿视为研究的剩余物,而要把投稿视为学术生活的一个重要组成部分,认真研究如何投稿。

    (二)固定阅读

    每一类刊物、每一本刊物,都有自己的历史、风格,通过固定阅读,你可以知晓这些刊物的术取向和选稿要求,做到知彼知己、心中有数。有了必要的阅读积累,再与期刊编辑沟通,便有了更多的共享知识,也会更加顺畅。

    (三)不要海投

    很多期刊都严禁一稿多投,而且无的放矢的海投也绝非良策。最好平时就有意识地阅读一些学术刊物,从研究阶段就熟悉、了解这些刊物,最后成文、投稿就会更加自然、顺畅。对于有些综合刊物,建议投递打印稿。

    (四)经常开会

    很多时候,学术期刊约稿不是“看人”,而是“看文”,学刊编辑经常旁听会议,如果你的文章很棒,又恰好符合在场学刊的选题需求的话,他们会主动来找你约稿的。

    (五)多方核实

    现在很多刊物都有经费支持,甚至还有国家社科基金资助,一般来说,多数刊物不收版面费。网络上的投稿一定要辨明真假。一般来说,那些带有不规律的数字的邮箱、域名多半是假的。一定要多方核实,不要轻易上当。

    1. # -------------------------------------------------------------------------
    2. # Swin Transfromer
    3. # https://arxiv.org/abs/2103.14030
    4. import torch
    5. import torch.nn as nn
    6. import torch.nn.functional as F
    7. from timm.models.layers import DropPath, to_2tuple, trunc_normal_
    8. class WindowAttention(nn.Module):
    9. r""" Window based multi-head self attention (W-MSA) module with relative position bias.
    10. It supports both of shifted and non-shifted window.
    11. Args:
    12. dim (int): Number of input channels.
    13. window_size (tuple[int]): The height and width of the window.
    14. num_heads (int): Number of attention heads.
    15. qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True
    16. qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set
    17. attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0
    18. proj_drop (float, optional): Dropout ratio of output. Default: 0.0
    19. """
    20. def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, attn_drop=0., proj_drop=0.):
    21. super().__init__()
    22. self.dim = dim
    23. self.window_size = window_size # Wh, Ww
    24. self.num_heads = num_heads
    25. head_dim = dim // num_heads
    26. self.scale = qk_scale or head_dim ** -0.5
    27. # define a parameter table of relative position bias
    28. self.relative_position_bias_table = nn.Parameter(
    29. torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)) # 2*Wh-1 * 2*Ww-1, nH
    30. # get pair-wise relative position index for each token inside the window
    31. coords_h = torch.arange(self.window_size[0])
    32. coords_w = torch.arange(self.window_size[1])
    33. coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww
    34. coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww
    35. relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww
    36. relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2
    37. relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0
    38. relative_coords[:, :, 1] += self.window_size[1] - 1
    39. relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1
    40. relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww
    41. self.register_buffer("relative_position_index", relative_position_index)
    42. self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)
    43. self.attn_drop = nn.Dropout(attn_drop)
    44. self.proj = nn.Linear(dim, dim)
    45. self.proj_drop = nn.Dropout(proj_drop)
    46. trunc_normal_(self.relative_position_bias_table, std=.02)
    47. self.softmax = nn.Softmax(dim=-1)
    48. def forward(self, x, mask=None):
    49. """
    50. Args:
    51. x: input features with shape of (num_windows*B, N, C)
    52. mask: (0/-inf) mask with shape of (num_windows, Wh*Ww, Wh*Ww) or None
    53. """
    54. B_, N, C = x.shape
    55. qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)
    56. q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple)
    57. q = q * self.scale
    58. attn = (q @ k.transpose(-2, -1))
    59. relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view(
    60. self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH
    61. relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww
    62. attn = attn + relative_position_bias.unsqueeze(0)
    63. if mask is not None:
    64. nW = mask.shape[0]
    65. attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)
    66. attn = attn.view(-1, self.num_heads, N, N)
    67. attn = self.softmax(attn)
    68. else:
    69. attn = self.softmax(attn)
    70. attn = self.attn_drop(attn)
    71. # print(attn.dtype, v.dtype)
    72. x = (attn @ v).transpose(1, 2).reshape(B_, N, C)
    73. x = self.proj(x)
    74. x = self.proj_drop(x)
    75. return x
    76. def window_reverse(windows, window_size, H, W):
    77. """
    78. Args:
    79. windows: (num_windows*B, window_size, window_size, C)
    80. window_size (int): Window size
    81. H (int): Height of image
    82. W (int): Width of image
    83. Returns:
    84. x: (B, H, W, C)
    85. """
    86. B = int(windows.shape[0] / (H * W / window_size / window_size))
    87. x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1)
    88. x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)
    89. return x
    90. class SwinTransformerLayer(nn.Module):
    91. r""" Swin Transformer Layer.
    92. Args:
    93. dim (int): Number of input channels.
    94. input_resolution (tuple[int]): Input resulotion.
    95. num_heads (int): Number of attention heads.
    96. window_size (int): Window size.
    97. shift_size (int): Shift size for SW-MSA.
    98. mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.
    99. qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True
    100. qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set.
    101. drop (float, optional): Dropout rate. Default: 0.0
    102. attn_drop (float, optional): Attention dropout rate. Default: 0.0
    103. drop_path (float, optional): Stochastic depth rate. Default: 0.0
    104. act_layer (nn.Module, optional): Activation layer. Default: nn.GELU
    105. norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm
    106. """
    107. def __init__(self, dim, num_heads, window_size=7, shift_size=0,
    108. mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0.,
    109. act_layer=nn.GELU, norm_layer=nn.LayerNorm):
    110. super().__init__()
    111. self.dim = dim
    112. self.num_heads = num_heads
    113. self.window_size = window_size
    114. self.shift_size = shift_size
    115. self.mlp_ratio = mlp_ratio
    116. # if min(self.input_resolution) <= self.window_size:
    117. # # if window size is larger than input resolution, we don't partition windows
    118. # self.shift_size = 0
    119. # self.window_size = min(self.input_resolution)
    120. assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size"
    121. self.norm1 = norm_layer(dim)
    122. self.attn = WindowAttention(
    123. dim, window_size=to_2tuple(self.window_size), num_heads=num_heads,
    124. qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop)
    125. self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
    126. self.norm2 = norm_layer(dim)
    127. mlp_hidden_dim = int(dim * mlp_ratio)
    128. self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)
    129. def create_mask(self, H, W):
    130. # calculate attention mask for SW-MSA
    131. img_mask = torch.zeros((1, H, W, 1)) # 1 H W 1
    132. h_slices = (slice(0, -self.window_size),
    133. slice(-self.window_size, -self.shift_size),
    134. slice(-self.shift_size, None))
    135. w_slices = (slice(0, -self.window_size),
    136. slice(-self.window_size, -self.shift_size),
    137. slice(-self.shift_size, None))
    138. cnt = 0
    139. for h in h_slices:
    140. for w in w_slices:
    141. img_mask[:, h, w, :] = cnt
    142. cnt += 1
    143. mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1
    144. mask_windows = mask_windows.view(-1, self.window_size * self.window_size)
    145. attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)
    146. attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0))
    147. return attn_mask
    148. def forward(self, x):
    149. # reshape x[b c h w] to x[b l c]
    150. _, _, H_, W_ = x.shape
    151. Padding = False
    152. if min(H_, W_) < self.window_size or H_ % self.window_size!=0:
    153. Padding = True
    154. # print(f'img_size {min(H_, W_)} is less than (or not divided by) window_size {self.window_size}, Padding.')
    155. pad_r = (self.window_size - W_ % self.window_size) % self.window_size
    156. pad_b = (self.window_size - H_ % self.window_size) % self.window_size
    157. x = F.pad(x, (0, pad_r, 0, pad_b))
    158. # print('2', x.shape)
    159. B, C, H, W = x.shape
    160. L = H * W
    161. x = x.permute(0, 2, 3, 1).contiguous().view(B, L, C) # b, L, c
    162. # create mask from init to forward
    163. if self.shift_size > 0:
    164. attn_mask = self.create_mask(H, W).to(x.device)
    165. else:
    166. attn_mask = None
    167. shortcut = x
    168. x = self.norm1(x)
    169. x = x.view(B, H, W, C)
    170. # cyclic shift
    171. if self.shift_size > 0:
    172. shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2))
    173. else:
    174. shifted_x = x
    175. # partition windows
    176. x_windows = window_partition(shifted_x, self.window_size) # nW*B, window_size, window_size, C
    177. x_windows = x_windows.view(-1, self.window_size * self.window_size, C) # nW*B, window_size*window_size, C
    178. # W-MSA/SW-MSA
    179. attn_windows = self.attn(x_windows, mask=attn_mask) # nW*B, window_size*window_size, C
    180. # merge windows
    181. attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C)
    182. shifted_x = window_reverse(attn_windows, self.window_size, H, W) # B H' W' C
    183. # reverse cyclic shift
    184. if self.shift_size > 0:
    185. x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2))
    186. else:
    187. x = shifted_x
    188. x = x.view(B, H * W, C)
    189. # FFN
    190. x = shortcut + self.drop_path(x)
    191. x = x + self.drop_path(self.mlp(self.norm2(x)))
    192. x = x.permute(0, 2, 1).contiguous().view(-1, C, H, W) # b c h w
    193. if Padding:
    194. x = x[:, :, :H_, :W_] # reverse padding
    195. return x

    关于算法改进及论文投稿可关注并留言博主的CSDN/QQ

    >>>>一起交流!互相学习!共同进步!<<<<

  • 相关阅读:
    games101-3 BRDF101
    httpOnly对于抵御Session劫持的个人小结
    mysql foreach 写法,多条 sql 与一条 sql 的性能消耗分析
    maven的安装和配置
    数组的reduce和reduceRight方法
    Java的Object类
    Kotlin - 挂起函数 suspend
    Spring5 学习笔记 五 、JdbcTemplate
    04【C语言 & 趣味算法】“抓交通肇事犯”问题。算法改进:设置“标识变量”,有效减少循环次数。
    对象存储服务中对象业务的非标接口
  • 原文地址:https://blog.csdn.net/m0_53578855/article/details/127642569