原标题:【AI超级美发师】深度学习算法打造染发特效(附代码)
来源:OpenCV学堂
作者:胡耀武
【新智元导读】如今,在类似天天P图、美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经是再正常不过的事情了。那么本文便介绍了该功能背后如AI头发分割模块、头发换色、颜色增强与修正模块等技术原理(附代码)。
首先,为照片或视频中人物换发色的算法流程如下图所示:
AI头发分割模块
基于深度学习的目标分割算法已经比较成熟,比较常用的有FCN,SegNet,UNet,PspNet,DenseNet等等。这里我们使用Unet网络来进行头发分割,具体可以参考如下链接:点击打开链接Unet头发分割代码如下:
defget_unet_256(input _shape=(256,256,3),
num_classes=1):
inputs=Input(shape=input_shape)
#256
down0 = Conv2D(32,(3,3), padding='same')(inputs)
down0 = BatchNormalization()(down0)
down0 = Activation('relu')(down0)
down0 = Conv2D(32,(3,3), padding='same')(down0)
down0 = BatchNormalization()(down0)
down0 = Activation('relu')(down0)
down0_pool = MaxPooling2D((2,2),strides=(2,2))(down0)
#128
down1 = Conv2D(64,(3,3), padding='same')(down0_pool)
down1 = BatchNormalization()(down1)
down1 = Activation('relu')(down1)
down1 = Conv2D(64,(3,3), padding='same')(down1)
down1 = BatchNormalization()(down1)
down1 = Activation('relu')(down1)
down1_pool = MaxPooling2D((2,2),strides=(2,2))(down1)
#64
down2 = Conv2D(128,(3,3), padding='same')(down1_pool)
down2 = BatchNormalization()(down2)
down2 = Activation('relu')(down2)
down2 = Conv2D(128,(3,3), padding='same')(down2)
down2 = BatchNormalization()(down2)
down2 = Activation('relu')(down2)
down2_pool = MaxPooling2D((2,2),strides=(2,2))(down2)
#32
down3 = Conv2D(256,(3,3), padding='same')(down2_pool)
down3 = BatchNormalization()(down3)
down3 = Activat