[{"data":1,"prerenderedAt":1935},["ShallowReactive",2],{"content-query-6tjXUYhBmp":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"cover":11,"type":12,"category":13,"body":14,"_type":1929,"_id":1930,"_source":1931,"_file":1932,"_stem":1933,"_extension":1934},"/technology-blogs/en/1711","en",false,"","Implementation of the YOLOv3 Object Detection Model (1)","In this blog, I'll introduce how to use the MindSpore framework to build a YOLOv3 object detection model, which is trained on data extracted from the PASCAL VOC 2012 dataset.","2022-07-13","https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2022/08/15/6a18520f72ac4d3596a65a84ec2c1685.png","technology-blogs","Developer Sharing",{"type":15,"children":16,"toc":1926},"root",[17,25,31,36,41,46,61,80,85,90,95,100,159,191,196,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,423,456,488,519,569,581,586,603,611,616,626,634,642,650,658,666,674,682,690,698,706,714,722,730,738,746,754,762,770,778,786,794,802,810,818,826,834,842,850,858,866,874,881,889,897,905,913,921,929,937,945,953,961,969,977,985,993,1001,1009,1016,1024,1031,1039,1047,1054,1061,1069,1076,1084,1091,1099,1107,1115,1123,1131,1138,1145,1153,1161,1168,1176,1184,1192,1200,1208,1216,1224,1232,1240,1248,1256,1264,1272,1279,1287,1295,1303,1311,1319,1327,1335,1342,1349,1357,1365,1373,1381,1389,1397,1404,1411,1419,1427,1435,1443,1451,1459,1466,1473,1481,1489,1497,1505,1513,1521,1528,1535,1543,1551,1559,1567,1575,1583,1591,1599,1607,1615,1623,1631,1639,1646,1654,1662,1670,1678,1686,1694,1702,1709,1717,1725,1733,1741,1749,1757,1765,1773,1781,1789,1797,1805,1813,1821,1829,1837,1845,1852,1860,1867,1875,1882,1890,1897,1905,1913,1921],{"type":18,"tag":19,"props":20,"children":22},"element","h1",{"id":21},"implementation-of-the-yolov3-object-detection-model-1",[23],{"type":24,"value":8},"text",{"type":18,"tag":26,"props":27,"children":28},"p",{},[29],{"type":24,"value":30},"In this blog, I'll introduce how to use the MindSpore framework to build a YOLOv3 object detection model, which is trained on data extracted from the PASCAL VOC 2012 (VOC2012 for short) dataset. I hope my practice would inspire you to contribute to the MindSpore community.",{"type":18,"tag":26,"props":32,"children":33},{},[34],{"type":24,"value":35},"1. Environment Setup",{"type":18,"tag":26,"props":37,"children":38},{},[39],{"type":24,"value":40},"l MindSpore 1.5 or 1.6",{"type":18,"tag":26,"props":42,"children":43},{},[44],{"type":24,"value":45},"l Hardware: GPU",{"type":18,"tag":26,"props":47,"children":48},{},[49,51,59],{"type":24,"value":50},"For details about how to prepare for the environment and upgrade MindSpore, visit ",{"type":18,"tag":52,"props":53,"children":57},"a",{"href":54,"rel":55},"https://www.mindspore.cn/install/en",[56],"nofollow",[58],{"type":24,"value":54},{"type":24,"value":60},".",{"type":18,"tag":26,"props":62,"children":63},{},[64,66,72,74,79],{"type":24,"value":65},"In my practice, the Notebook environment with an installed MindSpore, a V100-32 GB GPU, and an 8-core 64 GB CPU is used. To install the Notebook environment, log in to the ModelArts console and choose ",{"type":18,"tag":67,"props":68,"children":69},"strong",{},[70],{"type":24,"value":71},"DevEnviron",{"type":24,"value":73}," > ",{"type":18,"tag":67,"props":75,"children":76},{},[77],{"type":24,"value":78},"Notebook",{"type":24,"value":60},{"type":18,"tag":26,"props":81,"children":82},{},[83],{"type":24,"value":84},"2. Dataset Processing",{"type":18,"tag":26,"props":86,"children":87},{},[88],{"type":24,"value":89},"The VOC2012 dataset contains 20 detection classes, 5717 images for training and 5823 images for validation.",{"type":18,"tag":26,"props":91,"children":92},{},[93],{"type":24,"value":94},"2.1 Extracting Object Data and Clustering Bounding Boxes",{"type":18,"tag":26,"props":96,"children":97},{},[98],{"type":24,"value":99},"Extract images and traverse the bounding boxes both labeled as \"person\" from the dataset. Then, based on the lengths and widths of the bounding boxes, select nine clustering center points, whose coordinates are used to define the prior box size of YOLOv3.",{"type":18,"tag":26,"props":101,"children":102},{},[103,105,110,112,117,119,124,126,131,133,137,139,144,146,151,153,158],{"type":24,"value":104},"For details about the code, see the ",{"type":18,"tag":67,"props":106,"children":107},{},[108],{"type":24,"value":109},"\\choose_person",{"type":24,"value":111}," folder. Move the Python code in this folder to the ",{"type":18,"tag":67,"props":113,"children":114},{},[115],{"type":24,"value":116},"VOCtrainval_11-May-2012\\VOCdevkit",{"type":24,"value":118}," directory of the VOC2012 dataset. (The ",{"type":18,"tag":67,"props":120,"children":121},{},[122],{"type":24,"value":123},"VOC2012",{"type":24,"value":125}," folder that contains directories such as ",{"type":18,"tag":67,"props":127,"children":128},{},[129],{"type":24,"value":130},"ImageSets",{"type":24,"value":132}," also exists in ",{"type":18,"tag":67,"props":134,"children":135},{},[136],{"type":24,"value":116},{"type":24,"value":138},".) Then run ",{"type":18,"tag":67,"props":140,"children":141},{},[142],{"type":24,"value":143},"cluster.py",{"type":24,"value":145}," and ",{"type":18,"tag":67,"props":147,"children":148},{},[149],{"type":24,"value":150},"rand_choose.py",{"type":24,"value":152}," in sequence. For details, see ",{"type":18,"tag":67,"props":154,"children":155},{},[156],{"type":24,"value":157},"readme.txt",{"type":24,"value":60},{"type":18,"tag":26,"props":160,"children":161},{},[162,164,169,170,175,177,182,184,189],{"type":24,"value":163},"After the two Python programs are executed, TXT files similar to ",{"type":18,"tag":67,"props":165,"children":166},{},[167],{"type":24,"value":168},"train.txt",{"type":24,"value":145},{"type":18,"tag":67,"props":171,"children":172},{},[173],{"type":24,"value":174},"val.txt",{"type":24,"value":176}," in the ",{"type":18,"tag":67,"props":178,"children":179},{},[180],{"type":24,"value":181},"VOCtrainval_11-May-2012\\VOCdevkit\\VOC2012\\ImageSets\\Main\\",{"type":24,"value":183}," directory of the VOC2012 dataset are generated. Place them in the ",{"type":18,"tag":67,"props":185,"children":186},{},[187],{"type":24,"value":188},"Main\\",{"type":24,"value":190}," directory.",{"type":18,"tag":26,"props":192,"children":193},{},[194],{"type":24,"value":195},"2.2 Loading the Dataset",{"type":18,"tag":26,"props":197,"children":198},{},[199,201,206,208,213],{"type":24,"value":200},"MindSpore provides the ",{"type":18,"tag":67,"props":202,"children":203},{},[204],{"type":24,"value":205},"VOCDataset",{"type":24,"value":207}," API for loading the VOC2012 dataset. For details, see the documentation at the MindSpore official website. The following provides other methods to process and encapsulate it. (See ",{"type":18,"tag":67,"props":209,"children":210},{},[211],{"type":24,"value":212},"\\dataset\\voc2012_dataset.py",{"type":24,"value":214},".)",{"type":18,"tag":26,"props":216,"children":217},{},[218],{"type":24,"value":219},"\"\"\"Read the VOC2012 dataset\"\"",{"type":18,"tag":26,"props":221,"children":222},{},[223],{"type":24,"value":224},"import mindspore.dataset as ds",{"type":18,"tag":26,"props":226,"children":227},{},[228],{"type":24,"value":229},"import mindspore.dataset.vision.c_transforms as CV",{"type":18,"tag":26,"props":231,"children":232},{},[233],{"type":24,"value":234},"import cv2",{"type":18,"tag":26,"props":236,"children":237},{},[238],{"type":24,"value":239},"import numpy as np",{"type":18,"tag":26,"props":241,"children":242},{},[243],{"type":24,"value":244},"# Execute \\dataset\\transforms.py",{"type":18,"tag":26,"props":246,"children":247},{},[248],{"type":24,"value":249},"from transforms import reshape_fn, MultiScaleTrans",{"type":18,"tag":26,"props":251,"children":252},{},[253],{"type":24,"value":254},"def create_voc2012_dataset(config, cv_num):",{"type":18,"tag":26,"props":256,"children":257},{},[258],{"type":24,"value":259},"\"\"\"create VOC2012 dataset\"\"\"",{"type":18,"tag":26,"props":261,"children":262},{},[263],{"type":24,"value":264},"voc2012_dat = ds.VOCDataset(dataset_dir=config.data_path, task=\"Detection\", usage=config.data_usage,",{"type":18,"tag":26,"props":266,"children":267},{},[268],{"type":24,"value":269},"shuffle=config.data_training, num_parallel_workers=8)",{"type":18,"tag":26,"props":271,"children":272},{},[273],{"type":24,"value":274},"dataset_size = voc2012_dat.get_dataset_size()",{"type":18,"tag":26,"props":276,"children":277},{},[278],{"type":24,"value":279},"config.class_to_idx = voc2012_dat.get_class_indexing()",{"type":18,"tag":26,"props":281,"children":282},{},[283],{"type":24,"value":284},"cv2.setNumThreads(0)",{"type":18,"tag":26,"props":286,"children":287},{},[288],{"type":24,"value":289},"if config.data_training:",{"type":18,"tag":26,"props":291,"children":292},{},[293],{"type":24,"value":294},"multi_scale_trans = MultiScaleTrans(config, cv_num)",{"type":18,"tag":26,"props":296,"children":297},{},[298],{"type":24,"value":299},"dataset_input_column_names = [\"image\", \"bbox\", \"label\", \"truncate\", \"difficult\"]",{"type":18,"tag":26,"props":301,"children":302},{},[303],{"type":24,"value":304},"dataset_output_column_names = [\"image\", \"annotation\", \"bbox1\", \"bbox2\", \"bbox3\", \"gt_box1\", \"gt_box2\", \"gt_box3\"]",{"type":18,"tag":26,"props":306,"children":307},{},[308],{"type":24,"value":309},"voc2012_dat = voc2012_dat.map(operations=CV.Decode(), input_columns=[\"image\"])",{"type":18,"tag":26,"props":311,"children":312},{},[313],{"type":24,"value":314},"voc2012_dat = voc2012_dat.batch(config.batch_size, per_batch_map=multi_scale_trans, input_columns=dataset_input_column_names,",{"type":18,"tag":26,"props":316,"children":317},{},[318],{"type":24,"value":319},"output_columns=dataset_output_column_names, num_parallel_workers=8, drop_remainder=True)",{"type":18,"tag":26,"props":321,"children":322},{},[323],{"type":24,"value":324},"voc2012_dat = voc2012_dat.repeat(config.max_epoch-config.pretrained_epoch_num)",{"type":18,"tag":26,"props":326,"children":327},{},[328],{"type":24,"value":329},"else:",{"type":18,"tag":26,"props":331,"children":332},{},[333],{"type":24,"value":334},"img_id = np.array(range(0,dataset_size))",{"type":18,"tag":26,"props":336,"children":337},{},[338],{"type":24,"value":339},"img_id = img_id.reshape((-1,1))",{"type":18,"tag":26,"props":341,"children":342},{},[343],{"type":24,"value":344},"img_id = ds.GeneratorDataset(img_id, ['img_id'], shuffle=False)",{"type":18,"tag":26,"props":346,"children":347},{},[348],{"type":24,"value":349},"voc2012_dat = voc2012_dat.zip(img_id)",{"type":18,"tag":26,"props":351,"children":352},{},[353],{"type":24,"value":354},"compose_map_func = (lambda image, img_id: reshape_fn(image, img_id, config))",{"type":18,"tag":26,"props":356,"children":357},{},[358],{"type":24,"value":359},"voc2012_dat = voc2012_dat.map(operations=CV.Decode(), input_columns=[\"image\"], num_parallel_workers=8)",{"type":18,"tag":26,"props":361,"children":362},{},[363],{"type":24,"value":364},"voc2012_dat = voc2012_dat.map(operations=compose_map_func, input_columns=[\"image\", \"img_id\"],",{"type":18,"tag":26,"props":366,"children":367},{},[368],{"type":24,"value":369},"output_columns=[\"image\", \"image_shape\", \"img_id\"],",{"type":18,"tag":26,"props":371,"children":372},{},[373],{"type":24,"value":374},"column_order=[\"image\", \"image_shape\", \"img_id\"],",{"type":18,"tag":26,"props":376,"children":377},{},[378],{"type":24,"value":379},"num_parallel_workers=8)",{"type":18,"tag":26,"props":381,"children":382},{},[383],{"type":24,"value":384},"hwc_to_chw = CV.HWC2CHW()",{"type":18,"tag":26,"props":386,"children":387},{},[388],{"type":24,"value":389},"voc2012_dat = voc2012_dat.map(operations=hwc_to_chw, input_columns=[\"image\"], num_parallel_workers=8)",{"type":18,"tag":26,"props":391,"children":392},{},[393],{"type":24,"value":394},"voc2012_dat = voc2012_dat.batch(config.batch_size, drop_remainder=True)",{"type":18,"tag":26,"props":396,"children":397},{},[398],{"type":24,"value":399},"voc2012_dat = voc2012_dat.repeat(1)",{"type":18,"tag":26,"props":401,"children":402},{},[403],{"type":24,"value":404},"return voc2012_dat, dataset_size",{"type":18,"tag":26,"props":406,"children":407},{},[408,410,415,416,421],{"type":24,"value":409},"After the execution, ",{"type":18,"tag":67,"props":411,"children":412},{},[413],{"type":24,"value":414},"voc2012_dat",{"type":24,"value":145},{"type":18,"tag":67,"props":417,"children":418},{},[419],{"type":24,"value":420},"dataset_size",{"type":24,"value":422}," (indicating the number of images) are returned.",{"type":18,"tag":26,"props":424,"children":425},{},[426,428,433,435,440,442,447,449,454],{"type":24,"value":427},"For training (",{"type":18,"tag":67,"props":429,"children":430},{},[431],{"type":24,"value":432},"config.data_training==True",{"type":24,"value":434},"), the dataset needs to be combined into batches and returned as MindSpore tensors. This requires that images in a batch be reshaped to the same size. In addition, each input image needs to correspond to an output feature map with three scales, that is, ",{"type":18,"tag":67,"props":436,"children":437},{},[438],{"type":24,"value":439},"bbox1",{"type":24,"value":441},", ",{"type":18,"tag":67,"props":443,"children":444},{},[445],{"type":24,"value":446},"bbox2",{"type":24,"value":448},", and ",{"type":18,"tag":67,"props":450,"children":451},{},[452],{"type":24,"value":453},"bbox3",{"type":24,"value":455}," in the preceding script.",{"type":18,"tag":26,"props":457,"children":458},{},[459,461,466,468,473,475,480,482,487],{"type":24,"value":460},"The ",{"type":18,"tag":67,"props":462,"children":463},{},[464],{"type":24,"value":465},"create_voc2012_dataset",{"type":24,"value":467}," function maps the data of label bounding boxes in the dataset to the feature maps with specific scales based on the coordinates and size. This is performed by calculating the IoU of the label bounding boxes and the target prior box. The label bounding box with a larger IoU score corresponds to the prior box, and all label bounding boxes are stored in ",{"type":18,"tag":67,"props":469,"children":470},{},[471],{"type":24,"value":472},"gt_box",{"type":24,"value":474}," as tensors. For details, see the ",{"type":18,"tag":67,"props":476,"children":477},{},[478],{"type":24,"value":479},"_preprocess_true_boxes",{"type":24,"value":481}," function in ",{"type":18,"tag":67,"props":483,"children":484},{},[485],{"type":24,"value":486},"\\dataset\\transforms.py",{"type":24,"value":60},{"type":18,"tag":26,"props":489,"children":490},{},[491,493,497,499,504,506,510,512,518],{"type":24,"value":492},"Image augmentation needs to be performed on images used for training, including random resizing, flipping, rotation, cropping, translation, and color change. Positions of the corresponding label bounding boxes also need to be changed. Methods of these operations are stored in the ",{"type":18,"tag":67,"props":494,"children":495},{},[496],{"type":24,"value":486},{"type":24,"value":498}," file and finally conducted in ",{"type":18,"tag":67,"props":500,"children":501},{},[502],{"type":24,"value":503},"MultiScaleTrans",{"type":24,"value":505},". (The file content is slightly modified. For example, the format of the label bounding box [x y w h] read by ",{"type":18,"tag":67,"props":507,"children":508},{},[509],{"type":24,"value":205},{"type":24,"value":511}," is modified as [xmin ymin xmax ymax]. To obtain the source file, visit ",{"type":18,"tag":52,"props":513,"children":516},{"href":514,"rel":515},"https://gitee.com/mindspore/models/blob/r1.5/official/cv/yolov3_darknet53/src/transforms.py",[56],[517],{"type":24,"value":514},{"type":24,"value":60},{"type":18,"tag":26,"props":520,"children":521},{},[522,524,529,531,536,538,544,546,554,556,560,562,567],{"type":24,"value":523},"For testing, images also need to be combined into batches and reshaped to the same size. However, the original shape (",{"type":18,"tag":67,"props":525,"children":526},{},[527],{"type":24,"value":528},"image_shape",{"type":24,"value":530},") needs to be retained so that the coordinates obtained during model inference can be mapped to the original image. The value of ",{"type":18,"tag":67,"props":532,"children":533},{},[534],{"type":24,"value":535},"img_id",{"type":24,"value":537}," ranges from 0 to ",{"type":18,"tag":539,"props":540,"children":541},"em",{},[542],{"type":24,"value":543},"n -",{"type":24,"value":545}," 1 (",{"type":18,"tag":67,"props":547,"children":548},{},[549],{"type":18,"tag":539,"props":550,"children":551},{},[552],{"type":24,"value":553},"n",{"type":24,"value":555}," is the value of ",{"type":18,"tag":67,"props":557,"children":558},{},[559],{"type":24,"value":420},{"type":24,"value":561},"), indicating the row number of the TXT file (generated in section 2.1) to which ",{"type":18,"tag":67,"props":563,"children":564},{},[565],{"type":24,"value":566},"config.data_usage",{"type":24,"value":568}," points. In this way, the corresponding image can be accurately located.",{"type":18,"tag":26,"props":570,"children":571},{},[572,574,579],{"type":24,"value":573},"For details about the definition and setting of the ",{"type":18,"tag":67,"props":575,"children":576},{},[577],{"type":24,"value":578},"config",{"type":24,"value":580}," parameter, and the usage method of the dataset, see the followup description relating to model training and testing.",{"type":18,"tag":26,"props":582,"children":583},{},[584],{"type":24,"value":585},"3. Model Building",{"type":18,"tag":26,"props":587,"children":588},{},[589,591,601],{"type":24,"value":590},"This section is a reference of the content of the ",{"type":18,"tag":52,"props":592,"children":595},{"href":593,"rel":594},"https://gitee.com/mindspore/models/tree/r1.5/official/cv/yolov3_darknet53",[56],[596],{"type":18,"tag":67,"props":597,"children":598},{},[599],{"type":24,"value":600},"models",{"type":24,"value":602}," repository of MindSpore. DarkNet-53 is used as the backbone network of YOLOv3. The following figures show the structures of the DarkNet-53 and YOLOv3 models.",{"type":18,"tag":26,"props":604,"children":605},{},[606],{"type":18,"tag":607,"props":608,"children":610},"img",{"alt":7,"src":609},"https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2022/08/15/65a28e2a5f454e8ab75034545adc6e0a.png",[],{"type":18,"tag":26,"props":612,"children":613},{},[614],{"type":24,"value":615},"3.1 DarkNet-53",{"type":18,"tag":617,"props":618,"children":620},"pre",{"code":619},"\"\"\"YOLOv3 backbone: darknet53\"\"\"\n",[621],{"type":18,"tag":622,"props":623,"children":624},"code",{"__ignoreMap":7},[625],{"type":24,"value":619},{"type":18,"tag":617,"props":627,"children":629},{"code":628},"import mindspore.nn as nn\n",[630],{"type":18,"tag":622,"props":631,"children":632},{"__ignoreMap":7},[633],{"type":24,"value":628},{"type":18,"tag":617,"props":635,"children":637},{"code":636},"from mindspore.ops import operations as P\n",[638],{"type":18,"tag":622,"props":639,"children":640},{"__ignoreMap":7},[641],{"type":24,"value":636},{"type":18,"tag":617,"props":643,"children":645},{"code":644},"def conv_block(in_channels,\n",[646],{"type":18,"tag":622,"props":647,"children":648},{"__ignoreMap":7},[649],{"type":24,"value":644},{"type":18,"tag":617,"props":651,"children":653},{"code":652},"               out_channels,\n",[654],{"type":18,"tag":622,"props":655,"children":656},{"__ignoreMap":7},[657],{"type":24,"value":652},{"type":18,"tag":617,"props":659,"children":661},{"code":660},"               kernel_size,\n",[662],{"type":18,"tag":622,"props":663,"children":664},{"__ignoreMap":7},[665],{"type":24,"value":660},{"type":18,"tag":617,"props":667,"children":669},{"code":668},"               stride,\n",[670],{"type":18,"tag":622,"props":671,"children":672},{"__ignoreMap":7},[673],{"type":24,"value":668},{"type":18,"tag":617,"props":675,"children":677},{"code":676},"               dilation=1):\n",[678],{"type":18,"tag":622,"props":679,"children":680},{"__ignoreMap":7},[681],{"type":24,"value":676},{"type":18,"tag":617,"props":683,"children":685},{"code":684},"    \"\"\"Get a conv2d batchnorm and relu layer\"\"\"\n",[686],{"type":18,"tag":622,"props":687,"children":688},{"__ignoreMap":7},[689],{"type":24,"value":684},{"type":18,"tag":617,"props":691,"children":693},{"code":692},"    pad_mode = 'same'\n",[694],{"type":18,"tag":622,"props":695,"children":696},{"__ignoreMap":7},[697],{"type":24,"value":692},{"type":18,"tag":617,"props":699,"children":701},{"code":700},"    padding = 0\n",[702],{"type":18,"tag":622,"props":703,"children":704},{"__ignoreMap":7},[705],{"type":24,"value":700},{"type":18,"tag":617,"props":707,"children":709},{"code":708},"    return nn.SequentialCell(\n",[710],{"type":18,"tag":622,"props":711,"children":712},{"__ignoreMap":7},[713],{"type":24,"value":708},{"type":18,"tag":617,"props":715,"children":717},{"code":716},"        [nn.Conv2d(in_channels,\n",[718],{"type":18,"tag":622,"props":719,"children":720},{"__ignoreMap":7},[721],{"type":24,"value":716},{"type":18,"tag":617,"props":723,"children":725},{"code":724},"                   out_channels,\n",[726],{"type":18,"tag":622,"props":727,"children":728},{"__ignoreMap":7},[729],{"type":24,"value":724},{"type":18,"tag":617,"props":731,"children":733},{"code":732},"                   kernel_size=kernel_size,\n",[734],{"type":18,"tag":622,"props":735,"children":736},{"__ignoreMap":7},[737],{"type":24,"value":732},{"type":18,"tag":617,"props":739,"children":741},{"code":740},"                   stride=stride,\n",[742],{"type":18,"tag":622,"props":743,"children":744},{"__ignoreMap":7},[745],{"type":24,"value":740},{"type":18,"tag":617,"props":747,"children":749},{"code":748},"                   padding=padding,\n",[750],{"type":18,"tag":622,"props":751,"children":752},{"__ignoreMap":7},[753],{"type":24,"value":748},{"type":18,"tag":617,"props":755,"children":757},{"code":756},"                   dilation=dilation,\n",[758],{"type":18,"tag":622,"props":759,"children":760},{"__ignoreMap":7},[761],{"type":24,"value":756},{"type":18,"tag":617,"props":763,"children":765},{"code":764},"                   pad_mode=pad_mode),\n",[766],{"type":18,"tag":622,"props":767,"children":768},{"__ignoreMap":7},[769],{"type":24,"value":764},{"type":18,"tag":617,"props":771,"children":773},{"code":772},"         nn.BatchNorm2d(out_channels, momentum=0.1),\n",[774],{"type":18,"tag":622,"props":775,"children":776},{"__ignoreMap":7},[777],{"type":24,"value":772},{"type":18,"tag":617,"props":779,"children":781},{"code":780},"         nn.ReLU()]\n",[782],{"type":18,"tag":622,"props":783,"children":784},{"__ignoreMap":7},[785],{"type":24,"value":780},{"type":18,"tag":617,"props":787,"children":789},{"code":788},"    )\n",[790],{"type":18,"tag":622,"props":791,"children":792},{"__ignoreMap":7},[793],{"type":24,"value":788},{"type":18,"tag":617,"props":795,"children":797},{"code":796},"class ResidualBlock(nn.Cell):\n",[798],{"type":18,"tag":622,"props":799,"children":800},{"__ignoreMap":7},[801],{"type":24,"value":796},{"type":18,"tag":617,"props":803,"children":805},{"code":804},"    \"\"\"\n",[806],{"type":18,"tag":622,"props":807,"children":808},{"__ignoreMap":7},[809],{"type":24,"value":804},{"type":18,"tag":617,"props":811,"children":813},{"code":812},"    DarkNet V1 residual block definition.\n",[814],{"type":18,"tag":622,"props":815,"children":816},{"__ignoreMap":7},[817],{"type":24,"value":812},{"type":18,"tag":617,"props":819,"children":821},{"code":820},"    Args:\n",[822],{"type":18,"tag":622,"props":823,"children":824},{"__ignoreMap":7},[825],{"type":24,"value":820},{"type":18,"tag":617,"props":827,"children":829},{"code":828},"        in_channels: Integer. Input channel.\n",[830],{"type":18,"tag":622,"props":831,"children":832},{"__ignoreMap":7},[833],{"type":24,"value":828},{"type":18,"tag":617,"props":835,"children":837},{"code":836},"        out_channels: Integer. Output channel.\n",[838],{"type":18,"tag":622,"props":839,"children":840},{"__ignoreMap":7},[841],{"type":24,"value":836},{"type":18,"tag":617,"props":843,"children":845},{"code":844},"    Returns:\n",[846],{"type":18,"tag":622,"props":847,"children":848},{"__ignoreMap":7},[849],{"type":24,"value":844},{"type":18,"tag":617,"props":851,"children":853},{"code":852},"        Tensor, output tensor.\n",[854],{"type":18,"tag":622,"props":855,"children":856},{"__ignoreMap":7},[857],{"type":24,"value":852},{"type":18,"tag":617,"props":859,"children":861},{"code":860},"    Examples:\n",[862],{"type":18,"tag":622,"props":863,"children":864},{"__ignoreMap":7},[865],{"type":24,"value":860},{"type":18,"tag":617,"props":867,"children":869},{"code":868},"        ResidualBlock(3, 208)\n",[870],{"type":18,"tag":622,"props":871,"children":872},{"__ignoreMap":7},[873],{"type":24,"value":868},{"type":18,"tag":617,"props":875,"children":876},{"code":804},[877],{"type":18,"tag":622,"props":878,"children":879},{"__ignoreMap":7},[880],{"type":24,"value":804},{"type":18,"tag":617,"props":882,"children":884},{"code":883},"    expansion = 4\n",[885],{"type":18,"tag":622,"props":886,"children":887},{"__ignoreMap":7},[888],{"type":24,"value":883},{"type":18,"tag":617,"props":890,"children":892},{"code":891},"    def __init__(self,\n",[893],{"type":18,"tag":622,"props":894,"children":895},{"__ignoreMap":7},[896],{"type":24,"value":891},{"type":18,"tag":617,"props":898,"children":900},{"code":899},"                 in_channels,\n",[901],{"type":18,"tag":622,"props":902,"children":903},{"__ignoreMap":7},[904],{"type":24,"value":899},{"type":18,"tag":617,"props":906,"children":908},{"code":907},"                 out_channels):\n",[909],{"type":18,"tag":622,"props":910,"children":911},{"__ignoreMap":7},[912],{"type":24,"value":907},{"type":18,"tag":617,"props":914,"children":916},{"code":915},"        super(ResidualBlock, self).__init__()\n",[917],{"type":18,"tag":622,"props":918,"children":919},{"__ignoreMap":7},[920],{"type":24,"value":915},{"type":18,"tag":617,"props":922,"children":924},{"code":923},"        out_chls = out_channels//2\n",[925],{"type":18,"tag":622,"props":926,"children":927},{"__ignoreMap":7},[928],{"type":24,"value":923},{"type":18,"tag":617,"props":930,"children":932},{"code":931},"        self.conv1 = conv_block(in_channels, out_chls, kernel_size=1, stride=1)\n",[933],{"type":18,"tag":622,"props":934,"children":935},{"__ignoreMap":7},[936],{"type":24,"value":931},{"type":18,"tag":617,"props":938,"children":940},{"code":939},"        self.conv2 = conv_block(out_chls, out_channels, kernel_size=3, stride=1)\n",[941],{"type":18,"tag":622,"props":942,"children":943},{"__ignoreMap":7},[944],{"type":24,"value":939},{"type":18,"tag":617,"props":946,"children":948},{"code":947},"        self.add = P.Add()\n",[949],{"type":18,"tag":622,"props":950,"children":951},{"__ignoreMap":7},[952],{"type":24,"value":947},{"type":18,"tag":617,"props":954,"children":956},{"code":955},"    def construct(self, x):\n",[957],{"type":18,"tag":622,"props":958,"children":959},{"__ignoreMap":7},[960],{"type":24,"value":955},{"type":18,"tag":617,"props":962,"children":964},{"code":963},"        identity = x\n",[965],{"type":18,"tag":622,"props":966,"children":967},{"__ignoreMap":7},[968],{"type":24,"value":963},{"type":18,"tag":617,"props":970,"children":972},{"code":971},"        out = self.conv1(x)\n",[973],{"type":18,"tag":622,"props":974,"children":975},{"__ignoreMap":7},[976],{"type":24,"value":971},{"type":18,"tag":617,"props":978,"children":980},{"code":979},"        out = self.conv2(out)\n",[981],{"type":18,"tag":622,"props":982,"children":983},{"__ignoreMap":7},[984],{"type":24,"value":979},{"type":18,"tag":617,"props":986,"children":988},{"code":987},"        out = self.add(out, identity)\n",[989],{"type":18,"tag":622,"props":990,"children":991},{"__ignoreMap":7},[992],{"type":24,"value":987},{"type":18,"tag":617,"props":994,"children":996},{"code":995},"        return out\n",[997],{"type":18,"tag":622,"props":998,"children":999},{"__ignoreMap":7},[1000],{"type":24,"value":995},{"type":18,"tag":617,"props":1002,"children":1004},{"code":1003},"class DarkNet(nn.Cell):\n",[1005],{"type":18,"tag":622,"props":1006,"children":1007},{"__ignoreMap":7},[1008],{"type":24,"value":1003},{"type":18,"tag":617,"props":1010,"children":1011},{"code":804},[1012],{"type":18,"tag":622,"props":1013,"children":1014},{"__ignoreMap":7},[1015],{"type":24,"value":804},{"type":18,"tag":617,"props":1017,"children":1019},{"code":1018},"    DarkNet V1 network.\n",[1020],{"type":18,"tag":622,"props":1021,"children":1022},{"__ignoreMap":7},[1023],{"type":24,"value":1018},{"type":18,"tag":617,"props":1025,"children":1026},{"code":820},[1027],{"type":18,"tag":622,"props":1028,"children":1029},{"__ignoreMap":7},[1030],{"type":24,"value":820},{"type":18,"tag":617,"props":1032,"children":1034},{"code":1033},"        block: Cell. Block for network.\n",[1035],{"type":18,"tag":622,"props":1036,"children":1037},{"__ignoreMap":7},[1038],{"type":24,"value":1033},{"type":18,"tag":617,"props":1040,"children":1042},{"code":1041},"        layer_nums: List. Numbers of different layers.\n",[1043],{"type":18,"tag":622,"props":1044,"children":1045},{"__ignoreMap":7},[1046],{"type":24,"value":1041},{"type":18,"tag":617,"props":1048,"children":1049},{"code":828},[1050],{"type":18,"tag":622,"props":1051,"children":1052},{"__ignoreMap":7},[1053],{"type":24,"value":828},{"type":18,"tag":617,"props":1055,"children":1056},{"code":836},[1057],{"type":18,"tag":622,"props":1058,"children":1059},{"__ignoreMap":7},[1060],{"type":24,"value":836},{"type":18,"tag":617,"props":1062,"children":1064},{"code":1063},"        detect: Bool. Whether detect or not. Default:False.\n",[1065],{"type":18,"tag":622,"props":1066,"children":1067},{"__ignoreMap":7},[1068],{"type":24,"value":1063},{"type":18,"tag":617,"props":1070,"children":1071},{"code":844},[1072],{"type":18,"tag":622,"props":1073,"children":1074},{"__ignoreMap":7},[1075],{"type":24,"value":844},{"type":18,"tag":617,"props":1077,"children":1079},{"code":1078},"        Tuple, tuple of output tensor,(f1,f2,f3,f4,f5).\n",[1080],{"type":18,"tag":622,"props":1081,"children":1082},{"__ignoreMap":7},[1083],{"type":24,"value":1078},{"type":18,"tag":617,"props":1085,"children":1086},{"code":860},[1087],{"type":18,"tag":622,"props":1088,"children":1089},{"__ignoreMap":7},[1090],{"type":24,"value":860},{"type":18,"tag":617,"props":1092,"children":1094},{"code":1093},"        DarkNet(ResidualBlock,\n",[1095],{"type":18,"tag":622,"props":1096,"children":1097},{"__ignoreMap":7},[1098],{"type":24,"value":1093},{"type":18,"tag":617,"props":1100,"children":1102},{"code":1101},"               [1, 2, 8, 8, 4],\n",[1103],{"type":18,"tag":622,"props":1104,"children":1105},{"__ignoreMap":7},[1106],{"type":24,"value":1101},{"type":18,"tag":617,"props":1108,"children":1110},{"code":1109},"               [32, 64, 128, 256, 512],\n",[1111],{"type":18,"tag":622,"props":1112,"children":1113},{"__ignoreMap":7},[1114],{"type":24,"value":1109},{"type":18,"tag":617,"props":1116,"children":1118},{"code":1117},"               [64, 128, 256, 512, 1024],\n",[1119],{"type":18,"tag":622,"props":1120,"children":1121},{"__ignoreMap":7},[1122],{"type":24,"value":1117},{"type":18,"tag":617,"props":1124,"children":1126},{"code":1125},"               100)\n",[1127],{"type":18,"tag":622,"props":1128,"children":1129},{"__ignoreMap":7},[1130],{"type":24,"value":1125},{"type":18,"tag":617,"props":1132,"children":1133},{"code":804},[1134],{"type":18,"tag":622,"props":1135,"children":1136},{"__ignoreMap":7},[1137],{"type":24,"value":804},{"type":18,"tag":617,"props":1139,"children":1140},{"code":891},[1141],{"type":18,"tag":622,"props":1142,"children":1143},{"__ignoreMap":7},[1144],{"type":24,"value":891},{"type":18,"tag":617,"props":1146,"children":1148},{"code":1147},"                 block,\n",[1149],{"type":18,"tag":622,"props":1150,"children":1151},{"__ignoreMap":7},[1152],{"type":24,"value":1147},{"type":18,"tag":617,"props":1154,"children":1156},{"code":1155},"                 layer_nums,\n",[1157],{"type":18,"tag":622,"props":1158,"children":1159},{"__ignoreMap":7},[1160],{"type":24,"value":1155},{"type":18,"tag":617,"props":1162,"children":1163},{"code":899},[1164],{"type":18,"tag":622,"props":1165,"children":1166},{"__ignoreMap":7},[1167],{"type":24,"value":899},{"type":18,"tag":617,"props":1169,"children":1171},{"code":1170},"                 out_channels,\n",[1172],{"type":18,"tag":622,"props":1173,"children":1174},{"__ignoreMap":7},[1175],{"type":24,"value":1170},{"type":18,"tag":617,"props":1177,"children":1179},{"code":1178},"                 detect=False):\n",[1180],{"type":18,"tag":622,"props":1181,"children":1182},{"__ignoreMap":7},[1183],{"type":24,"value":1178},{"type":18,"tag":617,"props":1185,"children":1187},{"code":1186},"        super(DarkNet, self).__init__()\n",[1188],{"type":18,"tag":622,"props":1189,"children":1190},{"__ignoreMap":7},[1191],{"type":24,"value":1186},{"type":18,"tag":617,"props":1193,"children":1195},{"code":1194},"        self.outchannel = out_channels[-1]\n",[1196],{"type":18,"tag":622,"props":1197,"children":1198},{"__ignoreMap":7},[1199],{"type":24,"value":1194},{"type":18,"tag":617,"props":1201,"children":1203},{"code":1202},"        self.detect = detect\n",[1204],{"type":18,"tag":622,"props":1205,"children":1206},{"__ignoreMap":7},[1207],{"type":24,"value":1202},{"type":18,"tag":617,"props":1209,"children":1211},{"code":1210},"        if not len(layer_nums) == len(in_channels) == len(out_channels) == 5:\n",[1212],{"type":18,"tag":622,"props":1213,"children":1214},{"__ignoreMap":7},[1215],{"type":24,"value":1210},{"type":18,"tag":617,"props":1217,"children":1219},{"code":1218},"            raise ValueError(\"the length of layer_num, inchannel, outchannel list must be 5!\")\n",[1220],{"type":18,"tag":622,"props":1221,"children":1222},{"__ignoreMap":7},[1223],{"type":24,"value":1218},{"type":18,"tag":617,"props":1225,"children":1227},{"code":1226},"        self.conv0 = conv_block(3,\n",[1228],{"type":18,"tag":622,"props":1229,"children":1230},{"__ignoreMap":7},[1231],{"type":24,"value":1226},{"type":18,"tag":617,"props":1233,"children":1235},{"code":1234},"                                in_channels[0],\n",[1236],{"type":18,"tag":622,"props":1237,"children":1238},{"__ignoreMap":7},[1239],{"type":24,"value":1234},{"type":18,"tag":617,"props":1241,"children":1243},{"code":1242},"                                kernel_size=3,\n",[1244],{"type":18,"tag":622,"props":1245,"children":1246},{"__ignoreMap":7},[1247],{"type":24,"value":1242},{"type":18,"tag":617,"props":1249,"children":1251},{"code":1250},"                                stride=1)\n",[1252],{"type":18,"tag":622,"props":1253,"children":1254},{"__ignoreMap":7},[1255],{"type":24,"value":1250},{"type":18,"tag":617,"props":1257,"children":1259},{"code":1258},"        self.conv1 = conv_block(in_channels[0],\n",[1260],{"type":18,"tag":622,"props":1261,"children":1262},{"__ignoreMap":7},[1263],{"type":24,"value":1258},{"type":18,"tag":617,"props":1265,"children":1267},{"code":1266},"                                out_channels[0],\n",[1268],{"type":18,"tag":622,"props":1269,"children":1270},{"__ignoreMap":7},[1271],{"type":24,"value":1266},{"type":18,"tag":617,"props":1273,"children":1274},{"code":1242},[1275],{"type":18,"tag":622,"props":1276,"children":1277},{"__ignoreMap":7},[1278],{"type":24,"value":1242},{"type":18,"tag":617,"props":1280,"children":1282},{"code":1281},"                                stride=2)\n",[1283],{"type":18,"tag":622,"props":1284,"children":1285},{"__ignoreMap":7},[1286],{"type":24,"value":1281},{"type":18,"tag":617,"props":1288,"children":1290},{"code":1289},"        self.layer1 = self._make_layer(block,\n",[1291],{"type":18,"tag":622,"props":1292,"children":1293},{"__ignoreMap":7},[1294],{"type":24,"value":1289},{"type":18,"tag":617,"props":1296,"children":1298},{"code":1297},"                                       layer_nums[0],\n",[1299],{"type":18,"tag":622,"props":1300,"children":1301},{"__ignoreMap":7},[1302],{"type":24,"value":1297},{"type":18,"tag":617,"props":1304,"children":1306},{"code":1305},"                                       in_channel=out_channels[0],\n",[1307],{"type":18,"tag":622,"props":1308,"children":1309},{"__ignoreMap":7},[1310],{"type":24,"value":1305},{"type":18,"tag":617,"props":1312,"children":1314},{"code":1313},"                                       out_channel=out_channels[0])\n",[1315],{"type":18,"tag":622,"props":1316,"children":1317},{"__ignoreMap":7},[1318],{"type":24,"value":1313},{"type":18,"tag":617,"props":1320,"children":1322},{"code":1321},"        self.conv2 = conv_block(in_channels[1],\n",[1323],{"type":18,"tag":622,"props":1324,"children":1325},{"__ignoreMap":7},[1326],{"type":24,"value":1321},{"type":18,"tag":617,"props":1328,"children":1330},{"code":1329},"                                out_channels[1],\n",[1331],{"type":18,"tag":622,"props":1332,"children":1333},{"__ignoreMap":7},[1334],{"type":24,"value":1329},{"type":18,"tag":617,"props":1336,"children":1337},{"code":1242},[1338],{"type":18,"tag":622,"props":1339,"children":1340},{"__ignoreMap":7},[1341],{"type":24,"value":1242},{"type":18,"tag":617,"props":1343,"children":1344},{"code":1281},[1345],{"type":18,"tag":622,"props":1346,"children":1347},{"__ignoreMap":7},[1348],{"type":24,"value":1281},{"type":18,"tag":617,"props":1350,"children":1352},{"code":1351},"        self.layer2 = self._make_layer(block,\n",[1353],{"type":18,"tag":622,"props":1354,"children":1355},{"__ignoreMap":7},[1356],{"type":24,"value":1351},{"type":18,"tag":617,"props":1358,"children":1360},{"code":1359},"                                       layer_nums[1],\n",[1361],{"type":18,"tag":622,"props":1362,"children":1363},{"__ignoreMap":7},[1364],{"type":24,"value":1359},{"type":18,"tag":617,"props":1366,"children":1368},{"code":1367},"                                       in_channel=out_channels[1],\n",[1369],{"type":18,"tag":622,"props":1370,"children":1371},{"__ignoreMap":7},[1372],{"type":24,"value":1367},{"type":18,"tag":617,"props":1374,"children":1376},{"code":1375},"                                       out_channel=out_channels[1])\n",[1377],{"type":18,"tag":622,"props":1378,"children":1379},{"__ignoreMap":7},[1380],{"type":24,"value":1375},{"type":18,"tag":617,"props":1382,"children":1384},{"code":1383},"        self.conv3 = conv_block(in_channels[2],\n",[1385],{"type":18,"tag":622,"props":1386,"children":1387},{"__ignoreMap":7},[1388],{"type":24,"value":1383},{"type":18,"tag":617,"props":1390,"children":1392},{"code":1391},"                                out_channels[2],\n",[1393],{"type":18,"tag":622,"props":1394,"children":1395},{"__ignoreMap":7},[1396],{"type":24,"value":1391},{"type":18,"tag":617,"props":1398,"children":1399},{"code":1242},[1400],{"type":18,"tag":622,"props":1401,"children":1402},{"__ignoreMap":7},[1403],{"type":24,"value":1242},{"type":18,"tag":617,"props":1405,"children":1406},{"code":1281},[1407],{"type":18,"tag":622,"props":1408,"children":1409},{"__ignoreMap":7},[1410],{"type":24,"value":1281},{"type":18,"tag":617,"props":1412,"children":1414},{"code":1413},"        self.layer3 = self._make_layer(block,\n",[1415],{"type":18,"tag":622,"props":1416,"children":1417},{"__ignoreMap":7},[1418],{"type":24,"value":1413},{"type":18,"tag":617,"props":1420,"children":1422},{"code":1421},"                                       layer_nums[2],\n",[1423],{"type":18,"tag":622,"props":1424,"children":1425},{"__ignoreMap":7},[1426],{"type":24,"value":1421},{"type":18,"tag":617,"props":1428,"children":1430},{"code":1429},"                                       in_channel=out_channels[2],\n",[1431],{"type":18,"tag":622,"props":1432,"children":1433},{"__ignoreMap":7},[1434],{"type":24,"value":1429},{"type":18,"tag":617,"props":1436,"children":1438},{"code":1437},"                                       out_channel=out_channels[2])\n",[1439],{"type":18,"tag":622,"props":1440,"children":1441},{"__ignoreMap":7},[1442],{"type":24,"value":1437},{"type":18,"tag":617,"props":1444,"children":1446},{"code":1445},"        self.conv4 = conv_block(in_channels[3],\n",[1447],{"type":18,"tag":622,"props":1448,"children":1449},{"__ignoreMap":7},[1450],{"type":24,"value":1445},{"type":18,"tag":617,"props":1452,"children":1454},{"code":1453},"                                out_channels[3],\n",[1455],{"type":18,"tag":622,"props":1456,"children":1457},{"__ignoreMap":7},[1458],{"type":24,"value":1453},{"type":18,"tag":617,"props":1460,"children":1461},{"code":1242},[1462],{"type":18,"tag":622,"props":1463,"children":1464},{"__ignoreMap":7},[1465],{"type":24,"value":1242},{"type":18,"tag":617,"props":1467,"children":1468},{"code":1281},[1469],{"type":18,"tag":622,"props":1470,"children":1471},{"__ignoreMap":7},[1472],{"type":24,"value":1281},{"type":18,"tag":617,"props":1474,"children":1476},{"code":1475},"        self.layer4 = self._make_layer(block,\n",[1477],{"type":18,"tag":622,"props":1478,"children":1479},{"__ignoreMap":7},[1480],{"type":24,"value":1475},{"type":18,"tag":617,"props":1482,"children":1484},{"code":1483},"                                       layer_nums[3],\n",[1485],{"type":18,"tag":622,"props":1486,"children":1487},{"__ignoreMap":7},[1488],{"type":24,"value":1483},{"type":18,"tag":617,"props":1490,"children":1492},{"code":1491},"                                       in_channel=out_channels[3],\n",[1493],{"type":18,"tag":622,"props":1494,"children":1495},{"__ignoreMap":7},[1496],{"type":24,"value":1491},{"type":18,"tag":617,"props":1498,"children":1500},{"code":1499},"                                       out_channel=out_channels[3])\n",[1501],{"type":18,"tag":622,"props":1502,"children":1503},{"__ignoreMap":7},[1504],{"type":24,"value":1499},{"type":18,"tag":617,"props":1506,"children":1508},{"code":1507},"        self.conv5 = conv_block(in_channels[4],\n",[1509],{"type":18,"tag":622,"props":1510,"children":1511},{"__ignoreMap":7},[1512],{"type":24,"value":1507},{"type":18,"tag":617,"props":1514,"children":1516},{"code":1515},"                                out_channels[4],\n",[1517],{"type":18,"tag":622,"props":1518,"children":1519},{"__ignoreMap":7},[1520],{"type":24,"value":1515},{"type":18,"tag":617,"props":1522,"children":1523},{"code":1242},[1524],{"type":18,"tag":622,"props":1525,"children":1526},{"__ignoreMap":7},[1527],{"type":24,"value":1242},{"type":18,"tag":617,"props":1529,"children":1530},{"code":1281},[1531],{"type":18,"tag":622,"props":1532,"children":1533},{"__ignoreMap":7},[1534],{"type":24,"value":1281},{"type":18,"tag":617,"props":1536,"children":1538},{"code":1537},"        self.layer5 = self._make_layer(block,\n",[1539],{"type":18,"tag":622,"props":1540,"children":1541},{"__ignoreMap":7},[1542],{"type":24,"value":1537},{"type":18,"tag":617,"props":1544,"children":1546},{"code":1545},"                                       layer_nums[4],\n",[1547],{"type":18,"tag":622,"props":1548,"children":1549},{"__ignoreMap":7},[1550],{"type":24,"value":1545},{"type":18,"tag":617,"props":1552,"children":1554},{"code":1553},"                                       in_channel=out_channels[4],\n",[1555],{"type":18,"tag":622,"props":1556,"children":1557},{"__ignoreMap":7},[1558],{"type":24,"value":1553},{"type":18,"tag":617,"props":1560,"children":1562},{"code":1561},"                                       out_channel=out_channels[4])\n",[1563],{"type":18,"tag":622,"props":1564,"children":1565},{"__ignoreMap":7},[1566],{"type":24,"value":1561},{"type":18,"tag":617,"props":1568,"children":1570},{"code":1569},"    def _make_layer(self, block, layer_num, in_channel, out_channel):\n",[1571],{"type":18,"tag":622,"props":1572,"children":1573},{"__ignoreMap":7},[1574],{"type":24,"value":1569},{"type":18,"tag":617,"props":1576,"children":1578},{"code":1577},"        \"\"\"\n",[1579],{"type":18,"tag":622,"props":1580,"children":1581},{"__ignoreMap":7},[1582],{"type":24,"value":1577},{"type":18,"tag":617,"props":1584,"children":1586},{"code":1585},"        Make Layer for DarkNet.\n",[1587],{"type":18,"tag":622,"props":1588,"children":1589},{"__ignoreMap":7},[1590],{"type":24,"value":1585},{"type":18,"tag":617,"props":1592,"children":1594},{"code":1593},"        :param block: Cell. DarkNet block.\n",[1595],{"type":18,"tag":622,"props":1596,"children":1597},{"__ignoreMap":7},[1598],{"type":24,"value":1593},{"type":18,"tag":617,"props":1600,"children":1602},{"code":1601},"        :param layer_num: Integer. Layer number.\n",[1603],{"type":18,"tag":622,"props":1604,"children":1605},{"__ignoreMap":7},[1606],{"type":24,"value":1601},{"type":18,"tag":617,"props":1608,"children":1610},{"code":1609},"        :param in_channel: Integer. Input channel.\n",[1611],{"type":18,"tag":622,"props":1612,"children":1613},{"__ignoreMap":7},[1614],{"type":24,"value":1609},{"type":18,"tag":617,"props":1616,"children":1618},{"code":1617},"        :param out_channel: Integer. Output channel.\n",[1619],{"type":18,"tag":622,"props":1620,"children":1621},{"__ignoreMap":7},[1622],{"type":24,"value":1617},{"type":18,"tag":617,"props":1624,"children":1626},{"code":1625},"        Examples:\n",[1627],{"type":18,"tag":622,"props":1628,"children":1629},{"__ignoreMap":7},[1630],{"type":24,"value":1625},{"type":18,"tag":617,"props":1632,"children":1634},{"code":1633},"            _make_layer(ConvBlock, 1, 128, 256)\n",[1635],{"type":18,"tag":622,"props":1636,"children":1637},{"__ignoreMap":7},[1638],{"type":24,"value":1633},{"type":18,"tag":617,"props":1640,"children":1641},{"code":1577},[1642],{"type":18,"tag":622,"props":1643,"children":1644},{"__ignoreMap":7},[1645],{"type":24,"value":1577},{"type":18,"tag":617,"props":1647,"children":1649},{"code":1648},"        layers = []\n",[1650],{"type":18,"tag":622,"props":1651,"children":1652},{"__ignoreMap":7},[1653],{"type":24,"value":1648},{"type":18,"tag":617,"props":1655,"children":1657},{"code":1656},"        darkblk = block(in_channel, out_channel)\n",[1658],{"type":18,"tag":622,"props":1659,"children":1660},{"__ignoreMap":7},[1661],{"type":24,"value":1656},{"type":18,"tag":617,"props":1663,"children":1665},{"code":1664},"        layers.append(darkblk)\n",[1666],{"type":18,"tag":622,"props":1667,"children":1668},{"__ignoreMap":7},[1669],{"type":24,"value":1664},{"type":18,"tag":617,"props":1671,"children":1673},{"code":1672},"        for _ in range(1, layer_num):\n",[1674],{"type":18,"tag":622,"props":1675,"children":1676},{"__ignoreMap":7},[1677],{"type":24,"value":1672},{"type":18,"tag":617,"props":1679,"children":1681},{"code":1680},"            darkblk = block(out_channel, out_channel)\n",[1682],{"type":18,"tag":622,"props":1683,"children":1684},{"__ignoreMap":7},[1685],{"type":24,"value":1680},{"type":18,"tag":617,"props":1687,"children":1689},{"code":1688},"            layers.append(darkblk)\n",[1690],{"type":18,"tag":622,"props":1691,"children":1692},{"__ignoreMap":7},[1693],{"type":24,"value":1688},{"type":18,"tag":617,"props":1695,"children":1697},{"code":1696},"        return nn.SequentialCell(layers)\n",[1698],{"type":18,"tag":622,"props":1699,"children":1700},{"__ignoreMap":7},[1701],{"type":24,"value":1696},{"type":18,"tag":617,"props":1703,"children":1704},{"code":955},[1705],{"type":18,"tag":622,"props":1706,"children":1707},{"__ignoreMap":7},[1708],{"type":24,"value":955},{"type":18,"tag":617,"props":1710,"children":1712},{"code":1711},"        c1 = self.conv0(x)\n",[1713],{"type":18,"tag":622,"props":1714,"children":1715},{"__ignoreMap":7},[1716],{"type":24,"value":1711},{"type":18,"tag":617,"props":1718,"children":1720},{"code":1719},"        c2 = self.conv1(c1)\n",[1721],{"type":18,"tag":622,"props":1722,"children":1723},{"__ignoreMap":7},[1724],{"type":24,"value":1719},{"type":18,"tag":617,"props":1726,"children":1728},{"code":1727},"        c3 = self.layer1(c2)\n",[1729],{"type":18,"tag":622,"props":1730,"children":1731},{"__ignoreMap":7},[1732],{"type":24,"value":1727},{"type":18,"tag":617,"props":1734,"children":1736},{"code":1735},"        c4 = self.conv2(c3)\n",[1737],{"type":18,"tag":622,"props":1738,"children":1739},{"__ignoreMap":7},[1740],{"type":24,"value":1735},{"type":18,"tag":617,"props":1742,"children":1744},{"code":1743},"        c5 = self.layer2(c4)\n",[1745],{"type":18,"tag":622,"props":1746,"children":1747},{"__ignoreMap":7},[1748],{"type":24,"value":1743},{"type":18,"tag":617,"props":1750,"children":1752},{"code":1751},"        c6 = self.conv3(c5)\n",[1753],{"type":18,"tag":622,"props":1754,"children":1755},{"__ignoreMap":7},[1756],{"type":24,"value":1751},{"type":18,"tag":617,"props":1758,"children":1760},{"code":1759},"        c7 = self.layer3(c6)\n",[1761],{"type":18,"tag":622,"props":1762,"children":1763},{"__ignoreMap":7},[1764],{"type":24,"value":1759},{"type":18,"tag":617,"props":1766,"children":1768},{"code":1767},"        c8 = self.conv4(c7)\n",[1769],{"type":18,"tag":622,"props":1770,"children":1771},{"__ignoreMap":7},[1772],{"type":24,"value":1767},{"type":18,"tag":617,"props":1774,"children":1776},{"code":1775},"        c9 = self.layer4(c8)\n",[1777],{"type":18,"tag":622,"props":1778,"children":1779},{"__ignoreMap":7},[1780],{"type":24,"value":1775},{"type":18,"tag":617,"props":1782,"children":1784},{"code":1783},"        c10 = self.conv5(c9)\n",[1785],{"type":18,"tag":622,"props":1786,"children":1787},{"__ignoreMap":7},[1788],{"type":24,"value":1783},{"type":18,"tag":617,"props":1790,"children":1792},{"code":1791},"        c11 = self.layer5(c10)\n",[1793],{"type":18,"tag":622,"props":1794,"children":1795},{"__ignoreMap":7},[1796],{"type":24,"value":1791},{"type":18,"tag":617,"props":1798,"children":1800},{"code":1799},"        if self.detect:\n",[1801],{"type":18,"tag":622,"props":1802,"children":1803},{"__ignoreMap":7},[1804],{"type":24,"value":1799},{"type":18,"tag":617,"props":1806,"children":1808},{"code":1807},"            return c7, c9, c11\n",[1809],{"type":18,"tag":622,"props":1810,"children":1811},{"__ignoreMap":7},[1812],{"type":24,"value":1807},{"type":18,"tag":617,"props":1814,"children":1816},{"code":1815},"        return c11\n",[1817],{"type":18,"tag":622,"props":1818,"children":1819},{"__ignoreMap":7},[1820],{"type":24,"value":1815},{"type":18,"tag":617,"props":1822,"children":1824},{"code":1823},"    def get_out_channels(self):\n",[1825],{"type":18,"tag":622,"props":1826,"children":1827},{"__ignoreMap":7},[1828],{"type":24,"value":1823},{"type":18,"tag":617,"props":1830,"children":1832},{"code":1831},"        return self.outchannel\n",[1833],{"type":18,"tag":622,"props":1834,"children":1835},{"__ignoreMap":7},[1836],{"type":24,"value":1831},{"type":18,"tag":617,"props":1838,"children":1840},{"code":1839},"def get_darknet53(detect=False):\n",[1841],{"type":18,"tag":622,"props":1842,"children":1843},{"__ignoreMap":7},[1844],{"type":24,"value":1839},{"type":18,"tag":617,"props":1846,"children":1847},{"code":804},[1848],{"type":18,"tag":622,"props":1849,"children":1850},{"__ignoreMap":7},[1851],{"type":24,"value":804},{"type":18,"tag":617,"props":1853,"children":1855},{"code":1854},"    Get DarkNet53 neural network.\n",[1856],{"type":18,"tag":622,"props":1857,"children":1858},{"__ignoreMap":7},[1859],{"type":24,"value":1854},{"type":18,"tag":617,"props":1861,"children":1862},{"code":844},[1863],{"type":18,"tag":622,"props":1864,"children":1865},{"__ignoreMap":7},[1866],{"type":24,"value":844},{"type":18,"tag":617,"props":1868,"children":1870},{"code":1869},"        Cell, cell instance of DarkNet53 neural network.\n",[1871],{"type":18,"tag":622,"props":1872,"children":1873},{"__ignoreMap":7},[1874],{"type":24,"value":1869},{"type":18,"tag":617,"props":1876,"children":1877},{"code":860},[1878],{"type":18,"tag":622,"props":1879,"children":1880},{"__ignoreMap":7},[1881],{"type":24,"value":860},{"type":18,"tag":617,"props":1883,"children":1885},{"code":1884},"        darknet53()\n",[1886],{"type":18,"tag":622,"props":1887,"children":1888},{"__ignoreMap":7},[1889],{"type":24,"value":1884},{"type":18,"tag":617,"props":1891,"children":1892},{"code":804},[1893],{"type":18,"tag":622,"props":1894,"children":1895},{"__ignoreMap":7},[1896],{"type":24,"value":804},{"type":18,"tag":617,"props":1898,"children":1900},{"code":1899},"    return DarkNet(ResidualBlock, [1, 2, 8, 8, 4],\n",[1901],{"type":18,"tag":622,"props":1902,"children":1903},{"__ignoreMap":7},[1904],{"type":24,"value":1899},{"type":18,"tag":617,"props":1906,"children":1908},{"code":1907},"                   [32, 64, 128, 256, 512],\n",[1909],{"type":18,"tag":622,"props":1910,"children":1911},{"__ignoreMap":7},[1912],{"type":24,"value":1907},{"type":18,"tag":617,"props":1914,"children":1916},{"code":1915},"                   [64, 128, 256, 512, 1024], detect)\n",[1917],{"type":18,"tag":622,"props":1918,"children":1919},{"__ignoreMap":7},[1920],{"type":24,"value":1915},{"type":18,"tag":26,"props":1922,"children":1923},{},[1924],{"type":24,"value":1925},"(For more information, stay tuned to this series.)",{"title":7,"searchDepth":1927,"depth":1927,"links":1928},4,[],"markdown","content:technology-blogs:en:1711.md","content","technology-blogs/en/1711.md","technology-blogs/en/1711","md",1776506103543]