Случайная обрезка и ограничивающие прямоугольники в тензорном потоке

Я хочу добавить увеличение данных в набор данных WiderFace, и я хотел бы знать, как можно произвольно обрезать изображение и сохранять только рамку с лицами с центром внутри кадрирования, используя тензорный поток?

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
832
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить форму, но только во время выполнения - когда вы вызываете sess.run и фактически передаете данные - именно тогда форма фактически определяется.

Так что сделайте случайную обрезку вручную в tesorflow, по сути, вы хотите повторно реализовать tf.random_crop, чтобы вы могли обрабатывать манипуляции с ограничивающими прямоугольниками.

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

Если вы хотите выбрать, выполнять кадрирование или нет, вы можете использовать tf.cond.

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

Другие вопросы по теме