Я хочу добавить увеличение данных в набор данных WiderFace, и я хотел бы знать, как можно произвольно обрезать изображение и сохранять только рамку с лицами с центром внутри кадрирования, используя тензорный поток?
Я уже пытался реализовать решение, но я использую TFRecords и TfExampleDecoder, а форма входного изображения устанавливается на [None, None, 3] во время процесса, поэтому нет возможности получить форму изображения и сделать это самостоятельно.






Вы можете получить форму, но только во время выполнения - когда вы вызываете sess.run и фактически передаете данные - именно тогда форма фактически определяется.
Так что сделайте случайную обрезку вручную в tesorflow, по сути, вы хотите повторно реализовать tf.random_crop, чтобы вы могли обрабатывать манипуляции с ограничивающими прямоугольниками.
Во-первых, чтобы получить форму, x = your_tensor.shape[0] даст вам первое измерение. Он будет отображаться как None до тех пор, пока вы не вызовете sess.run, затем он будет преобразован в соответствующее значение. Теперь вы можете вычислить некоторые случайные параметры урожая, используя tf.random_uniform или любой другой метод, который вам нравится. Наконец, вы выполняете кадрирование с помощью tf.slice.
Если вы хотите выбрать, выполнять кадрирование или нет, вы можете использовать tf.cond.
Между этими компонентами вы должны иметь возможность реализовать то, что хотите, используя только конструкции тензорного потока. Попробуйте, и если вы застряли в пути, опубликуйте код и ошибку, с которой столкнулись.