checkpoint.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. import os
  15. import os.path as osp
  16. import glob
  17. import paddle
  18. import paddlex.utils.logging as logging
  19. from .download import download_and_decompress
  20. seg_pretrain_weights_dict = {
  21. 'UNet': ['CITYSCAPES'],
  22. 'DeepLabV3P': ['CITYSCAPES', 'PascalVOC', 'IMAGENET'],
  23. 'FastSCNN': ['CITYSCAPES'],
  24. 'HRNet': ['CITYSCAPES', 'PascalVOC'],
  25. 'BiSeNetV2': ['CITYSCAPES']
  26. }
  27. det_pretrain_weights_dict = {
  28. 'YOLOv3_MobileNetV1': ['COCO', 'PascalVOC', 'IMAGENET'],
  29. 'YOLOv3_MobileNetV1_ssld': ['COCO', 'PascalVOC', 'IMAGENET'],
  30. 'YOLOv3_DarkNet53': ['COCO', 'IMAGENET'],
  31. 'YOLOv3_ResNet50_vd_dcn': ['COCO', 'IMAGENET'],
  32. 'YOLOv3_ResNet34': ['COCO', 'IMAGENET'],
  33. 'YOLOv3_MobileNetV3': ['COCO', 'PascalVOC', 'IMAGENET'],
  34. 'YOLOv3_MobileNetV3_ssld': ['PascalVOC', 'IMAGENET'],
  35. 'FasterRCNN_ResNet50_vd': ['COCO', 'IMAGENET'],
  36. 'FasterRCNN_ResNet50_vd_fpn': ['COCO', 'IMAGENET'],
  37. 'FasterRCNN_ResNet50': ['COCO', 'IMAGENET'],
  38. 'FasterRCNN_ResNet50_fpn': ['COCO', 'IMAGENET'],
  39. 'FasterRCNN_ResNet34_fpn': ['COCO', 'IMAGENET'],
  40. 'FasterRCNN_ResNet34_vd_fpn': ['COCO', 'IMAGENET'],
  41. 'FasterRCNN_ResNet101_fpn': ['COCO', 'IMAGENET'],
  42. 'FasterRCNN_ResNet101_vd_fpn': ['COCO', 'IMAGENET'],
  43. 'FasterRCNN_ResNet50_vd_ssld_fpn': ['COCO', 'IMAGENET'],
  44. 'FasterRCNN_HRNet_W18_fpn': ['COCO', 'IMAGENET'],
  45. 'PPYOLO_ResNet50_vd_dcn': ['COCO', 'IMAGENET'],
  46. 'PPYOLO_ResNet18_vd': ['COCO', 'IMAGENET'],
  47. 'PPYOLO_MobileNetV3_large': ['COCO', 'IMAGENET'],
  48. 'PPYOLO_MobileNetV3_small': ['COCO', 'IMAGENET'],
  49. 'PPYOLOv2_ResNet50_vd_dcn': ['COCO', 'IMAGENET'],
  50. 'PPYOLOv2_ResNet101_vd_dcn': ['COCO', 'IMAGENET'],
  51. 'PPYOLOTiny_MobileNetV3': ['COCO', 'IMAGENET'],
  52. 'MaskRCNN_ResNet50': ['COCO', 'IMAGENET'],
  53. 'MaskRCNN_ResNet50_fpn': ['COCO', 'IMAGENET'],
  54. 'MaskRCNN_ResNet50_vd_fpn': ['COCO', 'IMAGENET'],
  55. 'MaskRCNN_ResNet50_vd_ssld_fpn': ['COCO', 'IMAGENET'],
  56. 'MaskRCNN_ResNet101_fpn': ['COCO', 'IMAGENET'],
  57. 'MaskRCNN_ResNet101_vd_fpn': ['COCO', 'IMAGENET']
  58. }
  59. cityscapes_weights = {
  60. 'UNet_CITYSCAPES':
  61. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/unet_cityscapes_1024x512_160k/model.pdparams',
  62. 'DeepLabV3P_ResNet50_vd_CITYSCAPES':
  63. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/deeplabv3p_resnet50_os8_cityscapes_1024x512_80k/model.pdparams',
  64. 'DeepLabV3P_ResNet101_vd_CITYSCAPES':
  65. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/deeplabv3p_resnet101_os8_cityscapes_769x769_80k/model.pdparams',
  66. 'HRNet_HRNet_W18_CITYSCAPES':
  67. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/fcn_hrnetw18_cityscapes_1024x512_80k/model.pdparams',
  68. 'HRNet_HRNet_W48_CITYSCAPES':
  69. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/fcn_hrnetw48_cityscapes_1024x512_80k/model.pdparams',
  70. 'BiSeNetV2_CITYSCAPES':
  71. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/bisenet_cityscapes_1024x1024_160k/model.pdparams',
  72. 'FastSCNN_CITYSCAPES':
  73. 'https://bj.bcebos.com/paddleseg/dygraph/cityscapes/fastscnn_cityscapes_1024x1024_160k/model.pdparams'
  74. }
  75. imagenet_weights = {
  76. 'ResNet18_IMAGENET':
  77. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet18_pretrained.pdparams',
  78. 'ResNet34_IMAGENET':
  79. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet34_pretrained.pdparams',
  80. 'ResNet50_IMAGENET':
  81. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_pretrained.pdparams',
  82. 'ResNet101_IMAGENET':
  83. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_pretrained.pdparams',
  84. 'ResNet152_IMAGENET':
  85. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_pretrained.pdparams',
  86. 'ResNet18_vd_IMAGENET':
  87. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet18_vd_pretrained.pdparams',
  88. 'ResNet34_vd_IMAGENET':
  89. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet34_vd_pretrained.pdparams',
  90. 'ResNet50_vd_IMAGENET':
  91. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams',
  92. 'ResNet50_vd_ssld_IMAGENET':
  93. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams',
  94. 'ResNet101_vd_IMAGENET':
  95. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_vd_pretrained.pdparams',
  96. 'ResNet101_vd_ssld_IMAGENET':
  97. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_vd_ssld_pretrained.pdparams',
  98. 'ResNet152_vd_IMAGENET':
  99. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet152_vd_pretrained.pdparams',
  100. 'ResNet200_vd_IMAGENET':
  101. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet200_vd_pretrained.pdparams',
  102. 'MobileNetV1_IMAGENET':
  103. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_pretrained.pdparams',
  104. 'MobileNetV1_x0_25_IMAGENET':
  105. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_x0_25_pretrained.pdparams',
  106. 'MobileNetV1_x0_5_IMAGENET':
  107. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_x0_5_pretrained.pdparams',
  108. 'MobileNetV1_x0_75_IMAGENET':
  109. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_x0_75_pretrained.pdparams',
  110. 'MobileNetV2_IMAGENET':
  111. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams',
  112. 'MobileNetV2_x0_25_IMAGENET':
  113. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_25_pretrained.pdparams',
  114. 'MobileNetV2_x0_5_IMAGENET':
  115. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_5_pretrained.pdparams',
  116. 'MobileNetV2_x0_75_IMAGENET':
  117. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_75_pretrained.pdparams',
  118. 'MobileNetV2_x1_5_IMAGENET':
  119. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x1_5_pretrained.pdparams',
  120. 'MobileNetV2_x2_0_IMAGENET':
  121. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x2_0_pretrained.pdparams',
  122. 'MobileNetV3_small_x0_35_IMAGENET':
  123. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_35_pretrained.pdparams',
  124. 'MobileNetV3_small_x0_35_ssld_IMAGENET':
  125. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_35_ssld_pretrained.pdparams',
  126. 'MobileNetV3_small_x0_5_IMAGENET':
  127. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_5_pretrained.pdparams',
  128. 'MobileNetV3_small_x0_75_IMAGENET':
  129. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_75_pretrained.pdparams',
  130. 'MobileNetV3_small_x1_0_IMAGENET':
  131. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_pretrained.pdparams',
  132. 'MobileNetV3_small_x1_0_ssld_IMAGENET':
  133. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_ssld_pretrained.pdparams',
  134. 'MobileNetV3_small_x1_25_IMAGENET':
  135. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_25_pretrained.pdparams',
  136. 'MobileNetV3_large_x0_35_IMAGENET':
  137. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_35_pretrained.pdparams',
  138. 'MobileNetV3_large_x0_5_IMAGENET':
  139. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams',
  140. 'MobileNetV3_large_x0_75_IMAGENET':
  141. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_75_pretrained.pdparams',
  142. 'MobileNetV3_large_x1_0_IMAGENET':
  143. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_pretrained.pdparams',
  144. 'MobileNetV3_large_x1_25_IMAGENET':
  145. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_25_pretrained.pdparams',
  146. 'MobileNetV3_large_x1_0_ssld':
  147. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_ssld_pretrained.pdparams',
  148. 'AlexNet_IMAGENET':
  149. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparams',
  150. 'DarkNet53_IMAGENET':
  151. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DarkNet53_pretrained.pdparams',
  152. 'DenseNet121_IMAGENET':
  153. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet121_pretrained.pdparams',
  154. 'DenseNet161_IMAGENET':
  155. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet161_pretrained.pdparams',
  156. 'DenseNet169_IMAGENET':
  157. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet169_pretrained.pdparams',
  158. 'DenseNet201_IMAGENET':
  159. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet201_pretrained.pdparams',
  160. 'DenseNet264_IMAGENET':
  161. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet264_pretrained.pdparams',
  162. 'HRNet_W18_C_IMAGENET':
  163. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W18_C_pretrained.pdparams',
  164. 'HRNet_W30_C_IMAGENET':
  165. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W30_C_pretrained.pdparams',
  166. 'HRNet_W32_C_IMAGENET':
  167. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W32_C_pretrained.pdparams',
  168. 'HRNet_W40_C_IMAGENET':
  169. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W40_C_pretrained.pdparams',
  170. 'HRNet_W44_C_IMAGENET':
  171. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W44_C_pretrained.pdparams',
  172. 'HRNet_W48_C_IMAGENET':
  173. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W48_C_pretrained.pdparams',
  174. 'HRNet_W64_C_IMAGENET':
  175. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W64_C_pretrained.pdparams',
  176. 'Xception41_IMAGENET':
  177. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception41_pretrained.pdparams',
  178. 'Xception65_IMAGENET':
  179. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception65_pretrained.pdparams',
  180. 'Xception71_IMAGENET':
  181. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception71_pretrained.pdparams',
  182. 'ShuffleNetV2_x0_25_IMAGENET':
  183. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_25_pretrained.pdparams',
  184. 'ShuffleNetV2_x0_33_IMAGENET':
  185. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_33_pretrained.pdparams',
  186. 'ShuffleNetV2_x0_5_IMAGENET':
  187. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_5_pretrained.pdparams',
  188. 'ShuffleNetV2_x1_0_IMAGENET':
  189. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x1_0_pretrained.pdparams',
  190. 'ShuffleNetV2_x1_5_IMAGENET':
  191. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x1_5_pretrained.pdparams',
  192. 'ShuffleNetV2_x2_0_IMAGENET':
  193. 'https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x2_0_pretrained.pdparams',
  194. 'FasterRCNN_ResNet50_IMAGENET':
  195. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_cos_pretrained.pdparams',
  196. 'FasterRCNN_ResNet50_fpn_IMAGENET':
  197. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_cos_pretrained.pdparams',
  198. 'FasterRCNN_ResNet50_vd_IMAGENET':
  199. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_pretrained.pdparams',
  200. 'FasterRCNN_ResNet50_vd_fpn_IMAGENET':
  201. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_pretrained.pdparams',
  202. 'FasterRCNN_ResNet50_vd_ssld_fpn_IMAGENET':
  203. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_v2_pretrained.pdparams',
  204. 'FasterRCNN_ResNet34_vd_fpn_IMAGENET':
  205. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet34_vd_pretrained.pdparams',
  206. 'FasterRCNN_ResNet34_fpn_IMAGENET':
  207. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet34_pretrained.pdparams',
  208. 'FasterRCNN_ResNet101_fpn_IMAGENET':
  209. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet101_pretrained.pdparams',
  210. 'FasterRCNN_ResNet101_vd_fpn_IMAGENET':
  211. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet101_vd_pretrained.pdparams',
  212. 'FasterRCNN_HRNet_W18_fpn_IMAGENET':
  213. 'https://paddledet.bj.bcebos.com/models/pretrained/HRNet_W18_C_pretrained.pdparams',
  214. 'YOLOv3_ResNet50_vd_dcn_IMAGENET':
  215. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_pretrained.pdparams',
  216. 'YOLOv3_ResNet34_IMAGENET':
  217. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet34_pretrained.pdparams',
  218. 'YOLOv3_MobileNetV1_IMAGENET':
  219. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV1_pretrained.pdparams',
  220. 'YOLOv3_MobileNetV1_ssld_IMAGENET':
  221. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV1_ssld_pretrained.pdparams',
  222. 'YOLOv3_MobileNetV3_IMAGENET':
  223. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV3_large_x1_0_ssld_pretrained.pdparams',
  224. 'YOLOv3_MobileNetV3_ssld_IMAGENET':
  225. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV3_large_x1_0_ssld_pretrained.pdparams',
  226. 'YOLOv3_DarkNet53_IMAGENET':
  227. 'https://paddledet.bj.bcebos.com/models/pretrained/DarkNet53_pretrained.pdparams',
  228. 'PPYOLO_ResNet50_vd_dcn_IMAGENET':
  229. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_pretrained.pdparams',
  230. 'PPYOLO_ResNet18_vd_IMAGENET':
  231. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet18_vd_pretrained.pdparams',
  232. 'PPYOLO_MobileNetV3_large_IMAGENET':
  233. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV3_large_x1_0_ssld_pretrained.pdparams',
  234. 'PPYOLO_MobileNetV3_small_IMAGENET':
  235. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV3_small_x1_0_ssld_pretrained.pdparams',
  236. 'PPYOLOv2_ResNet50_vd_dcn_IMAGENET':
  237. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_pretrained.pdparams',
  238. 'PPYOLOv2_ResNet101_vd_dcn_IMAGENET':
  239. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet101_vd_ssld_pretrained.pdparams',
  240. 'PPYOLOTiny_MobileNetV3_IMAGENET':
  241. 'https://paddledet.bj.bcebos.com/models/pretrained/MobileNetV3_large_x0_5_pretrained.pdparams',
  242. 'MaskRCNN_ResNet50_IMAGENET':
  243. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_cos_pretrained.pdparams',
  244. 'MaskRCNN_ResNet50_fpn_IMAGENET':
  245. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_cos_pretrained.pdparams',
  246. 'MaskRCNN_ResNet50_vd_fpn_IMAGENET':
  247. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_pretrained.pdparams',
  248. 'MaskRCNN_ResNet50_vd_ssld_fpn_IMAGENET':
  249. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_v2_pretrained.pdparams',
  250. 'MaskRCNN_ResNet101_fpn_IMAGENET':
  251. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet101_pretrained.pdparams',
  252. 'MaskRCNN_ResNet101_vd_fpn_IMAGENET':
  253. 'https://paddledet.bj.bcebos.com/models/pretrained/ResNet101_vd_pretrained.pdparams',
  254. 'DeepLabV3P_ResNet50_vd_IMAGENET':
  255. 'https://bj.bcebos.com/paddleseg/dygraph/resnet50_vd_ssld_v2.tar.gz',
  256. 'DeepLabV3P_ResNet101_vd_IMAGENET':
  257. 'https://bj.bcebos.com/paddleseg/dygraph/resnet101_vd_ssld.tar.gz'
  258. }
  259. pascalvoc_weights = {
  260. 'DeepLabV3P_ResNet50_vd_PascalVOC':
  261. 'https://bj.bcebos.com/paddleseg/dygraph/pascal_voc12/deeplabv3p_resnet50_os8_voc12aug_512x512_40k/model.pdparams',
  262. 'DeepLabV3P_ResNet101_vd_PascalVOC':
  263. 'https://bj.bcebos.com/paddleseg/dygraph/pascal_voc12/deeplabv3p_resnet101_os8_voc12aug_512x512_40k/model.pdparams',
  264. 'HRNet_HRNet_W18_PascalVOC':
  265. 'https://bj.bcebos.com/paddleseg/dygraph/pascal_voc12/fcn_hrnetw18_voc12aug_512x512_40k/model.pdparams',
  266. 'HRNet_HRNet_W48_PascalVOC':
  267. 'https://bj.bcebos.com/paddleseg/dygraph/pascal_voc12/fcn_hrnetw48_voc12aug_512x512_40k/model.pdparams',
  268. 'YOLOv3_MobileNetV1_PascalVOC':
  269. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_270e_voc.pdparams',
  270. 'YOLOv3_MobileNetV1_ssld_PascalVOC':
  271. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_ssld_270e_voc.pdparams',
  272. 'YOLOv3_MobileNetV3_PascalVOC':
  273. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v3_large_270e_voc.pdparams',
  274. 'YOLOv3_MobileNetV3_ssld_PascalVOC':
  275. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v3_large_ssld_270e_voc.pdparams'
  276. }
  277. coco_weights = {
  278. 'YOLOv3_MobileNetV1_COCO':
  279. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_270e_coco.pdparams',
  280. 'YOLOv3_MobileNetV1_ssld_COCO':
  281. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_ssld_270e_coco.pdparams',
  282. 'YOLOv3_DarkNet53_COCO':
  283. 'https://paddledet.bj.bcebos.com/models/yolov3_darknet53_270e_coco.pdparams',
  284. 'YOLOv3_ResNet50_vd_dcn_COCO':
  285. 'https://paddledet.bj.bcebos.com/models/yolov3_r50vd_dcn_270e_coco.pdparams',
  286. 'YOLOv3_ResNet34_COCO':
  287. 'https://paddledet.bj.bcebos.com/models/yolov3_r34_270e_coco.pdparams',
  288. 'YOLOv3_MobileNetV3_COCO':
  289. 'https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v3_large_270e_coco.pdparams',
  290. 'FasterRCNN_ResNet50_fpn_COCO':
  291. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r50_fpn_2x_coco.pdparams',
  292. 'FasterRCNN_ResNet50_COCO':
  293. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r50_1x_coco.pdparams',
  294. 'FasterRCNN_ResNet50_vd_COCO':
  295. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r50_vd_1x_coco.pdparams',
  296. 'FasterRCNN_ResNet50_vd_fpn_COCO':
  297. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r50_vd_fpn_2x_coco.pdparams',
  298. 'FasterRCNN_ResNet50_vd_ssld_fpn_COCO':
  299. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r50_vd_ssld_fpn_2x_coco.pdparams',
  300. 'FasterRCNN_ResNet34_vd_fpn_COCO':
  301. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r34_vd_fpn_1x_coco.pdparams',
  302. 'FasterRCNN_ResNet34_fpn_COCO':
  303. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r34_fpn_1x_coco.pdparams',
  304. 'FasterRCNN_ResNet101_fpn_COCO':
  305. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r101_fpn_2x_coco.pdparams',
  306. 'FasterRCNN_ResNet101_vd_fpn_COCO':
  307. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_r101_vd_fpn_1x_coco.pdparams',
  308. 'FasterRCNN_HRNet_W18_fpn_COCO':
  309. 'https://paddledet.bj.bcebos.com/models/faster_rcnn_hrnetv2p_w18_2x_coco.pdparams',
  310. 'PPYOLO_ResNet50_vd_dcn_COCO':
  311. 'https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_2x_coco.pdparams',
  312. 'PPYOLO_ResNet18_vd_COCO':
  313. 'https://paddledet.bj.bcebos.com/models/ppyolo_r18vd_coco.pdparams',
  314. 'PPYOLO_MobileNetV3_large_COCO':
  315. 'https://paddledet.bj.bcebos.com/models/ppyolo_mbv3_large_coco.pdparams',
  316. 'PPYOLO_MobileNetV3_small_COCO':
  317. 'https://paddledet.bj.bcebos.com/models/ppyolo_mbv3_small_coco.pdparams',
  318. 'PPYOLOv2_ResNet50_vd_dcn_COCO':
  319. 'https://paddledet.bj.bcebos.com/models/ppyolov2_r50vd_dcn_365e_coco.pdparams',
  320. 'PPYOLOv2_ResNet101_vd_dcn_COCO':
  321. 'https://paddledet.bj.bcebos.com/models/ppyolov2_r101vd_dcn_365e_coco.pdparams',
  322. 'PPYOLOTiny_MobileNetV3_COCO':
  323. 'https://paddledet.bj.bcebos.com/models/ppyolo_tiny_650e_coco.pdparams',
  324. 'MaskRCNN_ResNet50_COCO':
  325. 'https://paddledet.bj.bcebos.com/models/mask_rcnn_r50_2x_coco.pdparams',
  326. 'MaskRCNN_ResNet50_fpn_COCO':
  327. 'https://paddledet.bj.bcebos.com/models/mask_rcnn_r50_fpn_2x_coco.pdparams',
  328. 'MaskRCNN_ResNet50_vd_fpn_COCO':
  329. 'https://paddledet.bj.bcebos.com/models/mask_rcnn_r50_vd_fpn_2x_coco.pdparams',
  330. 'MaskRCNN_ResNet50_vd_ssld_fpn_COCO':
  331. 'https://paddledet.bj.bcebos.com/models/mask_rcnn_r50_vd_fpn_ssld_2x_coco.pdparams',
  332. 'MaskRCNN_ResNet101_fpn_COCO':
  333. 'https://paddledet.bj.bcebos.com/models/mask_rcnn_r101_fpn_1x_coco.pdparams',
  334. 'MaskRCNN_ResNet101_vd_fpn_COCO':
  335. 'https://paddledet.bj.bcebos.com/models/mask_rcnn_r101_vd_fpn_1x_coco.pdparams'
  336. }
  337. def get_pretrain_weights(flag, class_name, save_dir, backbone_name=None):
  338. if flag is None:
  339. return None
  340. elif osp.isdir(flag):
  341. return flag
  342. elif osp.isfile(flag):
  343. return flag
  344. # TODO: check flag
  345. new_save_dir = save_dir
  346. if backbone_name is not None:
  347. weights_key = "{}_{}_{}".format(class_name, backbone_name, flag)
  348. else:
  349. weights_key = "{}_{}".format(class_name, flag)
  350. if flag == 'CITYSCAPES':
  351. url = cityscapes_weights[weights_key]
  352. elif flag == 'IMAGENET':
  353. url = imagenet_weights[weights_key]
  354. elif flag == 'PascalVOC':
  355. url = pascalvoc_weights[weights_key]
  356. elif flag == 'COCO':
  357. url = coco_weights[weights_key]
  358. else:
  359. raise ValueError('Given pretrained weights {} is undefined.'.format(
  360. flag))
  361. fname = download_and_decompress(url, path=new_save_dir)
  362. if osp.isdir(fname):
  363. fname = glob.glob(osp.join(fname, '*.pdparams'))[0]
  364. return fname
  365. def load_pretrain_weights(model, pretrain_weights=None, model_name=None):
  366. if pretrain_weights is not None:
  367. logging.info(
  368. 'Loading pretrained model from {}'.format(pretrain_weights),
  369. use_color=True)
  370. if os.path.exists(pretrain_weights):
  371. param_state_dict = paddle.load(pretrain_weights)
  372. model_state_dict = model.state_dict()
  373. # hack: fit for faster rcnn. Pretrain weights contain prefix of 'backbone'
  374. # while res5 module is located in bbox_head.head. Replace the prefix of
  375. # res5 with 'bbox_head.head' to load pretrain weights correctly.
  376. for k in list(param_state_dict.keys()):
  377. if 'backbone.res5' in k:
  378. new_k = k.replace('backbone', 'bbox_head.head')
  379. if new_k in model_state_dict:
  380. value = param_state_dict.pop(k)
  381. param_state_dict[new_k] = value
  382. num_params_loaded = 0
  383. for k in model_state_dict:
  384. if k not in param_state_dict:
  385. logging.warning("{} is not in pretrained model".format(k))
  386. elif list(param_state_dict[k].shape) != list(model_state_dict[
  387. k].shape):
  388. logging.warning(
  389. "[SKIP] Shape of pretrained params {} doesn't match.(Pretrained: {}, Actual: {})"
  390. .format(k, param_state_dict[k].shape, model_state_dict[
  391. k].shape))
  392. else:
  393. model_state_dict[k] = param_state_dict[k]
  394. num_params_loaded += 1
  395. model.set_state_dict(model_state_dict)
  396. logging.info("There are {}/{} variables loaded into {}.".format(
  397. num_params_loaded, len(model_state_dict), model_name))
  398. else:
  399. raise ValueError('The pretrained model directory is not Found: {}'.
  400. format(pretrain_weights))
  401. else:
  402. logging.info(
  403. 'No pretrained model to load, {} will be trained from scratch.'.
  404. format(model_name))
  405. def load_optimizer(optimizer, state_dict_path):
  406. logging.info("Loading optimizer from {}".format(state_dict_path))
  407. optim_state_dict = paddle.load(state_dict_path)
  408. if 'last_epoch' in optim_state_dict:
  409. optim_state_dict.pop('last_epoch')
  410. optimizer.set_state_dict(optim_state_dict)
  411. def load_checkpoint(model, optimizer, model_name, checkpoint):
  412. logging.info("Loading checkpoint from {}".format(checkpoint))
  413. load_pretrain_weights(
  414. model,
  415. pretrain_weights=osp.join(checkpoint, 'model.pdparams'),
  416. model_name=model_name)
  417. load_optimizer(
  418. optimizer, state_dict_path=osp.join(checkpoint, "model.pdopt"))