[{"data":1,"prerenderedAt":519},["ShallowReactive",2],{"content-query-Cy4QgvyFrE":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":513,"_id":514,"_source":515,"_file":516,"_stem":517,"_extension":518},"/technology-blogs/zh/2236","zh",false,"","昇思应用案例 | Colorization实现灰度图像的自动着色","本案例对Colorful Image Colorization文中提出的模型进行了详细的解释，向读者完整地展现了该算法的流程，分析了Colorization在着色方面的优势和存在的不足。如需查看详细代码，可参考MindSpore Vision套件。","2023-04-14","https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/04/20/6e0190d709b447d79bd4b3445da1b93c.png","technology-blogs","大V博文",{"type":15,"children":16,"toc":499},"root",[17,25,42,46,54,62,86,95,100,110,115,123,130,138,146,151,156,161,166,171,176,184,192,197,207,219,224,232,240,248,255,264,269,276,281,288,293,302,312,317,324,329,336,344,352,360,366,374,383,393,404,409,417,427,432,440,447,454,459,469,479,489],{"type":18,"tag":19,"props":20,"children":22},"element","h1",{"id":21},"昇思应用案例-colorization实现灰度图像的自动着色",[23],{"type":24,"value":8},"text",{"type":18,"tag":26,"props":27,"children":28},"p",{},[29,35,37],{"type":18,"tag":30,"props":31,"children":32},"strong",{},[33],{"type":24,"value":34},"作者：Yeats_Liao",{"type":24,"value":36}," ｜",{"type":18,"tag":30,"props":38,"children":39},{},[40],{"type":24,"value":41},"来源：CSDN",{"type":18,"tag":26,"props":43,"children":44},{},[45],{"type":24,"value":9},{"type":18,"tag":26,"props":47,"children":48},{},[49],{"type":18,"tag":30,"props":50,"children":51},{},[52],{"type":24,"value":53},"01",{"type":18,"tag":26,"props":55,"children":56},{},[57],{"type":18,"tag":30,"props":58,"children":59},{},[60],{"type":24,"value":61},"环节准备",{"type":18,"tag":26,"props":63,"children":64},{},[65,67,75,77],{"type":24,"value":66},"进入",{"type":18,"tag":30,"props":68,"children":69},{},[70],{"type":18,"tag":30,"props":71,"children":72},{},[73],{"type":24,"value":74},"昇思MindSpore官网",{"type":24,"value":76},"（",{"type":18,"tag":78,"props":79,"children":83},"a",{"href":80,"rel":81},"https://www.mindspore.cn/%EF%BC%89%EF%BC%8C%E7%82%B9%E5%87%BB%E4%B8%8A%E6%96%B9%E7%9A%84%E5%AE%89%E8%A3%85%E3%80%82",[82],"nofollow",[84],{"type":24,"value":85},"https://www.mindspore.cn/），点击上方的安装。",{"type":18,"tag":26,"props":87,"children":88},{},[89],{"type":18,"tag":90,"props":91,"children":94},"img",{"alt":92,"src":93},"image.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420023205.50257053539296641893214995853422:50540419031426:2400:4AD41A9B651BE01006B740953C6B68107519C1945E1D74E55C643AEE596BC922.png",[],{"type":18,"tag":26,"props":96,"children":97},{},[98],{"type":24,"value":99},"打开一个Terminal，输入安装命令。",{"type":18,"tag":101,"props":102,"children":104},"pre",{"code":103},"conda install mindspore=2.0.0a0 -c mindspore -c conda-forge\n",[105],{"type":18,"tag":106,"props":107,"children":108},"code",{"__ignoreMap":7},[109],{"type":24,"value":103},{"type":18,"tag":26,"props":111,"children":112},{},[113],{"type":24,"value":114},"再点击侧边栏中的Clone a Repository，输入代码。",{"type":18,"tag":101,"props":116,"children":118},{"code":117},"https://github.com/mindspore-courses/applications.git\n",[119],{"type":18,"tag":106,"props":120,"children":121},{"__ignoreMap":7},[122],{"type":24,"value":117},{"type":18,"tag":26,"props":124,"children":125},{},[126],{"type":18,"tag":90,"props":127,"children":129},{"alt":92,"src":128},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420023244.39395795961469814603394268243633:50540419031426:2400:C28F17A8C61A79CD5A45AC416D2FD5E92DC32EC9922DA68AFE87E074862D9490.png",[],{"type":18,"tag":26,"props":131,"children":132},{},[133],{"type":18,"tag":30,"props":134,"children":135},{},[136],{"type":24,"value":137},"02",{"type":18,"tag":26,"props":139,"children":140},{},[141],{"type":18,"tag":30,"props":142,"children":143},{},[144],{"type":24,"value":145},"自动着色算法之Colorization****简介",{"type":18,"tag":26,"props":147,"children":148},{},[149],{"type":24,"value":150},"当桃乐丝在1939年的电影《绿野仙踪》中走进奥兹国时，从黑白到鲜艳的色彩的转变使它成为电影史上最令人叹为观止的时刻之一。毫无疑问，颜色是一种有效的表达工具，但它们通常是有代价的。在制作现代动画电影和漫画时，图像着色是最费力和昂贵的阶段之一。自动着色过程可以帮助减少制作漫画或动画电影所需的成本和时间。",{"type":18,"tag":26,"props":152,"children":153},{},[154],{"type":24,"value":155},"Colorization算法是来自加里福利亚大学的一项研究，采用的是CNN的结构。该算法可以实现灰度图像的自动着色，由Richard Zhang等人在论文Colorful Image Colorization中提出，并发表在2016年的ECCV会议中。该模型由8个conv层组成，每个conv层由2个或3个重复的卷积层和ReLU层组成，后面跟着一个BatchNorm层。网络中不包含池化层。",{"type":18,"tag":26,"props":157,"children":158},{},[159],{"type":24,"value":160},"网络特点",{"type":18,"tag":26,"props":162,"children":163},{},[164],{"type":24,"value":165},"1、设计了一个合适的损失函数来处理着色问题中的多模不确定性，维持了颜色的多样性。",{"type":18,"tag":26,"props":167,"children":168},{},[169],{"type":24,"value":170},"2、将图像着色任务转化为一个自监督表达学习的任务。",{"type":18,"tag":26,"props":172,"children":173},{},[174],{"type":24,"value":175},"3、在一些基准模型上获得了最好的效果。",{"type":18,"tag":26,"props":177,"children":178},{},[179],{"type":18,"tag":30,"props":180,"children":181},{},[182],{"type":24,"value":183},"03",{"type":18,"tag":26,"props":185,"children":186},{},[187],{"type":18,"tag":30,"props":188,"children":189},{},[190],{"type":24,"value":191},"数据处理",{"type":18,"tag":26,"props":193,"children":194},{},[195],{"type":24,"value":196},"开始实验之前，请确保本地已经安装了Python环境并安装了MindSpore Vision套件。",{"type":18,"tag":198,"props":199,"children":201},"h2",{"id":200},"_1数据准备",[202],{"type":18,"tag":30,"props":203,"children":204},{},[205],{"type":24,"value":206},"1.数据准备",{"type":18,"tag":26,"props":208,"children":209},{},[210,212],{"type":24,"value":211},"本案例使用ImageNet数据集作为训练集和测试集。请在官网（",{"type":18,"tag":78,"props":213,"children":216},{"href":214,"rel":215},"https://www.image-net.org/%EF%BC%89%E4%B8%8B%E8%BD%BD%E3%80%82%E8%AE%AD%E7%BB%83%E9%9B%86%E4%B8%AD%E5%8C%85%E5%90%AB1000%E4%B8%AA%E7%B1%BB%E5%88%AB%EF%BC%8C%E6%80%BB%E8%AE%A1%E5%A4%A7%E7%BA%A6120%E4%B8%87%E5%BC%A0%E5%9B%BE%E7%89%87%EF%BC%8C%E6%B5%8B%E8%AF%95%E9%9B%86%E4%B8%AD%E5%8C%85%E5%90%AB5%E4%B8%87%E5%9B%BE%E7%89%87%E3%80%82",[82],[217],{"type":24,"value":218},"https://www.image-net.org/）下载。训练集中包含1000个类别，总计大约120万张图片，测试集中包含5万图片。",{"type":18,"tag":26,"props":220,"children":221},{},[222],{"type":24,"value":223},"解压后的数据集目录结构如下：",{"type":18,"tag":101,"props":225,"children":227},{"code":226},".dataset/\n├── ILSVRC2012_devkit_t12.tar.gz\n├── train/\n└── val/\n",[228],{"type":18,"tag":106,"props":229,"children":230},{"__ignoreMap":7},[231],{"type":24,"value":226},{"type":18,"tag":26,"props":233,"children":234},{},[235],{"type":18,"tag":30,"props":236,"children":237},{},[238],{"type":24,"value":239},"2.训练集可视化",{"type":18,"tag":101,"props":241,"children":243},{"code":242},"import os\nimport argparse\nfrom tqdm import tqdm\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport mindspore\nfrom src.process_datasets.data_generator import ColorizationDataset\n\n\n#加载参数\nparser = argparse.ArgumentParser()\nparser.add_argument('--image_dir', type=str, default='./dataset/train', help='path to dataset')\nparser.add_argument('--batch_size', type=int, default=4)\nparser.add_argument('--num_parallel_workers', type=int, default=1)\nparser.add_argument('--shuffle', type=bool, default=True)\nargs = parser.parse_args(args=[])\nplt.figure()\n\n#加载数据集\ndataset = ColorizationDataset(args.image_dir, args.batch_size, args.shuffle, args.num_parallel_workers)\ndata = dataset.run()\nshow_data = next(data.create_tuple_iterator())\nshow_images_original, _ = show_data\nshow_images_original = show_images_original.asnumpy()\n#循环处理\nfor i in range(1, 5):\n    plt.subplot(1, 4, i)\n    temp = show_images_original[i-1]\n    temp = np.clip(temp, 0, 1)\n    plt.imshow(temp)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05, hspace=0)\n",[244],{"type":18,"tag":106,"props":245,"children":246},{"__ignoreMap":7},[247],{"type":24,"value":242},{"type":18,"tag":26,"props":249,"children":250},{},[251],{"type":18,"tag":90,"props":252,"children":254},{"alt":92,"src":253},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024055.17174423640043909353576517054604:50540419031426:2400:CB6B6C6CAF18664041E557333D55B8F79AEC993E29C6B7A2CCD3B2525D67C405.png",[],{"type":18,"tag":198,"props":256,"children":258},{"id":257},"_3构建网络",[259],{"type":18,"tag":30,"props":260,"children":261},{},[262],{"type":24,"value":263},"3.构建网络",{"type":18,"tag":26,"props":265,"children":266},{},[267],{"type":24,"value":268},"处理完数据后进行网络的搭建，Colorization的网络结构较为简单，采用CNN的网络结构。具体结构如下图所示。",{"type":18,"tag":26,"props":270,"children":271},{},[272],{"type":18,"tag":90,"props":273,"children":275},{"alt":92,"src":274},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024116.57931036006736044653011716285671:50540419031426:2400:72EDE953FF8C556DBDABBE6B37CD6BC06B8ED098234665E240E39B29C8B6910E.png",[],{"type":18,"tag":26,"props":277,"children":278},{},[279],{"type":24,"value":280},"网络的详细配置为：",{"type":18,"tag":26,"props":282,"children":283},{},[284],{"type":18,"tag":90,"props":285,"children":287},{"alt":92,"src":286},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024151.64954655338767973664990066738395:50540419031426:2400:9F93D18354CC52AAE5BD3FC44B0C959F17C92F021A1C61FECF8014F0035487A2.png",[],{"type":18,"tag":26,"props":289,"children":290},{},[291],{"type":24,"value":292},"其中X输出的空间分辨率，C输出的通道数;S计算步幅，大于1表示卷积后下采样，小于1表示卷积前上采样;D内核扩张;Sa在所有前一层的累积步数(积于前一层的所有步数);相对于输入的层的有效膨胀(层膨胀乘以累积步幅);BN层后是否使用BatchNorm层;L表示是否施加了1x1的卷积和交叉熵损失层。",{"type":18,"tag":198,"props":294,"children":296},{"id":295},"_4损失函数",[297],{"type":18,"tag":30,"props":298,"children":299},{},[300],{"type":24,"value":301},"4.损失函数",{"type":18,"tag":26,"props":303,"children":304},{},[305],{"type":18,"tag":30,"props":306,"children":307},{},[308],{"type":18,"tag":90,"props":309,"children":311},{"alt":92,"src":310},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024224.94966002946470738720376215451305:50540419031426:2400:21922E885D89D7782D2426F9A37E99C8D41D0C413F73EC382E32034AA19FDEE1.png",[],{"type":18,"tag":26,"props":313,"children":314},{},[315],{"type":24,"value":316},"分类再平衡。",{"type":18,"tag":26,"props":318,"children":319},{},[320],{"type":18,"tag":90,"props":321,"children":323},{"alt":92,"src":322},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024248.23867593151821713779987601699968:50540419031426:2400:DA9920ACDBBDE22AF6925E9DDF31887507FD4FDF701FD224ECC5F48F1B4D060A.png",[],{"type":18,"tag":26,"props":325,"children":326},{},[327],{"type":24,"value":328},"分类概率到点估计。",{"type":18,"tag":26,"props":330,"children":331},{},[332],{"type":18,"tag":90,"props":333,"children":335},{"alt":92,"src":334},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024307.63611508399424449590200956736666:50540419031426:2400:3A45C561FB34F77D3CAFCF17B284BB783C7CD65F0CED7EF5073B8D71A7364DF2.png",[],{"type":18,"tag":101,"props":337,"children":339},{"code":338},"class NetLoss(nn.Cell):\n    \"\"\"连接网络和损失\"\"\"\n    def __init__(self, net):\n        super(NetLoss, self).__init__(auto_prefix=True)\n        self.net = net\n        self.loss = nn.CrossEntropyLoss(reduction='none')\n\n    def construct(self, images, targets, boost, mask):\n        \"\"\" build network \"\"\"\n        outputs = self.net(images)\n        boost_nongray = boost * mask\n        squeeze = mindspore.ops.Squeeze(1)\n        boost_nongray = squeeze(boost_nongray)\n        result = self.loss(outputs, targets)\n        result_loss = (result * boost_nongray).mean()\n        return result_loss\n",[340],{"type":18,"tag":106,"props":341,"children":342},{"__ignoreMap":7},[343],{"type":24,"value":338},{"type":18,"tag":26,"props":345,"children":346},{},[347],{"type":18,"tag":30,"props":348,"children":349},{},[350],{"type":24,"value":351},"04",{"type":18,"tag":26,"props":353,"children":354},{},[355],{"type":18,"tag":30,"props":356,"children":357},{},[358],{"type":24,"value":359},"模型实现",{"type":18,"tag":198,"props":361,"children":363},{"id":362},"昇思mindspore要求将损失函数优化器等操作也看做nncell的子类所以我们可以自定义color类将网络和loss连接起来",[364],{"type":24,"value":365},"昇思MindSpore要求将损失函数、优化器等操作也看做nn.Cell的子类，所以我们可以自定义Color类，将网络和loss连接起来。",{"type":18,"tag":101,"props":367,"children":369},{"code":368},"class ColorModel(nn.Cell):\n    \"\"\"定义Colorization网络\"\"\"\n\n    def __init__(self, my_train_one_step_cell_for_net):\n        super(ColorModel, self).__init__(auto_prefix=True)\n        self.my_train_one_step_cell_for_net = my_train_one_step_cell_for_net\n\n    def construct(self, result, targets, boost, mask):\n        loss = self.my_train_one_step_cell_for_net(result, targets, boost,\n                                                   mask)\n        return loss\n",[370],{"type":18,"tag":106,"props":371,"children":372},{"__ignoreMap":7},[373],{"type":24,"value":368},{"type":18,"tag":198,"props":375,"children":377},{"id":376},"_1算法流程",[378],{"type":18,"tag":30,"props":379,"children":380},{},[381],{"type":24,"value":382},"1.算法流程",{"type":18,"tag":26,"props":384,"children":385},{},[386],{"type":18,"tag":30,"props":387,"children":388},{},[389],{"type":18,"tag":90,"props":390,"children":392},{"alt":92,"src":391},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024332.60782434943403401368122124900004:50540419031426:2400:7E23E1A598B86E083AE1B15A9B8176A2F45DDE1E161FCD2695938F64BBBC9CF2.png",[],{"type":18,"tag":198,"props":394,"children":396},{"id":395},"_2模型训练",[397,399],{"type":24,"value":398},"**2.**",{"type":18,"tag":30,"props":400,"children":401},{},[402],{"type":24,"value":403},"模型训练",{"type":18,"tag":26,"props":405,"children":406},{},[407],{"type":24,"value":408},"实例化损失函数，优化器，使用Model接口编译网络，开始训练。",{"type":18,"tag":101,"props":410,"children":412},{"code":411},"import argparse\nimport os\nfrom tqdm import tqdm\n\nimport mindspore\nimport mindspore.nn as nn\nfrom mindspore import context\nfrom mindspore import ops\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom src.utils.utils import PriorBoostLayer, NNEncLayer, NonGrayMaskLayer, decode\n\nfrom src.model.model import ColorizationModel\nfrom src.model.colormodel import ColorModel\nfrom src.process_datasets.data_generator import ColorizationDataset\nfrom src.losses.loss import NetLoss\nimport warnings\n\nwarnings.filterwarnings('ignore')\n#加载参数\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--device_target',\n                    default='GPU',\n                    choices=['CPU', 'GPU', 'Ascend'],\n                    type=str)\nparser.add_argument('--device_id', default=1, type=int)\nparser.add_argument('--image_dir',\n                    type=str,\n                    default='./dataset/train',\n                    help='path to dataset')\nparser.add_argument('--checkpoint_dir',\n                    type=str,\n                    default='./checkpoints',\n                    help='path for saving trained model')\nparser.add_argument('--test_dirs',\n                    type=str,\n                    default='./images',\n                    help='path for saving trained model')\nparser.add_argument('--resource', type=str, default='./src/resources/')\nparser.add_argument('--shuffle', type=bool, default=True)\nparser.add_argument('--num_epochs', type=int, default=2)\nparser.add_argument('--batch_size', type=int, default=64)\nparser.add_argument('--num_parallel_workers', type=int, default=1)\nparser.add_argument('--learning_rate', type=float, default=0.5e-4)\nparser.add_argument('--save_step',\n                    type=int,\n                    default=200,\n                    help='step size for saving trained models')\nargs = parser.parse_args(args=[])\n\nif context.get_context('device_id') != args.device_id:\n    context.set_context(mode=context.GRAPH_MODE, device_target=args.device_target, device_id=args.device_id)\n\nencode_layer = NNEncLayer(args)\nboost_layer = PriorBoostLayer(args)\nnon_gray_mask = NonGrayMaskLayer()\n\n#网络实例化\nnet = ColorizationModel()\n\n#设置优化器\nnet_args = nn.Adam(net.trainable_params(), learning_rate=args.learning_rate)\n\n#实例化NetLoss\nnet_with_criterion = NetLoss(net)\n\n#实例化TrainOneStepWithLossScaleCell\nscale_sense = nn.FixedLossScaleUpdateCell(1)\nmyTrainOneStepCellForNet = nn.TrainOneStepWithLossScaleCell(\n    net_with_criterion, net_args, scale_sense=scale_sense)\ncolormodel = ColorModel(myTrainOneStepCellForNet)\ncolormodel.set_train()\n\n#加载数据集\ndataset = ColorizationDataset(args.image_dir, args.batch_size, args.shuffle,\n                              args.num_parallel_workers)\ndata = dataset.run().create_tuple_iterator()\n\nfor epoch in range(args.num_epochs):\n    iters = 0\n\n    #为每轮训练读入数据\n    for images, img_ab in tqdm(data):\n        images = ops.expand_dims(images, 1)\n        encode, max_encode = encode_layer.forward(img_ab)\n        targets = mindspore.Tensor(max_encode, dtype=mindspore.int32)\n        boost = mindspore.Tensor(boost_layer.forward(encode),\n                                 dtype=mindspore.float32)\n        mask = mindspore.Tensor(non_gray_mask.forward(img_ab),\n                                dtype=mindspore.float32)\n        net_loss = colormodel(images, targets, boost, mask)\n        #输出训练数据\n        print('[%d/%d]\\tLoss_net:: %.4f' % (epoch + 1, args.num_epochs, net_loss[0]))\n        #中间保存训练结果\n        if iters % args.save_step == 0:\n            if not os.path.exists(args.checkpoint_dir):\n                os.makedirs(args.checkpoint_dir)\n            mindspore.save_checkpoint(\n                net,\n                os.path.join(args.checkpoint_dir, 'net' + str(epoch + 1) + '_' +\n                             str(iters) + '.ckpt'))\n            img_ab_313 = net(images)\n            out_max = np.argmax(img_ab_313[0].asnumpy(), axis=0)\n            color_img = decode(images, img_ab_313, args.resource)\n            if not os.path.exists(args.test_dirs):\n                os.makedirs(args.test_dirs)\n            plt.imsave(\n                args.test_dirs + '/' + str(epoch + 1) + '_' + str(iters) +\n                '%s_infer.png', color_img)\n        iters = iters + 1\n",[413],{"type":18,"tag":106,"props":414,"children":415},{"__ignoreMap":7},[416],{"type":24,"value":411},{"type":18,"tag":418,"props":419,"children":421},"h3",{"id":420},"_3模型推理",[422],{"type":18,"tag":30,"props":423,"children":424},{},[425],{"type":24,"value":426},"3.模型推理",{"type":18,"tag":26,"props":428,"children":429},{},[430],{"type":24,"value":431},"运行下面代码，将一张灰度图像输入到网络中，即可生成具有合理色彩的图像。",{"type":18,"tag":101,"props":433,"children":435},{"code":434},"import argparse\nimport os\n\nimport matplotlib.pyplot as plt\nimport mindspore\nimport numpy as np\nfrom mindspore import (context, load_checkpoint, load_param_into_net, ops)\nfrom mindspore.train.model import Model\nfrom tqdm import tqdm\n\nfrom src.model.model import ColorizationModel\nfrom src.process_datasets.data_generator import ColorizationDataset\nfrom src.utils.utils import decode\n\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--img_path', type=str, default='./dataset/val')\nparser.add_argument('--ckpt_path', type=str, default='./checkpoints/net44_1600.ckpt')\nparser.add_argument('--resource', type=str, default='./src/resources/')\nparser.add_argument('--device_target', default='GPU', choices=['CPU', 'GPU', 'Ascend'], type=str)\nparser.add_argument('--device_id', default=1, type=int)\nparser.add_argument('--infer_dirs', default='./dataset/output', type=str)\nargs = parser.parse_args(args=[])\n\n\nmindspore.context.set_context(mode=context.GRAPH_MODE, device_target=args.device_target, device_id=args.device_id)\n\n#实例化网络\nnet = ColorizationModel()\n\n#加载参数\nparam_dict = load_checkpoint(args.ckpt_path)\nload_param_into_net(net, param_dict)\ncolorizer = Model(net)\ndataset = ColorizationDataset(args.img_path, 1, prob=0)\ndata = dataset.run().create_tuple_iterator()\niters = 0\n\nif not os.path.exists(args.infer_dirs):\n    os.makedirs(args.infer_dirs)\n\n#循环处理图像\nfor images, img_ab in tqdm(data):\n    images = ops.expand_dims(images, 1)\n    img_ab_313 = colorizer.predict(images)\n    out_max = np.argmax(img_ab_313[0].asnumpy(), axis=0)\n    color_img = decode(images, img_ab_313, args.resource)\n    plt.imsave(args.infer_dirs+'/'+str(iters)+'_infer.png', color_img)\n    iters = iters + 1\n",[436],{"type":18,"tag":106,"props":437,"children":438},{"__ignoreMap":7},[439],{"type":24,"value":434},{"type":18,"tag":26,"props":441,"children":442},{},[443],{"type":18,"tag":90,"props":444,"children":446},{"alt":92,"src":445},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024405.99671080362246064753067855003030:50540419031426:2400:E457F49AAEE76C7BE54B0679BA498A993DE8AD55542CB5CAB6E13DEBFFB708D7.png",[],{"type":18,"tag":26,"props":448,"children":449},{},[450],{"type":18,"tag":90,"props":451,"children":453},{"alt":92,"src":452},"https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/e64/154/b38/90a1d5d431e64154b387b3660e356ff5.20230420024417.48909088688023497532075133154557:50540419031426:2400:CE380883533B684ED44CDEA75193D485B0EBC8BBF8F4474D37255B80CACC6591.png",[],{"type":18,"tag":26,"props":455,"children":456},{},[457],{"type":24,"value":458},"往期回顾",{"type":18,"tag":26,"props":460,"children":461},{},[462],{"type":18,"tag":78,"props":463,"children":466},{"href":464,"rel":465},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247592826&idx=1&sn=1a02eb32ea94800f7911f73ad171db71&chksm=c11e7b35f669f223599952cb8492c2ca9e0221b8c1ae5ea5f29489cda5ffb6fb0cb8bcbfae2c&scene=21#wechat_redirect",[82],[467],{"type":24,"value":468},"昇思应用案例 | 模型压缩50倍，超轻量级网络CNN模型SqueezeNet技术实践",{"type":18,"tag":26,"props":470,"children":471},{},[472],{"type":18,"tag":78,"props":473,"children":476},{"href":474,"rel":475},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247586774&idx=1&sn=af460e28db1139930436cd17e35545c2&chksm=c11e8399f6690a8ffa60bb2ff6337c1be98dce4c3a47c05651942ce04cd853acfb7a02b0c6e7&scene=21#wechat_redirect",[82],[477],{"type":24,"value":478},"昇思应用案例 | 不用学PS，属于程序员的修图方式来了",{"type":18,"tag":26,"props":480,"children":481},{},[482],{"type":18,"tag":78,"props":483,"children":486},{"href":484,"rel":485},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247585783&idx=1&sn=5fdf3bcb37504ae50e8aa1316fa76a2c&chksm=c11e9fb8f66916aedc7d0db826d886c79838f8759096dc27e7466b1e23c933b27380838b4883&scene=21#wechat_redirect",[82],[487],{"type":24,"value":488},"昇思应用案例 | 实现图像风格迁移—Pix2Pix",{"type":18,"tag":26,"props":490,"children":491},{},[492],{"type":18,"tag":78,"props":493,"children":496},{"href":494,"rel":495},"http://mp.weixin.qq.com/s?__biz=MzkxMTM2MjMzNg==&mid=2247584874&idx=1&sn=6114074ac765690bf9c33dfd7753cf78&chksm=c11e9c25f6691533285a8dbf1a10c3331aca2136cbf521299d3212d669dd33be9267e7a00567&scene=21#wechat_redirect",[82],[497],{"type":24,"value":498},"昇思应用案例 | 三维重建之神经辐射场（NeRF）",{"title":7,"searchDepth":500,"depth":500,"links":501},4,[502,504,505,506,507,508],{"id":200,"depth":503,"text":206},2,{"id":257,"depth":503,"text":263},{"id":295,"depth":503,"text":301},{"id":362,"depth":503,"text":365},{"id":376,"depth":503,"text":382},{"id":395,"depth":503,"text":509,"children":510},"**2.**模型训练",[511],{"id":420,"depth":512,"text":426},3,"markdown","content:technology-blogs:zh:2236.md","content","technology-blogs/zh/2236.md","technology-blogs/zh/2236","md",1776506121321]