本项目基于Google的Magenta平台,它采用随机森林分类器来识别图片的情感色彩,接着项目使用递归神经网络(RNN)来生成与图片情感相匹配的音乐,最后通过图形用户界面(GUI)实现可视化结果展示。
首先,项目处理图片,使用随机森林分类器来确定图片中的情感色彩。这可以包括情感分类,如欢快、宁静等。该分类器会分析图片的视觉特征,以确定其中蕴含的情感。
随后,根据图片中的情感,项目使用递归神经网络(RNN)生成与情感相匹配的音乐。这个过程涉及到选定特定音符、节奏和和声,以创造出与图片情感相一致的音乐作品。
最后,项目通过图形用户界面(GUI)将图片、情感色彩、生成的音乐等结果以可视化方式呈现给用户。
总之,这个项目结合了计算机视觉、音乐生成和图形用户界面设计,旨在将图片的情感色彩与音乐创作相融合,为用户提供一种独特的艺术体验。这对于艺术和技术的交叉应用可能非常引人注目。
本部分包括系统整体结构图和系统流程图。
系统整体结构如图所示。
系统流程如图所示。
本部分包括 Python 环境和Magenta环境。
详见博客。
本项目包括3个模块:数据预处理、模型构建、模型训练及保存,下面分别给出各模块的功能介绍及相关代码。
MIDI下载地址为http://midi.midicn.com/,图片在花瓣网收集获取地址为https://huaban.com/boards/60930738/。音乐模型包含欢快和安静两类MIDI文件各100个,图片包含欢快和安静两类各250张,格式为.jpg。另外,数据集也可以从本博客对应工程源码中下载。
提取图片中占比前十的色彩信息,将其转换成hsv格式,存储到.csv文件中,便于后续使用。
详见博客。
详见博客。
数据加载进模型之后,定义模型结构,并优化损失函数。
详见博客。
在定义模型架构和编译之后,使用训练集训练模型,使模型对图片的情感进行分类。
本部分包括模型训练和模型保存。
def load_dataset(filename): #加载数据集
file_reader = csv.reader(open(filename, 'rt'), delimiter=',')
X, y = [], []
for row in file_reader:
X.append(row[0:15]) #获取前15维数据
y.append(row[-1]) #获取标签
#提取特征名称
feature_names = np.array(X[0])
return np.array(X[1:]).astype(np.float32), np.array(y[1:]).astype(np.float32), feature_names
if __name__ == '__main__':
X,y,feature_names = load_dataset('E:/college/synaes/image_csv/0411.csv')
X, y = shuffle(X, y, random_state=7) #打乱数据
num_training = int(0.9 * len(X)) #数据的90%作为训练集
X_train, y_train = X[:num_training], y[:num_training]
X_test, y_test = X[num_training:], y[num_training:]
rf_clf = RandomForestClassifier(n_estimators=1000, max_depth=10, min_samples_split=2) #设置随机森林分类器的参数、决策树的数量、树的深度、最小划分
rf_clf.fit(X_train, y_train)
y_pred = rf_clf.predict(X_test)
print('accuracy:',sklearn.metrics.accuracy_score(y_test, y_pred))
利用joblib库将模型保存为.m
格式的文件。
joblib.dump(rf_clf, "E:/college/synaes/image/classifier.m")
模型被保存后,可以被重用,也可以移植到其他环境中使用。
本部分包括模型训练和模型保存的相关代码。
相关代码如下:
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('run_dir', 'E:/college/synaes/poly_rnn/train_model/quiet',
'Path to the directory where checkpoints and '
'summary events will be saved during training and '
'evaluation. Separate subdirectories for training '
'events and eval events will be created within '
'`run_dir`. Multiple runs can be stored within the '
'parent directory of `run_dir`. Point TensorBoard '
'to the parent directory of `run_dir` to see all '
'your runs.')
#检查点的保存路径、保存训练和测试过程中的事件,可以通过TensorBoard查看运行状况
tf.app.flags.DEFINE_string('config', 'polyphony', 'The config to use')
#选择要用的配置
tf.app.flags.DEFINE_string('sequence_example_file', 'E:/college/synaes/poly_rnn/datasets/quiet'
'/training_poly_tracks.tfrecord',
'Path to TFRecord file containing '
#保存有序列示例的TFrecord文件
'tf.SequenceExample records for training or '
'evaluation.')
tf.app.flags.DEFINE_integer('num_training_steps', 0,
'The the number of global training steps your '
#训练步数,0是一直训练直到手动中止
'model should take before exiting training. '
'Leave as 0 to run until terminated manually.')
tf.app.flags.DEFINE_integer('num_eval_examples', 0,
'The number of evaluation examples your model '
'should process for each evaluation step.'
#每次评估用到的训练样本数,0用整个测试样本
'Leave as 0 to use the entire evaluation set.')
tf.app.flags.DEFINE_integer('summary_frequency', 10,
'A summary statement will be logged every '
'`summary_frequency`'
' steps during training or '
'every `summary_frequency` seconds during '
'evaluation.')
tf.app.flags.DEFINE_integer('num_checkpoints', 10,
'The number of most recent checkpoints to keep in '
'the training directory. Keeps all if 0.')
#保存训练目录里最近的检查点数量
tf.app.flags.DEFINE_boolean('eval', False,
'If True, this process only evaluates the model '
'and does not update weights.')
#如果是True,仅进行测试,不改变模型
tf.app.flags.DEFINE_string('log', 'INFO',
'The threshold for what messages will be logged '
'DEBUG, INFO, WARN, ERROR, or FATAL.')#容错
tf.app.flags.DEFINE_string(
'hparams', 'batch_size=64,rnn_layer_sizes=[64,64]',
'Comma-separated list of `name=value` pairs.For each pair, the value of '
'the hyperparameter named `name` is set to `value`. This mapping is merged '
'with the default hyperparameters.')#指定batch的大小和RNN层的大小
#主函数
def main(unused_argv):
tf.logging.set_verbosity(FLAGS.log)
#报错提示
if not FLAGS.run_dir:
tf.logging.fatal('--run_dir required')
return
if not FLAGS.sequence_example_file:
tf.logging.fatal('--sequence_example_file required')
return
#打开序列示例
sequence_example_file_paths = tf.gfile.Glob(
os.path.expanduser(FLAGS.sequence_example_file))
run_dir = os.path.expanduser(FLAGS.run_dir) #保存训练事件
#配置复调音乐模型
config = polyphony_model.default_configs[FLAGS.config]
config.hparams.parse(FLAGS.hparams)
mode = 'eval' if FLAGS.eval else 'train'
build_graph_fn = events_rnn_graph.get_build_graph_fn(
mode, config, sequence_example_file_paths)
#训练模型
train_dir = os.path.join(run_dir, 'train')
tf.gfile.MakeDirs(train_dir)
tf.logging.info('Train dir: %s', train_dir)
if FLAGS.eval: #是否测试,若为True仅进行测试,不改变模型
eval_dir = os.path.join(run_dir, 'eval')
tf.gfile.MakeDirs(eval_dir)
tf.logging.info('Eval dir: %s', eval_dir)
num_batches = (
(FLAGS.num_eval_examples or
magenta.common.count_records(sequence_example_file_paths)) //
config.hparams.batch_size)
events_rnn_train.run_eval(build_graph_fn, train_dir, eval_dir, num_batches)
else: #若为False 则直接训练模型
events_rnn_train.run_training(build_graph_fn, train_dir,
FLAGS.num_training_steps,
FLAGS.summary_frequency,
checkpoints_to_keep=FLAGS.num_checkpoints)
#配置训练模型各项参数(训练步数,保存训练目录里最近的检查点数量,训练样本数等)
#运行主函数
def console_entry_point():
tf.app.run(main)
tf.app.flags.DEFINE_string('run_dir', 'E:/college/synaes/poly_rnn/train_model/quiet',
'Path to the directory where checkpoints and '
'summary events will be saved during training and '
'evaluation. Separate subdirectories for training '
'events and eval events will be created within '
'`run_dir`. Multiple runs can be stored within the '
'parent directory of `run_dir`. Point TensorBoard '
'to the parent directory of `run_dir` to see all '
'your runs.')
#检查点保存路径、保存训练和测试过程中的事件,可以通过TensorBoard查看运行状况
run_dir = os.path.expanduser(FLAGS.run_dir) #保存训练事件
基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(一)
基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(二)
基于随机森林+RNN+Tensorflow-Magenta的根据图片情感智能生成音乐系统——深度学习算法应用(含python、ipynb工程源码)+所有数据集(四)
详见本人博客资源下载页
如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。