Расскажите об алгоритмической технологии портретного матирования.

искусственный интеллект

Резюме: В этой статье объясняется, как реализовать элегантный и точный проект матирования видеопортрета в режиме реального времени с трех аспектов: обзор алгоритма, инженерная реализация, оптимизация и улучшение.

Эта статья опубликована в сообществе HUAWEI CLOUD.«Портретный вырез: обзор алгоритма и инженерная реализация (1)», автор оригинала: Ду Фу строит дом.

В этой статье объясняется, как реализовать элегантный и точный проект матирования видеопортрета в режиме реального времени с трех аспектов: обзор алгоритма, инженерная реализация, а также оптимизация и улучшение.

что такое вырез

Для изображения I интересующая нас часть портрета называется передним планом F, а остальная часть фоном B, тогда изображение I можно рассматривать как взвешенное слияние F и B: I = альфа * F + (1 - альфа) * ​​B_I_=альфа_∗_F+(1−_alpha_)∗_B_, а задача матирования состоит в том, чтобы найти соответствующий вес альфа. Стоит отметить, что, как показано на рисунке, глядя на матирование земли, вы можете видеть, что альфа является непрерывным значением между [0, 1], что можно понимать как вероятность того, что пиксель принадлежит переднему плану, что отличается от портретной сегментации. Как показано на рисунке, в задаче портретной сегментации альфа может принимать только 0 или 1, что по сути является задачей классификации, а матирование — задачей регрессии.

Вырезанная земная правда:

Разделить землю:

Связанных с работой

В основном мы фокусируемся на более репрезентативных алгоритмах матирования изображений, основанных на глубоком обучении. Популярные в настоящее время алгоритмы матирования можно условно разделить на две категории.Во-первых, это методы, основанные на Trimap, которые требуют априорной информации.Общая априорная информация включает в себя Trimap, грубую маску, беспилотное фоновое изображение, информацию о положении и т. д. Сеть использует априорную информацию и изображение. информация совместно предсказывает альфу; другой метод — это метод без Trimap, который предсказывает альфу только на основе информации об изображении, что более удобно для практических приложений, но эффект, как правило, не так хорош, как метод на основе Trimap.

Trimap-based

Trimap является наиболее часто используемым предварительным знанием.Как следует из названия, Trimap представляет собой троичную карту, и каждый пиксель является одним из {0, 128, 255}, представляющих передний план, неизвестный и фон соответственно, как показано на рисунке.

Deep ImageMatting

Большинство алгоритмов матирования используют Trimap как предварительное знание. Adobe предложила Deep Image Matting[^1] в 2017 году, который является первым алгоритмом сквозного альфа-прогнозирования. Вся модель разделена на две части: этап кодирования-декодера матирования и этап уточнения матирования. первая часть.По входному изображению и соответствующему Trimap получается более грубая альфа-матовая. Этап уточнения матирования — это небольшая сверточная сеть, используемая для повышения точности и производительности краев альфа-матирования.

Во время обучения сети используются две потери: потеря альфа-прогноза и композиционная потеря. Потеря предсказания альфа-канала представляет собой дифференцируемую аппроксимацию абсолютной разницы по пикселям между альфа-маской, предсказанной сетью, и истинной правдой: L _ {\ alpha} ^ i = \ sqrt {(\ alpha_p ^ i - \ alpha_g ^ i) ^ 2 + \epsilon ^2} \ , \alpha_p^i, \alpha_g^i \in[0, 1]_Lαi_=(_αpi_−_αgi_​)2+_ϵ_2​ ,_αpi_​,_αgi_​∈[0,1 ]; аналогично , Compositionalloss получает прогнозируемый передний план путем прогнозирования альфа-подложки, объединяется с реальным фоном для получения прогнозируемого изображения RGB и вычисляет абсолютную разницу попиксельно с исходным изображением RGB для расчета потерь: L_{c} ^i = \sqrt{(c_p^i - c_g^i )^2 + \epsilon^2}_Lci_​=(_cpi_​−_cgi_​)2+_ϵ_2​. Во время обучения сначала обновляется часть кодер-декодер, последняя часть обновляется после сходимости, и, наконец, вся сеть настраивается. Этот метод сегментированного обучения также распространен во многих других задачах.

Эта статья достигла в то время уровня техники, и многие последующие статьи следовали этой идее «грубого-тонкого» матирования.Кроме того, из-за высокой стоимости маркировки данные для задач матирования в прошлом были очень ограниченное. В этой статье также предлагается большой набор данных «Композиция-1К» путем синтеза, который объединяет тщательно аннотированные передние планы с различными фонами и получает 45 500 обучающих изображений и 1000 тестовых изображений, что значительно обогащает данные для матирующих задач.

BackgroundMatting

Background Matting[^2] — это алгоритм матирования, предложенный Вашингтонским университетом и впоследствии выпущенный BackgrounMattingV2.Этот метод является более инновационным и достиг хороших результатов в практических инженерных приложениях.

Backgroun Matting не требует ввода тримэпа, а требует ввода изображения или видео и соответствующего несимвольного фона, что значительно снижает сложность практического применения. Сеть состоит из контролируемой сети и частично контролируемой сети, и авторы сначала обучают контролируемую сеть с использованием набора данных Adobe. Исходное изображение обрабатывается для получения мягкой сегментации S, а вспомогательная информация также формируется через соседние кадры.motion prior M, которые передаются в сеть наблюдения вместе с фоновым изображением. вводите сначала черезContext Switching block, который эквивалентен кодировщику. Преимущество заключается в том, что он может сделать сеть более склонной игнорировать похожие фоны и сосредоточиться на функциях сегментации символов, а также сделает сеть более адаптируемой к реальному вводу. Далее альфа-маска и передний план F выводятся через модуль остаточного и декодирования, и вычисляются ошибки альфа, F и RGB для получения потерь для обучения:

L=\left\|\alpha-\alpha^{*}\right\|_{1}+\left\|\nabla(\alpha)-\nabla\left(\alpha^{*}\right)\right\|_{1}+2\left\|F-F^{*}\right\|_{1}+\|I-\alphaF-(1-\alpha) B\|_{1}L=∥_α_−_α_∗∥1​+∥∇(альфа)−∇(α_∗)∥1​+2∥_F_−_F_∗∥1​+∥_I_−_αF_−(1−_α)_B_∥1​.

В то же время, поскольку данные Adobe основаны на синтезе, чтобы лучше адаптироваться к реальным данным, в этой статье предлагаетсясамоконтролируемая сетьОбучите G_{Real}_GReal_​ учиться на непомеченных реальных входных данных. Входные данные G_{Real}_GReal_​такие же, как и у G_{Adobe}_GAdobe_​, а альфа-маска и F выходных данных G_{Adobe}_GAdobe_​ используются для контроля выходных данных G_{Real}_GReal_​ для получения потери, кроме того, G_{Real}_GReal_​ Выходной синтезированный RGB также будет передавать дискриминатор для оценки подлинности для получения второй потери и совместно обучать G_{Real}_GReal_​.

В статье перечислены некоторые результаты тестов, полученные с помощью мобильных телефонов, и видно, что результаты в большинстве случаев по-прежнему очень хорошие.

BackgroundMatting V2

Фоновое матирование дает хорошие результаты, но проект не работает в режиме реального времени и плохо обрабатывает ввод с высоким разрешением. Поэтому команда проекта представила Background Matting V2[^3], который может дать хорошие результаты при вводе 4k со скоростью 30 кадров в секунду.

Важная идея статьи для достижения эффективного матирования высокого разрешения заключается в том, что большинство пикселей в альфа-матировании имеют значение 0 или 1, и лишь небольшое количество областей содержит переходные пиксели. Поэтому в статье сеть делится на базовую сеть и уточняющую сеть.Базовая сеть обрабатывает изображения с низким разрешением, а уточняющая сеть выбирает определенные блоки изображения на исходном изображении с высоким разрешением для обработки в соответствии с результатами обработки базовой сети.

Базовый сетевой ввод представляет собой изображение и фон с пониженной дискретизацией в c раз, а вывод грубой альфа-маски, F, карты ошибок и скрытых функций осуществляется через кодер-декодер. Повышение дискретизации карты ошибок E_c_Ec_​, полученной путем выборки c раз, до исходного разрешения \frac{1}{4}41​ равно E_4_E_4​, тогда каждый пиксель E_4_E_4​ соответствует блоку изображения 4x4 исходного изображения, выберите пиксель ошибки topk из E_4_E_4​, который является исходным блоком изображения с ошибкой 4x4. Вырежьте несколько фрагментов изображения 8x8 вокруг выбранных пикселей и передайте их в сеть уточнения. Уточняющая сеть представляет собой двухэтапную сеть.Во-первых, входные данные проходят через часть операции CBR для получения выходных данных первого этапа, а блок изображений 8x8, извлеченный из исходных входных данных, представляет собой cat, а затем поступает на второй этап. этапе, и, наконец, очищенный блок изображения и результат, полученный с помощью базовой замены, чтобы получить окончательную альфа-подложку и F.

Рассчитайте различные потери при обучении сети: для альфа-штейна вычислите L_{\alpha}=\left\|\alpha-\alpha^{*}\right\|_{1}+\left\|\nabla\alpha- \nabla \alpha^{*}\right\|_{1}_Lα_​=∥_α_−_α_∗∥1​+∥∇_α_−∇_α_∗∥1​, для переднего плана F рассчитать \left.L_{F } =\|\left(\alpha^{*}>0\right)*\left(FF^{*}\right)\right) \|_{1}_LF_​=∥(_α_∗>0)∗ ( _F_−_F_∗))∥1​, для карты ошибок определите карту ошибок наземной истины как E^{*}=\left|\alpha-\alpha^{*}\right|_E_∗=∣_α_− _α_∗∣, Рассчитайте потери карты ошибок как: L_{E}=\left\|EE^{*}\right\|_{2}_LE_​=∥_E_−_E_∗∥2​, общие потери базовой сети равны : L_{\text {base}}=L_{\alpha_{c}}+L_{F_{c}}+L_{E_{c}}_L_base=_Lαc_+_LFc_+_LEc_​​. Потери сети уточнения: L_{refine} = L_\alpha + L_F_Lrefine_​=_Lα_​+_LF_​.

Кроме того, в статье также опубликованы два набора данных: набор данных для матирования видео VideoMatte240K и набор данных для матирования изображений PhotoMatte13K/85. VideoMatte240K собрал 484 видеоролика с высоким разрешением и сгенерировал более 240 000 пар переднего плана и альфа-маски с помощью программного обеспечения Chroma-key. PhotoMatte13K/85 предназначен для съемки фотографий при хорошем освещении с использованием программного обеспечения и методов ручной настройки, чтобы получить более 13000 пар данных переднего плана и альфа-подложки. Большие наборы данных также являются одним из важных вкладов в эту статью.

Кроме того, есть некоторые статьи, такие как Inductive Guided Filter[^4], MGMatting[^5] и т. д., которые используют грубую маску в качестве априорной информации для прогнозирования альфа-подложки, что также намного удобнее, чем тримап в применении. MGMatting также предложил набор матирующих данных RealWorldPortrait-636 с 636 точно помеченными портретами, который можно расширить и использовать с помощью методов увеличения данных, таких как синтез.

Trimap-free

В практических приложениях получать априорную информацию очень неудобно, и в некоторых статьях часть получения априорной информации также выкладывается в сети.

Semantic HumanMatting

Semantic Human Matting [^6], предложенный Alibaba, также декомпозирует задачу матирования. Сеть разделена на три части. T-Net классифицирует пиксели для получения Trimap и объединяет изображения для получения шестиканального ввода и отправки его в M- Net, M-Net Net получает относительно грубую альфа-маску через кодер-декодер и, наконец, отправляет выходные данные T-Net и M-Net в модуль слияния Fusion Module и, наконец, получает более точную альфа-маску.

Альфа-потери во время обучения сети делятся на альфа-потери и композиционные потери, аналогично DIM, в дополнение к потерям классификации пикселей L_t_Lt_, окончательная потеря составляет: L = L_p + L_t=L_\alpha + L_c +L_t_L_=_Lp_+_Lt_​ = _Lα_​+_Lc_​+_Lt_​. В статье реализован сквозной алгоритм матирования без Trimap, но он раздут. Кроме того, в статье предлагается набор данных Fashion Model, который собирает и упорядочивает более 35 000 помеченных изображений с веб-сайтов электронной коммерции, но он не открыт.

Modnet

modnet[^7] считает, что нейронная сеть лучше обучается одной задаче, поэтому задача вырезания карты разделена на три подзадачи, которые представляют собой отдельно контролируемое обучение и синхронную оптимизацию. Наконец, мягкий результат может быть достигнут при 63 кадра в секунду при входном разрешении 512x512, поэтому в дальнейшем я также выбрал modnet в качестве основы для реализации проекта.

Три подзадачи сети: семантическая оценка, детальное прогнозирование и семантическое слияние деталей.Часть семантической оценки состоит из магистрали и декодера, а выходные данные уменьшаются в 16 раз по сравнению с семантикой входных данных для предоставления семантической информации. Основная истина этой задачи - отмеченная альфа, полученная путем понижения дискретизации и фильтрации Гаусса. Задача Detail Prediction имеет три входа: исходное изображение, промежуточные признаки семантической ветви и выход S_p_Sp_ ветви S. Ветвь D также является структурой кодер-декодер. Стоит отметить потерю этой ветви. , Поскольку ветвь D уделяет внимание только подробным функциям, она проходит. Наземная правда альфа генерирует тримап и вычисляет только потери L_1_L_1 d_p_dp_ и \alpha_g_αg_​в неизвестной области тримэпа. Ветвь F объединяет семантическую информацию и детализированное предсказание для получения окончательного альфа-матового и земного правдоподобия. Рассчитайте потери L_1_L_1, общие потери при обучении сети: L=\lambda_sL_s +\lambda_dL_d+\lambda _{\alpha}L_{\alpha}L=_λs_​_Ls_​+_λd_​_Ld_​+_λα_​_Lα_​.

Кроме того, modnet считает, что фактические результаты модели в некоторых сценариях неидеальны из-за противоречивых прогнозов ветвлений, поэтому, чтобы адаптироваться к области реального изображения, modnet предлагает стратегию SOC с самоконтролем, основанную на согласованности подцелей. . В частности, для неразмеченных изображений через сеть получаются три выхода: семантика, детали и альфа-канал. В статье склонны думать, что семантика является более достоверным результатом, поэтому рассчитывается потеря согласованности: L _ {\ text {cons}} =\ frac{1}{2}\left\|G\left(\alpha_{p}\right)-s_{p}\right\|_{2}+mask\left\|\alpha_{p}- d_{p}\справа\|_{1}L_cons​=21​∥_G(_αp_​)−_sp_​∥2​+_mask_∥_αp_​−_dp_​∥1​ обеспечивает соответствие альфа-семантики s_p_sp_​, а деталей – d_p_dp_​. Этот метод еще более эффективен, когда результаты семантики идеальны.

Наконец, в статье также предлагается метод постобработки OFD, чтобы сделать результаты видео более плавными во времени.Когда два кадра до и после похожи, а расстояние между средним кадром и двумя кадрами велико, среднее значение кадры до и после используется для сглаживания среднего кадра. , но этот метод приводит к тому, что фактический результат отстает от входного на один кадр.

​Кроме того, U^2_U_2-Net, SIM и другие сети могут выполнять saliency matting на изображениях, если интересно, можете обратить внимание.

набор данных

Показатели оценки

Обычно используемые индикаторы объективной оценки взяты из статьи в CVPR в 2009 г. [^8], в основном включая:

  • SAD: сумма абсолютных разностей, SAD=\sum_i|\alpha_i-\alpha_i^*|SAD=∑i​∣αi​−αi∗​∣

  • MSE: среднеквадратическая ошибка, MSE=\frac{1}{n}\sum_i(\alpha_i-\alpha_i^*)^2MSE=n1​∑i​(αi​−αi∗​)2

  • Ошибка градиента: Ошибка градиента, Градиент\ ошибка = \sum(\nabla\alpha_i-\nabla\alpha_i^*)^qGradient error=∑(∇αi​−∇αi∗​)q

  • Ошибка подключения: ошибка подключения, подключение \error=\sum_{i}\left(\varphi\left(\alpha_{i},\Omega\right)-\varphi\left(\alpha_{i}^{*} , \Omega\right)\right)Ошибка подключения=∑i​(φ(αi​,Ω)−φ(αi∗​,Ω))

Кроме того, ознакомьтесь со статьями, посвященными задаче Image Matting, на странице paperwithcode и некоторыми показателями алгоритмической оценки на веб-сайте Alpha Matting.

Конечная цель этого проекта состоит в том, чтобыHiLens KitЧтение видео в реальном времени и замена фона реализованы на аппаратном уровне, а среда разработки представляет собой онлайн-среду разработки, поддерживающую HiLens.HiLens Studio, сначала давайте сравним эффект улучшения базовой линии:

Результаты теста с использованием предварительно обученной модели modnet modnet_photographic_portrait_matting.ckpt следующие:

Видно, что из-за незнакомых сцен, подсветки и других причин результат матирования будет мерцать.Хотя modnet может выполнять точную настройку с самоконтролем для определенных видео, наша цель - улучшить эффекты в общем смысле, поэтому это видео не является самодостаточным.

Эффект оптимизированной модели заключается в следующем:

Это видео не используется в качестве обучающих данных. Видно, что мерцание выреза значительно уменьшилось, и такие детали, как волосы, практически не теряются.

Лендинг проекта

Для того, чтобы протестировать влияние базовой линии, прежде всего, нам необходимо реализовать проектную реализацию базовой линии в сценарии использования. Согласно документацииИмпорт/преобразование локальных моделей разработкизнать

AI-процессор Ascend 310 поддерживает формат модели «.om», для модели Pytorch его можно получить методом преобразования «Pytorch->Caffe->om» или «Pytorch->onnx->om» (новый версия) Здесь я выбираю первую.Преобразование модели Pytorch-> CaffeМетоды и меры предосторожности были подробно описаны в предыдущем блоге и не будут повторяться здесь. После преобразования, чтобы получить модель Caffe, вы можетеHiLens StudioОчень удобно конвертировать сразу в модель ом.

первый вHiLens StudioСоздайте новый навык в , выберите здесь пустой шаблон, просто измените название навыка.

Загрузите модель Caffe в папку с моделью:

Запустите команду преобразования модели в консоли, чтобы получить работоспособную модель om:

/opt/ddk/bin/aarch64-linux-gcc7.3.0/omg --model=./modnet_portrait_320.prototxt --weight=./modnet_portrait_320.caffemodel --framework=0 --output=./modnet_portrait_320 --insert_op_conf=./aipp.cfg

Затем улучшите демо-код. Во время теста HiLens Studio может использовать вход камеры видеомоделирования на панели инструментов или подключить мобильный телефон, чтобы использовать мобильный телефон для тестирования:

Конкретный демонстрационный код выглядит следующим образом:

# -*- coding: utf-8 -*-
# !/usr/bin/python3
# HiLens Framework 0.2.2 python demo
​
import cv2
import os
import hilens
import numpy as np
from utils import preprocess
import time
​
​
def run(work_path):
    hilens.init("hello")  # 与创建技能时的校验值一致
​
    camera = hilens.VideoCapture('test/camera0_2.mp4')  # 模拟输入的视频路径
    display = hilens.Display(hilens.HDMI)
​
    # 初始化模型
    model_path = os.path.join(work_path, 'model/modnet_portrait_320.om') # 模型路径
    model = hilens.Model(model_path)
​
    while True:
        try:
            input_yuv = camera.read()
            input_rgb = cv2.cvtColor(input_yuv, cv2.COLOR_YUV2RGB_NV21)
            # 抠图后替换的背景
            bg_img = cv2.cvtColor(cv2.imread('data/tiantan.jpg'), cv2.COLOR_BGR2RGB) 
            crop_img, input_img = preprocess(input_rgb)  # 预处理
            s = time.time()
            matte_tensor = model.infer([input_img.flatten()])[0]
            print('infer time:', time.time() - s)
            matte_tensor = matte_tensor.reshape(1, 1, 384, 384)
​
            alpha_t = matte_tensor[0].transpose(1, 2, 0)
            matte_np = cv2.resize(np.tile(alpha_t, (1, 1, 3)), (640, 640))
            fg_np = matte_np * crop_img + (1 - matte_np) * bg_img  # 替换背景
            view_np = np.uint8(np.concatenate((crop_img, fg_np), axis=1))
            print('all time:', time.time() - s)
​
            output_nv21 = hilens.cvt_color(view_np, hilens.RGB2YUV_NV21)
            display.show(output_nv21)
​
        except Exception as e:
            print(e)
            break
​
    hilens.terminate()

Код части предварительной обработки:

import cv2
import numpy as np
​
​
TARGET_SIZE = 640
MODEL_SIZE = 384
​
​
def preprocess(ori_img):
    ori_img = cv2.flip(ori_img, 1)
    H, W, C = ori_img.shape
    x_start = max((W - min(H, W)) // 2, 0)
    y_start = max((H - min(H, W)) // 2, 0)
    crop_img = ori_img[y_start: y_start + min(H, W), x_start: x_start + min(H, W)]
    crop_img = cv2.resize(crop_img, (TARGET_SIZE, TARGET_SIZE))
    input_img = cv2.resize(crop_img, (MODEL_SIZE, MODEL_SIZE))
​
    return crop_img, input_img

Код в демо-части очень простой, нажмите запустить, чтобы увидеть эффект в симуляторе:

Вывод модели занимает около 44 мс, а сквозное выполнение занимает около 60 мс, что позволяет достичь желаемого эффекта в реальном времени.

улучшение производительности

Предобучающая модель имеет проблему временного мерцания в технике.В оригинальной статье предлагается метод постобработки OFD, чтобы сделать результат видео более гладким во времени, то есть средний кадр с большой средней ошибкой двух кадры до и после использования. Однако этот метод подходит только для замедленного воспроизведения и вызовет задержку кадра, а нам нужна повсеместная синхронизация входных данных с камеры в режиме реального времени, поэтому OFD не подходит для нашего сценария применения.

Есть несколько методов, основанных на сети памяти (например, STM) в задаче «Сегментация видеообъекта», а также есть новые статьи в области матирования, такие какDVMУчитывая введение модуля временной памяти, чтобы сделать результат матирования более стабильным во временной последовательности, но эти методы обычно требуют информации о n кадрах до и после, что несовместимо с нашими желаемыми сценариями с точки зрения использования ресурсов, рассуждений в реальном времени, и применимые сценарии.

Принимая во внимание баланс между потреблением ресурсов и эффектом, мы применяем метод преобразования альфа-результата предыдущего кадра в RGB-изображение текущего кадра в качестве входных данных, чтобы сделать сеть более стабильной во времени.

Модификации в сети так же просты, как указание in_channels = 4 при инициализации модели:

modnet = MODNet(in_channels=4, backbone_pretrained=False)

Что касается обучающих данных, мы выбираем несколько наборов данных VideoMatting: VideoMatte240K, ConferenceVideoSegmentationDataset.

Первоначально мы пытались обучить модель с помощью простой стратегии: взять альфа-канал предыдущего кадра в качестве входных данных и дополнить нулями, если предыдущий кадр отсутствует:

if os.path.exists(os.path.join(self.alpha_path, alpha_pre_path)):
    alpha_pre = cv2.imread(os.path.join(self.alpha_path, alpha_pre_path))
else:
    alpha_pre = np.zeros_like(alpha)
    
net_input = torch.cat([image, alpha_pre], dim=0)

После конвергентного развертывания обнаружено, что эффект модели значительно улучшается, когда сцена относительно стабильна, но модель плохо адаптируется, когда люди входят в экран и выходят из него.В то же время, если результат определенного кадра плохой, он будет иметь большое влияние на последующие кадры. Ввиду этих проблем рассмотрите возможность формулирования соответствующих стратегий увеличения данных для решения проблем.

  • Модель плохо адаптируется при входе и выходе людей с экрана: пустых кадров в наборе данных мало, а обучения вводу и рисованию символов недостаточно, поэтому при обработке данных увеличивается вероятность появления пустых кадров:

    if os.path.exists(os.path.join(self.alpha_path, alpha_pre_path)) and random.random() < 0.7: alpha_pre = cv2.imread(os.path.join(self.alpha_path, alpha_pre_path)) else: alpha_pre = np.zeros_like(alpha)

  • Плохой результат определенного кадра окажет большое влияние на последующие кадры: текущий результат больше зависит от альфы предыдущего кадра, а неправильный результат он еще не научился отбрасывать.Игнорировать результаты с большими отклонениями;

  • Кроме того, по-прежнему существует проблема с освещением, а в местах с сильным контровым светом или засветкой эффект матирования слабый: улучшите освещенность изображения, в частности, смоделируйте точечный источник света или линейный источник света и наложите его на исходное изображение. с определенной вероятностью, чтобы сеть могла быть более чувствительной к освещению. Существует два распространенных способа улучшить данные об освещении. Один из них — выполнить простую симуляцию с помощью opencv. Подробную информацию см.augmentation.py, помимо генерации данных через GAN, мы используем opencv для симуляции.

  • После переобучения эффект нашей модели уже может достигать эффекта показанного в предыдущей статье.При вычислительной мощности 16THiLens KitЭлегантный эффект реального времени полностью достигнут. Кроме того, я также хочу, чтобы модель стала отличной моделью с меньшими затратами времени и лучшим эффектом ~ Текущее направление улучшения:

  • Замена магистрали: Выбор правильной магистрали для прикладного оборудования всегда был наиболее экономичным способом улучшения модели. Лучше всего искать модель, исходя из затрат времени и ресурсов аппаратного обеспечения. модель преобразуется в результат теста onnx (вход 192x192):

    ГП: Средняя производительность, исключая первую итерацию. Итерации от 2 до 300. (Итерации больше 1 только связывают и оценивают) Средняя привязка: 0,124713 мс Средняя оценка: 16,0683 мс ​ Среднее использование памяти рабочего набора (привязка): 6,53219e-05 МБ Среднее использование памяти рабочего набора (оценка): 0,546117 МБ ​ Среднее использование выделенной памяти (привязка): 0 МБ Среднее использование выделенной памяти (оценка): 0 МБ ​ Среднее использование общей памяти (привязка): 0 МБ Среднее использование общей памяти (оценка): 0,000483382 МБ

    ПРОЦЕССОР: Средняя производительность, исключая первую итерацию. Итерации от 2 до 300. (Итерации больше 1 только связывают и оценивают) Средняя привязка: 0,150212 мс Средняя оценка: 13,7656 мс ​ Среднее использование памяти рабочего набора (привязка): 9,14507e-05 МБ Среднее использование памяти рабочего набора (оценка): 0,566746 МБ ​ Среднее использование выделенной памяти (привязка): 0 МБ Среднее использование выделенной памяти (оценка): 0 МБ ​ Среднее использование общей памяти (привязка): 0 МБ Среднее использование общей памяти (оценка): 0 МБ

  • Ветвь модели: при наблюдении за использованием было обнаружено, что в большинстве более стабильных сцен можно использовать модели меньшего размера для получения хороших результатов, все рассматривают возможность тонкой настройки LRBranch для обработки простых сцен, HRBranch и FusionBranch по-прежнему используются для обработки сложных сцен, эта работа все еще в процессе в процессе.

[^1]: Сюй, Нин и др. «Глубокое матирование изображений», Материалы конференции IEEE по компьютерному зрению и распознаванию образов, 2017 г.

[^2]: Сенгупта, Сумьядип и др. «Фоновое покрытие: мир — это ваш зеленый экран», Материалы конференции IEEE/CVF по компьютерному зрению и распознаванию образов, 2020 г.

[^3]: Лин, Шаньчуань и др. «Матирование фона с высоким разрешением в реальном времени».

[^4]: Ли, Яойи и др. «Индуктивный управляемый фильтр: глубокое матирование в реальном времени со слабо аннотированными масками на мобильных устройствах», Международная конференция IEEE по мультимедиа и выставкам (ICME, 2020 г.), IEEE, 2020 г.

[^5]: Ю, Цихан и др. «Масочное матирование с помощью сети прогрессивного уточнения».

[^6]: Чен, Цюань и др. «Семантическое человеческое матирование», Материалы 26-й международной конференции ACM по мультимедиа, 2018 г.

[^7]: Ке, Чжанхан и др. «Действительно ли зеленый экран необходим для взаимодействия человека в реальном времени?» Препринт arXiv arXiv: 2011.11961 (2020).

[^8]: Реманн, Кристоф и др. «Онлайн-тест для матирования изображений, основанный на восприятии», Конференция IEEE по компьютерному зрению и распознаванию образов, 2009 г., IEEE, 2009 г.

Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~