├── data └── SHA │ └── val │ └── pre_load_img │ ├── tt.py │ ├── IMG_1.jpg │ ├── IMG_10.jpg │ ├── IMG_100.jpg │ ├── IMG_101.jpg │ ├── IMG_102.jpg │ ├── IMG_103.jpg │ ├── IMG_104.jpg │ ├── IMG_105.jpg │ ├── IMG_106.jpg │ ├── IMG_107.jpg │ ├── IMG_108.jpg │ ├── IMG_109.jpg │ ├── IMG_11.jpg │ ├── IMG_110.jpg │ ├── IMG_111.jpg │ ├── IMG_112.jpg │ ├── IMG_113.jpg │ ├── IMG_114.jpg │ ├── IMG_115.jpg │ ├── IMG_116.jpg │ ├── IMG_117.jpg │ ├── IMG_118.jpg │ ├── IMG_119.jpg │ ├── IMG_12.jpg │ ├── IMG_120.jpg │ ├── IMG_121.jpg │ ├── IMG_122.jpg │ ├── IMG_123.jpg │ ├── IMG_124.jpg │ ├── IMG_125.jpg │ ├── IMG_126.jpg │ ├── IMG_127.jpg │ ├── IMG_128.jpg │ ├── IMG_129.jpg │ ├── IMG_13.jpg │ ├── IMG_130.jpg │ ├── IMG_131.jpg │ ├── IMG_132.jpg │ ├── IMG_133.jpg │ ├── IMG_134.jpg │ ├── IMG_135.jpg │ ├── IMG_136.jpg │ ├── IMG_137.jpg │ ├── IMG_138.jpg │ ├── IMG_139.jpg │ ├── IMG_14.jpg │ ├── IMG_140.jpg │ ├── IMG_141.jpg │ ├── IMG_142.jpg │ ├── IMG_143.jpg │ ├── IMG_144.jpg │ ├── IMG_145.jpg │ ├── IMG_146.jpg │ ├── IMG_147.jpg │ ├── IMG_148.jpg │ ├── IMG_149.jpg │ ├── IMG_15.jpg │ ├── IMG_150.jpg │ ├── IMG_151.jpg │ ├── IMG_152.jpg │ ├── IMG_153.jpg │ ├── IMG_154.jpg │ ├── IMG_155.jpg │ ├── IMG_156.jpg │ ├── IMG_157.jpg │ ├── IMG_158.jpg │ ├── IMG_159.jpg │ ├── IMG_16.jpg │ ├── IMG_160.jpg │ ├── IMG_161.jpg │ ├── IMG_162.jpg │ ├── IMG_163.jpg │ ├── IMG_164.jpg │ ├── IMG_165.jpg │ ├── IMG_166.jpg │ ├── IMG_167.jpg │ ├── IMG_168.jpg │ ├── IMG_169.jpg │ ├── IMG_17.jpg │ ├── IMG_170.jpg │ ├── IMG_171.jpg │ ├── IMG_172.jpg │ ├── IMG_173.jpg │ ├── IMG_174.jpg │ ├── IMG_175.jpg │ ├── IMG_176.jpg │ ├── IMG_177.jpg │ ├── IMG_178.jpg │ ├── IMG_179.jpg │ ├── IMG_18.jpg │ ├── IMG_180.jpg │ ├── IMG_181.jpg │ ├── IMG_182.jpg │ ├── IMG_19.jpg │ ├── IMG_2.jpg │ ├── IMG_20.jpg │ ├── IMG_21.jpg │ ├── IMG_22.jpg │ ├── IMG_23.jpg │ ├── IMG_24.jpg │ ├── IMG_25.jpg │ ├── IMG_26.jpg │ ├── IMG_27.jpg │ ├── IMG_28.jpg │ ├── IMG_29.jpg │ ├── IMG_3.jpg │ ├── IMG_30.jpg │ ├── IMG_31.jpg │ ├── IMG_32.jpg │ ├── IMG_33.jpg │ ├── IMG_34.jpg │ ├── IMG_35.jpg │ ├── IMG_36.jpg │ ├── IMG_37.jpg │ ├── IMG_38.jpg │ ├── IMG_39.jpg │ ├── IMG_4.jpg │ ├── IMG_40.jpg │ ├── IMG_41.jpg │ ├── IMG_42.jpg │ ├── IMG_43.jpg │ ├── IMG_44.jpg │ ├── IMG_45.jpg │ ├── IMG_46.jpg │ ├── IMG_47.jpg │ ├── IMG_48.jpg │ ├── IMG_49.jpg │ ├── IMG_5.jpg │ ├── IMG_50.jpg │ ├── IMG_51.jpg │ ├── IMG_52.jpg │ ├── IMG_53.jpg │ ├── IMG_54.jpg │ ├── IMG_55.jpg │ ├── IMG_56.jpg │ ├── IMG_57.jpg │ ├── IMG_58.jpg │ ├── IMG_59.jpg │ ├── IMG_6.jpg │ ├── IMG_60.jpg │ ├── IMG_61.jpg │ ├── IMG_62.jpg │ ├── IMG_63.jpg │ ├── IMG_64.jpg │ ├── IMG_65.jpg │ ├── IMG_66.jpg │ ├── IMG_67.jpg │ ├── IMG_68.jpg │ ├── IMG_69.jpg │ ├── IMG_7.jpg │ ├── IMG_70.jpg │ ├── IMG_71.jpg │ ├── IMG_72.jpg │ ├── IMG_73.jpg │ ├── IMG_74.jpg │ ├── IMG_75.jpg │ ├── IMG_76.jpg │ ├── IMG_77.jpg │ ├── IMG_78.jpg │ ├── IMG_79.jpg │ ├── IMG_8.jpg │ ├── IMG_80.jpg │ ├── IMG_81.jpg │ ├── IMG_82.jpg │ ├── IMG_83.jpg │ ├── IMG_84.jpg │ ├── IMG_85.jpg │ ├── IMG_86.jpg │ ├── IMG_87.jpg │ ├── IMG_88.jpg │ ├── IMG_89.jpg │ ├── IMG_9.jpg │ ├── IMG_90.jpg │ ├── IMG_91.jpg │ ├── IMG_92.jpg │ ├── IMG_93.jpg │ ├── IMG_94.jpg │ ├── IMG_95.jpg │ ├── IMG_96.jpg │ ├── IMG_97.jpg │ ├── IMG_98.jpg │ └── IMG_99.jpg ├── run.sh ├── README.md └── code ├── tools ├── progress │ ├── counter.py │ ├── spinner.py │ ├── bar.py │ └── __init__.py ├── log.py ├── terminal_log.py └── godblessdbg.py ├── options_test.py ├── test.py ├── vision.py ├── datasets └── SHA_test.py ├── models └── VGG_16_deconv_Fine_grained_DA_test.py └── utils.py /data/SHA/val/pre_load_img/tt.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_1.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_10.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_100.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_100.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_101.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_101.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_102.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_102.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_103.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_103.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_104.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_104.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_105.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_105.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_106.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_106.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_107.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_107.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_108.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_108.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_109.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_109.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_11.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_110.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_110.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_111.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_111.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_112.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_112.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_113.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_113.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_114.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_114.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_115.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_115.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_116.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_116.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_117.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_117.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_118.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_118.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_119.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_119.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_12.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_120.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_120.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_121.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_121.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_122.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_122.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_123.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_123.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_124.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_124.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_125.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_125.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_126.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_126.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_127.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_127.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_128.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_129.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_129.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_13.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_130.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_130.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_131.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_131.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_132.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_132.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_133.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_133.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_134.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_134.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_135.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_135.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_136.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_136.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_137.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_137.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_138.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_138.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_139.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_139.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_14.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_140.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_140.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_141.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_141.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_142.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_142.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_143.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_143.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_144.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_144.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_145.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_145.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_146.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_146.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_147.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_147.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_148.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_148.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_149.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_149.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_15.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_150.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_150.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_151.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_151.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_152.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_152.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_153.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_153.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_154.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_154.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_155.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_155.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_156.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_156.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_157.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_157.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_158.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_158.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_159.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_159.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_16.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_160.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_160.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_161.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_161.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_162.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_162.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_163.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_163.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_164.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_164.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_165.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_165.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_166.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_166.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_167.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_167.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_168.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_168.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_169.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_169.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_17.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_170.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_170.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_171.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_171.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_172.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_172.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_173.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_173.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_174.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_174.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_175.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_175.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_176.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_176.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_177.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_177.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_178.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_178.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_179.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_179.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_18.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_180.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_180.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_181.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_181.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_182.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_182.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_19.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_2.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_20.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_21.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_22.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_23.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_24.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_25.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_26.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_27.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_28.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_29.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_3.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_30.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_31.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_32.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_33.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_34.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_35.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_36.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_37.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_38.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_39.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_4.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_40.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_41.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_42.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_43.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_44.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_45.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_46.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_47.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_47.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_48.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_49.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_5.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_50.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_51.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_52.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_53.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_54.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_55.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_56.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_57.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_58.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_59.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_6.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_60.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_60.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_61.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_61.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_62.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_62.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_63.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_64.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_64.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_65.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_65.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_66.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_66.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_67.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_67.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_68.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_68.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_69.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_69.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_7.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_70.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_70.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_71.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_71.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_72.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_72.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_73.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_73.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_74.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_74.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_75.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_75.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_76.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_76.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_77.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_77.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_78.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_78.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_79.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_79.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_8.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_80.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_80.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_81.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_81.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_82.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_82.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_83.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_83.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_84.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_84.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_85.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_85.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_86.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_86.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_87.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_88.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_88.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_89.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_89.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_9.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_90.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_91.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_91.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_92.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_92.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_93.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_93.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_94.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_94.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_95.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_95.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_96.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_96.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_97.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_97.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_98.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_98.jpg -------------------------------------------------------------------------------- /data/SHA/val/pre_load_img/IMG_99.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yankeegsj/BLA/HEAD/data/SHA/val/pre_load_img/IMG_99.jpg -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | python ./code/test.py model=VGG_16_deconv_Fine_grained_DA_test gradient_scalar=-0.01 comment=99.3_vision_SHA \ 2 | tar_dataset=SHA_test dataroot_SHA=./data/SHA vision_each_epoch=5000 \ 3 | model_for_load=SHA_99.3.pth 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bi-Level Alignment (BLA) (CVPR 2022) 2 | 3 | ## 1. Install anaconda 4 | 5 | ## 2. Install packages 6 | 7 | ``` 8 | conda create --name BLA 9 | source activate BLA 10 | conda install pip 11 | conda install python==3.6.6 12 | pip install torch-1.0.0-cp36-cp36m-linux_x86_64.whl 13 | pip install numpy==1.19.2 six==1.15.0 pillow==8.0.1 14 | pip install torchvision==0.2.0 15 | pip install pandas==1.1.3 python-dateutil==2.8.1 pytz==2020.1 16 | pip install scipy==1.5.3 opencv-python==4.4.0.44 17 | pip install opencv-python==4.4.0.44 cycler==0.10.0 kiwisolver==1.2.0 matplotlib==3.3.2 pyparsing==2.4.7 18 | pip install bbox==0.9.2 pyquaternion==0.9.9 19 | pip install PyWavelets==1.1.1 decorator==4.4.2 imageio==2.9.0 networkx==2.5 scikit-image==0.17.2 tifffile==2020.9.3 20 | pip install boxx==0.9.2.28 fn==0.4.3 pprofile==2.0.5 py-heat==0.0.6 pyopengl==3.1.5 seaborn==0.11.0 snakeviz==2.1.0 tornado==6.1 21 | pip install cached-property==1.5.2 h5py==3.1.0 22 | ``` 23 | 24 | ## 3. Model download 25 | 26 | download MAE_99.3_SHA model from [link](https://1drv.ms/u/s!AuOdja6S-tY7gtRYZEgaElVf2AMd4Q?e=8obBlj) 27 | 28 | ## 3. File system 29 | ``` 30 | - BLA 31 | - code 32 | - test.py 33 | - ... 34 | - data 35 | - SHA 36 | ``` 37 | 38 | ## 4. run the code 39 | bash run.sh 40 | -------------------------------------------------------------------------------- /code/tools/progress/counter.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Copyright (c) 2012 Giorgos Verigakis 4 | # 5 | # Permission to use, copy, modify, and distribute this software for any 6 | # purpose with or without fee is hereby granted, provided that the above 7 | # copyright notice and this permission notice appear in all copies. 8 | # 9 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | 17 | from __future__ import unicode_literals 18 | from . import Infinite, Progress 19 | 20 | 21 | class Counter(Infinite): 22 | def update(self): 23 | self.write(str(self.index)) 24 | 25 | 26 | class Countdown(Progress): 27 | def update(self): 28 | self.write(str(self.remaining)) 29 | 30 | 31 | class Stack(Progress): 32 | phases = (' ', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█') 33 | 34 | def update(self): 35 | nphases = len(self.phases) 36 | i = min(nphases - 1, int(self.progress * nphases)) 37 | self.write(self.phases[i]) 38 | 39 | 40 | class Pie(Stack): 41 | phases = ('○', '◔', '◑', '◕', '●') 42 | -------------------------------------------------------------------------------- /code/tools/progress/spinner.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Copyright (c) 2012 Giorgos Verigakis 4 | # 5 | # Permission to use, copy, modify, and distribute this software for any 6 | # purpose with or without fee is hereby granted, provided that the above 7 | # copyright notice and this permission notice appear in all copies. 8 | # 9 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | 17 | from __future__ import unicode_literals 18 | from . import Infinite 19 | 20 | 21 | class Spinner(Infinite): 22 | phases = ('-', '\\', '|', '/') 23 | hide_cursor = True 24 | 25 | def update(self): 26 | i = self.index % len(self.phases) 27 | self.write(self.phases[i]) 28 | 29 | 30 | class PieSpinner(Spinner): 31 | phases = ['◷', '◶', '◵', '◴'] 32 | 33 | 34 | class MoonSpinner(Spinner): 35 | phases = ['◑', '◒', '◐', '◓'] 36 | 37 | 38 | class LineSpinner(Spinner): 39 | phases = ['⎺', '⎻', '⎼', '⎽', '⎼', '⎻'] 40 | 41 | 42 | class PixelSpinner(Spinner): 43 | phases = ['⣾', '⣷', '⣯', '⣟', '⡿', '⢿', '⣻', '⣽'] 44 | -------------------------------------------------------------------------------- /code/tools/log.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sat Apr 6 09:18:14 2019 4 | 5 | @author: HP 6 | """ 7 | ''' 8 | 9 | ''' 10 | import csv 11 | import os 12 | import shutil 13 | 14 | class AverageMeter(object): 15 | """Computes and stores the average and current value""" 16 | 17 | def __init__(self): 18 | self.reset() 19 | 20 | def reset(self): 21 | self.val = 0 22 | self.avg = 0 23 | self.sum = 0 24 | self.count = 0 25 | 26 | def update(self, val, n=1): 27 | self.val = val 28 | self.sum += val * n 29 | self.count += n 30 | self.avg = self.sum / self.count 31 | 32 | class Logger(object): 33 | 34 | def __init__(self, path, header,recreate=False): 35 | 36 | if os.path.exists(path): 37 | flag=True 38 | if recreate: 39 | self.log_file = open(path, 'w',newline='') 40 | else: 41 | self.log_file = open(path, 'a',newline='') 42 | else: 43 | flag=False 44 | self.log_file = open(path, 'a',newline='') 45 | 46 | self.logger = csv.writer(self.log_file, dialect=("excel")) 47 | 48 | if not flag or recreate: 49 | self.logger.writerow(header) 50 | 51 | self.header = header 52 | 53 | def __del(self): 54 | 55 | self.log_file.close() 56 | 57 | def log(self, values): 58 | 59 | 60 | write_values = [] 61 | for col in self.header: 62 | 63 | assert col in values 64 | 65 | self.logger.writerow(write_values) 66 | 67 | self.log_file.flush() 68 | 69 | def load_value_file(file_path): 70 | with open(file_path, 'r') as input_file: 71 | value = float(input_file.read().rstrip('\n\r')) 72 | return value 73 | 74 | def read_csv(csv_file): 75 | f=open(csv_file,encoding='utf-8',errors='ignore') 76 | reader=csv.reader(f) 77 | 78 | return reader 79 | 80 | 81 | 82 | 83 | def calculate_accuracy(outputs, targets): 84 | batch_size = targets.size(0) 85 | 86 | 87 | _, pred = outputs.topk(1, 1, True) 88 | 89 | pred = pred.t() 90 | correct = pred.eq(targets.view(1, -1)) 91 | n_correct_elems = correct.float().sum().data[0] 92 | 93 | return n_correct_elems / batch_size 94 | 95 | if __name__=='__main__': 96 | for i in range(2): 97 | log=Logger('./test.csv',['header1','header2']) 98 | log.log({ 99 | 'header1':'h1', 100 | 'header2':'h2', 101 | }) 102 | -------------------------------------------------------------------------------- /code/tools/terminal_log.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | if __name__!='__main__': 4 | from . import godblessdbg 5 | import os 6 | def create_log_file_terminal(logfile_path,log_name='log_name'):#.txt 7 | ''' 8 | todo:create a log object 9 | input : logfile_path (I often use the txt file) 10 | log_name str %(name)-12s 11 | return:a log object 12 | use obj.info('str') you can output the str into the log file and terminal at the same time 13 | ''' 14 | 15 | log=logging.getLogger(log_name) 16 | log.setLevel(logging.INFO) 17 | # define a Handler which writes INFO messages or higher to the sys.stderr 18 | console = logging.StreamHandler() 19 | # set a format which is simpler for console use 20 | console_formatter = logging.Formatter('%(asctime)s-%(name)-12s: terminal %(levelname)-8s %(message)s') 21 | # tell the handler to use this format 22 | console.setFormatter(console_formatter) 23 | log.addHandler(console) 24 | 25 | file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 26 | file=logging.FileHandler(logfile_path) 27 | file.setFormatter(file_formatter) 28 | log.addHandler(file) 29 | 30 | # print(godblessdbg.godbless) 31 | log.info(godblessdbg.begin) 32 | 33 | return log 34 | 35 | import shutil 36 | 37 | def create_exp_dir(path, scripts_to_save=None): 38 | if not os.path.exists(path): 39 | os.makedirs(path) 40 | print('Experiment dir : {}'.format(path)) 41 | 42 | if scripts_to_save is not None: 43 | if os.path.exists(os.path.join(path, 'scripts')): 44 | shutil.rmtree(os.path.join(path, 'scripts')) 45 | os.makedirs(os.path.join(path, 'scripts'), exist_ok=True) 46 | for script in scripts_to_save: 47 | dst_file = os.path.join(path, 'scripts', os.path.basename(script)) 48 | 49 | if os.path.isdir(script): 50 | shutil.copytree(script, dst_file) 51 | else: 52 | shutil.copyfile(script, dst_file) 53 | 54 | 55 | 56 | def save_opt(opt,log_path): 57 | 58 | if '.txt' in log_path: 59 | txt_save_path=log_path 60 | else: 61 | txt_save_path=os.path.join(log_path,'opt_save.txt') 62 | 63 | if not os.path.exists(os.path.dirname(txt_save_path)): 64 | os.makedirs(os.path.dirname(txt_save_path)) 65 | 66 | 67 | with open(txt_save_path,'w') as f: 68 | for k, v in opt.__class__.__dict__.items(): 69 | if not k.startswith('__'): 70 | print(k, getattr(opt, k)) 71 | f.write('{0} \t {1} \n'.format(k, getattr(opt, k))) 72 | 73 | 74 | if __name__=='__main__': 75 | import godblessdbg 76 | log_txt=create_log_file_terminal('./b.txt') 77 | log_txt.info('aa') 78 | -------------------------------------------------------------------------------- /code/options_test.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 2 | import time 3 | import os 4 | import torch 5 | import sys 6 | import cv2 7 | import warnings 8 | class global_variables(object): 9 | 10 | num_gpu=1 11 | local_rank=0 12 | iter_each_train_epoch=0 13 | # iter_each_test_epoch=0 14 | #global variables 15 | seed=1234 16 | 17 | time_=time.localtime() 18 | time_=time.strftime('%Y-%m-%d-%H-%M',time_) 19 | log_root_path='' 20 | log_txt_path='' 21 | 22 | ''' 23 | data process 24 | ''' 25 | comment='' 26 | dataroot_SHA='/opt/data/common/shanghaitechA' 27 | 28 | tar_dataset='SHA_test' 29 | img_interpolate_mode='bilinear'# 'nearest' 'bicubic' 30 | mean_std=([0.5, 0.5, 0.5], [1.0, 1.0, 1.0]) 31 | gt_factor=100.0 32 | sigma=4 33 | kernel_size=15 34 | 35 | num_workers=8 36 | test_batch_size = 1 37 | 38 | #model 39 | model='' 40 | model_for_load='' 41 | split_den_level=[0,0.005,10000] 42 | model_scale_factor=8 43 | gradient_scalar=-0.01 44 | 45 | ############################################################### 46 | vision_each_epoch=5000 47 | 48 | def __init__(self, **kwself): 49 | for k, v in kwself.items(): 50 | # print(k) 51 | # print('\n') 52 | if k=='--local_rank': 53 | k='local_rank' 54 | if not hasattr(self, k): 55 | print("Warning: opt has not attribut {}".format(k)) 56 | import pdb 57 | pdb.set_trace() 58 | self.__dict__.update({k: v}) 59 | tp = eval('type(self.{0})'.format(k)) 60 | if tp == type(''): 61 | setattr(self, k, tp(v)) 62 | elif tp == type([]): 63 | tp=eval('type(self.{0}[0])'.format(k)) 64 | if tp==type('1'): 65 | v=v[1:-1].split(',') 66 | setattr(self, k, v) 67 | else: 68 | setattr(self, k, eval(v)) 69 | else: 70 | setattr(self, k, eval(v)) 71 | 72 | if self.comment: 73 | self.log_root_path=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'log/{}_{}_{}'.format(self.time_,self.model,self.comment)) 74 | self.log_txt_path=os.path.join(os.path.dirname(self.log_root_path),'{}_{}_{}.txt'.format(self.time_,self.model,self.comment)) 75 | else: 76 | self.log_root_path=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'log/{}_{}'.format(self.time_,self.model)) 77 | self.log_txt_path=os.path.join(os.path.dirname(self.log_root_path),'{}_{}.txt'.format(self.time_,self.model)) 78 | 79 | 80 | assert self.test_batch_size==1 81 | os.makedirs(self.log_root_path) 82 | 83 | if __name__ == '__main__': 84 | option = dict([arg.split('=') for arg in sys.argv[1:]]) 85 | opt = global_variables(**option) 86 | for k, v in opt.__class__.__dict__.items(): 87 | if not k.startswith('__'): 88 | print(k, getattr(opt, k)) 89 | -------------------------------------------------------------------------------- /code/tools/progress/bar.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Copyright (c) 2012 Giorgos Verigakis 4 | # 5 | # Permission to use, copy, modify, and distribute this software for any 6 | # purpose with or without fee is hereby granted, provided that the above 7 | # copyright notice and this permission notice appear in all copies. 8 | # 9 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | 17 | from __future__ import unicode_literals 18 | 19 | import sys 20 | 21 | from . import Progress 22 | 23 | 24 | class Bar(Progress): 25 | width = 32 26 | suffix = '%(index)d/%(max)d' 27 | bar_prefix = ' |' 28 | bar_suffix = '| ' 29 | empty_fill = ' ' 30 | fill = '#' 31 | 32 | def update(self): 33 | filled_length = int(self.width * self.progress) 34 | empty_length = self.width - filled_length 35 | 36 | message = self.message % self 37 | bar = self.fill * filled_length 38 | empty = self.empty_fill * empty_length 39 | suffix = self.suffix % self 40 | line = ''.join([message, self.bar_prefix, bar, empty, self.bar_suffix, 41 | suffix]) 42 | self.writeln(line) 43 | 44 | 45 | class ChargingBar(Bar): 46 | suffix = '%(percent)d%%' 47 | bar_prefix = ' ' 48 | bar_suffix = ' ' 49 | empty_fill = '∙' 50 | fill = '█' 51 | 52 | 53 | class FillingSquaresBar(ChargingBar): 54 | empty_fill = '▢' 55 | fill = '▣' 56 | 57 | 58 | class FillingCirclesBar(ChargingBar): 59 | empty_fill = '◯' 60 | fill = '◉' 61 | 62 | 63 | class IncrementalBar(Bar): 64 | if sys.platform.startswith('win'): 65 | phases = (u' ', u'▌', u'█') 66 | else: 67 | phases = (' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█') 68 | 69 | def update(self): 70 | nphases = len(self.phases) 71 | filled_len = self.width * self.progress 72 | nfull = int(filled_len) # Number of full chars 73 | phase = int((filled_len - nfull) * nphases) # Phase of last char 74 | nempty = self.width - nfull # Number of empty chars 75 | 76 | message = self.message % self 77 | bar = self.phases[-1] * nfull 78 | current = self.phases[phase] if phase > 0 else '' 79 | empty = self.empty_fill * max(0, nempty - len(current)) 80 | suffix = self.suffix % self 81 | line = ''.join([message, self.bar_prefix, bar, current, empty, 82 | self.bar_suffix, suffix]) 83 | self.writeln(line) 84 | 85 | 86 | class PixelBar(IncrementalBar): 87 | phases = ('⡀', '⡄', '⡆', '⡇', '⣇', '⣧', '⣷', '⣿') 88 | 89 | 90 | class ShadyBar(IncrementalBar): 91 | phases = (' ', '░', '▒', '▓', '█') 92 | 93 | -------------------------------------------------------------------------------- /code/test.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | import sys 4 | sys.path.append(os.path.abspath((__file__))) 5 | from options_test import global_variables as opt_conf 6 | from tools.terminal_log import create_log_file_terminal,save_opt,create_exp_dir 7 | from tools.progress.bar import Bar 8 | import tools.godblessdbg as godblessdbg 9 | from tools.log import AverageMeter 10 | from tools.progress.bar import Bar 11 | import torch.backends.cudnn as cudnn 12 | import torch.nn as nn 13 | import torch.nn.functional as F 14 | import torch 15 | import time 16 | import numpy as np 17 | import random 18 | import glob 19 | import utils 20 | import scipy.io as io 21 | import shutil 22 | import cv2 23 | import json 24 | import math 25 | 26 | 27 | def test(epoch,split,test_vision,model,test_loader,opt,log): 28 | with torch.no_grad(): 29 | model.eval() 30 | results = {} 31 | batch_time = AverageMeter() 32 | data_time = AverageMeter() 33 | mae = AverageMeter() 34 | mse = AverageMeter() 35 | bar = Bar('Testing', max=len(test_loader)) 36 | end = time.time() 37 | 38 | for step, data in enumerate(test_loader): 39 | data_time.update(time.time() - end) 40 | end = time.time() 41 | res=model.inference(data,0,epoch,0,step,test_vision,len(test_loader),0,log) 42 | batch_time.update(time.time() - end) 43 | end = time.time() 44 | str_plus='' 45 | for k,v in res.items(): 46 | str_plus+=' | {key:}:{value:.4f}'.format(key=k,value=v) 47 | bar.suffix = '({batch}/{size}) Data: {data:.3f}s | Batch: {bt:.3f}s | Total: {total:} | ETA: {eta:}'.format( 48 | batch=step + 1, 49 | size=len(test_loader), 50 | data=data_time.val, 51 | bt=batch_time.val, 52 | total=bar.elapsed_td, 53 | eta=bar.eta_td, 54 | )+str_plus 55 | bar.next() 56 | 57 | bar.finish() 58 | 59 | return res 60 | 61 | 62 | if __name__ == '__main__': 63 | print(sys.argv) 64 | option = dict([arg.split('=') for arg in sys.argv[1:]]) 65 | print(option) 66 | opt=opt_conf(**option) 67 | log_output=create_log_file_terminal(opt.log_txt_path) 68 | save_opt(opt,opt.log_txt_path) 69 | scripts_to_save=glob.glob('./code/*') 70 | create_exp_dir(opt.log_root_path,scripts_to_save) 71 | log_output.info(os.path.realpath(__file__)) 72 | log_output.info(sys.argv) 73 | if not torch.cuda.is_available(): 74 | log_output.info('no gpu device available') 75 | sys.exit(1) 76 | 77 | from importlib import import_module 78 | net=import_module('models.{}'.format(opt.model)) 79 | exec('model=net.{}(opt)'.format(opt.model)) 80 | model = model.cuda() 81 | 82 | dataloader=import_module('datasets.{}'.format(opt.tar_dataset)) 83 | exec('test_loader_tar,test_data_tar=dataloader.{}(opt)'.format(opt.tar_dataset)) 84 | 85 | sample_num=min(len(test_loader_tar),opt.vision_each_epoch) 86 | test_vision_tar=random.sample(list(range(len(test_loader_tar))), sample_num) 87 | 88 | assert opt.model_for_load 89 | checkpoint=torch.load(opt.model_for_load) 90 | model.load_state_dict(checkpoint['net']) 91 | model.next_epoch() 92 | results=test(0,'test', test_vision_tar, model, test_loader_tar,opt,log_output) 93 | log_output.info('Results in {}'.format(opt.tar_dataset)) 94 | for k,v in results.items(): 95 | log_output.info('{}: {}'.format(k,v)) 96 | log_output.info(godblessdbg.end) 97 | log_output.info('log location {0}'.format(opt.log_root_path)) 98 | -------------------------------------------------------------------------------- /code/vision.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import os 3 | from matplotlib import pyplot as plt 4 | import numpy as np 5 | import scipy.io as io 6 | import torch 7 | 8 | 9 | def save_img_array(img_array, save_path,imgname,save_mat=False): 10 | if not os.path.exists(save_path): 11 | os.makedirs(save_path) 12 | # io.savemat(os.path.join(save_path,imgname+'.mat'), {'img': img_array}) 13 | # print(img_array.shape) 14 | # assert img_array.shape[0]==1 15 | assert img_array.shape[0]==3 16 | if save_mat: 17 | io.savemat(os.path.join(save_path,imgname+'.mat'), {'img': img_array[0]}) 18 | img_array=img_array.transpose([1,2,0]) 19 | plt.imsave(os.path.join(save_path,imgname+'.jpg'), img_array) 20 | plt.close() 21 | return 22 | 23 | 24 | def save_img_mask(img_mask, save_path): 25 | # io.savemat(os.path.join(save_path,imgname+'.mat'), {'img': img_array}) 26 | # print(img_array.shape) 27 | # assert img_array.shape[0]==1 28 | assert img_mask.shape[0]==1 29 | img_mask=img_mask.numpy() 30 | img_mask=img_mask.astype(np.uint8) 31 | img_mask=img_mask.transpose([1,2,0]) 32 | img_mask*=255 33 | cv2.imwrite(save_path,img_mask) 34 | 35 | return 36 | 37 | def save_rec_img(img,save_filename): 38 | #img tensor 3*H*W keypoints tensor num_keypoints*3 范围[-1,1] 39 | if not os.path.exists(os.path.split(save_filename)[0]): 40 | os.makedirs(os.path.split(save_filename)[0]) 41 | h,w=img.size()[1],img.size()[2] 42 | 43 | img*=255 44 | img=img.numpy() 45 | img=img.astype(np.uint8) 46 | img=img.transpose([1,2,0])# h,w,c 47 | img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) 48 | 49 | cv2.imwrite(save_filename,img) 50 | 51 | 52 | def save_img_tensor(img,save_filename,opt): 53 | if not os.path.exists(os.path.split(save_filename)[0]): 54 | os.makedirs(os.path.split(save_filename)[0]) 55 | 56 | h,w=img.size()[1],img.size()[2] 57 | mean=opt.mean_std[0] 58 | std=opt.mean_std[1] 59 | new_img=torch.zeros(img.size()) 60 | for i in range(3): 61 | new_img[i]=img[i]*std[i]+mean[i] 62 | new_img*=255 63 | new_img=new_img.numpy() 64 | new_img=new_img.astype(np.uint8) 65 | new_img=new_img.transpose([1,2,0])# h,w,c 66 | new_img = cv2.cvtColor(new_img, cv2.COLOR_RGB2BGR) 67 | 68 | cv2.imwrite(save_filename,new_img) 69 | 70 | def save_keypoints_img(img,den_map,opt,save_filename,img_alpha=0.6): 71 | #img tensor 3*H*W keypoints tensor num_keypoints*3 范围[-1,1] 72 | if not os.path.exists(os.path.split(save_filename)[0]): 73 | os.makedirs(os.path.split(save_filename)[0]) 74 | h,w=img.size()[1],img.size()[2] 75 | mean=opt.mean_std[0] 76 | std=opt.mean_std[1] 77 | 78 | new_img=torch.zeros(img.size()) 79 | for i in range(3): 80 | new_img[i]=img[i]*std[i]+mean[i] 81 | new_img*=255 82 | new_img=new_img.numpy() 83 | new_img=new_img.astype(np.uint8) 84 | new_img=new_img.transpose([1,2,0])# h,w,c 85 | new_img = cv2.cvtColor(new_img, cv2.COLOR_RGB2BGR) 86 | 87 | den_map=(den_map-torch.min(den_map))/(torch.max(den_map)-torch.min(den_map)) 88 | den_map=den_map.unsqueeze(2)#h*w*1 89 | den_map=den_map.cpu().numpy()*255 90 | den_map=den_map.astype(np.uint8) 91 | vision_map=cv2.applyColorMap(den_map, cv2.COLORMAP_JET) 92 | 93 | vision_img=img_alpha*new_img+(1-img_alpha)*vision_map 94 | vision_img=vision_img.astype(np.uint8) 95 | try: 96 | cv2.imwrite(save_filename,vision_img) 97 | except: 98 | pass 99 | 100 | def save_keypoints_and_img(img,den_map,opt,save_filename,img_name,img_alpha=0.6): 101 | #img tensor 3*H*W keypoints tensor num_keypoints*3 范围[-1,1] 102 | if not os.path.exists(os.path.split(save_filename)[0]): 103 | os.makedirs(os.path.split(save_filename)[0]) 104 | 105 | file_dir=os.path.split(save_filename)[0] 106 | h,w=img.size()[1],img.size()[2] 107 | mean=opt.mean_std[0] 108 | std=opt.mean_std[1] 109 | 110 | new_img=torch.zeros(img.size()) 111 | for i in range(3): 112 | new_img[i]=img[i]*std[i]+mean[i] 113 | new_img*=255 114 | new_img=new_img.numpy() 115 | new_img=new_img.astype(np.uint8) 116 | new_img=new_img.transpose([1,2,0])# h,w,c 117 | new_img = cv2.cvtColor(new_img, cv2.COLOR_RGB2BGR) 118 | 119 | if not os.path.exists(os.path.join(file_dir,img_name)): 120 | try: 121 | cv2.imwrite(os.path.join(file_dir,img_name),new_img) 122 | except: 123 | pass 124 | 125 | den_map=(den_map-torch.min(den_map))/(torch.max(den_map)-torch.min(den_map)) 126 | den_map=den_map.unsqueeze(2)#h*w*1 127 | den_map=den_map.cpu().numpy()*255 128 | den_map=den_map.astype(np.uint8) 129 | vision_map=cv2.applyColorMap(den_map, cv2.COLORMAP_JET) 130 | try: 131 | cv2.imwrite(save_filename,vision_map) 132 | except: 133 | pass 134 | -------------------------------------------------------------------------------- /code/tools/progress/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2012 Giorgos Verigakis 2 | # 3 | # Permission to use, copy, modify, and distribute this software for any 4 | # purpose with or without fee is hereby granted, provided that the above 5 | # copyright notice and this permission notice appear in all copies. 6 | # 7 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | 15 | from __future__ import division, print_function 16 | 17 | from collections import deque 18 | from datetime import timedelta 19 | from math import ceil 20 | from sys import stderr 21 | try: 22 | from time import monotonic 23 | except ImportError: 24 | from time import time as monotonic 25 | 26 | 27 | __version__ = '1.5' 28 | 29 | HIDE_CURSOR = '\x1b[?25l' 30 | SHOW_CURSOR = '\x1b[?25h' 31 | 32 | 33 | class Infinite(object): 34 | file = stderr 35 | sma_window = 10 # Simple Moving Average window 36 | check_tty = True 37 | hide_cursor = True 38 | 39 | def __init__(self, message='', **kwargs): 40 | self.index = 0 41 | self.start_ts = monotonic() 42 | self.avg = 0 43 | self._avg_update_ts = self.start_ts 44 | self._ts = self.start_ts 45 | self._xput = deque(maxlen=self.sma_window) 46 | for key, val in kwargs.items(): 47 | setattr(self, key, val) 48 | 49 | self._width = 0 50 | self.message = message 51 | 52 | if self.file and self.is_tty(): 53 | if self.hide_cursor: 54 | print(HIDE_CURSOR, end='', file=self.file) 55 | print(self.message, end='', file=self.file) 56 | self.file.flush() 57 | 58 | def __getitem__(self, key): 59 | if key.startswith('_'): 60 | return None 61 | return getattr(self, key, None) 62 | 63 | @property 64 | def elapsed(self): 65 | return int(monotonic() - self.start_ts) 66 | 67 | @property 68 | def elapsed_td(self): 69 | return timedelta(seconds=self.elapsed) 70 | 71 | def update_avg(self, n, dt): 72 | if n > 0: 73 | xput_len = len(self._xput) 74 | self._xput.append(dt / n) 75 | now = monotonic() 76 | # update when we're still filling _xput, then after every second 77 | if (xput_len < self.sma_window or 78 | now - self._avg_update_ts > 1): 79 | self.avg = sum(self._xput) / len(self._xput) 80 | self._avg_update_ts = now 81 | 82 | def update(self): 83 | pass 84 | 85 | def start(self): 86 | pass 87 | 88 | def clearln(self): 89 | if self.file and self.is_tty(): 90 | print('\r\x1b[K', end='', file=self.file) 91 | 92 | def write(self, s): 93 | if self.file and self.is_tty(): 94 | line = self.message + s.ljust(self._width) 95 | print('\r' + line, end='', file=self.file) 96 | self._width = max(self._width, len(s)) 97 | self.file.flush() 98 | 99 | def writeln(self, line): 100 | if self.file and self.is_tty(): 101 | self.clearln() 102 | print(line, end='', file=self.file) 103 | self.file.flush() 104 | 105 | def finish(self): 106 | if self.file and self.is_tty(): 107 | print(file=self.file) 108 | if self.hide_cursor: 109 | print(SHOW_CURSOR, end='', file=self.file) 110 | 111 | def is_tty(self): 112 | try: 113 | return self.file.isatty() if self.check_tty else True 114 | except AttributeError: 115 | raise AttributeError('\'{}\' object has no attribute \'isatty\'. Try setting parameter check_tty=False.'.format(self)) 116 | 117 | def next(self, n=1): 118 | now = monotonic() 119 | dt = now - self._ts 120 | self.update_avg(n, dt) 121 | self._ts = now 122 | self.index = self.index + n 123 | self.update() 124 | 125 | def iter(self, it): 126 | with self: 127 | for x in it: 128 | yield x 129 | self.next() 130 | 131 | def __enter__(self): 132 | self.start() 133 | return self 134 | 135 | def __exit__(self, exc_type, exc_val, exc_tb): 136 | self.finish() 137 | 138 | 139 | class Progress(Infinite): 140 | def __init__(self, *args, **kwargs): 141 | super(Progress, self).__init__(*args, **kwargs) 142 | self.max = kwargs.get('max', 100) 143 | 144 | @property 145 | def eta(self): 146 | return int(ceil(self.avg * self.remaining)) 147 | 148 | @property 149 | def eta_td(self): 150 | return timedelta(seconds=self.eta) 151 | 152 | @property 153 | def percent(self): 154 | return self.progress * 100 155 | 156 | @property 157 | def progress(self): 158 | return min(1, self.index / self.max) 159 | 160 | @property 161 | def remaining(self): 162 | return max(self.max - self.index, 0) 163 | 164 | def start(self): 165 | self.update() 166 | 167 | def goto(self, index): 168 | incr = index - self.index 169 | self.next(incr) 170 | 171 | def iter(self, it): 172 | try: 173 | self.max = len(it) 174 | except TypeError: 175 | pass 176 | 177 | with self: 178 | for x in it: 179 | yield x 180 | self.next() 181 | -------------------------------------------------------------------------------- /code/datasets/SHA_test.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import numpy as np 4 | from torch.utils import data 5 | import torch 6 | import random 7 | import torchvision.transforms as transforms 8 | from torch.utils.data import DataLoader 9 | from scipy import sparse 10 | import scipy 11 | import torch.nn.functional as F 12 | import math 13 | import cv2 14 | from tools.progress.bar import Bar 15 | import pickle 16 | import json 17 | import pdb 18 | import torch.nn as nn 19 | from torch.autograd import Variable 20 | import math 21 | from torch.utils.data.distributed import DistributedSampler 22 | from torch.nn.parallel import DistributedDataParallel 23 | 24 | 25 | class Gaussian(nn.Module): 26 | def __init__(self, in_channels, sigmalist, kernel_size=64, stride=1, padding=0, froze=True): 27 | super(Gaussian, self).__init__() 28 | out_channels = len(sigmalist) * in_channels 29 | # gaussian kernel 30 | mu = kernel_size // 2 31 | gaussFuncTemp = lambda x: (lambda sigma: math.exp(-(x - mu) ** 2 / float(2 * sigma ** 2))) 32 | gaussFuncs = [gaussFuncTemp(x) for x in range(kernel_size)] 33 | windows = [] 34 | for sigma in sigmalist: 35 | gauss = torch.Tensor([gaussFunc(sigma) for gaussFunc in gaussFuncs]) 36 | gauss /= gauss.sum() 37 | _1D_window = gauss.unsqueeze(1) 38 | _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0) 39 | window = Variable(_2D_window.expand(in_channels, 1, kernel_size, kernel_size).contiguous()) 40 | windows.append(window) 41 | kernels = torch.stack(windows) 42 | kernels = kernels.permute(1, 0, 2, 3, 4) 43 | weight = kernels.reshape(out_channels, in_channels, kernel_size, kernel_size) 44 | 45 | self.gkernel = nn.Conv2d(in_channels, out_channels, kernel_size, stride=stride, padding=padding, groups=in_channels, bias=False) 46 | self.gkernel.weight = torch.nn.Parameter(weight) 47 | # # Froze this Gaussian net 48 | if froze: self.frozePara() 49 | 50 | def forward(self, dotmaps): 51 | gaussianmaps = self.gkernel(dotmaps) 52 | return gaussianmaps 53 | 54 | def frozePara(self): 55 | for para in self.parameters(): 56 | para.requires_grad = False 57 | 58 | class Gaussianlayer(nn.Module): 59 | def __init__(self, sigma=None, kernel_size=15): 60 | super(Gaussianlayer, self).__init__() 61 | if sigma == None: 62 | sigma = [4] 63 | # sigma = [kernel_size * 0.3] 64 | self.gaussian = Gaussian(1, sigma, kernel_size=kernel_size, padding=kernel_size // 2, froze=True) 65 | 66 | def forward(self, dotmaps): 67 | denmaps = self.gaussian(dotmaps) 68 | return denmaps 69 | 70 | class gen_den_map(nn.Module): 71 | def __init__(self,sigma,kernel_size): 72 | super(gen_den_map, self).__init__() 73 | self.gs = Gaussianlayer(sigma=[sigma],kernel_size=kernel_size) 74 | 75 | def forward(self, dot_map): 76 | # b*1*h*w 77 | gt_map = self.gs(dot_map) 78 | return gt_map 79 | 80 | def sha_sort_img(filename): 81 | return int(filename.split('_')[1].split('.')[0]) 82 | 83 | class SHA_dataloader(data.Dataset): 84 | def __init__(self,split,opt): 85 | self.split=split 86 | self.opt=opt 87 | self.mean=opt.mean_std[0] 88 | self.std=opt.mean_std[1] 89 | 90 | self.gen_map=gen_den_map(opt.sigma, opt.kernel_size) 91 | 92 | self.img_root=os.path.join(opt.dataroot_SHA,'val','pre_load_img') 93 | 94 | imgfiles=[filename for filename in os.listdir(self.img_root) \ 95 | if os.path.isfile(os.path.join(self.img_root,filename)) and filename.split('.')[1] in ['jpg','png']] 96 | imgfiles.sort(key=sha_sort_img) 97 | 98 | with open(os.path.join(os.path.join(opt.dataroot_SHA,'{}_dot_pre_load_img.json'.format(self.split))),'r') as f: 99 | self.points_data=json.load(f) 100 | self.imgfiles=imgfiles 101 | self.gray_list=[] 102 | print('SHA test {}'.format(len(self.imgfiles))) 103 | 104 | def __getitem__(self,index): 105 | img_file=self.imgfiles[index] 106 | img_path=os.path.join(self.img_root,img_file) 107 | ann_point=self.points_data[img_file] 108 | gray=index in self.gray_list 109 | 110 | img=cv2.imread(img_path) 111 | 112 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 113 | 114 | img=img.transpose([2,0,1])# c h w 115 | img=torch.from_numpy(img).float() 116 | img=img.div(255) 117 | for t, m, s in zip(img, self.mean, self.std): 118 | t.sub_(m).div_(s) 119 | 120 | src_h,src_w=img.size(1),img.size(2) 121 | 122 | scale_factor=1.0 123 | 124 | h=int(src_h*scale_factor) 125 | h=h if h%self.opt.model_scale_factor==0 else h+self.opt.model_scale_factor-h%self.opt.model_scale_factor 126 | w=int(src_w*scale_factor) 127 | w=w if w%self.opt.model_scale_factor==0 else w+self.opt.model_scale_factor-w%self.opt.model_scale_factor 128 | size=(h,w) 129 | scale_factor_h=h/src_h 130 | scale_factor_w=w/src_w 131 | if scale_factor_h==1. and scale_factor_w==1.: 132 | pass 133 | else: 134 | img = F.interpolate(img.unsqueeze(0),size=size,mode=self.opt.img_interpolate_mode,align_corners = True) 135 | img = img.squeeze(0) 136 | 137 | den=torch.zeros(h,w) 138 | 139 | cnt=0 140 | for i in range(len(ann_point)): 141 | y=int((ann_point[i][0])*scale_factor_h) 142 | x=int((ann_point[i][1])*scale_factor_w) 143 | den[y,x]+=1. 144 | cnt+=1 145 | den=self.gen_map(den.unsqueeze(0).unsqueeze(0)) 146 | den*=self.opt.gt_factor 147 | den=den.squeeze() 148 | 149 | info={'dataset':'SHA_test','img_file':img_file,'img_path':img_path,'gt_cnt':cnt} 150 | 151 | return img,den,info 152 | 153 | def __len__(self): 154 | return len(self.imgfiles) 155 | 156 | def SHA_test(opt): 157 | 158 | data_test=SHA_dataloader('val',opt) 159 | 160 | test_loader = DataLoader(data_test, batch_size=opt.test_batch_size, num_workers=opt.num_workers,collate_fn=data_collate,shuffle=False, 161 | worker_init_fn=np.random.seed(opt.seed)) 162 | 163 | return test_loader,data_test 164 | 165 | def data_collate(data): 166 | img,den,info= zip(*data) 167 | return img,den,info 168 | -------------------------------------------------------------------------------- /code/models/VGG_16_deconv_Fine_grained_DA_test.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | from torchvision import models 5 | import numpy as np 6 | import cv2 7 | import random 8 | import torch.backends.cudnn as cudnn 9 | import os 10 | from tools.log import AverageMeter 11 | from vision import save_keypoints_img,save_img_tensor,save_keypoints_and_img 12 | import pdb 13 | import time 14 | 15 | class Conv2d(nn.Module): 16 | def __init__(self, in_channels, out_channels, kernel_size, stride=1, NL='relu', same_padding=False, bn=False, dilation=1): 17 | super(Conv2d, self).__init__() 18 | padding = int((kernel_size - 1) // 2) if same_padding else 0 19 | self.conv = [] 20 | if dilation==1: 21 | self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding=padding, dilation=dilation) 22 | else: 23 | self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding=dilation, dilation=dilation) 24 | self.bn = nn.BatchNorm2d(out_channels) if bn else None 25 | if NL == 'relu' : 26 | self.relu = nn.ReLU(inplace=True) 27 | elif NL == 'prelu': 28 | self.relu = nn.PReLU() 29 | else: 30 | self.relu = None 31 | 32 | def forward(self, x): 33 | x = self.conv(x) 34 | if self.bn is not None: 35 | x = self.bn(x) 36 | if self.relu is not None: 37 | x = self.relu(x) 38 | return x 39 | 40 | 41 | 42 | class _GradientScalarLayer(torch.autograd.Function): 43 | @staticmethod 44 | def forward(ctx, input, weight): 45 | ctx.weight = weight 46 | return input.view_as(input) 47 | 48 | @staticmethod 49 | def backward(ctx, grad_output): 50 | grad_input = grad_output.clone() 51 | return ctx.weight*grad_input, None 52 | 53 | gradient_scalar = _GradientScalarLayer.apply 54 | 55 | 56 | class GradientScalarLayer(torch.nn.Module): 57 | def __init__(self, weight): 58 | super(GradientScalarLayer, self).__init__() 59 | self.weight = weight 60 | 61 | def forward(self, input): 62 | return gradient_scalar(input, self.weight) 63 | 64 | def __repr__(self): 65 | tmpstr = self.__class__.__name__ + "(" 66 | tmpstr += "weight=" + str(self.weight) 67 | tmpstr += ")" 68 | return tmpstr 69 | 70 | class BasicDeconv(nn.Module): 71 | def __init__(self, in_channels, out_channels, kernel_size, stride=1, use_bn=False): 72 | super(BasicDeconv, self).__init__() 73 | self.use_bn = use_bn 74 | self.tconv = nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=stride, bias=not self.use_bn) 75 | self.bn = nn.BatchNorm2d(out_channels, affine=True) if self.use_bn else None 76 | 77 | def forward(self, x): 78 | # pdb.set_trace() 79 | x = self.tconv(x) 80 | if self.use_bn: 81 | x = self.bn(x) 82 | return F.relu(x, inplace=True) 83 | 84 | 85 | class den_level_Discriminator(nn.Module): 86 | def __init__(self, input_nc, ndf=512, num_classes=1,opt=None): 87 | super(den_level_Discriminator, self).__init__() 88 | self.grl=GradientScalarLayer(opt.gradient_scalar) 89 | 90 | self.D = nn.Sequential( 91 | nn.Conv2d(input_nc, ndf, kernel_size=3, stride=1, padding=1), 92 | nn.LeakyReLU(negative_slope=0.2, inplace=True), 93 | nn.Conv2d(ndf, ndf//2, kernel_size=3, stride=1, padding=1), 94 | nn.LeakyReLU(negative_slope=0.2, inplace=True) 95 | ) 96 | self.cls = nn.Conv2d(ndf//2, num_classes, kernel_size=3, stride=1, padding=1) 97 | 98 | def forward(self, x, size=None): 99 | x=self.grl(x) 100 | out = self.D(x) 101 | out = self.cls(out) 102 | if size is not None: 103 | out = F.interpolate(out, size=size, mode='bilinear', align_corners=True) 104 | return out 105 | 106 | 107 | 108 | class VGG_16_deconv_Fine_grained_DA_test(nn.Module): 109 | def __init__(self, opt): 110 | super(VGG_16_deconv_Fine_grained_DA_test, self).__init__() 111 | self.gradient_scalar=opt.gradient_scalar 112 | self.opt=opt 113 | self.step_epoch=0 114 | 115 | vgg = models.vgg16(pretrained=False) 116 | 117 | features = list(vgg.features.children()) 118 | 119 | 120 | self.backbone = nn.Sequential(*features[0:23]) 121 | 122 | self.den_pred = nn.Sequential( 123 | Conv2d(512, 128, 3, same_padding=True, bn=True, NL='relu'), 124 | BasicDeconv(128, 128, 2, 2, True), 125 | Conv2d(128, 64, 3, same_padding=True, bn=True, NL='relu'), 126 | BasicDeconv(64, 64, 2, 2, True), 127 | Conv2d(64, 32, 3, same_padding=True, bn=True, NL='relu'), 128 | BasicDeconv(32, 32, 2, 2, True), 129 | Conv2d(32, 1, 1, same_padding=True, NL=''), 130 | nn.ReLU(inplace=True), 131 | ) 132 | self.domain_cls=den_level_Discriminator(512,512,len(self.opt.split_den_level)-1,opt) 133 | 134 | def next_epoch(self): 135 | self.test_reset() 136 | 137 | def test_reset(self): 138 | self.mae=AverageMeter() 139 | self.mse=AverageMeter() 140 | if 'WE' in self.opt.tar_dataset: 141 | self.mae1=AverageMeter() 142 | self.mae2=AverageMeter() 143 | self.mae3=AverageMeter() 144 | self.mae4=AverageMeter() 145 | self.mae5=AverageMeter() 146 | 147 | def get_test_res(self): 148 | res={} 149 | res['mae']=self.mae.avg 150 | res['mse']=self.mse.avg**0.5 151 | 152 | if 'WE' in self.opt.tar_dataset: 153 | res['mae1']=self.mae1.avg 154 | res['mae2']=self.mae2.avg 155 | res['mae3']=self.mae3.avg 156 | res['mae4']=self.mae4.avg 157 | res['mae5']=self.mae5.avg 158 | 159 | return res 160 | 161 | 162 | def inference(self,data,search_time,epoch,global_step,step,vision_list,batch_num_each_epoch,domain,logger): 163 | batch=len(data[0]) 164 | for i in range(batch): 165 | c,h,w=data[0][i].size() 166 | x=self.backbone(data[0][i].unsqueeze(0).cuda()) 167 | den_map=self.den_pred(x) 168 | sum_map=torch.sum(den_map[i].detach().cpu())/self.opt.gt_factor 169 | 170 | self.mae.update(abs(sum_map-data[2][i]['gt_cnt'])) 171 | self.mse.update((abs(sum_map-data[2][i]['gt_cnt'])**2)) 172 | 173 | if step in vision_list and i==0: 174 | video_name=os.path.basename(data[2][i]['dataset']) 175 | img_name=data[2][i]['img_file'] 176 | 177 | save_root=os.path.join(self.opt.log_root_path,'test',str(epoch),data[2][i]['dataset']) 178 | 179 | save_filename=os.path.join(save_root,video_name+'gt_point_',img_name.split('.')[0]+'_cnt_'+str(data[2][i]['gt_cnt'])+'.'+img_name.split('.')[1]) 180 | save_keypoints_and_img(data[0][i],data[1][i], self.opt, save_filename,img_name) 181 | save_filename=os.path.join(save_root,video_name+'out_point_',img_name.split('.')[0]+'_cnt_'+str(sum_map)+'.'+img_name.split('.')[1]) 182 | save_keypoints_and_img(data[0][i],den_map[0,0].detach().cpu(), self.opt, save_filename,img_name) 183 | 184 | res=self.get_test_res() 185 | return res 186 | 187 | 188 | -------------------------------------------------------------------------------- /code/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch.nn as nn 3 | def accuracy(output, target, topk=(1,)): 4 | maxk = max(topk) 5 | batch_size = target.size(0) 6 | 7 | _, pred = output.topk(maxk, 1, True, True) 8 | pred = pred.t() 9 | correct = pred.eq(target.view(1, -1).expand_as(pred)) 10 | 11 | res = [] 12 | for k in topk: 13 | correct_k = correct[:k].view(-1).float().sum(0) 14 | res.append(correct_k.mul_(100.0/batch_size)) 15 | return res 16 | 17 | def get_one_arch( 18 | num_pool_layers=5, 19 | num_pool_operations=2, 20 | num_other_operations=2, 21 | num_search_layer=12): 22 | pool_op=np.random.randint(0,num_pool_operations,num_pool_layers) 23 | other_op=np.random.randint(num_pool_operations,num_pool_operations+num_other_operations,num_search_layer-num_pool_layers) 24 | arch=np.concatenate([pool_op,other_op]) 25 | np.random.shuffle(arch) 26 | return arch.tolist()#list 27 | 28 | 29 | def generate_archs(n=100, 30 | num_pool_layers=5, 31 | num_pool_operations=2, 32 | num_other_operations=2, 33 | num_search_layer=12): 34 | archs=[] 35 | archs=[get_one_arch(num_pool_layers,num_pool_operations,num_other_operations,num_search_layer) for i in range(n)] 36 | return archs 37 | 38 | def arch_to_seq(arch): 39 | seq=list(map(lambda x:x+1,arch)) 40 | return seq 41 | def seq_to_arch(seq): 42 | archs=list(map(lambda x: x-1, seq)) 43 | return archs 44 | 45 | def count_parameters_in_MB(model): 46 | return np.sum(np.prod(v.size()) for name, v in model.named_parameters() if "auxiliary" not in name)/1e6 47 | 48 | def sample_arch(arch_pool, prob=None): 49 | N = len(arch_pool) 50 | indices = [i for i in range(N)] 51 | if prob is not None: 52 | prob = np.array(prob, dtype=np.float32) 53 | prob = prob / prob.sum() 54 | index = np.random.choice(indices, p=prob) 55 | else: 56 | index = np.random.choice(indices) 57 | arch = arch_pool[index] 58 | return arch 59 | 60 | 61 | class earlystop(): 62 | def __init__(self, 63 | min_delta=0, 64 | patience=5): 65 | self.best_loss=[1e15] 66 | self.patience=patience 67 | self.min_delta=min_delta 68 | self.wait=0 69 | self.stopped_flag = False 70 | self.start_flag=False 71 | 72 | def check(self,current_loss): 73 | if len(current_loss)>1 and not self.start_flag: 74 | self.best_loss=[1e15 for i in range(len(current_loss))] 75 | self.start_flag=True 76 | 77 | judge=((np.array(self.best_loss)-np.array(current_loss))-self.min_delta)>0 78 | 79 | if judge.any(): 80 | self.best_loss = np.where(judge,np.array(current_loss),np.array(self.best_loss)).tolist() 81 | self.wait=0 82 | else: 83 | self.wait += 1 84 | if self.wait >= self.patience: 85 | self.stopped_flag = True 86 | 87 | 88 | class lr_decay(): 89 | def __init__(self, 90 | lr_decay_factor, 91 | min_lr, 92 | min_delta=0, 93 | patience=5 94 | ): 95 | self.best_loss=[1e15] 96 | self.lr_decay_factor=lr_decay_factor 97 | self.patience=patience 98 | self.min_delta=min_delta 99 | self.min_lr=min_lr 100 | self.wait=0 101 | self.decay_flag = False 102 | self.start_flag=False 103 | 104 | def check(self,current_loss,current_lr): 105 | 106 | if len(current_loss)>1 and not self.start_flag: 107 | self.best_loss=[1e15 for i in range(len(current_loss))] 108 | self.start_flag=True 109 | 110 | judge=((np.array(self.best_loss)-np.array(current_loss))-self.min_delta)>0 111 | 112 | if judge.any(): 113 | self.best_loss = np.where(judge,np.array(current_loss),np.array(self.best_loss)).tolist() 114 | self.wait=0 115 | else: 116 | self.wait += 1 117 | if self.wait >= self.patience and current_lr*self.lr_decay_factor>=self.min_lr: 118 | self.decay_flag = True 119 | self.wait=0 120 | 121 | 122 | 123 | class AverageMeter_array(object): 124 | """Computes and stores the average and current value""" 125 | 126 | def __init__(self,save_len): 127 | self.save_len=save_len 128 | self.reset() 129 | 130 | def reset(self): 131 | self.val = np.zeros([self.save_len]) 132 | self.avg = np.zeros([self.save_len]) 133 | self.sum = np.zeros([self.save_len]) 134 | self.count = np.zeros([self.save_len]) 135 | 136 | def update(self, val): 137 | if len(val.shape)==2: 138 | n,l=val.shape 139 | elif len(val.shape)==1: 140 | val=val[np.newaxis,:] 141 | n,l=val.shape 142 | assert l==self.save_len 143 | self.val = val 144 | for i in range(self.save_len): 145 | self.sum[i]+= np.sum(val[:,i]) 146 | self.count[i] += n 147 | self.avg = self.sum / self.count 148 | 149 | class AverageMeter_acc_map(object): 150 | """Computes and stores the average and current value""" 151 | 152 | def __init__(self,save_len): 153 | self.save_len=save_len 154 | self.reset() 155 | 156 | def reset(self): 157 | self.avg = np.zeros([self.save_len]) 158 | self.sum = np.zeros([self.save_len]) 159 | self.count = np.zeros([self.save_len]) 160 | 161 | def update(self, pred,gt): 162 | # pred , gt b*save_len*h*w np.array 163 | if len(pred.shape)==4: 164 | batch=pred.shape[0] 165 | for i in range(self.save_len): 166 | if np.sum(gt[:,i,:])>0: 167 | self.sum[i]+=batch*np.sum(np.logical_and(pred[:,i,:],gt[:,i,:]))/np.sum(gt[:,i,:])*100 168 | 169 | self.count+=batch 170 | self.avg = self.sum / self.count 171 | elif len(pred.shape)==3: 172 | #b*h*w 173 | batch=pred.shape[0] 174 | for i in range(self.save_len): 175 | if np.sum(gt[:,i,:])>0: 176 | self.sum[i]+=batch*np.sum(np.logical_and(pred==i,gt[:,i,:]))/np.sum(gt[:,i,:])*100 177 | self.count+=batch 178 | self.avg = self.sum / self.count 179 | 180 | 181 | 182 | class AverageMeter_array_mask(object): 183 | """Computes and stores the average and current value""" 184 | 185 | def __init__(self,save_len): 186 | self.save_len=save_len 187 | self.reset() 188 | 189 | def reset(self): 190 | self.val = np.zeros([self.save_len]) 191 | self.avg = np.zeros([self.save_len]) 192 | self.sum = np.zeros([self.save_len]) 193 | self.count = np.zeros([self.save_len]) 194 | 195 | def update(self, val,mask): 196 | assert val.shape==mask.shape 197 | if len(val.shape)==2: 198 | n,l=val.shape 199 | elif len(val.shape)==1: 200 | val=val[np.newaxis,:] 201 | mask=mask[np.newaxis,:] 202 | n,l=val.shape 203 | assert l==self.save_len 204 | self.val = val 205 | for i in range(n): 206 | for j in range(self.save_len): 207 | if mask[i,j]: 208 | self.sum[j]+= val[i,j] 209 | self.count[j] += 1 210 | self.avg[j]=self.sum[j] / self.count[j] 211 | 212 | 213 | 214 | 215 | if __name__ == '__main__': 216 | archs=generate_archs(n=1000, 217 | num_pool_layers=5, 218 | num_pool_operations=2, 219 | num_other_operations=2, 220 | num_search_layer=12) 221 | encoder_input_=list(map(lambda x:arch_to_seq(x),archs)) 222 | arch_=list(map(lambda x:seq_to_arch(x),encoder_input_)) 223 | print(encoder_input_[0]) 224 | print(arch_[0]) -------------------------------------------------------------------------------- /code/tools/godblessdbg.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import print_function 3 | sparkydog = r''' 4 | -os+` 5 | `hmmds------------------------------------. 6 | -oymddddddddddddddddddddddddddddddddddddd+ 7 | :dmmmmmmmmmd+///////////////////////hmm+ 8 | `smmmmmmmmd+ -::::. ymm+ 9 | `ydmmmdds: :/sy/` ..` ymm+ 10 | `odmdy-` `` /ddy. ymm+ 11 | -sddho-` .odmh: ymm+ 12 | ./` `-ohddhs/-.`` ``-/sddds. ymm+ 13 | odh+. `:oyddddhhhhhhdddho---. ymm+ 14 | `ymmdho. `.:/oosssso+/-` `hdd- ymm+ 15 | `ymmhddds-----------------` `hmdy. ymm+ 16 | +dmy:odmddddddddddddddddd/ smmdho:-ymm+ 17 | `ymdo`./++++++++++++++hmd/ /dmdhddddmm+ 18 | .sddy: ymd/ `hmdo-:++++- 19 | `+dmh- -/: ` ymd/ :dmh. 20 | +dmds/--::-/sy/` ymd/ odmy. 21 | .oyddddddddhyo` ymd/ `sdmy. 22 | `.:/+++/-.` ymd/ `odmh- 23 | /ss/ ymd/ /dmd+` ```````` 24 | ommo ymd/ -yddy:` /yhhhhhhy. 25 | `smmo ymd/ `/hddy/` /dmdyydmd- 26 | :sddd+ ymd/ ...` `/hddh+.` /dmy``ddd- 27 | `:- /dmh+-` ymd/ ydd/ `:sdmd+ /dmy ///` 28 | .sdds- `dmd- ymd+``ymd/ ommo /dmy 29 | .odmd`.dmd` -oo+`ymmhyydmd/ ommo /dmy 30 | .dmd`.dmd` /dmh`oyyyhhhhh/`````` ommo /dmy 31 | .dmd`.dmd` /dmh` ohhhhyyyyyyy` ommo /dmy 32 | .dmd`.dmd` /dmh` smmhssssssss` ommo +dmy 33 | .dmdsydmdssssssssydmh` smmy++++++++++++++++ymmyoymmy 34 | .hhhhhhhhhhhhhhhhhhdy` sddddddddddddddddddddddddddds 35 | `...........................` 36 | ''' 37 | 38 | godbless = r''' 39 | _____ ____ _____ ____ _ ______ _____ _____ _ _ 40 | / ____|/ __ \| __ \ | _ \| | | ____|/ ____/ ____| | | | | 41 | | | __| | | | | | | | |_) | | | |__ | (___| (___ | | | | 42 | | | |_ | | | | | | | | _ <| | | __| \___ \\___ \ | | | | 43 | | |__| | |__| | |__| | | |_) | |____| |____ ____) |___) | | |__| | 44 | \_____|\____/|_____/ |____/|______|______|_____/_____/ \____/ 45 | 46 | ''' 47 | 48 | warning = r''' 49 | 50 | ************************************************************** 51 | * * 52 | * .=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-. * 53 | * | ______ | * 54 | * | .-" "-. | * 55 | * | / \ | * 56 | * | _ | | _ | * 57 | * | ( \ |, .-. .-. ,| / ) | * 58 | * | > "=._ | )(__/ \__)( | _.=" < | * 59 | * | (_/"=._"=._ |/ /\ \| _.="_.="\_) | * 60 | * | "=._"(_ ^^ _)"_.=" | * 61 | * | "=\__|IIIIII|__/=" | * 62 | * | _.="| \IIIIII/ |"=._ | * 63 | * | _ _.="_.="\ /"=._"=._ _ | * 64 | * | ( \_.="_.=" `--------` "=._"=._/ ) | * 65 | * | > _.=" "=._ < | * 66 | * | (_/ \_) | * 67 | * | | * 68 | * '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=' * 69 | * * 70 | * LASCIATE OGNI SPERANZA, VOI CH'ENTRATE * 71 | ************************************************************** 72 | 73 | ''' 74 | 75 | dog1 = ''' 76 | 77 | * .,:,,, .::,,,::. 78 | * .::::,,;;, .,;;:,,....:i: 79 | * :i,.::::,;i:. ....,,:::::::::,.... .;i:,. ......;i. 80 | * :;..:::;::::i;,,:::;:,,,,,,,,,,..,.,,:::iri:. .,:irsr:,.;i. 81 | * ;;..,::::;;;;ri,,,. ..,,:;s1s1ssrr;,.;r, 82 | * :;. ,::;ii;:, . ................... .;iirri;;;,,;i, 83 | * ,i. .;ri:. ... ............................ .,,:;:,,,;i: 84 | * :s,.;r:... ....................................... .::;::s; 85 | * ,1r::. .............,,,.,,:,,........................,;iir; 86 | * ,s;........... ..::.,;:,,. ...............,;1s 87 | * :i,..,. .,:,,::,. .......... .......;1, 88 | * ir,....:rrssr;:, ,,.,::. .r5S9989398G95hr;. ....,.:s, 89 | * ;r,..,s9855513XHAG3i .,,,,,,,. ,S931,.,,.;s;s&BHHA8s.,..,..:r: 90 | * :r;..rGGh, :SAG;;G@BS:.,,,,,,,,,.r83: hHH1sXMBHHHM3..,,,,.ir. 91 | * ,si,.1GS, sBMAAX&MBMB5,,,,,,:,,.:&8 3@HXHBMBHBBH#X,.,,,,,,rr 92 | * ;1:,,SH: .A@&&B#&8H#BS,,,,,,,,,.,5XS, 3@MHABM&59M#As..,,,,:,is, 93 | * .rr,,,;9&1 hBHHBB&8AMGr,,,,,,,,,,,:h&&9s; r9&BMHBHMB9: . .,,,,;ri. 94 | * :1:....:5&XSi;r8BMBHHA9r:,......,,,,:ii19GG88899XHHH&GSr. ...,:rs. 95 | * ;s. .:sS8G8GG889hi. ....,,:;:,.:irssrriii:,. ...,,i1, 96 | * ;1, ..,....,,isssi;, .,,. ....,.i1, 97 | * ;h: i9HHBMBBHAX9: . ...,,,rs, 98 | * ,1i.. :A#MBBBBMHB##s ....,,,;si. 99 | * .r1,.. ,..;3BMBBBHBB#Bh. .. ....,,,,,i1; 100 | * :h;.. .,..;,1XBMMMMBXs,.,, .. :: ,. ....,,,,,,ss. 101 | * ih: .. .;;;, ;;:s58A3i,.. ,. ,.:,,. ...,,,,,:,s1, 102 | * .s1,.... .,;sh, ,iSAXs;. ,. ,,.i85 ...,,,,,,:i1; 103 | * .rh: ... rXG9XBBM#M#MHAX3hss13&&HHXr .....,,,,,,,ih; 104 | * .s5: ..... i598X&&A&AAAAAA&XG851r: ........,,,,:,,sh; 105 | * . ihr, ... . .. ........,,,,,;11:. 106 | * ,s1i. ... ..,,,..,,,.,,.,,.,.. ........,,.,,.;s5i. 107 | * .:s1r,...................... ..............;shs, 108 | * . .:shr:. .... ..............,ishs. 109 | * .,issr;,... ...........................,is1s;. 110 | * .,is1si;:,....................,:;ir1sr;, 111 | * ..:isssssrrii;::::::;;iirsssssr;:.. 112 | * .,::iiirsssssssssrri;;:. 113 | 114 | ''' 115 | dog2 = r''' 116 | /** 117 | * ii. ;9ABH, 118 | * SA391, .r9GG35&G 119 | * &#ii13Gh; i3X31i;:,rB1 120 | * iMs,:,i5895, .5G91:,:;:s1:8A 121 | * 33::::,,;5G5, ,58Si,,:::,sHX;iH1 122 | * Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG 123 | * .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8 124 | * :SB9s:,............................,,,.,,,SASh53h,1G. 125 | * .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX, 126 | * ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi 127 | * i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1 128 | * 59;.....,. .,,,,,,,,,,,... .............,..:1;.:&s 129 | * s8,..;53S5S3s. .,,,,,,,.,.. i15S5h1:.........,,,..,,:99 130 | * 93.:39s:rSGB@A; ..,,,,..... .SG3hhh9G&BGi..,,,,,,,,,,,,.,83 131 | * G5.G8 9#@@@@@X. .,,,,,,..... iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh 132 | * Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX: 133 | * ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M; ....,,,,,,,,S8 134 | * X3 iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs ...,,,,,,,:Gs 135 | * r8, ,,,...,,,,,,,,,,..... ,h8XABMMHX3r. .,,,,,,,.rX: 136 | * :9, . .:,..,:;;;::,.,,,,,.. .,,. ..,,,,,,.59 137 | * .Si ,:.i8HBMMMMMB&5,.... . .,,,,,.sMr 138 | * SS :: h@@@@@@@@@@#; . ... . ..,,,,iM5 139 | * 91 . ;:.,1&@@@@@@MXs. . .,,:,:&S 140 | * hS .... .:;,,,i3MMS1;..,..... . . ... ..,:,.99 141 | * ,8; ..... .,:,..,8Ms:;,,,... .,::.83 142 | * s&: .... .sS553B@@HX3s;,. .,;13h. .:::&1 143 | * SXr . ...;s3G99XA&X88Shss11155hi. ,;:h&, 144 | * iH8: . .. ,;iiii;,::,,,,,. .;irHA 145 | * ,8X5; . ....... ,;iihS8Gi 146 | * 1831, .,;irrrrrs&@ 147 | * ;5A8r. .:;iiiiirrss1H 148 | * :X@H3s....... .,:;iii;iiiiirsrh 149 | * r#h:;,...,,.. .,,:;;;;;:::,... .:;;;;;;iiiirrss1 150 | * ,M8 ..,....,.....,,::::::,,... . .,;;;iiiiiirss11h 151 | * 8B;.,,,,,,,.,..... . .. .:;;;;iirrsss111h 152 | * i@5,:::,,,,,,,,.... . . .:::;;;;;irrrss111111 153 | * 9Bi,:,,,,...... ..r91;;;;;iirrsss1ss1111 154 | */ 155 | ''' 156 | keyboard = r''' 157 | ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ 158 | │Esc│ │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│ ┌┐ ┌┐ ┌┐ 159 | └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └┘ └┘ └┘ 160 | ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐ 161 | │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │ 162 | ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤ 163 | │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │ │ 164 | ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │ 165 | │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter │ │ 4 │ 5 │ 6 │ │ 166 | ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤ 167 | │ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │ 168 | ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││ 169 | │ Ctrl│ │Alt │ Space │ Alt│ │ │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │←─┘│ 170 | └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘ 171 | 172 | ''' 173 | 174 | pikachu = r''' 175 | 176 | quu..__ 177 | $$$b `---.__ 178 | "$$b `--. ___.---uuudP 179 | `$$b `.__.------.__ __.---' $$$$" . 180 | "$b -' `-.-' $$$" .'| 181 | ". d$" _.' | 182 | `. / ..." .' | 183 | `./ ..::-' _.' | 184 | / .:::-' .-' .' 185 | : ::''\ _.' | 186 | .' .-. .-. `. .' | 187 | : /'$$| .@"$\ `. .' _.-' 188 | .'|$u$$| |$$,$$| | < _.-' 189 | | `:$$:' :$$$$$: `. `. .-' 190 | : `"--' | `-. \ 191 | :##. == .###. `. `. `\ 192 | |##: :###: | > > 193 | |#' `..'`..' `###' x: / / 194 | \ xXX| / ./ 195 | \ xXXX'| / ./ 196 | /`-. `. / / 197 | : `- ..........., | / .' 198 | | ``:::::::' . |< `. 199 | | ``` | x| \ `.:``. 200 | | .' /' xXX| `:`M`M':. 201 | | | ; /:' xXXX'| -'MMMMM:' 202 | `. .' : /:' |-'MMMM.-' 203 | | | .' /' .'MMM.-' 204 | `'`' : ,' |MMM< 205 | | `' |tbap\ 206 | \ :MM.-' 207 | \ | .'' 208 | \. `. / 209 | / .:::::::.. : / 210 | | .:::::::::::`. / 211 | | .:::------------\ / 212 | / .'' >::' / 213 | `',: : .' 214 | `:.:' 215 | 216 | 217 | ''' 218 | dragon = r''' 219 | 220 | 221 | __----~~~~~~~~~~~------___ 222 | . . ~~//====...... __--~ ~~ 223 | -. \_|// |||\\ ~~~~~~::::... /~ 224 | ___-==_ _-~o~ \/ ||| \\ _/~~- 225 | __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~ 226 | _-~~ .=~ | \\-_ '-~7 /- / || \ / 227 | .~ .~ | \\ -_ / /- / || \ / 228 | / ____ / | \\ ~-_/ /|- _/ .|| \ / 229 | |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\ 230 | ' ~-| /| |-~\~~ __--~~ 231 | |-~~-_/ | | ~\_ _-~ /\ 232 | / \ \__ \/~ \__ 233 | _--~ _/ | .-~~____--~-/ ~~==. 234 | ((->/~ '.|||' -_| ~~-/ , . _|| 235 | -_ ~\ ~~---l__i__i__i--~~_/ 236 | _-~-__ ~) \--______________--~~ 237 | //.-~~~-~_--~- |-------~~~~~~~~ 238 | //.-~~~--\ 239 | ''' 240 | 241 | begin = r''' 242 | .______ _______ _______ __ .__ __. 243 | | _ \ | ____| / _____|| | | \ | | 244 | | |_) | | |__ | | __ | | | \| | 245 | | _ < | __| | | |_ | | | | . ` | 246 | | |_) | | |____ | |__| | | | | |\ | 247 | |______/ |_______| \______| |__| |__| \__| 248 | 249 | ''' 250 | 251 | end = r''' 252 | _______ .__ __. _______ 253 | | ____|| \ | | | \ 254 | | |__ | \| | | .--. | 255 | | __| | . ` | | | | | 256 | | |____ | |\ | | '--' | 257 | |_______||__| \__| |_______/ 258 | 259 | ''' 260 | 261 | if __name__ == '__main__': 262 | print(begin) 263 | --------------------------------------------------------------------------------