keras复现人群数量估计网络"Single Image Crowd Counting via Multi Column Convolutional Neural Network"
参考pytorch版:https://github.com/svishwa/crowdcount-mcnn
-
Clone
git clone https://github.com/embracesource-cv-com/keras-mcnn.git
-
安装依赖库
cd keras-mcnn pip install -r requirements.txt
-
创建数据存放目录$ORIGIN_DATA_PATH
mkdir /opt/dataset/crowd_counting/shanghaitech/original
-
将
part_A_final
和part_B_final
存放到$ORIGIN_DATA_PATH目录下 -
生成测试集的ground truth文件
python create_gt_test_set_shtech.py [A or B] # Part_A or Part_B
生成好的ground-truth文件将会保存在$TEST_GT_PATH/test_data/ground_truth_csv目录下
-
生成训练集和验证集
python create_training_set_shtech.py [A or B]
生成好的数据保存将会在$TRAIN_PATH、$TRAIN_GT_PATH、$VAL_PATH、$VAL_GT_PATH目录下
-
生成热力图
如果你想生成测试集的ground truth热力图:python create_heatmaps.py [A or B]
2~6步均在工程根目录下操作
a)下载训练模型
b) 如下命令分别测试A和B
python test.py --dataset A --weight_path /tmp/mcnn-A.160.h5 --output_dir /tmp/mcnn_A
python test.py --dataset B --weight_path /tmp/mcnn-B.035.h5 --output_dir /tmp/mcnn_B
如果你想自己训练模型,很简单:
python train.py [A or B]
| | MAE | MSE |
----------------------------
| Part_A | 127.88 | 194.19 |
----------------------------
| Part_B | 30.71 | 46.81 |
由于GT密度图每个像素点的值都很小(A数据集平均为0.02,B数据集平均为0.002),这样小的值不利于网络优化,因此对GT做了标准化(减去均值,然后除方差);预测时将预测的值先乘方差,再加上均值,就是最终的预测值。这个改进对最终的结果提升明显,使用标准化后,A数据集的MAE为127.88,没有使用标准化时只有154.7。