[{"data":1,"prerenderedAt":436},["ShallowReactive",2],{"content-query-VfeAipOgCA":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":430,"_id":431,"_source":432,"_file":433,"_stem":434,"_extension":435},"/technology-blogs/zh/2216","zh",false,"","MindSpore为你添彩-自动着色算法之Colorization实践","自动着色算法之Colorization   工程代码地址","2023-04-02","https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2023/04/06/ddf6493feac24ea2ba274177586b2116.png","technology-blogs","实践",{"type":15,"children":16,"toc":427},"root",[17,25,31,43,48,53,58,63,68,73,83,88,97,102,110,115,120,125,133,138,146,151,159,164,172,180,185,193,201,206,214,219,227,232,240,245,250,258,263,271,276,284,289,297,302,310,318,323,331,336,344,349,354,362,367,375,380,388,396,401,409,417,422],{"type":18,"tag":19,"props":20,"children":22},"element","h1",{"id":21},"mindspore为你添彩-自动着色算法之colorization实践",[23],{"type":24,"value":8},"text",{"type":18,"tag":26,"props":27,"children":28},"p",{},[29],{"type":24,"value":30},"自动着色算法之Colorization",{"type":18,"tag":26,"props":32,"children":33},{},[34],{"type":18,"tag":35,"props":36,"children":40},"a",{"href":37,"rel":38},"https://github.com/mindspore-courses/applications/blob/master/Colorization/",[39],"nofollow",[41],{"type":24,"value":42},"工程代码地址",{"type":18,"tag":26,"props":44,"children":45},{},[46],{"type":24,"value":47},"模型简介",{"type":18,"tag":26,"props":49,"children":50},{},[51],{"type":24,"value":52},"Colorization算法是来自加里福利亚大学的一项研究，采用的是CNN的结构。该算法可以实现灰度图像的自动着色，由Richard Zhang等人在论文Colorful Image Colorization中提出，并发表在2016年的ECCV会议中。该模型由8个conv层组成，每个conv层由2个或3个重复的卷积层和ReLU层组成，后面跟着一个BatchNorm层。网络中不包含池化层。",{"type":18,"tag":26,"props":54,"children":55},{},[56],{"type":24,"value":57},"网络特点",{"type":18,"tag":26,"props":59,"children":60},{},[61],{"type":24,"value":62},"设计了一个合适的损失函数来处理着色问题中的多模不确定性，维持了颜色的多样性。",{"type":18,"tag":26,"props":64,"children":65},{},[66],{"type":24,"value":67},"将图像着色任务转化为一个自监督表达学习的任务。",{"type":18,"tag":26,"props":69,"children":70},{},[71],{"type":24,"value":72},"在一些基准模型上获得了最好的效果。",{"type":18,"tag":74,"props":75,"children":77},"pre",{"code":76},"    encode_layer = NNEncLayer(opt) \n\n    boost_layer = PriorBoostLayer(opt) \n\n    non_gray_mask = NonGrayMaskLayer() \n\n    net = ColorizationModel() \n\n    net_opt = nn.Adam(net.trainable_params(), learning_rate=opt.learning_rate) \n\n    net_with_criterion = NetLoss(net) \n\n    scale_sense = nn.FixedLossScaleUpdateCell(1) \n\n    my_train_one_step_cell_for_net = nn.TrainOneStepWithLossScaleCell(net_with_criterion, net_opt, \n\n                                                                      scale_sense=scale_sense) \n\n    colormodel = ColorModel(my_train_one_step_cell_for_net) \n\n    colormodel.set_train() \n",[78],{"type":18,"tag":79,"props":80,"children":81},"code",{"__ignoreMap":7},[82],{"type":24,"value":76},{"type":18,"tag":26,"props":84,"children":85},{},[86],{"type":24,"value":87},"算法的主要原理是，将一张LAB格式灰度图片的L通道，输入模型进行推理，推理出其AB通道，最后将原始的L通道和推理出的AB通道结合起来，得到一张上色的图片。",{"type":18,"tag":26,"props":89,"children":90},{},[91],{"type":18,"tag":92,"props":93,"children":96},"img",{"alt":94,"src":95},"cke_8751.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402102706.38326545387152949911969826566408:50540405075128:2400:734CDFFF50B8CF268372A65BF2280DAADF14011CDE1914E6796E95F49C0B814E.png",[],{"type":18,"tag":26,"props":98,"children":99},{},[100],{"type":24,"value":101},"一般常见的图片格式是RGB，有三个通道分别表示红色、绿色、蓝色。三个颜色组合出各种不同的颜色。而LAB图片格式的L通道表示图像的亮度，取值范围为0到100，颜色越大表示颜色越亮。AB的值域都是从-128到+128，A代表从绿色到红色的分量，B代表从蓝色到黄色的分量。",{"type":18,"tag":26,"props":103,"children":104},{},[105],{"type":18,"tag":92,"props":106,"children":109},{"alt":107,"src":108},"cke_10600.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402102719.72680448904095564788756463474921:50540405075128:2400:F14D437E4A452C57EDE67569D4EEDFAD32FF4B6194295DE215AD9CC1F9E3CBEB.png",[],{"type":18,"tag":26,"props":111,"children":112},{},[113],{"type":24,"value":114},"数据准备",{"type":18,"tag":26,"props":116,"children":117},{},[118],{"type":24,"value":119},"本案例使用ImageNet数据集作为训练集和测试集。可以在官网下载。训练集中包含1000个类别，总计大约120万张图片，测试集中包含5万图片。",{"type":18,"tag":26,"props":121,"children":122},{},[123],{"type":24,"value":124},"152G 建议通过bt下载。",{"type":18,"tag":26,"props":126,"children":127},{},[128],{"type":18,"tag":92,"props":129,"children":132},{"alt":130,"src":131},"cke_14286.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402102755.60905937456638722126243001189506:50540405075128:2400:7342807D60FA41F57CDFF704FF28B1A38C9E9343E6F2CEC0D8FEE3BE27D459CD.png",[],{"type":18,"tag":26,"props":134,"children":135},{},[136],{"type":24,"value":137},"下载完成后需要解压缩。",{"type":18,"tag":26,"props":139,"children":140},{},[141],{"type":18,"tag":92,"props":142,"children":145},{"alt":143,"src":144},"cke_16433.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402102809.85860531108422497351808972531557:50540405075128:2400:159305493BCB7E242AB1D9D3B09B8C8209435CFA83B61508E32EF43C1CA3DC4E.png",[],{"type":18,"tag":26,"props":147,"children":148},{},[149],{"type":24,"value":150},"训练集可视化",{"type":18,"tag":74,"props":152,"children":154},{"code":153},"import os \n\nimport argparse \n\nfrom tqdm import tqdm \n\nimport numpy as np \n\nimport matplotlib.pyplot as plt \n\nimport mindspore \n\nfrom src.process_datasets.data_generator import ColorizationDataset \n\n  \n\n  \n\n#加载参数 \n\nparser = argparse.ArgumentParser() \n\nparser.add_argument('--image_dir', type=str, default='./dataset/train', help='path to dataset') \n\nparser.add_argument('--batch_size', type=int, default=4) \n\nparser.add_argument('--num_parallel_workers', type=int, default=1) \n\nparser.add_argument('--shuffle', type=bool, default=True) \n\nargs = parser.parse_args(args=[]) \n\nplt.figure() \n\n  \n\n#加载数据集 \n\ndataset = ColorizationDataset(args.image_dir, args.batch_size, args.shuffle, args.num_parallel_workers) \n\ndata = dataset.run() \n\nshow_data = next(data.create_tuple_iterator()) \n\nshow_images_original, _ = show_data \n\nshow_images_original = show_images_original.asnumpy() \n\n#循环处理 \n\nfor i in range(1, 5): \n\n    plt.subplot(1, 4, i) \n\n    temp = show_images_original[i-1] \n\n    temp = np.clip(temp, 0, 1) \n\n    plt.imshow(temp) \n\n    plt.axis(\"off\") \n\n    plt.subplots_adjust(wspace=0.05, hspace=0) \n",[155],{"type":18,"tag":79,"props":156,"children":157},{"__ignoreMap":7},[158],{"type":24,"value":153},{"type":18,"tag":26,"props":160,"children":161},{},[162],{"type":24,"value":163},"会提示缺少依赖",{"type":18,"tag":26,"props":165,"children":166},{},[167],{"type":18,"tag":92,"props":168,"children":171},{"alt":169,"src":170},"cke_27705.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103000.70768421986033211281204210717653:50540405075128:2400:68BEEF5082F8B50600CA44E2278CBD1CC97EE475E9E1A59C6AFC04FF800D6488.png",[],{"type":18,"tag":26,"props":173,"children":174},{},[175],{"type":18,"tag":92,"props":176,"children":179},{"alt":177,"src":178},"cke_29875.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103015.33064890754761418864474611985854:50540405075128:2400:697ACB8B79342D686BD191DAD1121E38CE08D1C241B145AFFF8AF73E63E0AC17.png",[],{"type":18,"tag":26,"props":181,"children":182},{},[183],{"type":24,"value":184},"可视化的结果如下：代码中缺少plt.show(),需要加上。",{"type":18,"tag":26,"props":186,"children":187},{},[188],{"type":18,"tag":92,"props":189,"children":192},{"alt":190,"src":191},"cke_32049.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103025.55092921121760332999233320889012:50540405075128:2400:C493F01B5E823071A6DE6A754D2E1CF1F657A991F7467E1CF813C3AF92DF16B9.png",[],{"type":18,"tag":26,"props":194,"children":195},{},[196],{"type":18,"tag":92,"props":197,"children":200},{"alt":198,"src":199},"cke_34325.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103032.68157628140579378860400882426482:50540405075128:2400:AC8FBC463B96BCB5C5096FE1AD70A87A8E2A93948CAD2897D9A0D8F4133A3DB9.png",[],{"type":18,"tag":26,"props":202,"children":203},{},[204],{"type":24,"value":205},"接下来是训练模型，在src目录下的train.py",{"type":18,"tag":26,"props":207,"children":208},{},[209],{"type":18,"tag":92,"props":210,"children":213},{"alt":211,"src":212},"cke_36654.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103048.03736660673747851987779872640521:50540405075128:2400:F3F097DD1C6D5ACC874ED650CD53DDB498400B81D9A2B33FE9F495B61E50131F.png",[],{"type":18,"tag":26,"props":215,"children":216},{},[217],{"type":24,"value":218},"同样会报缺少依赖",{"type":18,"tag":26,"props":220,"children":221},{},[222],{"type":18,"tag":92,"props":223,"children":226},{"alt":224,"src":225},"cke_40585.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103117.52400489858905242408174043666304:50540405075128:2400:0DE1E8F7C2497ACF033F07190C9DF6B46FC87B6145A7DDAE2A9944CDBA94B6AA.png",[],{"type":18,"tag":26,"props":228,"children":229},{},[230],{"type":24,"value":231},"补齐依赖后继续",{"type":18,"tag":26,"props":233,"children":234},{},[235],{"type":18,"tag":92,"props":236,"children":239},{"alt":237,"src":238},"cke_43072.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103130.99975472626778384470681369757286:50540405075128:2400:299DDDE1AC4A40554FDF55B6F2837BA129B8CDBD6EC4ABD0E5C449FF0E7F2898.png",[],{"type":18,"tag":26,"props":241,"children":242},{},[243],{"type":24,"value":244},"再次运行仍然报错，",{"type":18,"tag":26,"props":246,"children":247},{},[248],{"type":24,"value":249},"查看代码，确定device_id默认值为1，也就是第二张卡，由于只有一张GPU卡，所以会报错，建议这里默认值修改成0",{"type":18,"tag":26,"props":251,"children":252},{},[253],{"type":18,"tag":92,"props":254,"children":257},{"alt":255,"src":256},"cke_52903.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103201.39341755009648458632606871468490:50540405075128:2400:9DF4A966A882205FC48228D7C675088B25E5C030348287C0E8A9735214D61636.png",[],{"type":18,"tag":26,"props":259,"children":260},{},[261],{"type":24,"value":262},"修改后继续",{"type":18,"tag":26,"props":264,"children":265},{},[266],{"type":18,"tag":92,"props":267,"children":270},{"alt":268,"src":269},"cke_55595.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103216.21617027934053284037247822641828:50540405075128:2400:241BA3886DC109060F4627A5E92F6EE8E8A2C86AB66A1F0C070EF144E00C6989.png",[],{"type":18,"tag":26,"props":272,"children":273},{},[274],{"type":24,"value":275},"GPU的12G的显存，batch size选128 显存不够用了。降低到64试试。",{"type":18,"tag":26,"props":277,"children":278},{},[279],{"type":18,"tag":92,"props":280,"children":283},{"alt":281,"src":282},"cke_58231.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103229.27510861063446117029861838394256:50540405075128:2400:1E9E4F248290A71BB51D791C42D0BF47F6C9B0FF3F18C3D8449FC25739C84A19.png",[],{"type":18,"tag":26,"props":285,"children":286},{},[287],{"type":24,"value":288},"查看显卡状态，功率200w 显存使用接近12G.",{"type":18,"tag":26,"props":290,"children":291},{},[292],{"type":18,"tag":92,"props":293,"children":296},{"alt":294,"src":295},"cke_60976.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103234.39234046362507257723847326557110:50540405075128:2400:A8ED59768977066CEEAF6DEF1A545FC2AAAB2BEBB9E8BCC70634C5B74AE7B819.png",[],{"type":18,"tag":26,"props":298,"children":299},{},[300],{"type":24,"value":301},"跑了大概12个小时，还是没跑完。看了单卡还是太慢了。",{"type":18,"tag":26,"props":303,"children":304},{},[305],{"type":18,"tag":92,"props":306,"children":309},{"alt":307,"src":308},"cke_66751.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103255.20369043505860933294518202501505:50540405075128:2400:969C561B685582CCD6745F7BD5CA45790CC5898B6BE95C0C6A3C937254B35E65.png",[],{"type":18,"tag":26,"props":311,"children":312},{},[313],{"type":18,"tag":92,"props":314,"children":317},{"alt":315,"src":316},"cke_63828.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103241.67582548957548017113619768431807:50540405075128:2400:BBDF092F7BD294DA2425A8784E9196600F6E57067EB2C9ECB35CC55C6D004A8A.png",[],{"type":18,"tag":26,"props":319,"children":320},{},[321],{"type":24,"value":322},"保存的模型文件都有22G了",{"type":18,"tag":26,"props":324,"children":325},{},[326],{"type":18,"tag":92,"props":327,"children":330},{"alt":328,"src":329},"cke_69744.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103300.92160051339541251381887429298383:50540405075128:2400:DF2E638F40F4B52A8459DAFB161D86B9E2632A5F4394BA06AD3A3516847A7446.png",[],{"type":18,"tag":26,"props":332,"children":333},{},[334],{"type":24,"value":335},"停止训练，选取最新的权重进行推理。",{"type":18,"tag":26,"props":337,"children":338},{},[339],{"type":18,"tag":92,"props":340,"children":343},{"alt":341,"src":342},"cke_73046.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103313.96567612860805163253017777887236:50540405075128:2400:9B56B901787DCEA842C8C44CB51AC91CFD5C7214FDD3EDF36BFF71FCAFB3067A.png",[],{"type":18,"tag":26,"props":345,"children":346},{},[347],{"type":24,"value":348},"直接使用infer.py, 看了数据集读取有点问题。",{"type":18,"tag":26,"props":350,"children":351},{},[352],{"type":24,"value":353},"下载的数据集val下面是没有文件夹的，增加一个文件夹。",{"type":18,"tag":26,"props":355,"children":356},{},[357],{"type":18,"tag":92,"props":358,"children":361},{"alt":359,"src":360},"cke_80278.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103337.88807280763597404430882106704495:50540405075128:2400:2951579207C9DE5E2C3E95F3F581E6D98C8A318A23BA442CC1BDB05E69FE19F0.png",[],{"type":18,"tag":26,"props":363,"children":364},{},[365],{"type":24,"value":366},"同样会遇到device id的问题，默认值修改为0.",{"type":18,"tag":26,"props":368,"children":369},{},[370],{"type":18,"tag":92,"props":371,"children":374},{"alt":372,"src":373},"cke_76434.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103323.81160836748921683155514769451738:50540405075128:2400:77BEC23B16CC81442F4929C694480BEA9E09629337B045FE6994AF421E1C7F03.png",[],{"type":18,"tag":26,"props":376,"children":377},{},[378],{"type":24,"value":379},"最终着色的结果，中间的为mindspore预训练模型推理的结果，最右侧为本次训练模型的推理结果。",{"type":18,"tag":26,"props":381,"children":382},{},[383],{"type":18,"tag":92,"props":384,"children":387},{"alt":385,"src":386},"cke_83561.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103348.10044797500592067571927800446490:50540405075128:2400:A93E4089C8181C7BB560DFAB7A7B40F82A03D6D7BD3834A06F288458F3FF1703.png",[],{"type":18,"tag":26,"props":389,"children":390},{},[391],{"type":18,"tag":92,"props":392,"children":395},{"alt":393,"src":394},"cke_87048.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103353.28941748935967236192063772313286:50540405075128:2400:F7742615E89E4C43ADDC02EF08C758DBCCBF45F65DB7C48DF98C6C37ADAC6C71.png",[],{"type":18,"tag":26,"props":397,"children":398},{},[399],{"type":24,"value":400},"==，好像哪不对，输入应该是灰度图片。要先处理下原图。",{"type":18,"tag":26,"props":402,"children":403},{},[404],{"type":18,"tag":92,"props":405,"children":408},{"alt":406,"src":407},"cke_90547.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103402.85502695962679815982248855732197:50540405075128:2400:CA198F014DA27194A57C51BD6483FE17B36B1921E695EF2FEFF7A834AC2590F1.png",[],{"type":18,"tag":26,"props":410,"children":411},{},[412],{"type":18,"tag":92,"props":413,"children":416},{"alt":414,"src":415},"cke_94095.png","https://fileserver.developer.huaweicloud.com/FileServer/getFile/cmtybbs/f94/7f6/9e8/95b919d24bf947f69e892b965a1b4277.20230402103408.68452006445430074579669307501594:50540405075128:2400:2E8D78BE362B3356E106857201A8B6C758FFAB9DCC36204963CDCD1E888B9AE9.png",[],{"type":18,"tag":26,"props":418,"children":419},{},[420],{"type":24,"value":421},"我觉得红色的青苹果也不是不可以。。。",{"type":18,"tag":26,"props":423,"children":424},{},[425],{"type":24,"value":426},"主要是我训练时间太短，模型准确度和预训练模型还是有点差距。",{"title":7,"searchDepth":428,"depth":428,"links":429},4,[],"markdown","content:technology-blogs:zh:2216.md","content","technology-blogs/zh/2216.md","technology-blogs/zh/2216","md",1776506121088]